sanity-plugin-dashboard-widget-vercel

4.0.284.0.29
dist/index.js.map
~dist/index.js.mapModified
+1−1
Index: package/dist/index.js.map
===================================================================
--- package/dist/index.js.map
+++ package/dist/index.js.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"index.js","names":["{apiVersion: API_VERSION}","fetcher(deploymentTarget)","deployLimit","hash(deploymentTarget)","[hash(deploymentTarget)]","() => fetchUrl(API_ENDPOINT_DEPLOYMENTS, deployParams)","{\n    queryKey: [hash(deploymentTarget)],\n    queryFn: () => fetchUrl(API_ENDPOINT_DEPLOYMENTS, deployParams),\n    enabled: options?.enabled ?? true,\n    refetchInterval: 20000, // ms\n    refetchIntervalInBackground: false,\n    refetchOnMount: true,\n    refetchOnReconnect: 'always',\n    refetchOnWindowFocus: false,\n    retry: false,\n  }","options?.enabled ?? true","[hash(deploymentTarget), 'aliases']","() => fetchUrl(API_ENDPOINT_ALIASES, aliasParams)","{\n    queryKey: [hash(deploymentTarget), 'aliases'],\n    queryFn: () => fetchUrl(API_ENDPOINT_ALIASES, aliasParams),\n    enabled: !!deploymentsData,\n    refetchOnMount: false,\n    refetchOnReconnect: false,\n    refetchOnWindowFocus: false,\n    retry: false,\n  }","!!deploymentsData","deploymentsData?.deployments?.map((val: Vercel.DeploymentWithAlias) => {\n      const alias = aliases.find((a) => a.deploymentId === val.uid)\n      return Object.assign(val, {alias: alias?.alias})\n    })","deployments","{\n    deployments: deploymentsWithAlias,\n    error: aliasesError || deploymentsError,\n    isFetching: aliasesIsFetching || deploymentsIsFetching,\n    isSuccess: aliasesIsSuccess && deploymentsIsSuccess,\n    refetch,\n  }","aliasesError || deploymentsError","aliasesIsFetching || deploymentsIsFetching","aliasesIsSuccess && deploymentsIsSuccess","{border: color.border}","border","{\n        backgroundColor: 'rgba(0, 0, 255, 0.9)',\n        borderRadius: '3px',\n        fontSize: 1,\n        fontWeight: 500,\n        lineHeight: 'body',\n        right: 0,\n        opacity: 0.75,\n        pointerEvents: 'none',\n        position: 'absolute',\n        textAlign: 'left',\n        top: 0,\n        zIndex: 9000,\n      }","<Text size={0}>Name: {name}</Text>","JSON.stringify(state.value)","value","<Text size={0}>state.value: {JSON.stringify(state.value)}</Text>","<Card\n      scheme=\"dark\"\n      style={{\n        backgroundColor: 'rgba(0, 0, 255, 0.9)',\n        borderRadius: '3px',\n        fontSize: 1,\n        fontWeight: 500,\n        lineHeight: 'body',\n        right: 0,\n        opacity: 0.75,\n        pointerEvents: 'none',\n        position: 'absolute',\n        textAlign: 'left',\n        top: 0,\n        zIndex: 9000,\n      }}\n    >\n      <Box padding={2}>\n        <Stack gap={2}>\n          <Text size={0}>Name: {name}</Text>\n          <Text size={0}>state.value: {JSON.stringify(state.value)}</Text>\n        </Stack>\n      </Box>\n    </Card>","{\n    input: {deployHook},\n  }","deployState.matches('error')","deployState.matches('success')","() => {\n    deployStateTransition({type: 'DEPLOY'})\n  }","() => {\n    if (isError) {\n      toast.push({\n        closable: true,\n        description: `Unable to queue deploy for ${targetName}: ${deployState.context.error}`,\n        duration: 8000,\n        status: 'error',\n        title: WIDGET_NAME,\n      })\n    }\n\n    if (isSuccess) {\n      toast.push({\n        closable: true,\n        description: `Deploy queued for ${targetName}`,\n        duration: 8000,\n        status: 'success',\n        title: WIDGET_NAME,\n      })\n    }\n  }","[isError, isSuccess, toast, targetName, deployState.context.error]","error","() => {\n    const subscription = deployStateInterpreter.subscribe((state) => {\n      if (state.value === 'success') {\n        if (onDeploySuccess) {\n          onDeploySuccess()\n        }\n      }\n    })\n\n    return () => subscription.unsubscribe()\n  }","[deployStateInterpreter, onDeploySuccess]","{position: 'relative'}","<StateDebug name=\"Deploy\" state={deployState} />","<Button\n        disabled={deployState.context.disabled}\n        fontSize={1}\n        icon={UploadIcon}\n        mode=\"ghost\"\n        onClick={handleDeploy}\n        padding={3}\n        text={`${deployState.context.label} ${targetName}`}\n        tone=\"default\"\n      />","disabled","`${deployState.context.label} ${targetName}`","<Box padding={3} style={{position: 'relative'}}>\n      <StateDebug name=\"Deploy\" state={deployState} />\n\n      <Button\n        disabled={deployState.context.disabled}\n        fontSize={1}\n        icon={UploadIcon}\n        mode=\"ghost\"\n        onClick={handleDeploy}\n        padding={3}\n        text={`${deployState.context.label} ${targetName}`}\n        tone=\"default\"\n      />\n    </Box>","{state}: Props","<Box\n    style={{\n      backgroundColor: VERCEL_STATUS_COLORS[state],\n      borderRadius: '20px',\n      height: '9px',\n      width: '9px',\n    }}\n  />","VERCEL_STATUS_COLORS[state]","['none', 'none', 'none', 'table-cell']","['none', 'none', 'none', 'none', 'table-cell']","{\n          maxWidth: cellWidth,\n          position: 'relative',\n          textAlign: 'left',\n          width: cellWidth,\n        }","<Label size={0}>{children}</Label>","<Box\n        as=\"th\"\n        colSpan={colSpan}\n        // @ts-expect-error -- local `display` allows 'table-cell', which is not part of @sanity/ui's `BoxDisplay` union\n        display={display}\n        paddingX={3}\n        paddingY={2}\n        style={{\n          maxWidth: cellWidth,\n          position: 'relative',\n          textAlign: 'left',\n          width: cellWidth,\n        }}\n      >\n        <Label size={0}>{children}</Label>\n      </Box>","[2, 2, 3]","{\n        borderTop: `1px solid ${border}`,\n        maxWidth: cellWidth,\n        position: 'relative',\n        textAlign: 'left',\n        width: cellWidth,\n      }","`1px solid ${border}`","<Box\n      as=\"td\"\n      colSpan={colSpan}\n      // @ts-expect-error -- local `display` allows 'table-cell', which is not part of @sanity/ui's `BoxDisplay` union\n      display={display}\n      paddingX={3}\n      paddingY={[2, 2, 3]}\n      style={{\n        borderTop: `1px solid ${border}`,\n        maxWidth: cellWidth,\n        position: 'relative',\n        textAlign: 'left',\n        width: cellWidth,\n      }}\n    >\n      {children}\n    </Box>","new Date(deployment.created)","created","useMemo(() => new Date(deployment.created), [deployment.created])","'githubCommitMessage'","'githubCommitRef'","['block', 'block', 'block', 'block', 'none']","{flexShrink: 0}","<Box\n            display={['block', 'block', 'block', 'block', 'none']}\n            marginRight={3}\n            style={{flexShrink: 0}}\n          >\n            <StatusDot state={deployment.state} />\n          </Box>","state","targetUrl ? (\n            <>\n              {/* Alias icon */}\n              {deployment.alias && <LinkIcon />}\n\n              <Box marginLeft={deployment.alias ? 1 : 0}>\n                <Text\n                  muted={!(deployment.state === 'READY')}\n                  size={1}\n                  style={{\n                    textDecoration:\n                      deployment.state === 'CANCELED' || deployment.state === 'ERROR'\n                        ? 'line-through'\n                        : 'normal',\n                  }}\n                  textOverflow=\"ellipsis\"\n                >\n                  {deployment.state === 'READY' ? (\n                    <a href={`https://${targetUrl}`} rel=\"noopener noreferrer\" target=\"_blank\">\n                      {targetUrl}\n                    </a>\n                  ) : (\n                    targetUrl\n                  )}\n                </Text>\n              </Box>\n            </>\n          ) : (\n            <Text size={1}>Uploading...</Text>\n          )","alias","<TableCell>\n        <Flex align=\"center\">\n          <Box\n            display={['block', 'block', 'block', 'block', 'none']}\n            marginRight={3}\n            style={{flexShrink: 0}}\n          >\n            <StatusDot state={deployment.state} />\n          </Box>\n\n          {targetUrl ? (\n            <>\n              {/* Alias icon */}\n              {deployment.alias && <LinkIcon />}\n\n              <Box marginLeft={deployment.alias ? 1 : 0}>\n                <Text\n                  muted={!(deployment.state === 'READY')}\n                  size={1}\n                  style={{\n                    textDecoration:\n                      deployment.state === 'CANCELED' || deployment.state === 'ERROR'\n                        ? 'line-through'\n                        : 'normal',\n                  }}\n                  textOverflow=\"ellipsis\"\n                >\n                  {deployment.state === 'READY' ? (\n                    <a href={`https://${targetUrl}`} rel=\"noopener noreferrer\" target=\"_blank\">\n                      {targetUrl}\n                    </a>\n                  ) : (\n                    targetUrl\n                  )}\n                </Text>\n              </Box>\n            </>\n          ) : (\n            <Text size={1}>Uploading...</Text>\n          )}\n        </Flex>\n      </TableCell>","<StatusDot state={deployment.state} />","deployment.state\n                .trim()\n                .toLowerCase()\n                .replace(/^[a-z]/i, (t) => t.toUpperCase())","/^[a-z]/i","(t) => t.toUpperCase()","<Box marginLeft={2}>\n            <Text size={1}>\n              {deployment.state\n                .trim()\n                .toLowerCase()\n                .replace(/^[a-z]/i, (t) => t.toUpperCase())}\n            </Text>\n          </Box>","<TableCell variant=\"state\">\n        <Flex align=\"center\">\n          <StatusDot state={deployment.state} />\n          <Box marginLeft={2}>\n            <Text size={1}>\n              {deployment.state\n                .trim()\n                .toLowerCase()\n                .replace(/^[a-z]/i, (t) => t.toUpperCase())}\n            </Text>\n          </Box>\n        </Flex>\n      </TableCell>","<Text size={1} textOverflow=\"ellipsis\">\n            {commitRef}\n          </Text>","commitMessage && (\n            <Text muted size={1} textOverflow=\"ellipsis\">\n              {commitMessage}\n            </Text>\n          )","<TableCell variant=\"branch\">\n        <Stack gap={2}>\n          <Text size={1} textOverflow=\"ellipsis\">\n            {commitRef}\n          </Text>\n          {commitMessage && (\n            <Text muted size={1} textOverflow=\"ellipsis\">\n              {commitMessage}\n            </Text>\n          )}\n        </Stack>\n      </TableCell>","<TableCell variant=\"age\">\n        <Flex align=\"center\">\n          <Text size={1}>\n            <ReactTimeAgo date={date} locale=\"en-US\" timeStyle=\"mini\" />\n          </Text>\n        </Flex>\n      </TableCell>","{\n              borderRadius: '20px',\n              height: '20px',\n              width: '20px',\n            }","<TableCell variant=\"creator\">\n        <Flex align=\"center\" justify=\"center\">\n          <img\n            alt={deployment?.creator?.username || 'Deployment creator avatar'}\n            draggable={false}\n            src={`https://vercel.com/api/www/avatar/${deployment?.creator?.uid}?&s=48`}\n            style={{\n              borderRadius: '20px',\n              height: '20px',\n              width: '20px',\n            }}\n          />\n        </Flex>\n      </TableCell>","deployment?.creator?.username || 'Deployment creator avatar'","`https://vercel.com/api/www/avatar/${deployment?.creator?.uid}?&s=48`","<tr>\n      {/* Deployment - alias or regular deployment URL */}\n      <TableCell>\n        <Flex align=\"center\">\n          <Box\n            display={['block', 'block', 'block', 'block', 'none']}\n            marginRight={3}\n            style={{flexShrink: 0}}\n          >\n            <StatusDot state={deployment.state} />\n          </Box>\n\n          {targetUrl ? (\n            <>\n              {/* Alias icon */}\n              {deployment.alias && <LinkIcon />}\n\n              <Box marginLeft={deployment.alias ? 1 : 0}>\n                <Text\n                  muted={!(deployment.state === 'READY')}\n                  size={1}\n                  style={{\n                    textDecoration:\n                      deployment.state === 'CANCELED' || deployment.state === 'ERROR'\n                        ? 'line-through'\n                        : 'normal',\n                  }}\n                  textOverflow=\"ellipsis\"\n                >\n                  {deployment.state === 'READY' ? (\n                    <a href={`https://${targetUrl}`} rel=\"noopener noreferrer\" target=\"_blank\">\n                      {targetUrl}\n                    </a>\n                  ) : (\n                    targetUrl\n                  )}\n                </Text>\n              </Box>\n            </>\n          ) : (\n            <Text size={1}>Uploading...</Text>\n          )}\n        </Flex>\n      </TableCell>\n\n      {/* State */}\n      <TableCell variant=\"state\">\n        <Flex align=\"center\">\n          <StatusDot state={deployment.state} />\n          <Box marginLeft={2}>\n            <Text size={1}>\n              {deployment.state\n                .trim()\n                .toLowerCase()\n                .replace(/^[a-z]/i, (t) => t.toUpperCase())}\n            </Text>\n          </Box>\n        </Flex>\n      </TableCell>\n\n      {/* Branch */}\n      <TableCell variant=\"branch\">\n        <Stack gap={2}>\n          <Text size={1} textOverflow=\"ellipsis\">\n            {commitRef}\n          </Text>\n          {commitMessage && (\n            <Text muted size={1} textOverflow=\"ellipsis\">\n              {commitMessage}\n            </Text>\n          )}\n        </Stack>\n      </TableCell>\n\n      {/* Age */}\n      <TableCell variant=\"age\">\n        <Flex align=\"center\">\n          <Text size={1}>\n            <ReactTimeAgo date={date} locale=\"en-US\" timeStyle=\"mini\" />\n          </Text>\n        </Flex>\n      </TableCell>\n\n      {/* Creator */}\n      <TableCell variant=\"creator\">\n        <Flex align=\"center\" justify=\"center\">\n          <img\n            alt={deployment?.creator?.username || 'Deployment creator avatar'}\n            draggable={false}\n            src={`https://vercel.com/api/www/avatar/${deployment?.creator?.uid}?&s=48`}\n            style={{\n              borderRadius: '20px',\n              height: '20px',\n              width: '20px',\n            }}\n          />\n        </Flex>\n      </TableCell>\n    </tr>","<Box\n      style={{\n        backgroundColor: border,\n        borderRadius: '20px',\n        height: '20px',\n        userSelect: 'none',\n        width: '20px',\n      }}\n    />","{\n        backgroundColor: border,\n        borderRadius: '3px',\n        userSelect: 'none',\n        width: '100%',\n      }","<Stack gap={2}>\n        {Array.from({length: rows}, (_, index) => (\n          <Text key={index} size={1}>\n            &nbsp;\n          </Text>\n        ))}\n      </Stack>","(_, index) => (\n          <Text key={index} size={1}>\n            &nbsp;\n          </Text>\n        )","<Box\n      style={{\n        backgroundColor: border,\n        borderRadius: '3px',\n        userSelect: 'none',\n        width: '100%',\n      }}\n    >\n      <Stack gap={2}>\n        {Array.from({length: rows}, (_, index) => (\n          <Text key={index} size={1}>\n            &nbsp;\n          </Text>\n        ))}\n      </Stack>\n    </Box>","<TableCell>\n        <PlaceholderText rows={1} />\n      </TableCell>","<TableCell variant=\"state\">\n        <PlaceholderText rows={1} />\n      </TableCell>","<TableCell variant=\"branch\">\n        <PlaceholderText rows={2} />\n      </TableCell>","<TableCell variant=\"age\">\n        <PlaceholderText rows={1} />\n      </TableCell>","<tr>\n      {/* Deployment - alias or regular deployment URL */}\n      <TableCell>\n        <PlaceholderText rows={1} />\n      </TableCell>\n\n      {/* State */}\n      <TableCell variant=\"state\">\n        <PlaceholderText rows={1} />\n      </TableCell>\n\n      {/* Branch */}\n      <TableCell variant=\"branch\">\n        <PlaceholderText rows={2} />\n      </TableCell>\n\n      {/* Age */}\n      <TableCell variant=\"age\">\n        <PlaceholderText rows={1} />\n      </TableCell>\n\n      {/* Creator */}\n      <TableCell variant=\"creator\">\n        <Flex justify=\"center\">\n          <PlaceholderAvatar />\n        </Flex>\n      </TableCell>\n    </tr>","refreshState.matches('error')","{\n    enabled: !refreshState.matches('error'),\n  }","!refreshState.matches('error')","() => {\n    if (refTimeout.current) {\n      clearTimeout(refTimeout.current)\n    }\n    refTimeout.current = setTimeout(() => {\n      void refetch({\n        cancelRefetch: true,\n        throwOnError: true,\n      })\n    }, 4000)\n  }","() => {\n    return () => {\n      if (refTimeout.current) {\n        clearTimeout(refTimeout.current)\n      }\n    }\n  }","[]","() => {\n    if (error) {\n      refreshStateTransition({type: 'ERROR'})\n    }\n\n    if (isFetching) {\n      refreshStateTransition({type: 'REFRESH'})\n    }\n\n    if (!isFetching && isSuccess) {\n      refreshStateTransition({type: 'REFRESHED'})\n    }\n  }","[error, isFetching, isSuccess, refreshStateTransition]","() => {\n    if (!refreshState.matches('refreshing')) {\n      refreshStateTransition({type: 'REFRESH'})\n    }\n  }","[deploymentTarget]","() => {\n    if (isError) {\n      toast.push({\n        closable: true,\n        description: `Unable to fetch deployments for ${deploymentTarget.name}`,\n        duration: 8000,\n        status: 'error',\n        title: WIDGET_NAME,\n      })\n    }\n  }","deploymentTarget.name","[deploymentTarget, isError]","{position: 'relative'}","<StateDebug name=\"Refresh\" state={refreshState} />","!refreshState.matches('error') && (\n        <>\n          <Box\n            as=\"table\"\n            style={{\n              borderBottom: `1px solid ${border}`,\n              borderCollapse: 'collapse',\n              display: 'table',\n              tableLayout: 'fixed',\n              width: '100%',\n            }}\n          >\n            <Box as=\"thead\" style={{display: 'table-header-group'}}>\n              <tr>\n                {/* Deployment */}\n                <TableCell header>Deployment</TableCell>\n\n                {/* State */}\n                <TableCell header variant=\"state\">\n                  State\n                </TableCell>\n\n                {/* Branch */}\n                <TableCell header variant=\"branch\">\n                  Branch\n                </TableCell>\n\n                {/* Age */}\n                <TableCell header variant=\"age\">\n                  Age\n                </TableCell>\n\n                {/* Creator */}\n                <TableCell header variant=\"creator\">\n                  Creator\n                </TableCell>\n              </tr>\n            </Box>\n\n            <Box as=\"tbody\" style={{display: 'table-row-group'}}>\n              {/* Placeholders */}\n              {!deployments &&\n                Array.from({length: deploymentTarget.deployLimit}, (_, index) => (\n                  <DeploymentPlaceholder key={index} />\n                ))}\n              {/* Deployments */}\n              {hasDeployments &&\n                deployments?.map((deployment) => (\n                  <Deployment deployment={deployment} key={deployment.uid} />\n                ))}\n            </Box>\n          </Box>\n\n          {/* No results */}\n          {hasFetched && !hasDeployments && (\n            <Box padding={3} style={{width: '100%'}}>\n              <Text muted size={1}>\n                No deployments found. Don't forget to specify a valid team ID if your project\n                belongs to a team.\n              </Text>\n            </Box>\n          )}\n        </>\n      )","deploymentTarget.deployLimit","(_, index) => (\n                  <DeploymentPlaceholder key={index} />\n                )","(deployment) => (\n                  <Deployment deployment={deployment} key={deployment.uid} />\n                )","refreshState.matches('error') && (\n        <Box padding={3}>\n          <Text muted size={1}>\n            Unable to fetch recent deployments. Please check your network and deployment settings.\n          </Text>\n        </Box>\n      )","!refreshState.matches('error') && deploymentTarget.deployHook && (\n        <Box>\n          <DeployButton\n            deployHook={deploymentTarget.deployHook}\n            onDeploySuccess={handleDeploySuccess}\n            targetName={deploymentTarget.name}\n          />\n        </Box>\n      )","deploymentTarget.deployHook","<Box marginTop={3} style={{position: 'relative'}}>\n      {/* xstate debug */}\n      <StateDebug name=\"Refresh\" state={refreshState} />\n\n      {!refreshState.matches('error') && (\n        <>\n          <Box\n            as=\"table\"\n            style={{\n              borderBottom: `1px solid ${border}`,\n              borderCollapse: 'collapse',\n              display: 'table',\n              tableLayout: 'fixed',\n              width: '100%',\n            }}\n          >\n            <Box as=\"thead\" style={{display: 'table-header-group'}}>\n              <tr>\n                {/* Deployment */}\n                <TableCell header>Deployment</TableCell>\n\n                {/* State */}\n                <TableCell header variant=\"state\">\n                  State\n                </TableCell>\n\n                {/* Branch */}\n                <TableCell header variant=\"branch\">\n                  Branch\n                </TableCell>\n\n                {/* Age */}\n                <TableCell header variant=\"age\">\n                  Age\n                </TableCell>\n\n                {/* Creator */}\n                <TableCell header variant=\"creator\">\n                  Creator\n                </TableCell>\n              </tr>\n            </Box>\n\n            <Box as=\"tbody\" style={{display: 'table-row-group'}}>\n              {/* Placeholders */}\n              {!deployments &&\n                Array.from({length: deploymentTarget.deployLimit}, (_, index) => (\n                  <DeploymentPlaceholder key={index} />\n                ))}\n              {/* Deployments */}\n              {hasDeployments &&\n                deployments?.map((deployment) => (\n                  <Deployment deployment={deployment} key={deployment.uid} />\n                ))}\n            </Box>\n          </Box>\n\n          {/* No results */}\n          {hasFetched && !hasDeployments && (\n            <Box padding={3} style={{width: '100%'}}>\n              <Text muted size={1}>\n                No deployments found. Don't forget to specify a valid team ID if your project\n                belongs to a team.\n              </Text>\n            </Box>\n          )}\n        </>\n      )}\n\n      {/* Error message */}\n      {refreshState.matches('error') && (\n        <Box padding={3}>\n          <Text muted size={1}>\n            Unable to fetch recent deployments. Please check your network and deployment settings.\n          </Text>\n        </Box>\n      )}\n\n      {/* Deploy button */}\n      {!refreshState.matches('error') && deploymentTarget.deployHook && (\n        <Box>\n          <DeployButton\n            deployHook={deploymentTarget.deployHook}\n            onDeploySuccess={handleDeploySuccess}\n            targetName={deploymentTarget.name}\n          />\n        </Box>\n      )}\n    </Box>","{\n    deployHook: item.deployHook,\n    deployLimit: item.deployLimit,\n    name: item.name,\n    projectId: item.projectId,\n    teamId: item.teamId,\n    token: item.token,\n  }","deployHook","deployLimit","name","projectId","teamId","token","{position: 'relative'}","<Text size={2}>{item.name}</Text>","<Box padding={2}>\n              <Text muted size={1}>\n                Edit deployment target\n              </Text>\n            </Box>","<Tooltip\n          content={\n            <Box padding={2}>\n              <Text muted size={1}>\n                Edit deployment target\n              </Text>\n            </Box>\n          }\n          placement=\"left\"\n        >\n          <Button fontSize={1} icon={EditIcon} mode=\"bleed\" onClick={() => onDialogEdit(item)} />\n        </Tooltip>","<Flex align=\"center\" justify=\"space-between\" marginTop={2} paddingX={3}>\n        <Text size={2}>{item.name}</Text>\n\n        <Tooltip\n          content={\n            <Box padding={2}>\n              <Text muted size={1}>\n                Edit deployment target\n              </Text>\n            </Box>\n          }\n          placement=\"left\"\n        >\n          <Button fontSize={1} icon={EditIcon} mode=\"bleed\" onClick={() => onDialogEdit(item)} />\n        </Tooltip>\n      </Flex>","<Deployments deploymentTarget={deploymentTarget} />","<Box style={{position: 'relative'}}>\n      {/* Header */}\n      <Flex align=\"center\" justify=\"space-between\" marginTop={2} paddingX={3}>\n        <Text size={2}>{item.name}</Text>\n\n        <Tooltip\n          content={\n            <Box padding={2}>\n              <Text muted size={1}>\n                Edit deployment target\n              </Text>\n            </Box>\n          }\n          placement=\"left\"\n        >\n          <Button fontSize={1} icon={EditIcon} mode=\"bleed\" onClick={() => onDialogEdit(item)} />\n        </Tooltip>\n      </Flex>\n\n      {/* Content */}\n      <Deployments deploymentTarget={deploymentTarget} />\n    </Box>","items?.map((item) => (\n        <DeploymentTarget item={item} key={item._id} onDialogEdit={onDialogEdit} />\n      ))","items?.map","<Stack gap={5}>\n      {items?.map((item) => (\n        <DeploymentTarget item={item} key={item._id} onDialogEdit={onDialogEdit} />\n      ))}\n    </Stack>","<Text as=\"label\" htmlFor={name} size={1} weight=\"semibold\">\n          {label}\n        </Text>","error && (\n          <Text size={1}>\n            <Tooltip\n              content={\n                <Box padding={2}>\n                  <Text muted size={1}>\n                    <ErrorOutlineIcon style={{...errorIconStyle, marginRight: '0.1em'}} />\n                    {error.message}\n                  </Text>\n                </Box>\n              }\n              fallbackPlacements={['top', 'left']}\n              placement=\"right\"\n              portal\n            >\n              <ErrorOutlineIcon style={errorIconStyle} />\n            </Tooltip>\n          </Text>\n        )","<Inline gap={2}>\n        <Text as=\"label\" htmlFor={name} size={1} weight=\"semibold\">\n          {label}\n        </Text>\n\n        {/* Error icon + tooltip */}\n        {error && (\n          <Text size={1}>\n            <Tooltip\n              content={\n                <Box padding={2}>\n                  <Text muted size={1}>\n                    <ErrorOutlineIcon style={{...errorIconStyle, marginRight: '0.1em'}} />\n                    {error.message}\n                  </Text>\n                </Box>\n              }\n              fallbackPlacements={['top', 'left']}\n              placement=\"right\"\n              portal\n            >\n              <ErrorOutlineIcon style={errorIconStyle} />\n            </Tooltip>\n          </Text>\n        )}\n      </Inline>","description && (\n        <Box marginY={3}>\n          <Text as=\"p\" muted size={1}>\n            {description}\n          </Text>\n        </Box>\n      )","<Box marginBottom={3}>\n      {/* Label */}\n      <Inline gap={2}>\n        <Text as=\"label\" htmlFor={name} size={1} weight=\"semibold\">\n          {label}\n        </Text>\n\n        {/* Error icon + tooltip */}\n        {error && (\n          <Text size={1}>\n            <Tooltip\n              content={\n                <Box padding={2}>\n                  <Text muted size={1}>\n                    <ErrorOutlineIcon style={{...errorIconStyle, marginRight: '0.1em'}} />\n                    {error.message}\n                  </Text>\n                </Box>\n              }\n              fallbackPlacements={['top', 'left']}\n              placement=\"right\"\n              portal\n            >\n              <ErrorOutlineIcon style={errorIconStyle} />\n            </Tooltip>\n          </Text>\n        )}\n      </Inline>\n\n      {/* Description */}\n      {description && (\n        <Box marginY={3}>\n          <Text as=\"p\" muted size={1}>\n            {description}\n          </Text>\n        </Box>\n      )}\n    </Box>","<FormFieldInputLabel description={description} error={error} label={label} name={name} />","<TextInput\n        autoComplete=\"off\"\n        autoFocus\n        defaultValue={value}\n        disabled={disabled}\n        id={name}\n        name={name}\n        placeholder={placeholder}\n        onChange={onChange}\n        onBlur={onBlur}\n        ref={ref}\n      />","<Box>\n      {/* Label */}\n      <FormFieldInputLabel description={description} error={error} label={label} name={name} />\n      {/* Input */}\n      <TextInput\n        autoComplete=\"off\"\n        autoFocus\n        defaultValue={value}\n        disabled={disabled}\n        id={name}\n        name={name}\n        placeholder={placeholder}\n        onChange={onChange}\n        onBlur={onBlur}\n        ref={ref}\n      />\n    </Box>","{\n    input: {client},\n  }","formState.hasTag('busy')","{\n      deployHook: deploymentTarget?.deployHook || '',\n      deployLimit: deploymentTarget?.deployLimit || 5,\n      name: deploymentTarget?.name || '',\n      projectId: deploymentTarget?.projectId || '',\n      teamId: deploymentTarget?.teamId || '',\n      token: deploymentTarget?.token || '',\n    }","deploymentTarget?.deployHook || ''","deploymentTarget?.deployLimit || 5","deploymentTarget?.name || ''","deploymentTarget?.projectId || ''","deploymentTarget?.teamId || ''","deploymentTarget?.token || ''","yupResolver(formSchema)","{\n    // @ts-expect-error - fix typings later\n    defaultValues: {\n      deployHook: deploymentTarget?.deployHook || '',\n      deployLimit: deploymentTarget?.deployLimit || 5,\n      name: deploymentTarget?.name || '',\n      projectId: deploymentTarget?.projectId || '',\n      teamId: deploymentTarget?.teamId || '',\n      token: deploymentTarget?.token || '',\n    },\n    mode: 'onChange',\n    resolver: yupResolver(formSchema),\n  }","{errors, isDirty, isValid}","() => {\n    if (formState.matches('error')) {\n      toast.push({\n        status: 'error',\n        title: formState.context.message || 'An error occurred',\n      })\n    }\n    /**\n     * If the machine is done it means it reached updated, created, deleted or error state.\n     * We don't care which one, we just want to close the dialog\n     */\n    if (formState.status === 'done') {\n      onClose()\n    }\n  }","[formState, onClose, toast]","async (formData: FormData) => {\n    const sanitizedFormData = sanitizeFormData(formData)\n    if (deploymentTarget) {\n      formStateTransition({type: 'UPDATE', id: deploymentTarget._id, formData: sanitizedFormData})\n    } else {\n      formStateTransition({type: 'CREATE', formData: sanitizedFormData})\n    }\n    await toPromise(formStateActorRef)\n    const snapshot = formStateActorRef.getSnapshot()\n    const {document} = snapshot.context\n    if (!document) return\n    if (snapshot.matches('created')) {\n      onCreate?.(document)\n    } else if (snapshot.matches('updated')) {\n      onUpdate?.(document)\n    }\n  }","async () => {\n    if (!deploymentTarget) {\n      return\n    }\n    const id = deploymentTarget._id\n    formStateTransition({type: 'DELETE', id})\n    await toPromise(formStateActorRef)\n    if (formStateActorRef.getSnapshot().matches('deleted')) {\n      onDelete?.(id)\n    }\n  }","deploymentTarget && (\n              <Button\n                loading={formState.matches('deleting')}\n                disabled={formUpdating}\n                fontSize={1}\n                mode=\"bleed\"\n                onClick={handleDelete}\n                text=\"Delete\"\n                tone=\"critical\"\n              />\n            )","formState.matches('creating') || formState.matches('updating')","handleSubmit(onSubmit)","<Button\n              loading={formState.matches('creating') || formState.matches('updating')}\n              disabled={!isDirty || !isValid}\n              fontSize={1}\n              // @ts-expect-error - yup 0.32 schema types do not line up with @hookform/resolvers, fix typings later\n              onClick={handleSubmit(onSubmit)}\n              text={deploymentTarget ? 'Update and close' : 'Create'}\n              tone=\"primary\"\n            />","!isDirty || !isValid","deploymentTarget ? 'Update and close' : 'Create'","<Box padding={3}>\n          <Flex justify={deploymentTarget ? 'space-between' : 'flex-end'}>\n            {/* Delete button */}\n            {deploymentTarget && (\n              <Button\n                loading={formState.matches('deleting')}\n                disabled={formUpdating}\n                fontSize={1}\n                mode=\"bleed\"\n                onClick={handleDelete}\n                text=\"Delete\"\n                tone=\"critical\"\n              />\n            )}\n\n            {/* Submit button */}\n            <Button\n              loading={formState.matches('creating') || formState.matches('updating')}\n              disabled={!isDirty || !isValid}\n              fontSize={1}\n              // @ts-expect-error - yup 0.32 schema types do not line up with @hookform/resolvers, fix typings later\n              onClick={handleSubmit(onSubmit)}\n              text={deploymentTarget ? 'Update and close' : 'Create'}\n              tone=\"primary\"\n            />\n          </Flex>\n        </Box>","deploymentTarget ? 'space-between' : 'flex-end'","<button aria-label=\"Submit\" style={{display: 'none'}} tabIndex={-1} type=\"submit\" />","register('name')","<FormFieldInputText\n            disabled={formUpdating}\n            description=\"Name displayed in this plugin (e.g. production, staging)\"\n            error={errors?.name}\n            label=\"Name\"\n            // @ts-expect-error - fix typings later\n            {...register('name')}\n          />","errors?.name","register('token')","<FormFieldInputText\n            disabled={formUpdating}\n            error={errors?.token}\n            label=\"Vercel Account Token\"\n            // @ts-expect-error - fix typings later\n            {...register('token')}\n          />","errors?.token","register('projectId')","<FormFieldInputText\n            disabled={formUpdating}\n            error={errors?.projectId}\n            label=\"Vercel Project ID\"\n            // @ts-expect-error - fix typings later\n            {...register('projectId')}\n          />","errors?.projectId","register('teamId')","<FormFieldInputText\n            description=\"Required only if your project is owned by a team account\"\n            disabled={formUpdating}\n            error={errors?.teamId}\n            label=\"Vercel Team ID (optional)\"\n            // @ts-expect-error - fix typings later\n            {...register('teamId')}\n          />","errors?.teamId","register('deployHook')","<FormFieldInputText\n            description=\"Enter a valid deploy hook URL to enable manual deploys\"\n            disabled={formUpdating}\n            error={errors?.deployHook}\n            label=\"Vercel Deploy Hook (optional)\"\n            // @ts-expect-error - fix typings later\n            {...register('deployHook')}\n          />","errors?.deployHook","register('deployLimit', {valueAsNumber: true})","<FormFieldInputText\n            disabled={formUpdating}\n            error={errors?.deployLimit}\n            label=\"Number of deploys to display\"\n            // @ts-expect-error - fix typings later\n            {...register('deployLimit', {valueAsNumber: true})}\n          />","errors?.deployLimit","<Stack gap={5}>\n          {/* Title */}\n          <FormFieldInputText\n            disabled={formUpdating}\n            description=\"Name displayed in this plugin (e.g. production, staging)\"\n            error={errors?.name}\n            label=\"Name\"\n            // @ts-expect-error - fix typings later\n            {...register('name')}\n          />\n\n          <FormFieldInputText\n            disabled={formUpdating}\n            error={errors?.token}\n            label=\"Vercel Account Token\"\n            // @ts-expect-error - fix typings later\n            {...register('token')}\n          />\n\n          <FormFieldInputText\n            disabled={formUpdating}\n            error={errors?.projectId}\n            label=\"Vercel Project ID\"\n            // @ts-expect-error - fix typings later\n            {...register('projectId')}\n          />\n\n          <FormFieldInputText\n            description=\"Required only if your project is owned by a team account\"\n            disabled={formUpdating}\n            error={errors?.teamId}\n            label=\"Vercel Team ID (optional)\"\n            // @ts-expect-error - fix typings later\n            {...register('teamId')}\n          />\n\n          <FormFieldInputText\n            description=\"Enter a valid deploy hook URL to enable manual deploys\"\n            disabled={formUpdating}\n            error={errors?.deployHook}\n            label=\"Vercel Deploy Hook (optional)\"\n            // @ts-expect-error - fix typings later\n            {...register('deployHook')}\n          />\n\n          <FormFieldInputText\n            disabled={formUpdating}\n            error={errors?.deployLimit}\n            label=\"Number of deploys to display\"\n            // @ts-expect-error - fix typings later\n            {...register('deployLimit', {valueAsNumber: true})}\n          />\n        </Stack>","<Box\n        as=\"form\"\n        padding={4}\n        // @ts-expect-error - yup 0.32 schema types do not line up with @hookform/resolvers, fix typings later\n        onSubmit={handleSubmit(onSubmit)}\n      >\n        {/* Hidden button to enable enter key submissions */}\n        <button aria-label=\"Submit\" style={{display: 'none'}} tabIndex={-1} type=\"submit\" />\n\n        {/* Form fields */}\n        <Stack gap={5}>\n          {/* Title */}\n          <FormFieldInputText\n            disabled={formUpdating}\n            description=\"Name displayed in this plugin (e.g. production, staging)\"\n            error={errors?.name}\n            label=\"Name\"\n            // @ts-expect-error - fix typings later\n            {...register('name')}\n          />\n\n          <FormFieldInputText\n            disabled={formUpdating}\n            error={errors?.token}\n            label=\"Vercel Account Token\"\n            // @ts-expect-error - fix typings later\n            {...register('token')}\n          />\n\n          <FormFieldInputText\n            disabled={formUpdating}\n            error={errors?.projectId}\n            label=\"Vercel Project ID\"\n            // @ts-expect-error - fix typings later\n            {...register('projectId')}\n          />\n\n          <FormFieldInputText\n            description=\"Required only if your project is owned by a team account\"\n            disabled={formUpdating}\n            error={errors?.teamId}\n            label=\"Vercel Team ID (optional)\"\n            // @ts-expect-error - fix typings later\n            {...register('teamId')}\n          />\n\n          <FormFieldInputText\n            description=\"Enter a valid deploy hook URL to enable manual deploys\"\n            disabled={formUpdating}\n            error={errors?.deployHook}\n            label=\"Vercel Deploy Hook (optional)\"\n            // @ts-expect-error - fix typings later\n            {...register('deployHook')}\n          />\n\n          <FormFieldInputText\n            disabled={formUpdating}\n            error={errors?.deployLimit}\n            label=\"Number of deploys to display\"\n            // @ts-expect-error - fix typings later\n            {...register('deployLimit', {valueAsNumber: true})}\n          />\n        </Stack>\n      </Box>","<Dialog\n      footer={\n        <Box padding={3}>\n          <Flex justify={deploymentTarget ? 'space-between' : 'flex-end'}>\n            {/* Delete button */}\n            {deploymentTarget && (\n              <Button\n                loading={formState.matches('deleting')}\n                disabled={formUpdating}\n                fontSize={1}\n                mode=\"bleed\"\n                onClick={handleDelete}\n                text=\"Delete\"\n                tone=\"critical\"\n              />\n            )}\n\n            {/* Submit button */}\n            <Button\n              loading={formState.matches('creating') || formState.matches('updating')}\n              disabled={!isDirty || !isValid}\n              fontSize={1}\n              // @ts-expect-error - yup 0.32 schema types do not line up with @hookform/resolvers, fix typings later\n              onClick={handleSubmit(onSubmit)}\n              text={deploymentTarget ? 'Update and close' : 'Create'}\n              tone=\"primary\"\n            />\n          </Flex>\n        </Box>\n      }\n      header={`${deploymentTarget ? 'Edit' : 'Create'} deployment target`}\n      id=\"create\"\n      onClose={onClose}\n      width={1}\n      zOffset={Z_INDEX_DIALOG}\n    >\n      {/* We reverse direction to ensure that inline links dont autofocus before other form elements */}\n      <Box\n        as=\"form\"\n        padding={4}\n        // @ts-expect-error - yup 0.32 schema types do not line up with @hookform/resolvers, fix typings later\n        onSubmit={handleSubmit(onSubmit)}\n      >\n        {/* Hidden button to enable enter key submissions */}\n        <button aria-label=\"Submit\" style={{display: 'none'}} tabIndex={-1} type=\"submit\" />\n\n        {/* Form fields */}\n        <Stack gap={5}>\n          {/* Title */}\n          <FormFieldInputText\n            disabled={formUpdating}\n            description=\"Name displayed in this plugin (e.g. production, staging)\"\n            error={errors?.name}\n            label=\"Name\"\n            // @ts-expect-error - fix typings later\n            {...register('name')}\n          />\n\n          <FormFieldInputText\n            disabled={formUpdating}\n            error={errors?.token}\n            label=\"Vercel Account Token\"\n            // @ts-expect-error - fix typings later\n            {...register('token')}\n          />\n\n          <FormFieldInputText\n            disabled={formUpdating}\n            error={errors?.projectId}\n            label=\"Vercel Project ID\"\n            // @ts-expect-error - fix typings later\n            {...register('projectId')}\n          />\n\n          <FormFieldInputText\n            description=\"Required only if your project is owned by a team account\"\n            disabled={formUpdating}\n            error={errors?.teamId}\n            label=\"Vercel Team ID (optional)\"\n            // @ts-expect-error - fix typings later\n            {...register('teamId')}\n          />\n\n          <FormFieldInputText\n            description=\"Enter a valid deploy hook URL to enable manual deploys\"\n            disabled={formUpdating}\n            error={errors?.deployHook}\n            label=\"Vercel Deploy Hook (optional)\"\n            // @ts-expect-error - fix typings later\n            {...register('deployHook')}\n          />\n\n          <FormFieldInputText\n            disabled={formUpdating}\n            error={errors?.deployLimit}\n            label=\"Number of deploys to display\"\n            // @ts-expect-error - fix typings later\n            {...register('deployLimit', {valueAsNumber: true})}\n          />\n        </Stack>\n      </Box>\n    </Dialog>","`${deploymentTarget ? 'Edit' : 'Create'} deployment target`","{input: {client}}","() => {\n    dialogStateTransition({type: 'CLOSE'})\n  }","() => {\n    dialogStateTransition({type: 'CREATE'})\n  }","(deploymentTarget: Sanity.DeploymentTarget) => {\n    dialogStateTransition({type: 'EDIT', deploymentTarget})\n  }","(deploymentTarget: Sanity.DeploymentTarget) => {\n    deploymentTargetListStateTransition({type: 'CREATE', deploymentTarget})\n  }","(id: string) => {\n    deploymentTargetListStateTransition({type: 'DELETE', id})\n  }","(deploymentTarget: Sanity.DeploymentTarget) => {\n    deploymentTargetListStateTransition({type: 'UPDATE', deploymentTarget})\n  }","{overflow: 'hidden '}","<StateDebug name=\"List\" state={deploymentTargetListState} />","<Text size={5} weight=\"semibold\">\n              Vercel deployments\n            </Text>","<Box padding={2}>\n                  <Text muted size={1}>\n                    Create new deployment target\n                  </Text>\n                </Box>","<Flex align=\"center\" justify=\"space-between\" paddingX={3} paddingY={2}>\n            <Text size={5} weight=\"semibold\">\n              Vercel deployments\n            </Text>\n\n            <Tooltip\n              content={\n                <Box padding={2}>\n                  <Text muted size={1}>\n                    Create new deployment target\n                  </Text>\n                </Box>\n              }\n              placement=\"left\"\n            >\n              <Button fontSize={1} icon={AddIcon} onClick={handleDialogShowCreate} mode=\"bleed\" />\n            </Tooltip>\n          </Flex>","deploymentTargetListState.matches('pending') && (\n              <Box paddingX={3} paddingY={4}>\n                <Text>Loading...</Text>\n              </Box>\n            )","deploymentTargetListState.matches({ready: 'withoutData'}) && (\n              <Flex align=\"center\" gap={3} paddingX={3} paddingY={4}>\n                <Text>No deployment targets found.</Text>\n                <Button\n                  fontSize={1}\n                  mode=\"ghost\"\n                  onClick={handleDialogShowCreate}\n                  text=\"Create a new target\"\n                />\n              </Flex>\n            )","deploymentTargetListState.matches({ready: 'withData'}) && (\n              <DeploymentTargets\n                items={deploymentTargetListState.context.results}\n                onDialogEdit={handleDialogShowEdit}\n              />\n            )","deploymentTargetListState.matches('failed') && (\n              <Box paddingX={3} paddingY={4}>\n                <Text>\n                  Failed to retrieve deployment targets. Please check the developer console log for\n                  more information.\n                </Text>\n              </Box>\n            )","<Box>\n            {deploymentTargetListState.matches('pending') && (\n              <Box paddingX={3} paddingY={4}>\n                <Text>Loading...</Text>\n              </Box>\n            )}\n\n            {deploymentTargetListState.matches({ready: 'withoutData'}) && (\n              <Flex align=\"center\" gap={3} paddingX={3} paddingY={4}>\n                <Text>No deployment targets found.</Text>\n                <Button\n                  fontSize={1}\n                  mode=\"ghost\"\n                  onClick={handleDialogShowCreate}\n                  text=\"Create a new target\"\n                />\n              </Flex>\n            )}\n\n            {deploymentTargetListState.matches({ready: 'withData'}) && (\n              <DeploymentTargets\n                items={deploymentTargetListState.context.results}\n                onDialogEdit={handleDialogShowEdit}\n              />\n            )}\n\n            {deploymentTargetListState.matches('failed') && (\n              <Box paddingX={3} paddingY={4}>\n                <Text>\n                  Failed to retrieve deployment targets. Please check the developer console log for\n                  more information.\n                </Text>\n              </Box>\n            )}\n          </Box>","<Card radius={2} style={{overflow: 'hidden '}}>\n          {/* xstate debug */}\n          <StateDebug name=\"List\" state={deploymentTargetListState} />\n\n          {/* Header */}\n          <Flex align=\"center\" justify=\"space-between\" paddingX={3} paddingY={2}>\n            <Text size={5} weight=\"semibold\">\n              Vercel deployments\n            </Text>\n\n            <Tooltip\n              content={\n                <Box padding={2}>\n                  <Text muted size={1}>\n                    Create new deployment target\n                  </Text>\n                </Box>\n              }\n              placement=\"left\"\n            >\n              <Button fontSize={1} icon={AddIcon} onClick={handleDialogShowCreate} mode=\"bleed\" />\n            </Tooltip>\n          </Flex>\n\n          <Box>\n            {deploymentTargetListState.matches('pending') && (\n              <Box paddingX={3} paddingY={4}>\n                <Text>Loading...</Text>\n              </Box>\n            )}\n\n            {deploymentTargetListState.matches({ready: 'withoutData'}) && (\n              <Flex align=\"center\" gap={3} paddingX={3} paddingY={4}>\n                <Text>No deployment targets found.</Text>\n                <Button\n                  fontSize={1}\n                  mode=\"ghost\"\n                  onClick={handleDialogShowCreate}\n                  text=\"Create a new target\"\n                />\n              </Flex>\n            )}\n\n            {deploymentTargetListState.matches({ready: 'withData'}) && (\n              <DeploymentTargets\n                items={deploymentTargetListState.context.results}\n                onDialogEdit={handleDialogShowEdit}\n              />\n            )}\n\n            {deploymentTargetListState.matches('failed') && (\n              <Box paddingX={3} paddingY={4}>\n                <Text>\n                  Failed to retrieve deployment targets. Please check the developer console log for\n                  more information.\n                </Text>\n              </Box>\n            )}\n          </Box>\n        </Card>","dialogState.matches('create') && (\n          <DialogForm onClose={handleDialogClose} onCreate={handleTargetCreate} />\n        )","dialogState.matches('edit') && (\n          <DialogForm\n            deploymentTarget={dialogState.context.editDeploymentTarget}\n            onClose={handleDialogClose}\n            onDelete={handleTargetDelete}\n            onUpdate={handleTargetUpdate}\n          />\n        )","<ToastProvider zOffset={Z_INDEX_TOAST_PROVIDER}>\n      <QueryClientProvider client={queryClient}>\n        <Card radius={2} style={{overflow: 'hidden '}}>\n          {/* xstate debug */}\n          <StateDebug name=\"List\" state={deploymentTargetListState} />\n\n          {/* Header */}\n          <Flex align=\"center\" justify=\"space-between\" paddingX={3} paddingY={2}>\n            <Text size={5} weight=\"semibold\">\n              Vercel deployments\n            </Text>\n\n            <Tooltip\n              content={\n                <Box padding={2}>\n                  <Text muted size={1}>\n                    Create new deployment target\n                  </Text>\n                </Box>\n              }\n              placement=\"left\"\n            >\n              <Button fontSize={1} icon={AddIcon} onClick={handleDialogShowCreate} mode=\"bleed\" />\n            </Tooltip>\n          </Flex>\n\n          <Box>\n            {deploymentTargetListState.matches('pending') && (\n              <Box paddingX={3} paddingY={4}>\n                <Text>Loading...</Text>\n              </Box>\n            )}\n\n            {deploymentTargetListState.matches({ready: 'withoutData'}) && (\n              <Flex align=\"center\" gap={3} paddingX={3} paddingY={4}>\n                <Text>No deployment targets found.</Text>\n                <Button\n                  fontSize={1}\n                  mode=\"ghost\"\n                  onClick={handleDialogShowCreate}\n                  text=\"Create a new target\"\n                />\n              </Flex>\n            )}\n\n            {deploymentTargetListState.matches({ready: 'withData'}) && (\n              <DeploymentTargets\n                items={deploymentTargetListState.context.results}\n                onDialogEdit={handleDialogShowEdit}\n              />\n            )}\n\n            {deploymentTargetListState.matches('failed') && (\n              <Box paddingX={3} paddingY={4}>\n                <Text>\n                  Failed to retrieve deployment targets. Please check the developer console log for\n                  more information.\n                </Text>\n              </Box>\n            )}\n          </Box>\n        </Card>\n\n        {/* Dialogs */}\n        {dialogState.matches('create') && (\n          <DialogForm onClose={handleDialogClose} onCreate={handleTargetCreate} />\n        )}\n\n        {dialogState.matches('edit') && (\n          <DialogForm\n            deploymentTarget={dialogState.context.editDeploymentTarget}\n            onClose={handleDialogClose}\n            onDelete={handleTargetDelete}\n            onUpdate={handleTargetUpdate}\n          />\n        )}\n      </QueryClientProvider>\n    </ToastProvider>"],"sources":["../src/constants.ts","../src/client.ts","../src/utils/fetcher.ts","../src/hooks/useDeployments.ts","../src/machines/refresh.ts","../src/utils/useCardColor.ts","../src/machines/deploy.ts","../src/components/StateDebug/index.tsx","../src/components/DeployButton/index.tsx","../src/components/StatusDot/index.tsx","../src/components/TableCell/index.tsx","../src/components/Deployment/index.tsx","../src/components/PlaceholderAvatar/index.tsx","../src/components/PlaceholderText/index.tsx","../src/components/DeploymentPlaceholder/index.tsx","../src/components/Deployments/index.tsx","../src/components/DeploymentTarget/index.tsx","../src/components/DeploymentTargets/index.tsx","../src/machines/form.ts","../src/utils/sanitizeFormData.ts","../src/components/FormFieldInputLabel/index.tsx","../src/components/FormFieldInputText/index.tsx","../src/components/DialogForm/index.tsx","../src/machines/deploymentTargetList.ts","../src/machines/dialog.ts","../src/app.tsx","../src/index.ts"],"sourcesContent":["// https://vercel.com/docs/platform/limits\nexport const API_ENDPOINT_DEPLOYMENTS = 'https://api.vercel.com/v5/now/deployments'\nexport const API_ENDPOINT_ALIASES = 'https://api.vercel.com/v3/now/aliases'\n\n// Sanity API version\nexport const API_VERSION = '1'\n\nexport const DEBUG_MODE = false\n\nexport const DEPLOYMENT_TARGET_DOCUMENT_TYPE = 'vercel.deploymentTarget'\n\nexport const VERCEL_STATUS_COLORS = {\n  BUILDING: '#f5a623',\n  CANCELED: '#ff0000',\n  ERROR: '#ff0000',\n  READY: '#50e3c2',\n  QUEUED: '#333',\n}\n\n// Name displayed in toasts\nexport const WIDGET_NAME = 'Vercel (dashboard)'\n\n// NOTE: Manually set plugin z-index values to be higher than Sanity's header search field\n// (which is currently 500202). Also ensure toasts always sit above dialogs.\nexport const Z_INDEX_DIALOG = 600001\nexport const Z_INDEX_TOAST_PROVIDER = 600002\n","import {type SanityClient, useClient} from 'sanity'\n\nimport {API_VERSION} from './constants'\n\nexport function useSanityClient(): SanityClient {\n  return useClient({apiVersion: API_VERSION})\n}\n","import {type Sanity} from '../types'\n\nconst fetcher =\n  (deploymentTarget: Sanity.DeploymentTargetConfig) =>\n  async (url: string, extraParams?: URLSearchParams) => {\n    const params = new URLSearchParams()\n    params.set('projectId', deploymentTarget.projectId)\n    if (deploymentTarget.teamId) {\n      params.set('teamId', deploymentTarget.teamId)\n    }\n\n    if (extraParams) {\n      for (const [k, v] of extraParams.entries()) {\n        params.append(k, v)\n      }\n    }\n\n    const response = await fetch(`${url}?${params.toString()}`, {\n      headers: {\n        Authorization: `Bearer ${deploymentTarget.token}`,\n      },\n    })\n\n    // Manually throw on non-OK responses for react-query\n    // https://react-query.tanstack.com/guides/query-functions#usage-with-fetch-and-others-clients-that-do-not-throw-by-default\n    if (!response.ok) {\n      throw new Error('Response not OK')\n    }\n\n    try {\n      return await response.json()\n    } catch (err) {\n      throw new Error('Unable to parse response as JSON', {cause: err})\n    }\n  }\n\nexport default fetcher\n","import {useQuery} from '@tanstack/react-query'\nimport hash from 'object-hash'\n\nimport {API_ENDPOINT_ALIASES, API_ENDPOINT_DEPLOYMENTS} from '../constants'\nimport {type Sanity, type Vercel} from '../types'\nimport fetcher from '../utils/fetcher'\n\ntype Options = {\n  enabled?: boolean\n}\n\nconst useDeployments = (deploymentTarget: Sanity.DeploymentTargetConfig, options?: Options) => {\n  const fetchUrl = fetcher(deploymentTarget)\n\n  // Fetch deployments\n  const deployParams = new URLSearchParams()\n  deployParams.set('limit', String(deploymentTarget?.deployLimit))\n\n  const {\n    data: deploymentsData,\n    isFetching: deploymentsIsFetching,\n    isSuccess: deploymentsIsSuccess,\n    error: deploymentsError,\n    refetch,\n  } = useQuery<{deployments: Vercel.Deployment[]}>({\n    queryKey: [hash(deploymentTarget)],\n    queryFn: () => fetchUrl(API_ENDPOINT_DEPLOYMENTS, deployParams),\n    enabled: options?.enabled ?? true,\n    refetchInterval: 20000, // ms\n    refetchIntervalInBackground: false,\n    refetchOnMount: true,\n    refetchOnReconnect: 'always',\n    refetchOnWindowFocus: false,\n    retry: false,\n  })\n\n  // Fetch aliases (only if deployments have been retrieved)\n  const aliasParams = new URLSearchParams()\n  aliasParams.set('limit', '20')\n\n  const {\n    data: aliasesData,\n    isFetching: aliasesIsFetching,\n    isSuccess: aliasesIsSuccess,\n    error: aliasesError,\n  } = useQuery<{\n    aliases: Vercel.Alias[]\n    pagination: {\n      count: number\n      next?: number\n      prev?: number\n    }\n  }>({\n    queryKey: [hash(deploymentTarget), 'aliases'],\n    queryFn: () => fetchUrl(API_ENDPOINT_ALIASES, aliasParams),\n    enabled: !!deploymentsData,\n    refetchOnMount: false,\n    refetchOnReconnect: false,\n    refetchOnWindowFocus: false,\n    retry: false,\n  })\n\n  const aliases = aliasesData?.aliases\n\n  let deploymentsWithAlias: Vercel.DeploymentWithAlias[] | undefined\n\n  if (aliases) {\n    deploymentsWithAlias = deploymentsData?.deployments?.map((val: Vercel.DeploymentWithAlias) => {\n      const alias = aliases.find((a) => a.deploymentId === val.uid)\n      return Object.assign(val, {alias: alias?.alias})\n    })\n  }\n\n  return {\n    deployments: deploymentsWithAlias,\n    error: aliasesError || deploymentsError,\n    isFetching: aliasesIsFetching || deploymentsIsFetching,\n    isSuccess: aliasesIsSuccess && deploymentsIsSuccess,\n    refetch,\n  }\n}\n\nexport default useDeployments\n","import {setup} from 'xstate'\n\ntype Event = {type: 'ERROR'} | {type: 'REFRESH'} | {type: 'REFRESHED'} | {type: 'RETRY'}\n\nconst refreshMachine = setup({\n  types: {\n    events: {} as Event,\n  },\n}).createMachine({\n  /** @xstate-layout N4IgpgJg5mDOIC5QAoC2BDAxgCwJYDswBKAOlwgBswBiAJQFEAxBgZQAkBtABgF1FQADgHtYuAC64h+fiAAeiAIwAmAGwkuGrkoAsAZhVKlAVm0KAHABoQAT0QBOJSRN27XFXaMmz2twF9fVmhYeISkAE5gAGYRsCFQ1PS0tADytNx8SCDCohJSMvIIPnYkxhpKXGZ22kY6xla2CAq6CiQudgDsRnYqKroVfe3+gRg4BMQkEdFwcXRMrGz0ACLpMtniktKZBUUlRmUVVTXadTaISrqObUY97QodvWa6QyBBo6ETUTHYkLPM9OwrTJrXKbUDbJTFLjtMzmWraOx3doqeqKMyOeHdXp3BTHXTVZ6vELjMBhMJCMK-eaAwQidZ5LaIY6Q6Gw47wxHI04IGEkDFma5NbTtY7ufwBED4IQQOAyQljIirWkg-KIAC0nIa6oJIyJpHIVEVOQ2KsKShRCDsunUGLcHi8PhU2uC8o+U1iBCghrpoLkZ2uTk0XCq7SRRl0Zg19itXHhIZ85lMEaUTre40mX0gXuVDIQnmKRhZKk6PmaVXN2PUaLsZhj2hUOJU-JTupIJLJYSzxpzeacheLXFL2nNrkrfW8SKFnhDYt8QA */\n  initial: 'idle',\n  states: {\n    idle: {\n      on: {\n        REFRESH: {\n          target: 'refreshing',\n        },\n      },\n    },\n    refreshing: {\n      on: {\n        ERROR: {\n          target: 'error',\n        },\n        REFRESHED: {\n          target: 'refreshed',\n        },\n      },\n    },\n    refreshed: {\n      on: {\n        REFRESH: {\n          target: 'refreshing',\n        },\n      },\n    },\n    error: {\n      on: {\n        REFRESH: {\n          target: 'refreshing',\n        },\n      },\n    },\n  },\n})\n\nexport default refreshMachine\n","import {useTheme_v2} from '@sanity/ui'\n\nexport function useCardColor(): {border: string} {\n  const {color} = useTheme_v2()\n  return {border: color.border}\n}\n","import {assign, setup, fromPromise} from 'xstate'\n\nimport {type Vercel} from '../types'\n\ntype Context = {\n  deployHook: string\n  disabled: boolean\n  feedback?: string\n  label?: string\n  error?: string\n}\n\ntype Event = {type: 'DEPLOY'}\n\ninterface DeployActorInput {\n  deployHook: string\n}\n\nexport const deployMachine = setup({\n  types: {\n    context: {} as Context,\n    events: {} as Event,\n    input: {} as DeployActorInput,\n  },\n  actors: {\n    deploy: fromPromise(async ({input, signal}: {input: DeployActorInput; signal: AbortSignal}) => {\n      try {\n        if (!input.deployHook) {\n          throw new Error('No deployHook URL defined')\n        }\n        const res = await fetch(input.deployHook, {method: 'POST', signal})\n        const data: {error?: Vercel.Error} | null = await res.json()\n        if (!res.ok) {\n          const errorMessage = data?.error?.message || res.statusText\n          throw errorMessage\n        }\n      } catch (err) {\n        if (typeof err === 'string') {\n          throw err\n        }\n        console.error('Unable to deploy with error:', err)\n        throw new Error('Please check the developer console for more information', {cause: err})\n      }\n    }),\n  },\n}).createMachine({\n  /** @xstate-layout N4IgpgJg5mDOIC5QTABwDYHsCeA6AlhOmAMQAiAogAoAyA8gJoDaADALqKiqaz4Au+TADtOIAB6IATCxa4AnADYAHAHYArArUslAZjksNAGhDZEARk3yVmhSxVyHC-QBYAvq+MoMOXF6zZ8ISgSCGEwAiEAN0wAa3C-HwSAoIRA6IBjAEMBYVY2PNFuXhyRJHFENTMzXElFJSUzNTVnWx0FY1MESXVcZzUdM2k1OTUVBoV3TzR-X2mcQOCwACclzCXcDGyAMzWAW1nvPCSF1KjMLJK8grKi-kFS0AkESura5QamlpY2jvMB+QcDkqLH0wxYEw8ICSuFgAFd0uk4LByNR6Mx2IUeHdhKIns1ZN9BtYQVpRnJfl1JM55P1BnY1Ep9CpGpMoXM8MtVksUbRGNcuFiSriKs4CQNurYRgZ7BSGr1ASNupIzEo+kp3JChJgUPAyklMcV7sKEABadomRAmtQAhW2wE6VnQwjEA3Yh7lBDOSQUsxeqyaPoWYbWFSO9kHfwLV1CspPHSSHQ1ZyA1UKJzJlQ+iz+5oKewKWrfNyQ6FwhFI6NG2OINOSXDiypKAxtMyZi1dEE1Qk6L0FpTSUMl8OctaVnHVhC1+uDRvNhStin6XDaHQ9liSXTJiUa1xAA */\n  id: 'deploy',\n  initial: 'idle',\n  context: ({input}) => ({\n    disabled: false,\n    feedback: undefined,\n    label: undefined,\n    error: undefined,\n    deployHook: input.deployHook,\n  }),\n  states: {\n    idle: {\n      entry: assign({\n        feedback: () => undefined,\n        label: () => 'Deploy',\n      }),\n      on: {\n        DEPLOY: {\n          target: 'deploying',\n        },\n      },\n    },\n    deploying: {\n      entry: assign({\n        disabled: () => true,\n        label: () => 'Deploying',\n      }),\n      exit: assign({\n        disabled: () => false,\n        label: () => 'Deploy',\n      }),\n      invoke: {\n        src: 'deploy',\n        input: ({context}) => ({deployHook: context.deployHook}),\n        onDone: {\n          target: 'success',\n        },\n        onError: {\n          target: 'error',\n          actions: assign({\n            error: ({event}) => {\n              if ('error' in event) {\n                const {error} = event\n                if (typeof error === 'string') {\n                  return error\n                }\n                if (error instanceof Error) {\n                  return error.message\n                }\n              }\n              return 'Unknown error'\n            },\n          }),\n        },\n      },\n    },\n    success: {\n      entry: assign({\n        feedback: () => 'Successfully started!',\n      }),\n      exit: assign({\n        feedback: () => undefined,\n      }),\n      on: {\n        DEPLOY: {\n          target: 'deploying',\n        },\n      },\n    },\n    error: {\n      on: {\n        DEPLOY: {\n          target: 'deploying',\n        },\n      },\n    },\n  },\n})\n","import {Box, Card, Stack, Text} from '@sanity/ui'\n\nimport {DEBUG_MODE} from '../../constants'\n\ntype Props = {\n  name: string\n  state: any // TODO: type correctly\n}\n\nconst StateDebug = (props: Props) => {\n  const {name, state} = props\n\n  if (!DEBUG_MODE) {\n    return null\n  }\n\n  return (\n    <Card\n      scheme=\"dark\"\n      style={{\n        backgroundColor: 'rgba(0, 0, 255, 0.9)',\n        borderRadius: '3px',\n        fontSize: 1,\n        fontWeight: 500,\n        lineHeight: 'body',\n        right: 0,\n        opacity: 0.75,\n        pointerEvents: 'none',\n        position: 'absolute',\n        textAlign: 'left',\n        top: 0,\n        zIndex: 9000,\n      }}\n    >\n      <Box padding={2}>\n        <Stack gap={2}>\n          <Text size={0}>Name: {name}</Text>\n          <Text size={0}>state.value: {JSON.stringify(state.value)}</Text>\n        </Stack>\n      </Box>\n    </Card>\n  )\n}\n\nexport default StateDebug\n","import {UploadIcon} from '@sanity/icons/Upload'\nimport {Box, Button} from '@sanity/ui'\nimport {useToast} from '@sanity/ui/toast'\nimport {useMachine} from '@xstate/react'\nimport {useEffect} from 'react'\n\nimport {WIDGET_NAME} from '../../constants'\nimport {deployMachine} from '../../machines/deploy'\nimport StateDebug from '../StateDebug'\n\ntype Props = {\n  deployHook: string\n  onDeploySuccess?: () => void\n  targetName: string\n}\n\nconst DeployButton = (props: Props) => {\n  const {deployHook, onDeploySuccess, targetName} = props\n\n  const [deployState, deployStateTransition, deployStateInterpreter] = useMachine(deployMachine, {\n    input: {deployHook},\n  })\n\n  const toast = useToast()\n\n  const isError = deployState.matches('error')\n  const isSuccess = deployState.matches('success')\n\n  // Callbacks\n  const handleDeploy = () => {\n    deployStateTransition({type: 'DEPLOY'})\n  }\n\n  // Effects\n  useEffect(() => {\n    if (isError) {\n      toast.push({\n        closable: true,\n        description: `Unable to queue deploy for ${targetName}: ${deployState.context.error}`,\n        duration: 8000,\n        status: 'error',\n        title: WIDGET_NAME,\n      })\n    }\n\n    if (isSuccess) {\n      toast.push({\n        closable: true,\n        description: `Deploy queued for ${targetName}`,\n        duration: 8000,\n        status: 'success',\n        title: WIDGET_NAME,\n      })\n    }\n  }, [isError, isSuccess, toast, targetName, deployState.context.error])\n\n  useEffect(() => {\n    const subscription = deployStateInterpreter.subscribe((state) => {\n      if (state.value === 'success') {\n        if (onDeploySuccess) {\n          onDeploySuccess()\n        }\n      }\n    })\n\n    return () => subscription.unsubscribe()\n  }, [deployStateInterpreter, onDeploySuccess])\n\n  return (\n    <Box padding={3} style={{position: 'relative'}}>\n      <StateDebug name=\"Deploy\" state={deployState} />\n\n      <Button\n        disabled={deployState.context.disabled}\n        fontSize={1}\n        icon={UploadIcon}\n        mode=\"ghost\"\n        onClick={handleDeploy}\n        padding={3}\n        text={`${deployState.context.label} ${targetName}`}\n        tone=\"default\"\n      />\n    </Box>\n  )\n}\n\nexport default DeployButton\n","import {Box} from '@sanity/ui'\n\nimport {VERCEL_STATUS_COLORS} from '../../constants'\nimport {type Vercel} from '../../types'\n\ntype Props = {\n  state: Vercel.DeploymentState\n}\n\nconst StatusDot = ({state}: Props) => (\n  <Box\n    style={{\n      backgroundColor: VERCEL_STATUS_COLORS[state],\n      borderRadius: '20px',\n      height: '9px',\n      width: '9px',\n    }}\n  />\n)\n\nexport default StatusDot\n","import {Box, Label} from '@sanity/ui'\nimport type {ReactNode} from 'react'\n\nimport {type Sanity} from '../../types'\nimport {useCardColor} from '../../utils/useCardColor'\n\ntype Props = {\n  children: ReactNode\n  colSpan?: number\n  header?: boolean\n  variant?: 'age' | 'branch' | 'creator' | 'state'\n}\n\nconst TableCell = (props: Props) => {\n  const {children, colSpan, header, variant} = props\n\n  let display: Sanity.BoxDisplay | Sanity.BoxDisplay[] = 'table-cell'\n  let cellWidth: string = 'auto'\n\n  switch (variant) {\n    case 'age':\n      cellWidth = '50px'\n      break\n    case 'branch':\n      cellWidth = '300px'\n      display = ['none', 'none', 'none', 'table-cell']\n      break\n    case 'creator':\n      cellWidth = '80px'\n      break\n    case 'state':\n      cellWidth = '110px'\n      display = ['none', 'none', 'none', 'none', 'table-cell']\n      break\n    default:\n      break\n  }\n\n  const {border} = useCardColor()\n\n  if (header) {\n    return (\n      <Box\n        as=\"th\"\n        colSpan={colSpan}\n        // @ts-expect-error -- local `display` allows 'table-cell', which is not part of @sanity/ui's `BoxDisplay` union\n        display={display}\n        paddingX={3}\n        paddingY={2}\n        style={{\n          maxWidth: cellWidth,\n          position: 'relative',\n          textAlign: 'left',\n          width: cellWidth,\n        }}\n      >\n        <Label size={0}>{children}</Label>\n      </Box>\n    )\n  }\n  return (\n    <Box\n      as=\"td\"\n      colSpan={colSpan}\n      // @ts-expect-error -- local `display` allows 'table-cell', which is not part of @sanity/ui's `BoxDisplay` union\n      display={display}\n      paddingX={3}\n      paddingY={[2, 2, 3]}\n      style={{\n        borderTop: `1px solid ${border}`,\n        maxWidth: cellWidth,\n        position: 'relative',\n        textAlign: 'left',\n        width: cellWidth,\n      }}\n    >\n      {children}\n    </Box>\n  )\n}\n\nexport default TableCell\n","import {LinkIcon} from '@sanity/icons/Link'\nimport {Box, Flex, Stack, Text} from '@sanity/ui'\nimport {useMemo} from 'react'\n// oxlint-disable-next-line import/no-unassigned-import\nimport 'react-time-ago/locale/en'\nimport ReactTimeAgo from 'react-time-ago'\n\nimport {type Vercel} from '../../types'\nimport StatusDot from '../StatusDot'\nimport TableCell from '../TableCell'\n\ntype Props = {\n  deployment: Vercel.DeploymentWithAlias\n}\n\nconst Deployment = (props: Props) => {\n  const {deployment} = props\n\n  const date = useMemo(() => new Date(deployment.created), [deployment.created])\n\n  const commitMessage = deployment?.meta?.['githubCommitMessage']\n  const commitRef = deployment?.meta?.['githubCommitRef']\n\n  const targetUrl = deployment.alias ?? deployment.url\n\n  return (\n    <tr>\n      {/* Deployment - alias or regular deployment URL */}\n      <TableCell>\n        <Flex align=\"center\">\n          <Box\n            display={['block', 'block', 'block', 'block', 'none']}\n            marginRight={3}\n            style={{flexShrink: 0}}\n          >\n            <StatusDot state={deployment.state} />\n          </Box>\n\n          {targetUrl ? (\n            <>\n              {/* Alias icon */}\n              {deployment.alias && <LinkIcon />}\n\n              <Box marginLeft={deployment.alias ? 1 : 0}>\n                <Text\n                  muted={!(deployment.state === 'READY')}\n                  size={1}\n                  style={{\n                    textDecoration:\n                      deployment.state === 'CANCELED' || deployment.state === 'ERROR'\n                        ? 'line-through'\n                        : 'normal',\n                  }}\n                  textOverflow=\"ellipsis\"\n                >\n                  {deployment.state === 'READY' ? (\n                    <a href={`https://${targetUrl}`} rel=\"noopener noreferrer\" target=\"_blank\">\n                      {targetUrl}\n                    </a>\n                  ) : (\n                    targetUrl\n                  )}\n                </Text>\n              </Box>\n            </>\n          ) : (\n            <Text size={1}>Uploading...</Text>\n          )}\n        </Flex>\n      </TableCell>\n\n      {/* State */}\n      <TableCell variant=\"state\">\n        <Flex align=\"center\">\n          <StatusDot state={deployment.state} />\n          <Box marginLeft={2}>\n            <Text size={1}>\n              {deployment.state\n                .trim()\n                .toLowerCase()\n                .replace(/^[a-z]/i, (t) => t.toUpperCase())}\n            </Text>\n          </Box>\n        </Flex>\n      </TableCell>\n\n      {/* Branch */}\n      <TableCell variant=\"branch\">\n        <Stack gap={2}>\n          <Text size={1} textOverflow=\"ellipsis\">\n            {commitRef}\n          </Text>\n          {commitMessage && (\n            <Text muted size={1} textOverflow=\"ellipsis\">\n              {commitMessage}\n            </Text>\n          )}\n        </Stack>\n      </TableCell>\n\n      {/* Age */}\n      <TableCell variant=\"age\">\n        <Flex align=\"center\">\n          <Text size={1}>\n            <ReactTimeAgo date={date} locale=\"en-US\" timeStyle=\"mini\" />\n          </Text>\n        </Flex>\n      </TableCell>\n\n      {/* Creator */}\n      <TableCell variant=\"creator\">\n        <Flex align=\"center\" justify=\"center\">\n          <img\n            alt={deployment?.creator?.username || 'Deployment creator avatar'}\n            draggable={false}\n            src={`https://vercel.com/api/www/avatar/${deployment?.creator?.uid}?&s=48`}\n            style={{\n              borderRadius: '20px',\n              height: '20px',\n              width: '20px',\n            }}\n          />\n        </Flex>\n      </TableCell>\n    </tr>\n  )\n}\n\nexport default Deployment\n","import {Box} from '@sanity/ui'\n\nimport {useCardColor} from '../../utils/useCardColor'\n\nconst PlaceholderAvatar = () => {\n  const {border} = useCardColor()\n  return (\n    <Box\n      style={{\n        backgroundColor: border,\n        borderRadius: '20px',\n        height: '20px',\n        userSelect: 'none',\n        width: '20px',\n      }}\n    />\n  )\n}\n\nexport default PlaceholderAvatar\n","import {Box, Stack, Text} from '@sanity/ui'\n\nimport {useCardColor} from '../../utils/useCardColor'\n\ntype Props = {\n  rows: number\n}\n\nconst PlaceholderText = (props: Props) => {\n  const {rows} = props\n  const {border} = useCardColor()\n  return (\n    <Box\n      style={{\n        backgroundColor: border,\n        borderRadius: '3px',\n        userSelect: 'none',\n        width: '100%',\n      }}\n    >\n      <Stack gap={2}>\n        {Array.from({length: rows}, (_, index) => (\n          <Text key={index} size={1}>\n            &nbsp;\n          </Text>\n        ))}\n      </Stack>\n    </Box>\n  )\n}\n\nexport default PlaceholderText\n","import {Flex} from '@sanity/ui'\n\nimport PlaceholderAvatar from '../PlaceholderAvatar'\nimport PlaceholderText from '../PlaceholderText'\nimport TableCell from '../TableCell'\n\nconst DeploymentPlaceholder = () => {\n  return (\n    <tr>\n      {/* Deployment - alias or regular deployment URL */}\n      <TableCell>\n        <PlaceholderText rows={1} />\n      </TableCell>\n\n      {/* State */}\n      <TableCell variant=\"state\">\n        <PlaceholderText rows={1} />\n      </TableCell>\n\n      {/* Branch */}\n      <TableCell variant=\"branch\">\n        <PlaceholderText rows={2} />\n      </TableCell>\n\n      {/* Age */}\n      <TableCell variant=\"age\">\n        <PlaceholderText rows={1} />\n      </TableCell>\n\n      {/* Creator */}\n      <TableCell variant=\"creator\">\n        <Flex justify=\"center\">\n          <PlaceholderAvatar />\n        </Flex>\n      </TableCell>\n    </tr>\n  )\n}\n\nexport default DeploymentPlaceholder\n","import {Box, Text} from '@sanity/ui'\nimport {useToast} from '@sanity/ui/toast'\nimport {useMachine} from '@xstate/react'\nimport {useEffect, useRef} from 'react'\nimport useDeepCompareEffect from 'use-deep-compare-effect'\n\nimport {WIDGET_NAME} from '../../constants'\nimport useDeployments from '../../hooks/useDeployments'\nimport refreshMachine from '../../machines/refresh'\nimport {type Sanity} from '../../types'\nimport {useCardColor} from '../../utils/useCardColor'\nimport DeployButton from '../DeployButton'\nimport Deployment from '../Deployment'\nimport DeploymentPlaceholder from '../DeploymentPlaceholder'\nimport StateDebug from '../StateDebug'\nimport TableCell from '../TableCell'\n\ntype Props = {\n  deploymentTarget: Sanity.DeploymentTargetConfig\n}\n\nconst Deployments = (props: Props) => {\n  const {deploymentTarget} = props\n\n  // Refs\n  const refTimeout = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n  // XState\n  const [refreshState, refreshStateTransition] = useMachine(refreshMachine)\n\n  // Fetch deployments - disable hook / auto-refetching on error state\n  const {deployments, error, isFetching, isSuccess, refetch} = useDeployments(deploymentTarget, {\n    enabled: !refreshState.matches('error'),\n  })\n\n  const toast = useToast()\n  const isError = refreshState.matches('error')\n\n  const handleDeploySuccess = () => {\n    if (refTimeout.current) {\n      clearTimeout(refTimeout.current)\n    }\n    refTimeout.current = setTimeout(() => {\n      void refetch({\n        cancelRefetch: true,\n        throwOnError: true,\n      })\n    }, 4000)\n  }\n\n  useEffect(() => {\n    return () => {\n      if (refTimeout.current) {\n        clearTimeout(refTimeout.current)\n      }\n    }\n  }, [])\n\n  useEffect(() => {\n    if (error) {\n      refreshStateTransition({type: 'ERROR'})\n    }\n\n    if (isFetching) {\n      refreshStateTransition({type: 'REFRESH'})\n    }\n\n    if (!isFetching && isSuccess) {\n      refreshStateTransition({type: 'REFRESHED'})\n    }\n  }, [error, isFetching, isSuccess, refreshStateTransition])\n\n  useDeepCompareEffect(() => {\n    if (!refreshState.matches('refreshing')) {\n      refreshStateTransition({type: 'REFRESH'})\n    }\n  }, [deploymentTarget])\n\n  useDeepCompareEffect(() => {\n    if (isError) {\n      toast.push({\n        closable: true,\n        description: `Unable to fetch deployments for ${deploymentTarget.name}`,\n        duration: 8000,\n        status: 'error',\n        title: WIDGET_NAME,\n      })\n    }\n  }, [deploymentTarget, isError])\n\n  const hasFetched = typeof deployments !== 'undefined'\n  const hasDeployments = deployments && deployments.length > 0\n\n  const {border} = useCardColor()\n  return (\n    <Box marginTop={3} style={{position: 'relative'}}>\n      {/* xstate debug */}\n      <StateDebug name=\"Refresh\" state={refreshState} />\n\n      {!refreshState.matches('error') && (\n        <>\n          <Box\n            as=\"table\"\n            style={{\n              borderBottom: `1px solid ${border}`,\n              borderCollapse: 'collapse',\n              display: 'table',\n              tableLayout: 'fixed',\n              width: '100%',\n            }}\n          >\n            <Box as=\"thead\" style={{display: 'table-header-group'}}>\n              <tr>\n                {/* Deployment */}\n                <TableCell header>Deployment</TableCell>\n\n                {/* State */}\n                <TableCell header variant=\"state\">\n                  State\n                </TableCell>\n\n                {/* Branch */}\n                <TableCell header variant=\"branch\">\n                  Branch\n                </TableCell>\n\n                {/* Age */}\n                <TableCell header variant=\"age\">\n                  Age\n                </TableCell>\n\n                {/* Creator */}\n                <TableCell header variant=\"creator\">\n                  Creator\n                </TableCell>\n              </tr>\n            </Box>\n\n            <Box as=\"tbody\" style={{display: 'table-row-group'}}>\n              {/* Placeholders */}\n              {!deployments &&\n                Array.from({length: deploymentTarget.deployLimit}, (_, index) => (\n                  <DeploymentPlaceholder key={index} />\n                ))}\n              {/* Deployments */}\n              {hasDeployments &&\n                deployments?.map((deployment) => (\n                  <Deployment deployment={deployment} key={deployment.uid} />\n                ))}\n            </Box>\n          </Box>\n\n          {/* No results */}\n          {hasFetched && !hasDeployments && (\n            <Box padding={3} style={{width: '100%'}}>\n              <Text muted size={1}>\n                No deployments found. Don't forget to specify a valid team ID if your project\n                belongs to a team.\n              </Text>\n            </Box>\n          )}\n        </>\n      )}\n\n      {/* Error message */}\n      {refreshState.matches('error') && (\n        <Box padding={3}>\n          <Text muted size={1}>\n            Unable to fetch recent deployments. Please check your network and deployment settings.\n          </Text>\n        </Box>\n      )}\n\n      {/* Deploy button */}\n      {!refreshState.matches('error') && deploymentTarget.deployHook && (\n        <Box>\n          <DeployButton\n            deployHook={deploymentTarget.deployHook}\n            onDeploySuccess={handleDeploySuccess}\n            targetName={deploymentTarget.name}\n          />\n        </Box>\n      )}\n    </Box>\n  )\n}\n\nexport default Deployments\n","import {EditIcon} from '@sanity/icons/Edit'\nimport {Box, Button, Flex, Text} from '@sanity/ui'\nimport {Tooltip} from '@sanity/ui/tooltip'\nimport type {FC} from 'react'\n\nimport {type Sanity} from '../../types'\nimport Deployments from '../Deployments'\n\ntype Props = {\n  item: Sanity.DeploymentTarget\n  onDialogEdit: (deploymentTarget: Sanity.DeploymentTarget) => void\n}\n\nconst DeploymentTarget: FC<Props> = (props: Props) => {\n  const {item, onDialogEdit} = props\n\n  const deploymentTarget: Sanity.DeploymentTargetConfig = {\n    deployHook: item.deployHook,\n    deployLimit: item.deployLimit,\n    name: item.name,\n    projectId: item.projectId,\n    teamId: item.teamId,\n    token: item.token,\n  }\n\n  return (\n    <Box style={{position: 'relative'}}>\n      {/* Header */}\n      <Flex align=\"center\" justify=\"space-between\" marginTop={2} paddingX={3}>\n        <Text size={2}>{item.name}</Text>\n\n        <Tooltip\n          content={\n            <Box padding={2}>\n              <Text muted size={1}>\n                Edit deployment target\n              </Text>\n            </Box>\n          }\n          placement=\"left\"\n        >\n          <Button fontSize={1} icon={EditIcon} mode=\"bleed\" onClick={() => onDialogEdit(item)} />\n        </Tooltip>\n      </Flex>\n\n      {/* Content */}\n      <Deployments deploymentTarget={deploymentTarget} />\n    </Box>\n  )\n}\n\nexport default DeploymentTarget\n","import {Stack} from '@sanity/ui'\n\nimport {type Sanity} from '../../types'\nimport DeploymentTarget from '../DeploymentTarget'\n\ntype Props = {\n  items: Sanity.DeploymentTarget[]\n  onDialogEdit: (deploymentTarget: Sanity.DeploymentTarget) => void\n}\n\nconst DeploymentTargets = (props: Props) => {\n  const {items, onDialogEdit} = props\n\n  return (\n    <Stack gap={5}>\n      {items?.map((item) => (\n        <DeploymentTarget item={item} key={item._id} onDialogEdit={onDialogEdit} />\n      ))}\n    </Stack>\n  )\n}\n\nexport default DeploymentTargets\n","import {uuid} from '@sanity/uuid'\nimport type {SanityClient, SanityDocument} from 'sanity'\nimport {assertEvent, assign, fromPromise, setup} from 'xstate'\n\nimport {DEPLOYMENT_TARGET_DOCUMENT_TYPE} from '../constants'\nimport type {Sanity} from '../types'\n\n// Named locally so dts emit does not reach into `@sanity/client` (TS2883).\ntype DeleteMutationResult = {\n  transactionId: string\n  documentIds: string[]\n  results: {id: string; operation: string}[]\n}\n\ntype Context = {\n  client: SanityClient\n  document?: Sanity.DeploymentTarget\n  id?: string\n  formData?: Record<string, any>\n  message: string\n}\n\ntype Event =\n  | {type: 'CREATE'; formData: Record<string, any>}\n  | {type: 'UPDATE'; id: string; formData: Record<string, any>}\n  | {type: 'DELETE'; id: string}\n\ninterface Input {\n  client: SanityClient\n}\n\nexport const formMachine = setup({\n  types: {} as {\n    children: {\n      createDocumentActor: 'create document'\n      updateDocumentActor: 'update document'\n      deleteDocumentActor: 'delete document'\n    }\n    context: Context\n    events: Event\n    input: Input\n    tags: 'busy'\n  },\n  actions: {\n    setId: assign({\n      id: ({event}) => {\n        assertEvent(event, ['UPDATE', 'DELETE'])\n        return event.id\n      },\n    }),\n    setFormData: assign({\n      formData: ({event}) => {\n        assertEvent(event, ['CREATE', 'UPDATE'])\n        return event.formData\n      },\n    }),\n    setMessage: assign({\n      message: ({event}) => {\n        if (\n          'data' in event &&\n          event.data &&\n          typeof event.data === 'object' &&\n          'details' in event.data &&\n          event.data.details &&\n          typeof event.data.details === 'object' &&\n          'description' in event.data.details\n        ) {\n          return event.data.details.description as string\n        }\n        return 'An error occurred'\n      },\n    }),\n    setDocument: assign({\n      document: ({event}) => {\n        // @ts-expect-error - fix typings later\n        return event.output\n      },\n    }),\n  },\n  actors: {\n    // Explicit return types keep the inferred machine type portable for\n    // declaration emit (TS2883), by referencing aliases imported from `sanity`\n    // instead of a deep `@sanity/client` path. `delete` returns a mutation\n    // result in client v8, not the deleted document.\n    'create document': fromPromise(\n      ({\n        input,\n      }: {\n        input: Required<Pick<Context, 'client' | 'formData'>>\n      }): Promise<SanityDocument> => {\n        return input.client.create({\n          _id: `vercel.${uuid()}`,\n          _type: DEPLOYMENT_TARGET_DOCUMENT_TYPE,\n          ...input.formData,\n        })\n      },\n    ),\n    'update document': fromPromise(\n      ({\n        input,\n      }: {\n        input: Required<Pick<Context, 'client' | 'id' | 'formData'>>\n      }): Promise<SanityDocument> => {\n        return input.client.patch(input.id).set(input.formData).commit()\n      },\n    ),\n    'delete document': fromPromise(\n      ({\n        input,\n      }: {\n        input: Required<Pick<Context, 'client' | 'id'>>\n      }): Promise<DeleteMutationResult> => {\n        return input.client.delete(input.id)\n      },\n    ),\n  },\n}).createMachine({\n  /** @xstate-layout N4IgpgJg5mDOIC5QAoC2BDAxgCwJYDswBKAOlwgBswBiAYQCUBRAQQBVGBtABgF1FQADgHtYuAC64h+fiAAeiAIwBmAGwkuGjQFYALAE4AHACYdWgwYA0IAJ6IjKgOwkdXFUYVa9h-Ua5KAvv5WaFh4hKTkVNQAqgAKACJsnLwywqISUjLyCMpqmtr6xqbmVrYIBgokWvlGWkpaCgZeKoHBGDgExGSUNPGMADKM7Nx8SCBp4pLSY9m56vm6hiZmljaIOipqdXpcDk1aWiYqBlqtICEd4SSYAE5g6BL4UNQQUmBk+ABuQgDW77f3MRgeJCTAAV1QYHwYmYmDEQhuI1SIkmmRmiGOShIDiUOh0SiaCgUegcDj0pTsjhI5iMewUpPsTSMZwuYS6AIeBGeYBuNwRJAEFAeADMEahrncHsDQRCoTC4QikWMJhlpqBspjsbj8YTiaTyWsEKouNT6noiX5zUpiQEgud2mzSGCBBBOU8Xm8Pt8-iRna6gSDwZDobD4YiUsqUaqshiDFicXiCea9WSKeVKiSVIclEYlIY-BUWQ7Ok6XW7ubz+YKRWLfWWAzLg-Kw0rBFGpjGEJqEzrkyTU4b6ToSHojHos7VXEc6kXQiWSBAwFRHs9XoQvb93ovl9Kg3LQ4qI230h30V241rE7r+wayro1A4dO4VHotA5fPTTnbWfPt2AV9QPJ8jcApCmIoo3OKf4NnuIYKuGozHqiapyLG8bakmRI3mmpjxk0XAuEoXAHI+DgtGc+BCIu8BjD+4TIieaLqogAC0Khpmxs6XF0kRgAxyGdk+aYKLSVR7Fweg6A4IkGFwChcY6EqAly-HRmeY7DnSY5GHGL4qFwRhpjpJpmriDjVMRLgGAp84ckCECqaezEIHoObUuZuwKH4xGPgoRnmCQpmOAcqhmPJ37Flcfrlo5TGoQgY4mgYHkeAS+iqH5hqSc4dSuCo+I6SoSjvjZUX1pAsUodkrlGO51TSd5b46JlZRebVuG7IcjRmA05FtHOVzQSpkaMVVdivs4CibHGxg6biSg4ZsJD2AccaFEVGwOKVXTQRVI0CWeNV1Z5jW+WmujDj4HjmMRnhEttpBAQilWdkdyX1V5RFNS1iAEpU1pHER9JWjogSBEAA */\n  context: ({input}) => ({\n    client: input.client,\n    formData: {},\n    message: '',\n  }),\n  initial: 'idle',\n  states: {\n    idle: {\n      on: {\n        CREATE: {\n          actions: ['setFormData'],\n          target: 'creating',\n        },\n        UPDATE: {\n          actions: ['setId', 'setFormData'],\n          target: 'updating',\n        },\n        DELETE: {\n          actions: 'setId',\n          target: 'deleting',\n        },\n      },\n    },\n    creating: {\n      tags: ['busy'],\n      invoke: {\n        src: 'create document',\n        id: 'createDocumentActor',\n        input: ({context}) => ({client: context.client, formData: context.formData!}),\n        onDone: {actions: 'setDocument', target: 'created'},\n        onError: {actions: 'setMessage', target: 'error'},\n      },\n    },\n    created: {type: 'final'},\n    updating: {\n      tags: ['busy'],\n      invoke: {\n        src: 'update document',\n        id: 'updateDocumentActor',\n        input: ({context}) => ({\n          client: context.client,\n          id: context.id!,\n          formData: context.formData!,\n        }),\n        onDone: {actions: 'setDocument', target: 'updated'},\n        onError: {actions: 'setMessage', target: 'error'},\n      },\n    },\n    updated: {type: 'final'},\n    deleting: {\n      tags: ['busy'],\n      invoke: {\n        src: 'delete document',\n        id: 'deleteDocumentActor',\n        input: ({context}) => ({client: context.client, id: context.id!}),\n        onDone: {target: 'deleted'},\n        onError: {actions: 'setMessage', target: 'error'},\n      },\n    },\n    deleted: {type: 'final'},\n    error: {type: 'final'},\n  },\n})\n","// Recursively sanitize form data:\n// - convert empty strings, undefined values and empty arrays to null (to correctly unset / delete fields)\n// - trim whitespace on string fields\n\ntype FormData = Record<string, any>\n\nconst sanitizeFormData = (formData: FormData): FormData => {\n  return Object.keys(formData).reduce((acc: FormData, key) => {\n    const val = formData[key]\n\n    // TODO: refactor\n    if (typeof val === 'object' && val !== null && val.constructor !== Array) {\n      acc[key] = sanitizeFormData(val)\n    } else if (val === '' || typeof val === 'undefined' || val?.length === 0) {\n      acc[key] = null\n    } else if (typeof val === 'string' && val) {\n      acc[key] = formData[key].trim()\n    } else {\n      acc[key] = formData[key]\n    }\n\n    return acc\n  }, {})\n}\n\nexport default sanitizeFormData\n","import {red} from '@sanity/color'\nimport {ErrorOutlineIcon} from '@sanity/icons/ErrorOutline'\nimport {Box, Inline, Text} from '@sanity/ui'\nimport {Tooltip} from '@sanity/ui/tooltip'\nimport type {FC} from 'react'\nimport {type FieldError} from 'react-hook-form'\n\ntype Props = {\n  description?: string\n  error?: FieldError\n  label: string\n  name: string\n}\n\nconst errorIconStyle = {color: red[500].hex}\n\nconst FormFieldInputLabel: FC<Props> = (props: Props) => {\n  const {description, error, label, name} = props\n\n  return (\n    <Box marginBottom={3}>\n      {/* Label */}\n      <Inline gap={2}>\n        <Text as=\"label\" htmlFor={name} size={1} weight=\"semibold\">\n          {label}\n        </Text>\n\n        {/* Error icon + tooltip */}\n        {error && (\n          <Text size={1}>\n            <Tooltip\n              content={\n                <Box padding={2}>\n                  <Text muted size={1}>\n                    <ErrorOutlineIcon style={{...errorIconStyle, marginRight: '0.1em'}} />\n                    {error.message}\n                  </Text>\n                </Box>\n              }\n              fallbackPlacements={['top', 'left']}\n              placement=\"right\"\n              portal\n            >\n              <ErrorOutlineIcon style={errorIconStyle} />\n            </Tooltip>\n          </Text>\n        )}\n      </Inline>\n\n      {/* Description */}\n      {description && (\n        <Box marginY={3}>\n          <Text as=\"p\" muted size={1}>\n            {description}\n          </Text>\n        </Box>\n      )}\n    </Box>\n  )\n}\n\nexport default FormFieldInputLabel\n","import {Box, TextInput} from '@sanity/ui'\nimport {type ChangeEventHandler, type FocusEventHandler, type Ref} from 'react'\nimport {type FieldError} from 'react-hook-form'\n\nimport FormFieldInputLabel from '../FormFieldInputLabel'\n\ntype Props = {\n  description?: string\n  disabled?: boolean\n  error?: FieldError\n  label: string\n  name: string\n  placeholder?: string\n  value?: string\n  onChange?: ChangeEventHandler<HTMLInputElement>\n  onBlur?: FocusEventHandler<HTMLInputElement>\n  ref?: Ref<HTMLInputElement>\n}\n\nconst FormFieldInputText = (props: Props) => {\n  const {description, disabled, error, label, name, placeholder, value, onChange, onBlur, ref} =\n    props\n\n  return (\n    <Box>\n      {/* Label */}\n      <FormFieldInputLabel description={description} error={error} label={label} name={name} />\n      {/* Input */}\n      <TextInput\n        autoComplete=\"off\"\n        autoFocus\n        defaultValue={value}\n        disabled={disabled}\n        id={name}\n        name={name}\n        placeholder={placeholder}\n        onChange={onChange}\n        onBlur={onBlur}\n        ref={ref}\n      />\n    </Box>\n  )\n}\n\nexport default FormFieldInputText\n","import {yupResolver} from '@hookform/resolvers/yup'\nimport {Box, Button, Dialog, Flex, Stack} from '@sanity/ui'\nimport {useToast} from '@sanity/ui/toast'\nimport {useActor} from '@xstate/react'\nimport {type FC, useEffect} from 'react'\nimport {useForm} from 'react-hook-form'\nimport {toPromise} from 'xstate'\nimport * as yup from 'yup'\n\nimport {useSanityClient} from '../../client'\nimport {Z_INDEX_DIALOG} from '../../constants'\nimport {formMachine} from '../../machines/form'\nimport {type Sanity} from '../../types'\nimport sanitizeFormData from '../../utils/sanitizeFormData'\nimport FormFieldInputText from '../FormFieldInputText'\n\ntype Props = {\n  deploymentTarget?: Sanity.DeploymentTarget\n  onClose: () => void\n  onCreate?: (deploymentTarget: Sanity.DeploymentTarget) => void\n  onDelete?: (id: string) => void\n  onUpdate?: (deploymentTarget: Sanity.DeploymentTarget) => void\n}\n\ntype FormData = yup.InferType<typeof formSchema>\n\nconst formSchema = yup.object().shape({\n  deployHook: yup.string().url('Deploy hook must be a valid URL'),\n  deployLimit: yup\n    .number()\n    .positive()\n    .integer()\n    .min(1, 'Deploy limit must no less than 1')\n    .max(15, 'Deploy limit must no higher than 15')\n    .typeError('Deploy limit must be a number')\n    .required('Deploy limit must be a positive integer between 1 and 15'),\n  name: yup.string().required('Name cannot be empty'),\n  projectId: yup.string().required('Vercel Project ID cannot be empty'),\n  teamId: yup.string(),\n  token: yup.string().required('Vercel Account Token cannot be empty'),\n})\n\nconst DialogForm: FC<Props> = (props: Props) => {\n  const {deploymentTarget, onClose, onCreate, onDelete, onUpdate} = props\n  const client = useSanityClient()\n  const toast = useToast()\n\n  const [formState, formStateTransition, formStateActorRef] = useActor(formMachine, {\n    input: {client},\n  })\n\n  const formUpdating = formState.hasTag('busy')\n\n  // react-hook-form v7\n  const {\n    formState: {errors, isDirty, isValid},\n    handleSubmit,\n    register,\n  } = useForm<FormData>({\n    // @ts-expect-error - fix typings later\n    defaultValues: {\n      deployHook: deploymentTarget?.deployHook || '',\n      deployLimit: deploymentTarget?.deployLimit || 5,\n      name: deploymentTarget?.name || '',\n      projectId: deploymentTarget?.projectId || '',\n      teamId: deploymentTarget?.teamId || '',\n      token: deploymentTarget?.token || '',\n    },\n    mode: 'onChange',\n    resolver: yupResolver(formSchema),\n  })\n\n  /**\n   * Handle errors and reaching the done state\n   */\n  useEffect(() => {\n    if (formState.matches('error')) {\n      toast.push({\n        status: 'error',\n        title: formState.context.message || 'An error occurred',\n      })\n    }\n    /**\n     * If the machine is done it means it reached updated, created, deleted or error state.\n     * We don't care which one, we just want to close the dialog\n     */\n    if (formState.status === 'done') {\n      onClose()\n    }\n  }, [formState, onClose, toast])\n\n  // Callbacks\n  // - submit react-hook-form\n  const onSubmit = async (formData: FormData) => {\n    const sanitizedFormData = sanitizeFormData(formData)\n    if (deploymentTarget) {\n      formStateTransition({type: 'UPDATE', id: deploymentTarget._id, formData: sanitizedFormData})\n    } else {\n      formStateTransition({type: 'CREATE', formData: sanitizedFormData})\n    }\n    await toPromise(formStateActorRef)\n    const snapshot = formStateActorRef.getSnapshot()\n    const {document} = snapshot.context\n    if (!document) return\n    if (snapshot.matches('created')) {\n      onCreate?.(document)\n    } else if (snapshot.matches('updated')) {\n      onUpdate?.(document)\n    }\n  }\n\n  const handleDelete = async () => {\n    if (!deploymentTarget) {\n      return\n    }\n    const id = deploymentTarget._id\n    formStateTransition({type: 'DELETE', id})\n    await toPromise(formStateActorRef)\n    if (formStateActorRef.getSnapshot().matches('deleted')) {\n      onDelete?.(id)\n    }\n  }\n\n  return (\n    <Dialog\n      footer={\n        <Box padding={3}>\n          <Flex justify={deploymentTarget ? 'space-between' : 'flex-end'}>\n            {/* Delete button */}\n            {deploymentTarget && (\n              <Button\n                loading={formState.matches('deleting')}\n                disabled={formUpdating}\n                fontSize={1}\n                mode=\"bleed\"\n                onClick={handleDelete}\n                text=\"Delete\"\n                tone=\"critical\"\n              />\n            )}\n\n            {/* Submit button */}\n            <Button\n              loading={formState.matches('creating') || formState.matches('updating')}\n              disabled={!isDirty || !isValid}\n              fontSize={1}\n              // @ts-expect-error - yup 0.32 schema types do not line up with @hookform/resolvers, fix typings later\n              onClick={handleSubmit(onSubmit)}\n              text={deploymentTarget ? 'Update and close' : 'Create'}\n              tone=\"primary\"\n            />\n          </Flex>\n        </Box>\n      }\n      header={`${deploymentTarget ? 'Edit' : 'Create'} deployment target`}\n      id=\"create\"\n      onClose={onClose}\n      width={1}\n      zOffset={Z_INDEX_DIALOG}\n    >\n      {/* We reverse direction to ensure that inline links dont autofocus before other form elements */}\n      <Box\n        as=\"form\"\n        padding={4}\n        // @ts-expect-error - yup 0.32 schema types do not line up with @hookform/resolvers, fix typings later\n        onSubmit={handleSubmit(onSubmit)}\n      >\n        {/* Hidden button to enable enter key submissions */}\n        <button aria-label=\"Submit\" style={{display: 'none'}} tabIndex={-1} type=\"submit\" />\n\n        {/* Form fields */}\n        <Stack gap={5}>\n          {/* Title */}\n          <FormFieldInputText\n            disabled={formUpdating}\n            description=\"Name displayed in this plugin (e.g. production, staging)\"\n            error={errors?.name}\n            label=\"Name\"\n            // @ts-expect-error - fix typings later\n            {...register('name')}\n          />\n\n          <FormFieldInputText\n            disabled={formUpdating}\n            error={errors?.token}\n            label=\"Vercel Account Token\"\n            // @ts-expect-error - fix typings later\n            {...register('token')}\n          />\n\n          <FormFieldInputText\n            disabled={formUpdating}\n            error={errors?.projectId}\n            label=\"Vercel Project ID\"\n            // @ts-expect-error - fix typings later\n            {...register('projectId')}\n          />\n\n          <FormFieldInputText\n            description=\"Required only if your project is owned by a team account\"\n            disabled={formUpdating}\n            error={errors?.teamId}\n            label=\"Vercel Team ID (optional)\"\n            // @ts-expect-error - fix typings later\n            {...register('teamId')}\n          />\n\n          <FormFieldInputText\n            description=\"Enter a valid deploy hook URL to enable manual deploys\"\n            disabled={formUpdating}\n            error={errors?.deployHook}\n            label=\"Vercel Deploy Hook (optional)\"\n            // @ts-expect-error - fix typings later\n            {...register('deployHook')}\n          />\n\n          <FormFieldInputText\n            disabled={formUpdating}\n            error={errors?.deployLimit}\n            label=\"Number of deploys to display\"\n            // @ts-expect-error - fix typings later\n            {...register('deployLimit', {valueAsNumber: true})}\n          />\n        </Stack>\n      </Box>\n    </Dialog>\n  )\n}\n\nexport default DialogForm\n","import type {SanityClient} from 'sanity'\nimport {assign, setup, fromPromise, assertEvent} from 'xstate'\n\nimport {DEPLOYMENT_TARGET_DOCUMENT_TYPE} from '../constants'\nimport {type Sanity} from '../types'\n\ntype Context = {\n  client: SanityClient\n  results: Sanity.DeploymentTarget[] // TODO: type correctly\n}\n\ntype Event =\n  | {type: 'CLOSE'}\n  | {type: 'CREATE'; deploymentTarget: Sanity.DeploymentTarget}\n  | {type: 'DELETE'; id: string}\n  | {type: 'FETCH'}\n  | {type: 'UPDATE'; deploymentTarget: Sanity.DeploymentTarget}\n\ninterface Input {\n  client: SanityClient\n}\n\nconst sortByTargetName = (items: Sanity.DeploymentTarget[]) => {\n  return items.sort((a, b) => {\n    if (a.name > b.name) {\n      return 1\n    }\n    if (a.name < b.name) {\n      return -1\n    }\n    return 0\n  })\n}\n\nexport const deploymentTargetListMachine = setup({\n  types: {} as {\n    children: {fetchData: 'fetch data'}\n    context: Context\n    events: Event\n    input: Input\n  },\n  actions: {\n    targetCreate: assign({\n      results: ({context, event}) => {\n        assertEvent(event, 'CREATE')\n        return sortByTargetName([...context.results, event.deploymentTarget])\n      },\n    }),\n    targetDelete: assign({\n      results: ({context, event}) => {\n        assertEvent(event, 'DELETE')\n        return context.results.filter((target) => target._id !== event.id)\n      },\n    }),\n    targetUpdate: assign({\n      results: ({context, event}) => {\n        assertEvent(event, 'UPDATE')\n        const {deploymentTarget} = event\n        const index = context.results.findIndex((target) => target._id === deploymentTarget._id)\n        const updatedResults = Object.assign([], context.results, {\n          [index]: deploymentTarget,\n        })\n        return sortByTargetName(updatedResults)\n      },\n    }),\n  },\n  guards: {\n    hasData: ({context}) => {\n      return context?.results?.length > 0\n    },\n    hasNoData: ({context}) => {\n      return context?.results?.length === 0\n    },\n  },\n  actors: {\n    'fetch data': fromPromise(\n      ({input, signal}: {input: {client: SanityClient}; signal: AbortSignal}) => {\n        return input.client\n          .fetch<Sanity.DeploymentTarget[]>(\n            '*[_type == $type] | order(name asc)',\n            {\n              type: DEPLOYMENT_TARGET_DOCUMENT_TYPE,\n            },\n            {signal},\n          )\n          .catch((error) => {\n            if (error instanceof Error && error.name === 'AbortError') {\n              return []\n            }\n            console.error('Failed to fetch deployment targets', error)\n            throw error\n          })\n      },\n    ),\n  },\n}).createMachine({\n  /** @xstate-layout N4IgpgJg5mDOIC5QAoC2BDAxgCwJYDswBKAOgAcx8ICoBiCAe0JIIDcGBrMEgMzABccAEXT90AbQAMAXUSgyDWLn64mckAA9EAZkkBOEgHYAjAA5DAFgBsFgEwnJAVkMAaEAE9Ep4yUeT-klbGesbaoYaGAL6RbmhYeISkFFQ0tGAATukM6eQANqI82ai8AsKiEjLqCkoqakiaOvpGZpY29sZOrh6IxpYkFo5h2oaOpnqOxraSFtGxGDgExCTpYOgQ7rQAwgBKAKIAggAqu1Ky9dXKqvjqWggWHSS9eoaS9ibao6aObp4IVh8kL56OzGII2PT-WYgOILRLLVbrWhCXYAGV2x1OVUUlzqoFu90kRm8tlM2gsL1eJJ+iEGBj0gVsFm0YWmVkctihMISSxWaw2AFUAApCI4nSrnbG1a71fGSUz9WzBezTFWvb7dO5MkjjMITZykwxjTnzbmkXnrEgAV3wHHwDAA7vhaJiJTUrjces9fFZGc9TLYrGqA9SEM9CcT7sznH5HHpjfFFmaEe4rTa7Y7ncYzvJJe6ZZ7DN7fYaA0GrCHvD4xs4S+yPnGYtCTYn4XySPblNgRGJneKc27cQ0EI4BiQ2T77noAzXyxrTIESGFGd4rP9DONTPHYTzk+3OwxLfxu+he9mQBcpR7h6Px4ylWyIrPfl9bIvJhZJIYA-7zFZoo27QgOB1C5RMsQHaU8UQABaYIQ2gv9G1AuFkmofAoHAnFIKHOwQz0bRtUMcd-j8WwpnuLdTVbdZMMvfMEFsPQQxMeViQmZkLC+f0oiQ5s4XNFNrVtB1sIvPMoIQCIK1BIsmXXWxtFJcZKJbAS934Ltylo8ShysfDHl9PRxjlekrC6Z9BhIBk5MkXpzFBFT+N3DsNIPI8tNdLCr20L0Wmscw5V0e5pMJYwBiI8kwrDRC5gTOEeHQXBckgbTB1uZwQw6RwrEBd9bEcQZYzsRDoiAA */\n  context: ({input}) => ({\n    client: input.client,\n    results: [],\n  }),\n  initial: 'pending',\n  states: {\n    pending: {\n      invoke: {\n        src: 'fetch data',\n        id: 'fetchData',\n        input: ({context}) => ({client: context.client}),\n        onDone: {\n          actions: assign({results: ({event}) => event.output}),\n          target: 'ready',\n        },\n        onError: {\n          target: 'failed',\n        },\n      },\n    },\n    ready: {\n      initial: 'unknown',\n      on: {\n        CREATE: {\n          actions: 'targetCreate',\n        },\n        DELETE: {\n          actions: 'targetDelete',\n        },\n        UPDATE: {\n          actions: 'targetUpdate',\n        },\n      },\n      states: {\n        unknown: {\n          always: [\n            {target: 'withData', guard: 'hasData'},\n            {target: 'withoutData', guard: 'hasNoData'},\n          ],\n        },\n        withData: {\n          always: [{target: 'withoutData', guard: 'hasNoData'}],\n        },\n        withoutData: {\n          always: [{target: 'withData', guard: 'hasData'}],\n        },\n      },\n    },\n    failed: {\n      type: 'final',\n    },\n  },\n})\n","import {assertEvent, assign, setup} from 'xstate'\n\nimport {type Sanity} from '../types'\n\ntype Context = {\n  editDeploymentTarget?: Sanity.DeploymentTarget\n}\n\ntype Event =\n  | {type: 'CREATE'}\n  | {type: 'CLOSE'}\n  | {type: 'EDIT'; deploymentTarget: Sanity.DeploymentTarget}\n\nexport const dialogMachine = setup({\n  types: {\n    context: {} as Context,\n    events: {} as Event,\n  },\n  actions: {\n    setEditDeploymentTarget: assign({\n      editDeploymentTarget: ({event}) => {\n        assertEvent(event, 'EDIT')\n        return event.deploymentTarget\n      },\n    }),\n  },\n}).createMachine({\n  /** @xstate-layout N4IgpgJg5mDOIC5QAoC2BDAxgCwJYDswBKAOlwgBswBiAYQCUBRAQQBVGBtABgF1FQADgHtYuAC64h+fiAAeiAEwKArCQCcANgAcAdmUbNOhVx0BGLQBoQAT0SmAzApJcXXexoAsW5fbWaFAL4BVmhYeISk5FTUjAAiAJKs3HxIIMKiElIy8ghKqpq6+obGZpY2ivb2zq4e5moeXKZc3kEhGDgExCSQ4nQAMgDyAMqcvDLp4pLSqTn2DSQefn7uyq5aWvZWtgjmTqsuvnU6XMoK9q0goR0RJJgATmDoYjS0gyPJ4yKTWTOIc1wLJZqFZrDZbRBaUwkfZuew6SFcepuILBED4IQQOAyK7hYifDJTbKIAC0GnBCFJFxxnUilDA+O+01AOQ8CnJGxIGn29lMpjUxhcCh0VPauNIPTEDMyTLkiA8PhIxh5Cg8DS8pgM5L5UOalSMah0cP05hFYRptweT3pqQm0qJCHlVSVphVashmvKCDUAN17j0XNMqrUyhRASAA */\n  context: {\n    editDeploymentTarget: undefined,\n  },\n  initial: 'idle',\n  states: {\n    idle: {\n      entry: assign({\n        editDeploymentTarget: () => undefined,\n      }),\n      on: {\n        CREATE: {\n          target: 'create',\n        },\n        EDIT: {\n          actions: 'setEditDeploymentTarget',\n          target: 'edit',\n        },\n      },\n    },\n    edit: {\n      on: {\n        CLOSE: {\n          target: 'idle',\n        },\n      },\n    },\n    create: {\n      on: {\n        CLOSE: {\n          target: 'idle',\n        },\n      },\n    },\n  },\n})\n","import {AddIcon} from '@sanity/icons/Add'\nimport {Box, Button, Card, Flex, Text} from '@sanity/ui'\nimport {ToastProvider} from '@sanity/ui/toast'\nimport {Tooltip} from '@sanity/ui/tooltip'\nimport {QueryClient, QueryClientProvider} from '@tanstack/react-query'\nimport {useMachine} from '@xstate/react'\n\nimport {useSanityClient} from './client'\nimport DeploymentTargets from './components/DeploymentTargets'\nimport DialogForm from './components/DialogForm'\nimport StateDebug from './components/StateDebug'\nimport {Z_INDEX_TOAST_PROVIDER} from './constants'\nimport {deploymentTargetListMachine} from './machines/deploymentTargetList'\nimport {dialogMachine} from './machines/dialog'\nimport {type Sanity} from './types'\n\nconst queryClient = new QueryClient({\n  defaultOptions: {\n    queries: {\n      gcTime: 0,\n      staleTime: 0,\n    },\n  },\n})\n\nconst Widget = () => {\n  const client = useSanityClient()\n\n  const [deploymentTargetListState, deploymentTargetListStateTransition] = useMachine(\n    deploymentTargetListMachine,\n    {input: {client}},\n  )\n  const [dialogState, dialogStateTransition] = useMachine(dialogMachine)\n\n  // Callbacks\n  const handleDialogClose = () => {\n    dialogStateTransition({type: 'CLOSE'})\n  }\n  const handleDialogShowCreate = () => {\n    dialogStateTransition({type: 'CREATE'})\n  }\n  const handleDialogShowEdit = (deploymentTarget: Sanity.DeploymentTarget) => {\n    dialogStateTransition({type: 'EDIT', deploymentTarget})\n  }\n  const handleTargetCreate = (deploymentTarget: Sanity.DeploymentTarget) => {\n    deploymentTargetListStateTransition({type: 'CREATE', deploymentTarget})\n  }\n  const handleTargetDelete = (id: string) => {\n    deploymentTargetListStateTransition({type: 'DELETE', id})\n  }\n  const handleTargetUpdate = (deploymentTarget: Sanity.DeploymentTarget) => {\n    deploymentTargetListStateTransition({type: 'UPDATE', deploymentTarget})\n  }\n\n  return (\n    <ToastProvider zOffset={Z_INDEX_TOAST_PROVIDER}>\n      <QueryClientProvider client={queryClient}>\n        <Card radius={2} style={{overflow: 'hidden '}}>\n          {/* xstate debug */}\n          <StateDebug name=\"List\" state={deploymentTargetListState} />\n\n          {/* Header */}\n          <Flex align=\"center\" justify=\"space-between\" paddingX={3} paddingY={2}>\n            <Text size={5} weight=\"semibold\">\n              Vercel deployments\n            </Text>\n\n            <Tooltip\n              content={\n                <Box padding={2}>\n                  <Text muted size={1}>\n                    Create new deployment target\n                  </Text>\n                </Box>\n              }\n              placement=\"left\"\n            >\n              <Button fontSize={1} icon={AddIcon} onClick={handleDialogShowCreate} mode=\"bleed\" />\n            </Tooltip>\n          </Flex>\n\n          <Box>\n            {deploymentTargetListState.matches('pending') && (\n              <Box paddingX={3} paddingY={4}>\n                <Text>Loading...</Text>\n              </Box>\n            )}\n\n            {deploymentTargetListState.matches({ready: 'withoutData'}) && (\n              <Flex align=\"center\" gap={3} paddingX={3} paddingY={4}>\n                <Text>No deployment targets found.</Text>\n                <Button\n                  fontSize={1}\n                  mode=\"ghost\"\n                  onClick={handleDialogShowCreate}\n                  text=\"Create a new target\"\n                />\n              </Flex>\n            )}\n\n            {deploymentTargetListState.matches({ready: 'withData'}) && (\n              <DeploymentTargets\n                items={deploymentTargetListState.context.results}\n                onDialogEdit={handleDialogShowEdit}\n              />\n            )}\n\n            {deploymentTargetListState.matches('failed') && (\n              <Box paddingX={3} paddingY={4}>\n                <Text>\n                  Failed to retrieve deployment targets. Please check the developer console log for\n                  more information.\n                </Text>\n              </Box>\n            )}\n          </Box>\n        </Card>\n\n        {/* Dialogs */}\n        {dialogState.matches('create') && (\n          <DialogForm onClose={handleDialogClose} onCreate={handleTargetCreate} />\n        )}\n\n        {dialogState.matches('edit') && (\n          <DialogForm\n            deploymentTarget={dialogState.context.editDeploymentTarget}\n            onClose={handleDialogClose}\n            onDelete={handleTargetDelete}\n            onUpdate={handleTargetUpdate}\n          />\n        )}\n      </QueryClientProvider>\n    </ToastProvider>\n  )\n}\n\nexport default Widget\n","import '@sanity/ui/styles.css'\nimport type {DashboardWidget, LayoutConfig} from '@sanity/dashboard'\n\nimport Widget from './app'\n\nexport function vercelWidget(config: {layout?: LayoutConfig} = {}): DashboardWidget {\n  return {\n    name: 'vercel',\n    component: Widget,\n    layout: config.layout ?? {width: 'full'},\n  }\n}\n"],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"index.js","names":["{apiVersion: API_VERSION}","_c","fetcher(deploymentTarget)","deployLimit","hash(deploymentTarget)","[hash(deploymentTarget)]","() => fetchUrl(API_ENDPOINT_DEPLOYMENTS, deployParams)","{\n    queryKey: [hash(deploymentTarget)],\n    queryFn: () => fetchUrl(API_ENDPOINT_DEPLOYMENTS, deployParams),\n    enabled: options?.enabled ?? true,\n    refetchInterval: 20000, // ms\n    refetchIntervalInBackground: false,\n    refetchOnMount: true,\n    refetchOnReconnect: 'always',\n    refetchOnWindowFocus: false,\n    retry: false,\n  }","options?.enabled ?? true","[hash(deploymentTarget), 'aliases']","() => fetchUrl(API_ENDPOINT_ALIASES, aliasParams)","{\n    queryKey: [hash(deploymentTarget), 'aliases'],\n    queryFn: () => fetchUrl(API_ENDPOINT_ALIASES, aliasParams),\n    enabled: !!deploymentsData,\n    refetchOnMount: false,\n    refetchOnReconnect: false,\n    refetchOnWindowFocus: false,\n    retry: false,\n  }","!!deploymentsData","deploymentsData?.deployments?.map((val: Vercel.DeploymentWithAlias) => {\n      const alias = aliases.find((a) => a.deploymentId === val.uid)\n      return Object.assign(val, {alias: alias?.alias})\n    })","deployments","{\n    deployments: deploymentsWithAlias,\n    error: aliasesError || deploymentsError,\n    isFetching: aliasesIsFetching || deploymentsIsFetching,\n    isSuccess: aliasesIsSuccess && deploymentsIsSuccess,\n    refetch,\n  }","aliasesError || deploymentsError","aliasesIsFetching || deploymentsIsFetching","aliasesIsSuccess && deploymentsIsSuccess","_c","{border: color.border}","border","_c","{\n        backgroundColor: 'rgba(0, 0, 255, 0.9)',\n        borderRadius: '3px',\n        fontSize: 1,\n        fontWeight: 500,\n        lineHeight: 'body',\n        right: 0,\n        opacity: 0.75,\n        pointerEvents: 'none',\n        position: 'absolute',\n        textAlign: 'left',\n        top: 0,\n        zIndex: 9000,\n      }","<Text size={0}>Name: {name}</Text>","JSON.stringify(state.value)","value","<Text size={0}>state.value: {JSON.stringify(state.value)}</Text>","<Card\n      scheme=\"dark\"\n      style={{\n        backgroundColor: 'rgba(0, 0, 255, 0.9)',\n        borderRadius: '3px',\n        fontSize: 1,\n        fontWeight: 500,\n        lineHeight: 'body',\n        right: 0,\n        opacity: 0.75,\n        pointerEvents: 'none',\n        position: 'absolute',\n        textAlign: 'left',\n        top: 0,\n        zIndex: 9000,\n      }}\n    >\n      <Box padding={2}>\n        <Stack gap={2}>\n          <Text size={0}>Name: {name}</Text>\n          <Text size={0}>state.value: {JSON.stringify(state.value)}</Text>\n        </Stack>\n      </Box>\n    </Card>","_c","{\n    input: {deployHook},\n  }","deployState.matches('error')","deployState.matches('success')","() => {\n    deployStateTransition({type: 'DEPLOY'})\n  }","() => {\n    if (isError) {\n      toast.push({\n        closable: true,\n        description: `Unable to queue deploy for ${targetName}: ${deployState.context.error}`,\n        duration: 8000,\n        status: 'error',\n        title: WIDGET_NAME,\n      })\n    }\n\n    if (isSuccess) {\n      toast.push({\n        closable: true,\n        description: `Deploy queued for ${targetName}`,\n        duration: 8000,\n        status: 'success',\n        title: WIDGET_NAME,\n      })\n    }\n  }","[isError, isSuccess, toast, targetName, deployState.context.error]","error","() => {\n    const subscription = deployStateInterpreter.subscribe((state) => {\n      if (state.value === 'success') {\n        if (onDeploySuccess) {\n          onDeploySuccess()\n        }\n      }\n    })\n\n    return () => subscription.unsubscribe()\n  }","[deployStateInterpreter, onDeploySuccess]","{position: 'relative'}","<StateDebug name=\"Deploy\" state={deployState} />","<Button\n        disabled={deployState.context.disabled}\n        fontSize={1}\n        icon={UploadIcon}\n        mode=\"ghost\"\n        onClick={handleDeploy}\n        padding={3}\n        text={`${deployState.context.label} ${targetName}`}\n        tone=\"default\"\n      />","disabled","`${deployState.context.label} ${targetName}`","<Box padding={3} style={{position: 'relative'}}>\n      <StateDebug name=\"Deploy\" state={deployState} />\n\n      <Button\n        disabled={deployState.context.disabled}\n        fontSize={1}\n        icon={UploadIcon}\n        mode=\"ghost\"\n        onClick={handleDeploy}\n        padding={3}\n        text={`${deployState.context.label} ${targetName}`}\n        tone=\"default\"\n      />\n    </Box>","_c","{state}: Props","<Box\n    style={{\n      backgroundColor: VERCEL_STATUS_COLORS[state],\n      borderRadius: '20px',\n      height: '9px',\n      width: '9px',\n    }}\n  />","VERCEL_STATUS_COLORS[state]","_c","['none', 'none', 'none', 'table-cell']","['none', 'none', 'none', 'none', 'table-cell']","{\n          maxWidth: cellWidth,\n          position: 'relative',\n          textAlign: 'left',\n          width: cellWidth,\n        }","<Label size={0}>{children}</Label>","<Box\n        as=\"th\"\n        colSpan={colSpan}\n        // @ts-expect-error -- local `display` allows 'table-cell', which is not part of @sanity/ui's `BoxDisplay` union\n        display={display}\n        paddingX={3}\n        paddingY={2}\n        style={{\n          maxWidth: cellWidth,\n          position: 'relative',\n          textAlign: 'left',\n          width: cellWidth,\n        }}\n      >\n        <Label size={0}>{children}</Label>\n      </Box>","[2, 2, 3]","{\n        borderTop: `1px solid ${border}`,\n        maxWidth: cellWidth,\n        position: 'relative',\n        textAlign: 'left',\n        width: cellWidth,\n      }","`1px solid ${border}`","<Box\n      as=\"td\"\n      colSpan={colSpan}\n      // @ts-expect-error -- local `display` allows 'table-cell', which is not part of @sanity/ui's `BoxDisplay` union\n      display={display}\n      paddingX={3}\n      paddingY={[2, 2, 3]}\n      style={{\n        borderTop: `1px solid ${border}`,\n        maxWidth: cellWidth,\n        position: 'relative',\n        textAlign: 'left',\n        width: cellWidth,\n      }}\n    >\n      {children}\n    </Box>","_c","new Date(deployment.created)","created","useMemo(() => new Date(deployment.created), [deployment.created])","['block', 'block', 'block', 'block', 'none']","{flexShrink: 0}","<Box\n            display={['block', 'block', 'block', 'block', 'none']}\n            marginRight={3}\n            style={{flexShrink: 0}}\n          >\n            <StatusDot state={deployment.state} />\n          </Box>","state","targetUrl ? (\n            <>\n              {/* Alias icon */}\n              {deployment.alias && <LinkIcon />}\n\n              <Box marginLeft={deployment.alias ? 1 : 0}>\n                <Text\n                  muted={!(deployment.state === 'READY')}\n                  size={1}\n                  style={{\n                    textDecoration:\n                      deployment.state === 'CANCELED' || deployment.state === 'ERROR'\n                        ? 'line-through'\n                        : 'normal',\n                  }}\n                  textOverflow=\"ellipsis\"\n                >\n                  {deployment.state === 'READY' ? (\n                    <a href={`https://${targetUrl}`} rel=\"noopener noreferrer\" target=\"_blank\">\n                      {targetUrl}\n                    </a>\n                  ) : (\n                    targetUrl\n                  )}\n                </Text>\n              </Box>\n            </>\n          ) : (\n            <Text size={1}>Uploading...</Text>\n          )","alias","<TableCell>\n        <Flex align=\"center\">\n          <Box\n            display={['block', 'block', 'block', 'block', 'none']}\n            marginRight={3}\n            style={{flexShrink: 0}}\n          >\n            <StatusDot state={deployment.state} />\n          </Box>\n\n          {targetUrl ? (\n            <>\n              {/* Alias icon */}\n              {deployment.alias && <LinkIcon />}\n\n              <Box marginLeft={deployment.alias ? 1 : 0}>\n                <Text\n                  muted={!(deployment.state === 'READY')}\n                  size={1}\n                  style={{\n                    textDecoration:\n                      deployment.state === 'CANCELED' || deployment.state === 'ERROR'\n                        ? 'line-through'\n                        : 'normal',\n                  }}\n                  textOverflow=\"ellipsis\"\n                >\n                  {deployment.state === 'READY' ? (\n                    <a href={`https://${targetUrl}`} rel=\"noopener noreferrer\" target=\"_blank\">\n                      {targetUrl}\n                    </a>\n                  ) : (\n                    targetUrl\n                  )}\n                </Text>\n              </Box>\n            </>\n          ) : (\n            <Text size={1}>Uploading...</Text>\n          )}\n        </Flex>\n      </TableCell>","<StatusDot state={deployment.state} />","deployment.state\n                .trim()\n                .toLowerCase()\n                .replace(/^[a-z]/i, (t) => t.toUpperCase())","/^[a-z]/i","(t) => t.toUpperCase()","<Box marginLeft={2}>\n            <Text size={1}>\n              {deployment.state\n                .trim()\n                .toLowerCase()\n                .replace(/^[a-z]/i, (t) => t.toUpperCase())}\n            </Text>\n          </Box>","<TableCell variant=\"state\">\n        <Flex align=\"center\">\n          <StatusDot state={deployment.state} />\n          <Box marginLeft={2}>\n            <Text size={1}>\n              {deployment.state\n                .trim()\n                .toLowerCase()\n                .replace(/^[a-z]/i, (t) => t.toUpperCase())}\n            </Text>\n          </Box>\n        </Flex>\n      </TableCell>","<Text size={1} textOverflow=\"ellipsis\">\n            {commitRef}\n          </Text>","commitMessage && (\n            <Text muted size={1} textOverflow=\"ellipsis\">\n              {commitMessage}\n            </Text>\n          )","<TableCell variant=\"branch\">\n        <Stack gap={2}>\n          <Text size={1} textOverflow=\"ellipsis\">\n            {commitRef}\n          </Text>\n          {commitMessage && (\n            <Text muted size={1} textOverflow=\"ellipsis\">\n              {commitMessage}\n            </Text>\n          )}\n        </Stack>\n      </TableCell>","<TableCell variant=\"age\">\n        <Flex align=\"center\">\n          <Text size={1}>\n            <ReactTimeAgo date={date} locale=\"en-US\" timeStyle=\"mini\" />\n          </Text>\n        </Flex>\n      </TableCell>","{\n              borderRadius: '20px',\n              height: '20px',\n              width: '20px',\n            }","<TableCell variant=\"creator\">\n        <Flex align=\"center\" justify=\"center\">\n          <img\n            alt={deployment?.creator?.username || 'Deployment creator avatar'}\n            draggable={false}\n            src={`https://vercel.com/api/www/avatar/${deployment?.creator?.uid}?&s=48`}\n            style={{\n              borderRadius: '20px',\n              height: '20px',\n              width: '20px',\n            }}\n          />\n        </Flex>\n      </TableCell>","deployment?.creator?.username || 'Deployment creator avatar'","`https://vercel.com/api/www/avatar/${deployment?.creator?.uid}?&s=48`","<tr>\n      {/* Deployment - alias or regular deployment URL */}\n      <TableCell>\n        <Flex align=\"center\">\n          <Box\n            display={['block', 'block', 'block', 'block', 'none']}\n            marginRight={3}\n            style={{flexShrink: 0}}\n          >\n            <StatusDot state={deployment.state} />\n          </Box>\n\n          {targetUrl ? (\n            <>\n              {/* Alias icon */}\n              {deployment.alias && <LinkIcon />}\n\n              <Box marginLeft={deployment.alias ? 1 : 0}>\n                <Text\n                  muted={!(deployment.state === 'READY')}\n                  size={1}\n                  style={{\n                    textDecoration:\n                      deployment.state === 'CANCELED' || deployment.state === 'ERROR'\n                        ? 'line-through'\n                        : 'normal',\n                  }}\n                  textOverflow=\"ellipsis\"\n                >\n                  {deployment.state === 'READY' ? (\n                    <a href={`https://${targetUrl}`} rel=\"noopener noreferrer\" target=\"_blank\">\n                      {targetUrl}\n                    </a>\n                  ) : (\n                    targetUrl\n                  )}\n                </Text>\n              </Box>\n            </>\n          ) : (\n            <Text size={1}>Uploading...</Text>\n          )}\n        </Flex>\n      </TableCell>\n\n      {/* State */}\n      <TableCell variant=\"state\">\n        <Flex align=\"center\">\n          <StatusDot state={deployment.state} />\n          <Box marginLeft={2}>\n            <Text size={1}>\n              {deployment.state\n                .trim()\n                .toLowerCase()\n                .replace(/^[a-z]/i, (t) => t.toUpperCase())}\n            </Text>\n          </Box>\n        </Flex>\n      </TableCell>\n\n      {/* Branch */}\n      <TableCell variant=\"branch\">\n        <Stack gap={2}>\n          <Text size={1} textOverflow=\"ellipsis\">\n            {commitRef}\n          </Text>\n          {commitMessage && (\n            <Text muted size={1} textOverflow=\"ellipsis\">\n              {commitMessage}\n            </Text>\n          )}\n        </Stack>\n      </TableCell>\n\n      {/* Age */}\n      <TableCell variant=\"age\">\n        <Flex align=\"center\">\n          <Text size={1}>\n            <ReactTimeAgo date={date} locale=\"en-US\" timeStyle=\"mini\" />\n          </Text>\n        </Flex>\n      </TableCell>\n\n      {/* Creator */}\n      <TableCell variant=\"creator\">\n        <Flex align=\"center\" justify=\"center\">\n          <img\n            alt={deployment?.creator?.username || 'Deployment creator avatar'}\n            draggable={false}\n            src={`https://vercel.com/api/www/avatar/${deployment?.creator?.uid}?&s=48`}\n            style={{\n              borderRadius: '20px',\n              height: '20px',\n              width: '20px',\n            }}\n          />\n        </Flex>\n      </TableCell>\n    </tr>","_c","_Fragment","_temp","<Box\n      style={{\n        backgroundColor: border,\n        borderRadius: '20px',\n        height: '20px',\n        userSelect: 'none',\n        width: '20px',\n      }}\n    />","_c","{\n        backgroundColor: border,\n        borderRadius: '3px',\n        userSelect: 'none',\n        width: '100%',\n      }","<Stack gap={2}>\n        {Array.from({length: rows}, (_, index) => (\n          <Text key={index} size={1}>\n            &nbsp;\n          </Text>\n        ))}\n      </Stack>","(_, index) => (\n          <Text key={index} size={1}>\n            &nbsp;\n          </Text>\n        )","<Box\n      style={{\n        backgroundColor: border,\n        borderRadius: '3px',\n        userSelect: 'none',\n        width: '100%',\n      }}\n    >\n      <Stack gap={2}>\n        {Array.from({length: rows}, (_, index) => (\n          <Text key={index} size={1}>\n            &nbsp;\n          </Text>\n        ))}\n      </Stack>\n    </Box>","_c","_temp","<TableCell>\n        <PlaceholderText rows={1} />\n      </TableCell>","<TableCell variant=\"state\">\n        <PlaceholderText rows={1} />\n      </TableCell>","<TableCell variant=\"branch\">\n        <PlaceholderText rows={2} />\n      </TableCell>","<TableCell variant=\"age\">\n        <PlaceholderText rows={1} />\n      </TableCell>","<tr>\n      {/* Deployment - alias or regular deployment URL */}\n      <TableCell>\n        <PlaceholderText rows={1} />\n      </TableCell>\n\n      {/* State */}\n      <TableCell variant=\"state\">\n        <PlaceholderText rows={1} />\n      </TableCell>\n\n      {/* Branch */}\n      <TableCell variant=\"branch\">\n        <PlaceholderText rows={2} />\n      </TableCell>\n\n      {/* Age */}\n      <TableCell variant=\"age\">\n        <PlaceholderText rows={1} />\n      </TableCell>\n\n      {/* Creator */}\n      <TableCell variant=\"creator\">\n        <Flex justify=\"center\">\n          <PlaceholderAvatar />\n        </Flex>\n      </TableCell>\n    </tr>","_c","refreshState.matches('error')","{\n    enabled: !refreshState.matches('error'),\n  }","!refreshState.matches('error')","() => {\n    if (refTimeout.current) {\n      clearTimeout(refTimeout.current)\n    }\n    refTimeout.current = setTimeout(() => {\n      void refetch({\n        cancelRefetch: true,\n        throwOnError: true,\n      })\n    }, 4000)\n  }","() => {\n    return () => {\n      if (refTimeout.current) {\n        clearTimeout(refTimeout.current)\n      }\n    }\n  }","[]","() => {\n    if (error) {\n      refreshStateTransition({type: 'ERROR'})\n    }\n\n    if (isFetching) {\n      refreshStateTransition({type: 'REFRESH'})\n    }\n\n    if (!isFetching && isSuccess) {\n      refreshStateTransition({type: 'REFRESHED'})\n    }\n  }","[error, isFetching, isSuccess, refreshStateTransition]","() => {\n    if (!refreshState.matches('refreshing')) {\n      refreshStateTransition({type: 'REFRESH'})\n    }\n  }","[deploymentTarget]","() => {\n    if (isError) {\n      toast.push({\n        closable: true,\n        description: `Unable to fetch deployments for ${deploymentTarget.name}`,\n        duration: 8000,\n        status: 'error',\n        title: WIDGET_NAME,\n      })\n    }\n  }","deploymentTarget.name","[deploymentTarget, isError]","{position: 'relative'}","<StateDebug name=\"Refresh\" state={refreshState} />","!refreshState.matches('error') && (\n        <>\n          <Box\n            as=\"table\"\n            style={{\n              borderBottom: `1px solid ${border}`,\n              borderCollapse: 'collapse',\n              display: 'table',\n              tableLayout: 'fixed',\n              width: '100%',\n            }}\n          >\n            <Box as=\"thead\" style={{display: 'table-header-group'}}>\n              <tr>\n                {/* Deployment */}\n                <TableCell header>Deployment</TableCell>\n\n                {/* State */}\n                <TableCell header variant=\"state\">\n                  State\n                </TableCell>\n\n                {/* Branch */}\n                <TableCell header variant=\"branch\">\n                  Branch\n                </TableCell>\n\n                {/* Age */}\n                <TableCell header variant=\"age\">\n                  Age\n                </TableCell>\n\n                {/* Creator */}\n                <TableCell header variant=\"creator\">\n                  Creator\n                </TableCell>\n              </tr>\n            </Box>\n\n            <Box as=\"tbody\" style={{display: 'table-row-group'}}>\n              {/* Placeholders */}\n              {!deployments &&\n                Array.from({length: deploymentTarget.deployLimit}, (_, index) => (\n                  <DeploymentPlaceholder key={index} />\n                ))}\n              {/* Deployments */}\n              {hasDeployments &&\n                deployments?.map((deployment) => (\n                  <Deployment deployment={deployment} key={deployment.uid} />\n                ))}\n            </Box>\n          </Box>\n\n          {/* No results */}\n          {hasFetched && !hasDeployments && (\n            <Box padding={3} style={{width: '100%'}}>\n              <Text muted size={1}>\n                No deployments found. Don't forget to specify a valid team ID if your project\n                belongs to a team.\n              </Text>\n            </Box>\n          )}\n        </>\n      )","deploymentTarget.deployLimit","(_, index) => (\n                  <DeploymentPlaceholder key={index} />\n                )","(deployment) => (\n                  <Deployment deployment={deployment} key={deployment.uid} />\n                )","refreshState.matches('error') && (\n        <Box padding={3}>\n          <Text muted size={1}>\n            Unable to fetch recent deployments. Please check your network and deployment settings.\n          </Text>\n        </Box>\n      )","!refreshState.matches('error') && deploymentTarget.deployHook && (\n        <Box>\n          <DeployButton\n            deployHook={deploymentTarget.deployHook}\n            onDeploySuccess={handleDeploySuccess}\n            targetName={deploymentTarget.name}\n          />\n        </Box>\n      )","deploymentTarget.deployHook","<Box marginTop={3} style={{position: 'relative'}}>\n      {/* xstate debug */}\n      <StateDebug name=\"Refresh\" state={refreshState} />\n\n      {!refreshState.matches('error') && (\n        <>\n          <Box\n            as=\"table\"\n            style={{\n              borderBottom: `1px solid ${border}`,\n              borderCollapse: 'collapse',\n              display: 'table',\n              tableLayout: 'fixed',\n              width: '100%',\n            }}\n          >\n            <Box as=\"thead\" style={{display: 'table-header-group'}}>\n              <tr>\n                {/* Deployment */}\n                <TableCell header>Deployment</TableCell>\n\n                {/* State */}\n                <TableCell header variant=\"state\">\n                  State\n                </TableCell>\n\n                {/* Branch */}\n                <TableCell header variant=\"branch\">\n                  Branch\n                </TableCell>\n\n                {/* Age */}\n                <TableCell header variant=\"age\">\n                  Age\n                </TableCell>\n\n                {/* Creator */}\n                <TableCell header variant=\"creator\">\n                  Creator\n                </TableCell>\n              </tr>\n            </Box>\n\n            <Box as=\"tbody\" style={{display: 'table-row-group'}}>\n              {/* Placeholders */}\n              {!deployments &&\n                Array.from({length: deploymentTarget.deployLimit}, (_, index) => (\n                  <DeploymentPlaceholder key={index} />\n                ))}\n              {/* Deployments */}\n              {hasDeployments &&\n                deployments?.map((deployment) => (\n                  <Deployment deployment={deployment} key={deployment.uid} />\n                ))}\n            </Box>\n          </Box>\n\n          {/* No results */}\n          {hasFetched && !hasDeployments && (\n            <Box padding={3} style={{width: '100%'}}>\n              <Text muted size={1}>\n                No deployments found. Don't forget to specify a valid team ID if your project\n                belongs to a team.\n              </Text>\n            </Box>\n          )}\n        </>\n      )}\n\n      {/* Error message */}\n      {refreshState.matches('error') && (\n        <Box padding={3}>\n          <Text muted size={1}>\n            Unable to fetch recent deployments. Please check your network and deployment settings.\n          </Text>\n        </Box>\n      )}\n\n      {/* Deploy button */}\n      {!refreshState.matches('error') && deploymentTarget.deployHook && (\n        <Box>\n          <DeployButton\n            deployHook={deploymentTarget.deployHook}\n            onDeploySuccess={handleDeploySuccess}\n            targetName={deploymentTarget.name}\n          />\n        </Box>\n      )}\n    </Box>","_c","_Fragment","{\n    deployHook: item.deployHook,\n    deployLimit: item.deployLimit,\n    name: item.name,\n    projectId: item.projectId,\n    teamId: item.teamId,\n    token: item.token,\n  }","deployHook","deployLimit","name","projectId","teamId","token","{position: 'relative'}","<Text size={2}>{item.name}</Text>","<Box padding={2}>\n              <Text muted size={1}>\n                Edit deployment target\n              </Text>\n            </Box>","<Tooltip\n          content={\n            <Box padding={2}>\n              <Text muted size={1}>\n                Edit deployment target\n              </Text>\n            </Box>\n          }\n          placement=\"left\"\n        >\n          <Button fontSize={1} icon={EditIcon} mode=\"bleed\" onClick={() => onDialogEdit(item)} />\n        </Tooltip>","<Flex align=\"center\" justify=\"space-between\" marginTop={2} paddingX={3}>\n        <Text size={2}>{item.name}</Text>\n\n        <Tooltip\n          content={\n            <Box padding={2}>\n              <Text muted size={1}>\n                Edit deployment target\n              </Text>\n            </Box>\n          }\n          placement=\"left\"\n        >\n          <Button fontSize={1} icon={EditIcon} mode=\"bleed\" onClick={() => onDialogEdit(item)} />\n        </Tooltip>\n      </Flex>","<Deployments deploymentTarget={deploymentTarget} />","<Box style={{position: 'relative'}}>\n      {/* Header */}\n      <Flex align=\"center\" justify=\"space-between\" marginTop={2} paddingX={3}>\n        <Text size={2}>{item.name}</Text>\n\n        <Tooltip\n          content={\n            <Box padding={2}>\n              <Text muted size={1}>\n                Edit deployment target\n              </Text>\n            </Box>\n          }\n          placement=\"left\"\n        >\n          <Button fontSize={1} icon={EditIcon} mode=\"bleed\" onClick={() => onDialogEdit(item)} />\n        </Tooltip>\n      </Flex>\n\n      {/* Content */}\n      <Deployments deploymentTarget={deploymentTarget} />\n    </Box>","_c","items?.map((item) => (\n        <DeploymentTarget item={item} key={item._id} onDialogEdit={onDialogEdit} />\n      ))","items?.map","<Stack gap={5}>\n      {items?.map((item) => (\n        <DeploymentTarget item={item} key={item._id} onDialogEdit={onDialogEdit} />\n      ))}\n    </Stack>","_c","<Text as=\"label\" htmlFor={name} size={1} weight=\"semibold\">\n          {label}\n        </Text>","error && (\n          <Text size={1}>\n            <Tooltip\n              content={\n                <Box padding={2}>\n                  <Text muted size={1}>\n                    <ErrorOutlineIcon style={{...errorIconStyle, marginRight: '0.1em'}} />\n                    {error.message}\n                  </Text>\n                </Box>\n              }\n              fallbackPlacements={['top', 'left']}\n              placement=\"right\"\n              portal\n            >\n              <ErrorOutlineIcon style={errorIconStyle} />\n            </Tooltip>\n          </Text>\n        )","<Inline gap={2}>\n        <Text as=\"label\" htmlFor={name} size={1} weight=\"semibold\">\n          {label}\n        </Text>\n\n        {/* Error icon + tooltip */}\n        {error && (\n          <Text size={1}>\n            <Tooltip\n              content={\n                <Box padding={2}>\n                  <Text muted size={1}>\n                    <ErrorOutlineIcon style={{...errorIconStyle, marginRight: '0.1em'}} />\n                    {error.message}\n                  </Text>\n                </Box>\n              }\n              fallbackPlacements={['top', 'left']}\n              placement=\"right\"\n              portal\n            >\n              <ErrorOutlineIcon style={errorIconStyle} />\n            </Tooltip>\n          </Text>\n        )}\n      </Inline>","description && (\n        <Box marginY={3}>\n          <Text as=\"p\" muted size={1}>\n            {description}\n          </Text>\n        </Box>\n      )","<Box marginBottom={3}>\n      {/* Label */}\n      <Inline gap={2}>\n        <Text as=\"label\" htmlFor={name} size={1} weight=\"semibold\">\n          {label}\n        </Text>\n\n        {/* Error icon + tooltip */}\n        {error && (\n          <Text size={1}>\n            <Tooltip\n              content={\n                <Box padding={2}>\n                  <Text muted size={1}>\n                    <ErrorOutlineIcon style={{...errorIconStyle, marginRight: '0.1em'}} />\n                    {error.message}\n                  </Text>\n                </Box>\n              }\n              fallbackPlacements={['top', 'left']}\n              placement=\"right\"\n              portal\n            >\n              <ErrorOutlineIcon style={errorIconStyle} />\n            </Tooltip>\n          </Text>\n        )}\n      </Inline>\n\n      {/* Description */}\n      {description && (\n        <Box marginY={3}>\n          <Text as=\"p\" muted size={1}>\n            {description}\n          </Text>\n        </Box>\n      )}\n    </Box>","_c","<FormFieldInputLabel description={description} error={error} label={label} name={name} />","<TextInput\n        autoComplete=\"off\"\n        autoFocus\n        defaultValue={value}\n        disabled={disabled}\n        id={name}\n        name={name}\n        placeholder={placeholder}\n        onChange={onChange}\n        onBlur={onBlur}\n        ref={ref}\n      />","<Box>\n      {/* Label */}\n      <FormFieldInputLabel description={description} error={error} label={label} name={name} />\n      {/* Input */}\n      <TextInput\n        autoComplete=\"off\"\n        autoFocus\n        defaultValue={value}\n        disabled={disabled}\n        id={name}\n        name={name}\n        placeholder={placeholder}\n        onChange={onChange}\n        onBlur={onBlur}\n        ref={ref}\n      />\n    </Box>","_c","{\n    input: {client},\n  }","formState.hasTag('busy')","{\n      deployHook: deploymentTarget?.deployHook || '',\n      deployLimit: deploymentTarget?.deployLimit || 5,\n      name: deploymentTarget?.name || '',\n      projectId: deploymentTarget?.projectId || '',\n      teamId: deploymentTarget?.teamId || '',\n      token: deploymentTarget?.token || '',\n    }","deploymentTarget?.deployHook || ''","deploymentTarget?.deployLimit || 5","deploymentTarget?.name || ''","deploymentTarget?.projectId || ''","deploymentTarget?.teamId || ''","deploymentTarget?.token || ''","yupResolver(formSchema)","{\n    // @ts-expect-error - fix typings later\n    defaultValues: {\n      deployHook: deploymentTarget?.deployHook || '',\n      deployLimit: deploymentTarget?.deployLimit || 5,\n      name: deploymentTarget?.name || '',\n      projectId: deploymentTarget?.projectId || '',\n      teamId: deploymentTarget?.teamId || '',\n      token: deploymentTarget?.token || '',\n    },\n    mode: 'onChange',\n    resolver: yupResolver(formSchema),\n  }","{errors, isDirty, isValid}","() => {\n    if (formState.matches('error')) {\n      toast.push({\n        status: 'error',\n        title: formState.context.message || 'An error occurred',\n      })\n    }\n    /**\n     * If the machine is done it means it reached updated, created, deleted or error state.\n     * We don't care which one, we just want to close the dialog\n     */\n    if (formState.status === 'done') {\n      onClose()\n    }\n  }","[formState, onClose, toast]","async (formData: FormData) => {\n    const sanitizedFormData = sanitizeFormData(formData)\n    if (deploymentTarget) {\n      formStateTransition({type: 'UPDATE', id: deploymentTarget._id, formData: sanitizedFormData})\n    } else {\n      formStateTransition({type: 'CREATE', formData: sanitizedFormData})\n    }\n    await toPromise(formStateActorRef)\n    const snapshot = formStateActorRef.getSnapshot()\n    const {document} = snapshot.context\n    if (!document) return\n    if (snapshot.matches('created')) {\n      onCreate?.(document)\n    } else if (snapshot.matches('updated')) {\n      onUpdate?.(document)\n    }\n  }","async () => {\n    if (!deploymentTarget) {\n      return\n    }\n    const id = deploymentTarget._id\n    formStateTransition({type: 'DELETE', id})\n    await toPromise(formStateActorRef)\n    if (formStateActorRef.getSnapshot().matches('deleted')) {\n      onDelete?.(id)\n    }\n  }","deploymentTarget && (\n              <Button\n                loading={formState.matches('deleting')}\n                disabled={formUpdating}\n                fontSize={1}\n                mode=\"bleed\"\n                onClick={handleDelete}\n                text=\"Delete\"\n                tone=\"critical\"\n              />\n            )","formState.matches('creating') || formState.matches('updating')","handleSubmit(onSubmit)","<Button\n              loading={formState.matches('creating') || formState.matches('updating')}\n              disabled={!isDirty || !isValid}\n              fontSize={1}\n              // @ts-expect-error - yup 0.32 schema types do not line up with @hookform/resolvers, fix typings later\n              onClick={handleSubmit(onSubmit)}\n              text={deploymentTarget ? 'Update and close' : 'Create'}\n              tone=\"primary\"\n            />","!isDirty || !isValid","deploymentTarget ? 'Update and close' : 'Create'","<Box padding={3}>\n          <Flex justify={deploymentTarget ? 'space-between' : 'flex-end'}>\n            {/* Delete button */}\n            {deploymentTarget && (\n              <Button\n                loading={formState.matches('deleting')}\n                disabled={formUpdating}\n                fontSize={1}\n                mode=\"bleed\"\n                onClick={handleDelete}\n                text=\"Delete\"\n                tone=\"critical\"\n              />\n            )}\n\n            {/* Submit button */}\n            <Button\n              loading={formState.matches('creating') || formState.matches('updating')}\n              disabled={!isDirty || !isValid}\n              fontSize={1}\n              // @ts-expect-error - yup 0.32 schema types do not line up with @hookform/resolvers, fix typings later\n              onClick={handleSubmit(onSubmit)}\n              text={deploymentTarget ? 'Update and close' : 'Create'}\n              tone=\"primary\"\n            />\n          </Flex>\n        </Box>","deploymentTarget ? 'space-between' : 'flex-end'","<button aria-label=\"Submit\" style={{display: 'none'}} tabIndex={-1} type=\"submit\" />","register('name')","<FormFieldInputText\n            disabled={formUpdating}\n            description=\"Name displayed in this plugin (e.g. production, staging)\"\n            error={errors?.name}\n            label=\"Name\"\n            // @ts-expect-error - fix typings later\n            {...register('name')}\n          />","errors?.name","register('token')","<FormFieldInputText\n            disabled={formUpdating}\n            error={errors?.token}\n            label=\"Vercel Account Token\"\n            // @ts-expect-error - fix typings later\n            {...register('token')}\n          />","errors?.token","register('projectId')","<FormFieldInputText\n            disabled={formUpdating}\n            error={errors?.projectId}\n            label=\"Vercel Project ID\"\n            // @ts-expect-error - fix typings later\n            {...register('projectId')}\n          />","errors?.projectId","register('teamId')","<FormFieldInputText\n            description=\"Required only if your project is owned by a team account\"\n            disabled={formUpdating}\n            error={errors?.teamId}\n            label=\"Vercel Team ID (optional)\"\n            // @ts-expect-error - fix typings later\n            {...register('teamId')}\n          />","errors?.teamId","register('deployHook')","<FormFieldInputText\n            description=\"Enter a valid deploy hook URL to enable manual deploys\"\n            disabled={formUpdating}\n            error={errors?.deployHook}\n            label=\"Vercel Deploy Hook (optional)\"\n            // @ts-expect-error - fix typings later\n            {...register('deployHook')}\n          />","errors?.deployHook","register('deployLimit', {valueAsNumber: true})","<FormFieldInputText\n            disabled={formUpdating}\n            error={errors?.deployLimit}\n            label=\"Number of deploys to display\"\n            // @ts-expect-error - fix typings later\n            {...register('deployLimit', {valueAsNumber: true})}\n          />","errors?.deployLimit","<Stack gap={5}>\n          {/* Title */}\n          <FormFieldInputText\n            disabled={formUpdating}\n            description=\"Name displayed in this plugin (e.g. production, staging)\"\n            error={errors?.name}\n            label=\"Name\"\n            // @ts-expect-error - fix typings later\n            {...register('name')}\n          />\n\n          <FormFieldInputText\n            disabled={formUpdating}\n            error={errors?.token}\n            label=\"Vercel Account Token\"\n            // @ts-expect-error - fix typings later\n            {...register('token')}\n          />\n\n          <FormFieldInputText\n            disabled={formUpdating}\n            error={errors?.projectId}\n            label=\"Vercel Project ID\"\n            // @ts-expect-error - fix typings later\n            {...register('projectId')}\n          />\n\n          <FormFieldInputText\n            description=\"Required only if your project is owned by a team account\"\n            disabled={formUpdating}\n            error={errors?.teamId}\n            label=\"Vercel Team ID (optional)\"\n            // @ts-expect-error - fix typings later\n            {...register('teamId')}\n          />\n\n          <FormFieldInputText\n            description=\"Enter a valid deploy hook URL to enable manual deploys\"\n            disabled={formUpdating}\n            error={errors?.deployHook}\n            label=\"Vercel Deploy Hook (optional)\"\n            // @ts-expect-error - fix typings later\n            {...register('deployHook')}\n          />\n\n          <FormFieldInputText\n            disabled={formUpdating}\n            error={errors?.deployLimit}\n            label=\"Number of deploys to display\"\n            // @ts-expect-error - fix typings later\n            {...register('deployLimit', {valueAsNumber: true})}\n          />\n        </Stack>","<Box\n        as=\"form\"\n        padding={4}\n        // @ts-expect-error - yup 0.32 schema types do not line up with @hookform/resolvers, fix typings later\n        onSubmit={handleSubmit(onSubmit)}\n      >\n        {/* Hidden button to enable enter key submissions */}\n        <button aria-label=\"Submit\" style={{display: 'none'}} tabIndex={-1} type=\"submit\" />\n\n        {/* Form fields */}\n        <Stack gap={5}>\n          {/* Title */}\n          <FormFieldInputText\n            disabled={formUpdating}\n            description=\"Name displayed in this plugin (e.g. production, staging)\"\n            error={errors?.name}\n            label=\"Name\"\n            // @ts-expect-error - fix typings later\n            {...register('name')}\n          />\n\n          <FormFieldInputText\n            disabled={formUpdating}\n            error={errors?.token}\n            label=\"Vercel Account Token\"\n            // @ts-expect-error - fix typings later\n            {...register('token')}\n          />\n\n          <FormFieldInputText\n            disabled={formUpdating}\n            error={errors?.projectId}\n            label=\"Vercel Project ID\"\n            // @ts-expect-error - fix typings later\n            {...register('projectId')}\n          />\n\n          <FormFieldInputText\n            description=\"Required only if your project is owned by a team account\"\n            disabled={formUpdating}\n            error={errors?.teamId}\n            label=\"Vercel Team ID (optional)\"\n            // @ts-expect-error - fix typings later\n            {...register('teamId')}\n          />\n\n          <FormFieldInputText\n            description=\"Enter a valid deploy hook URL to enable manual deploys\"\n            disabled={formUpdating}\n            error={errors?.deployHook}\n            label=\"Vercel Deploy Hook (optional)\"\n            // @ts-expect-error - fix typings later\n            {...register('deployHook')}\n          />\n\n          <FormFieldInputText\n            disabled={formUpdating}\n            error={errors?.deployLimit}\n            label=\"Number of deploys to display\"\n            // @ts-expect-error - fix typings later\n            {...register('deployLimit', {valueAsNumber: true})}\n          />\n        </Stack>\n      </Box>","<Dialog\n      footer={\n        <Box padding={3}>\n          <Flex justify={deploymentTarget ? 'space-between' : 'flex-end'}>\n            {/* Delete button */}\n            {deploymentTarget && (\n              <Button\n                loading={formState.matches('deleting')}\n                disabled={formUpdating}\n                fontSize={1}\n                mode=\"bleed\"\n                onClick={handleDelete}\n                text=\"Delete\"\n                tone=\"critical\"\n              />\n            )}\n\n            {/* Submit button */}\n            <Button\n              loading={formState.matches('creating') || formState.matches('updating')}\n              disabled={!isDirty || !isValid}\n              fontSize={1}\n              // @ts-expect-error - yup 0.32 schema types do not line up with @hookform/resolvers, fix typings later\n              onClick={handleSubmit(onSubmit)}\n              text={deploymentTarget ? 'Update and close' : 'Create'}\n              tone=\"primary\"\n            />\n          </Flex>\n        </Box>\n      }\n      header={`${deploymentTarget ? 'Edit' : 'Create'} deployment target`}\n      id=\"create\"\n      onClose={onClose}\n      width={1}\n      zOffset={Z_INDEX_DIALOG}\n    >\n      {/* We reverse direction to ensure that inline links dont autofocus before other form elements */}\n      <Box\n        as=\"form\"\n        padding={4}\n        // @ts-expect-error - yup 0.32 schema types do not line up with @hookform/resolvers, fix typings later\n        onSubmit={handleSubmit(onSubmit)}\n      >\n        {/* Hidden button to enable enter key submissions */}\n        <button aria-label=\"Submit\" style={{display: 'none'}} tabIndex={-1} type=\"submit\" />\n\n        {/* Form fields */}\n        <Stack gap={5}>\n          {/* Title */}\n          <FormFieldInputText\n            disabled={formUpdating}\n            description=\"Name displayed in this plugin (e.g. production, staging)\"\n            error={errors?.name}\n            label=\"Name\"\n            // @ts-expect-error - fix typings later\n            {...register('name')}\n          />\n\n          <FormFieldInputText\n            disabled={formUpdating}\n            error={errors?.token}\n            label=\"Vercel Account Token\"\n            // @ts-expect-error - fix typings later\n            {...register('token')}\n          />\n\n          <FormFieldInputText\n            disabled={formUpdating}\n            error={errors?.projectId}\n            label=\"Vercel Project ID\"\n            // @ts-expect-error - fix typings later\n            {...register('projectId')}\n          />\n\n          <FormFieldInputText\n            description=\"Required only if your project is owned by a team account\"\n            disabled={formUpdating}\n            error={errors?.teamId}\n            label=\"Vercel Team ID (optional)\"\n            // @ts-expect-error - fix typings later\n            {...register('teamId')}\n          />\n\n          <FormFieldInputText\n            description=\"Enter a valid deploy hook URL to enable manual deploys\"\n            disabled={formUpdating}\n            error={errors?.deployHook}\n            label=\"Vercel Deploy Hook (optional)\"\n            // @ts-expect-error - fix typings later\n            {...register('deployHook')}\n          />\n\n          <FormFieldInputText\n            disabled={formUpdating}\n            error={errors?.deployLimit}\n            label=\"Number of deploys to display\"\n            // @ts-expect-error - fix typings later\n            {...register('deployLimit', {valueAsNumber: true})}\n          />\n        </Stack>\n      </Box>\n    </Dialog>","`${deploymentTarget ? 'Edit' : 'Create'} deployment target`","_c","{input: {client}}","() => {\n    dialogStateTransition({type: 'CLOSE'})\n  }","() => {\n    dialogStateTransition({type: 'CREATE'})\n  }","(deploymentTarget: Sanity.DeploymentTarget) => {\n    dialogStateTransition({type: 'EDIT', deploymentTarget})\n  }","(deploymentTarget: Sanity.DeploymentTarget) => {\n    deploymentTargetListStateTransition({type: 'CREATE', deploymentTarget})\n  }","(id: string) => {\n    deploymentTargetListStateTransition({type: 'DELETE', id})\n  }","(deploymentTarget: Sanity.DeploymentTarget) => {\n    deploymentTargetListStateTransition({type: 'UPDATE', deploymentTarget})\n  }","{overflow: 'hidden '}","<StateDebug name=\"List\" state={deploymentTargetListState} />","<Text size={5} weight=\"semibold\">\n              Vercel deployments\n            </Text>","<Box padding={2}>\n                  <Text muted size={1}>\n                    Create new deployment target\n                  </Text>\n                </Box>","<Flex align=\"center\" justify=\"space-between\" paddingX={3} paddingY={2}>\n            <Text size={5} weight=\"semibold\">\n              Vercel deployments\n            </Text>\n\n            <Tooltip\n              content={\n                <Box padding={2}>\n                  <Text muted size={1}>\n                    Create new deployment target\n                  </Text>\n                </Box>\n              }\n              placement=\"left\"\n            >\n              <Button fontSize={1} icon={AddIcon} onClick={handleDialogShowCreate} mode=\"bleed\" />\n            </Tooltip>\n          </Flex>","deploymentTargetListState.matches('pending') && (\n              <Box paddingX={3} paddingY={4}>\n                <Text>Loading...</Text>\n              </Box>\n            )","deploymentTargetListState.matches({ready: 'withoutData'}) && (\n              <Flex align=\"center\" gap={3} paddingX={3} paddingY={4}>\n                <Text>No deployment targets found.</Text>\n                <Button\n                  fontSize={1}\n                  mode=\"ghost\"\n                  onClick={handleDialogShowCreate}\n                  text=\"Create a new target\"\n                />\n              </Flex>\n            )","deploymentTargetListState.matches({ready: 'withData'}) && (\n              <DeploymentTargets\n                items={deploymentTargetListState.context.results}\n                onDialogEdit={handleDialogShowEdit}\n              />\n            )","deploymentTargetListState.matches('failed') && (\n              <Box paddingX={3} paddingY={4}>\n                <Text>\n                  Failed to retrieve deployment targets. Please check the developer console log for\n                  more information.\n                </Text>\n              </Box>\n            )","<Box>\n            {deploymentTargetListState.matches('pending') && (\n              <Box paddingX={3} paddingY={4}>\n                <Text>Loading...</Text>\n              </Box>\n            )}\n\n            {deploymentTargetListState.matches({ready: 'withoutData'}) && (\n              <Flex align=\"center\" gap={3} paddingX={3} paddingY={4}>\n                <Text>No deployment targets found.</Text>\n                <Button\n                  fontSize={1}\n                  mode=\"ghost\"\n                  onClick={handleDialogShowCreate}\n                  text=\"Create a new target\"\n                />\n              </Flex>\n            )}\n\n            {deploymentTargetListState.matches({ready: 'withData'}) && (\n              <DeploymentTargets\n                items={deploymentTargetListState.context.results}\n                onDialogEdit={handleDialogShowEdit}\n              />\n            )}\n\n            {deploymentTargetListState.matches('failed') && (\n              <Box paddingX={3} paddingY={4}>\n                <Text>\n                  Failed to retrieve deployment targets. Please check the developer console log for\n                  more information.\n                </Text>\n              </Box>\n            )}\n          </Box>","<Card radius={2} style={{overflow: 'hidden '}}>\n          {/* xstate debug */}\n          <StateDebug name=\"List\" state={deploymentTargetListState} />\n\n          {/* Header */}\n          <Flex align=\"center\" justify=\"space-between\" paddingX={3} paddingY={2}>\n            <Text size={5} weight=\"semibold\">\n              Vercel deployments\n            </Text>\n\n            <Tooltip\n              content={\n                <Box padding={2}>\n                  <Text muted size={1}>\n                    Create new deployment target\n                  </Text>\n                </Box>\n              }\n              placement=\"left\"\n            >\n              <Button fontSize={1} icon={AddIcon} onClick={handleDialogShowCreate} mode=\"bleed\" />\n            </Tooltip>\n          </Flex>\n\n          <Box>\n            {deploymentTargetListState.matches('pending') && (\n              <Box paddingX={3} paddingY={4}>\n                <Text>Loading...</Text>\n              </Box>\n            )}\n\n            {deploymentTargetListState.matches({ready: 'withoutData'}) && (\n              <Flex align=\"center\" gap={3} paddingX={3} paddingY={4}>\n                <Text>No deployment targets found.</Text>\n                <Button\n                  fontSize={1}\n                  mode=\"ghost\"\n                  onClick={handleDialogShowCreate}\n                  text=\"Create a new target\"\n                />\n              </Flex>\n            )}\n\n            {deploymentTargetListState.matches({ready: 'withData'}) && (\n              <DeploymentTargets\n                items={deploymentTargetListState.context.results}\n                onDialogEdit={handleDialogShowEdit}\n              />\n            )}\n\n            {deploymentTargetListState.matches('failed') && (\n              <Box paddingX={3} paddingY={4}>\n                <Text>\n                  Failed to retrieve deployment targets. Please check the developer console log for\n                  more information.\n                </Text>\n              </Box>\n            )}\n          </Box>\n        </Card>","dialogState.matches('create') && (\n          <DialogForm onClose={handleDialogClose} onCreate={handleTargetCreate} />\n        )","dialogState.matches('edit') && (\n          <DialogForm\n            deploymentTarget={dialogState.context.editDeploymentTarget}\n            onClose={handleDialogClose}\n            onDelete={handleTargetDelete}\n            onUpdate={handleTargetUpdate}\n          />\n        )","<ToastProvider zOffset={Z_INDEX_TOAST_PROVIDER}>\n      <QueryClientProvider client={queryClient}>\n        <Card radius={2} style={{overflow: 'hidden '}}>\n          {/* xstate debug */}\n          <StateDebug name=\"List\" state={deploymentTargetListState} />\n\n          {/* Header */}\n          <Flex align=\"center\" justify=\"space-between\" paddingX={3} paddingY={2}>\n            <Text size={5} weight=\"semibold\">\n              Vercel deployments\n            </Text>\n\n            <Tooltip\n              content={\n                <Box padding={2}>\n                  <Text muted size={1}>\n                    Create new deployment target\n                  </Text>\n                </Box>\n              }\n              placement=\"left\"\n            >\n              <Button fontSize={1} icon={AddIcon} onClick={handleDialogShowCreate} mode=\"bleed\" />\n            </Tooltip>\n          </Flex>\n\n          <Box>\n            {deploymentTargetListState.matches('pending') && (\n              <Box paddingX={3} paddingY={4}>\n                <Text>Loading...</Text>\n              </Box>\n            )}\n\n            {deploymentTargetListState.matches({ready: 'withoutData'}) && (\n              <Flex align=\"center\" gap={3} paddingX={3} paddingY={4}>\n                <Text>No deployment targets found.</Text>\n                <Button\n                  fontSize={1}\n                  mode=\"ghost\"\n                  onClick={handleDialogShowCreate}\n                  text=\"Create a new target\"\n                />\n              </Flex>\n            )}\n\n            {deploymentTargetListState.matches({ready: 'withData'}) && (\n              <DeploymentTargets\n                items={deploymentTargetListState.context.results}\n                onDialogEdit={handleDialogShowEdit}\n              />\n            )}\n\n            {deploymentTargetListState.matches('failed') && (\n              <Box paddingX={3} paddingY={4}>\n                <Text>\n                  Failed to retrieve deployment targets. Please check the developer console log for\n                  more information.\n                </Text>\n              </Box>\n            )}\n          </Box>\n        </Card>\n\n        {/* Dialogs */}\n        {dialogState.matches('create') && (\n          <DialogForm onClose={handleDialogClose} onCreate={handleTargetCreate} />\n        )}\n\n        {dialogState.matches('edit') && (\n          <DialogForm\n            deploymentTarget={dialogState.context.editDeploymentTarget}\n            onClose={handleDialogClose}\n            onDelete={handleTargetDelete}\n            onUpdate={handleTargetUpdate}\n          />\n        )}\n      </QueryClientProvider>\n    </ToastProvider>","_c","\"githubCommitMessage\"","\"githubCommitRef\""],"sources":["../src/constants.ts","../src/client.ts","../src/utils/fetcher.ts","../src/hooks/useDeployments.ts","../src/machines/refresh.ts","../src/utils/useCardColor.ts","../src/machines/deploy.ts","../src/components/StateDebug/index.tsx","../src/components/DeployButton/index.tsx","../src/components/StatusDot/index.tsx","../src/components/TableCell/index.tsx","../src/components/Deployment/index.tsx","../src/components/PlaceholderAvatar/index.tsx","../src/components/PlaceholderText/index.tsx","../src/components/DeploymentPlaceholder/index.tsx","../src/components/Deployments/index.tsx","../src/components/DeploymentTarget/index.tsx","../src/components/DeploymentTargets/index.tsx","../src/machines/form.ts","../src/utils/sanitizeFormData.ts","../src/components/FormFieldInputLabel/index.tsx","../src/components/FormFieldInputText/index.tsx","../src/components/DialogForm/index.tsx","../src/machines/deploymentTargetList.ts","../src/machines/dialog.ts","../src/app.tsx","../src/index.ts"],"sourcesContent":["// https://vercel.com/docs/platform/limits\nexport const API_ENDPOINT_DEPLOYMENTS = 'https://api.vercel.com/v5/now/deployments'\nexport const API_ENDPOINT_ALIASES = 'https://api.vercel.com/v3/now/aliases'\n\n// Sanity API version\nexport const API_VERSION = '1'\n\nexport const DEBUG_MODE = false\n\nexport const DEPLOYMENT_TARGET_DOCUMENT_TYPE = 'vercel.deploymentTarget'\n\nexport const VERCEL_STATUS_COLORS = {\n  BUILDING: '#f5a623',\n  CANCELED: '#ff0000',\n  ERROR: '#ff0000',\n  READY: '#50e3c2',\n  QUEUED: '#333',\n}\n\n// Name displayed in toasts\nexport const WIDGET_NAME = 'Vercel (dashboard)'\n\n// NOTE: Manually set plugin z-index values to be higher than Sanity's header search field\n// (which is currently 500202). Also ensure toasts always sit above dialogs.\nexport const Z_INDEX_DIALOG = 600001\nexport const Z_INDEX_TOAST_PROVIDER = 600002\n","import {type SanityClient, useClient} from 'sanity'\n\nimport {API_VERSION} from './constants'\n\nexport function useSanityClient(): SanityClient {\n  return useClient({apiVersion: API_VERSION})\n}\n","import {type Sanity} from '../types'\n\nconst fetcher =\n  (deploymentTarget: Sanity.DeploymentTargetConfig) =>\n  async (url: string, extraParams?: URLSearchParams) => {\n    const params = new URLSearchParams()\n    params.set('projectId', deploymentTarget.projectId)\n    if (deploymentTarget.teamId) {\n      params.set('teamId', deploymentTarget.teamId)\n    }\n\n    if (extraParams) {\n      for (const [k, v] of extraParams.entries()) {\n        params.append(k, v)\n      }\n    }\n\n    const response = await fetch(`${url}?${params.toString()}`, {\n      headers: {\n        Authorization: `Bearer ${deploymentTarget.token}`,\n      },\n    })\n\n    // Manually throw on non-OK responses for react-query\n    // https://react-query.tanstack.com/guides/query-functions#usage-with-fetch-and-others-clients-that-do-not-throw-by-default\n    if (!response.ok) {\n      throw new Error('Response not OK')\n    }\n\n    try {\n      return await response.json()\n    } catch (err) {\n      throw new Error('Unable to parse response as JSON', {cause: err})\n    }\n  }\n\nexport default fetcher\n","import {useQuery} from '@tanstack/react-query'\nimport hash from 'object-hash'\n\nimport {API_ENDPOINT_ALIASES, API_ENDPOINT_DEPLOYMENTS} from '../constants'\nimport {type Sanity, type Vercel} from '../types'\nimport fetcher from '../utils/fetcher'\n\ntype Options = {\n  enabled?: boolean\n}\n\nconst useDeployments = (deploymentTarget: Sanity.DeploymentTargetConfig, options?: Options) => {\n  const fetchUrl = fetcher(deploymentTarget)\n\n  // Fetch deployments\n  const deployParams = new URLSearchParams()\n  deployParams.set('limit', String(deploymentTarget?.deployLimit))\n\n  const {\n    data: deploymentsData,\n    isFetching: deploymentsIsFetching,\n    isSuccess: deploymentsIsSuccess,\n    error: deploymentsError,\n    refetch,\n  } = useQuery<{deployments: Vercel.Deployment[]}>({\n    queryKey: [hash(deploymentTarget)],\n    queryFn: () => fetchUrl(API_ENDPOINT_DEPLOYMENTS, deployParams),\n    enabled: options?.enabled ?? true,\n    refetchInterval: 20000, // ms\n    refetchIntervalInBackground: false,\n    refetchOnMount: true,\n    refetchOnReconnect: 'always',\n    refetchOnWindowFocus: false,\n    retry: false,\n  })\n\n  // Fetch aliases (only if deployments have been retrieved)\n  const aliasParams = new URLSearchParams()\n  aliasParams.set('limit', '20')\n\n  const {\n    data: aliasesData,\n    isFetching: aliasesIsFetching,\n    isSuccess: aliasesIsSuccess,\n    error: aliasesError,\n  } = useQuery<{\n    aliases: Vercel.Alias[]\n    pagination: {\n      count: number\n      next?: number\n      prev?: number\n    }\n  }>({\n    queryKey: [hash(deploymentTarget), 'aliases'],\n    queryFn: () => fetchUrl(API_ENDPOINT_ALIASES, aliasParams),\n    enabled: !!deploymentsData,\n    refetchOnMount: false,\n    refetchOnReconnect: false,\n    refetchOnWindowFocus: false,\n    retry: false,\n  })\n\n  const aliases = aliasesData?.aliases\n\n  let deploymentsWithAlias: Vercel.DeploymentWithAlias[] | undefined\n\n  if (aliases) {\n    deploymentsWithAlias = deploymentsData?.deployments?.map((val: Vercel.DeploymentWithAlias) => {\n      const alias = aliases.find((a) => a.deploymentId === val.uid)\n      return Object.assign(val, {alias: alias?.alias})\n    })\n  }\n\n  return {\n    deployments: deploymentsWithAlias,\n    error: aliasesError || deploymentsError,\n    isFetching: aliasesIsFetching || deploymentsIsFetching,\n    isSuccess: aliasesIsSuccess && deploymentsIsSuccess,\n    refetch,\n  }\n}\n\nexport default useDeployments\n","import {setup} from 'xstate'\n\ntype Event = {type: 'ERROR'} | {type: 'REFRESH'} | {type: 'REFRESHED'} | {type: 'RETRY'}\n\nconst refreshMachine = setup({\n  types: {\n    events: {} as Event,\n  },\n}).createMachine({\n  /** @xstate-layout N4IgpgJg5mDOIC5QAoC2BDAxgCwJYDswBKAOlwgBswBiAJQFEAxBgZQAkBtABgF1FQADgHtYuAC64h+fiAAeiAIwAmAGwkuGrkoAsAZhVKlAVm0KAHABoQAT0QBOJSRN27XFXaMmz2twF9fVmhYeISkAE5gAGYRsCFQ1PS0tADytNx8SCDCohJSMvIIPnYkxhpKXGZ22kY6xla2CAq6CiQudgDsRnYqKroVfe3+gRg4BMQkEdFwcXRMrGz0ACLpMtniktKZBUUlRmUVVTXadTaISrqObUY97QodvWa6QyBBo6ETUTHYkLPM9OwrTJrXKbUDbJTFLjtMzmWraOx3doqeqKMyOeHdXp3BTHXTVZ6vELjMBhMJCMK-eaAwQidZ5LaIY6Q6Gw47wxHI04IGEkDFma5NbTtY7ufwBED4IQQOAyQljIirWkg-KIAC0nIa6oJIyJpHIVEVOQ2KsKShRCDsunUGLcHi8PhU2uC8o+U1iBCghrpoLkZ2uTk0XCq7SRRl0Zg19itXHhIZ85lMEaUTre40mX0gXuVDIQnmKRhZKk6PmaVXN2PUaLsZhj2hUOJU-JTupIJLJYSzxpzeacheLXFL2nNrkrfW8SKFnhDYt8QA */\n  initial: 'idle',\n  states: {\n    idle: {\n      on: {\n        REFRESH: {\n          target: 'refreshing',\n        },\n      },\n    },\n    refreshing: {\n      on: {\n        ERROR: {\n          target: 'error',\n        },\n        REFRESHED: {\n          target: 'refreshed',\n        },\n      },\n    },\n    refreshed: {\n      on: {\n        REFRESH: {\n          target: 'refreshing',\n        },\n      },\n    },\n    error: {\n      on: {\n        REFRESH: {\n          target: 'refreshing',\n        },\n      },\n    },\n  },\n})\n\nexport default refreshMachine\n","import {useTheme_v2} from '@sanity/ui'\n\nexport function useCardColor(): {border: string} {\n  const {color} = useTheme_v2()\n  return {border: color.border}\n}\n","import {assign, setup, fromPromise} from 'xstate'\n\nimport {type Vercel} from '../types'\n\ntype Context = {\n  deployHook: string\n  disabled: boolean\n  feedback?: string\n  label?: string\n  error?: string\n}\n\ntype Event = {type: 'DEPLOY'}\n\ninterface DeployActorInput {\n  deployHook: string\n}\n\nexport const deployMachine = setup({\n  types: {\n    context: {} as Context,\n    events: {} as Event,\n    input: {} as DeployActorInput,\n  },\n  actors: {\n    deploy: fromPromise(async ({input, signal}: {input: DeployActorInput; signal: AbortSignal}) => {\n      try {\n        if (!input.deployHook) {\n          throw new Error('No deployHook URL defined')\n        }\n        const res = await fetch(input.deployHook, {method: 'POST', signal})\n        const data: {error?: Vercel.Error} | null = await res.json()\n        if (!res.ok) {\n          const errorMessage = data?.error?.message || res.statusText\n          throw errorMessage\n        }\n      } catch (err) {\n        if (typeof err === 'string') {\n          throw err\n        }\n        console.error('Unable to deploy with error:', err)\n        throw new Error('Please check the developer console for more information', {cause: err})\n      }\n    }),\n  },\n}).createMachine({\n  /** @xstate-layout N4IgpgJg5mDOIC5QTABwDYHsCeA6AlhOmAMQAiAogAoAyA8gJoDaADALqKiqaz4Au+TADtOIAB6IATCxa4AnADYAHAHYArArUslAZjksNAGhDZEARk3yVmhSxVyHC-QBYAvq+MoMOXF6zZ8ISgSCGEwAiEAN0wAa3C-HwSAoIRA6IBjAEMBYVY2PNFuXhyRJHFENTMzXElFJSUzNTVnWx0FY1MESXVcZzUdM2k1OTUVBoV3TzR-X2mcQOCwACclzCXcDGyAMzWAW1nvPCSF1KjMLJK8grKi-kFS0AkESura5QamlpY2jvMB+QcDkqLH0wxYEw8ICSuFgAFd0uk4LByNR6Mx2IUeHdhKIns1ZN9BtYQVpRnJfl1JM55P1BnY1Ep9CpGpMoXM8MtVksUbRGNcuFiSriKs4CQNurYRgZ7BSGr1ASNupIzEo+kp3JChJgUPAyklMcV7sKEABadomRAmtQAhW2wE6VnQwjEA3Yh7lBDOSQUsxeqyaPoWYbWFSO9kHfwLV1CspPHSSHQ1ZyA1UKJzJlQ+iz+5oKewKWrfNyQ6FwhFI6NG2OINOSXDiypKAxtMyZi1dEE1Qk6L0FpTSUMl8OctaVnHVhC1+uDRvNhStin6XDaHQ9liSXTJiUa1xAA */\n  id: 'deploy',\n  initial: 'idle',\n  context: ({input}) => ({\n    disabled: false,\n    feedback: undefined,\n    label: undefined,\n    error: undefined,\n    deployHook: input.deployHook,\n  }),\n  states: {\n    idle: {\n      entry: assign({\n        feedback: () => undefined,\n        label: () => 'Deploy',\n      }),\n      on: {\n        DEPLOY: {\n          target: 'deploying',\n        },\n      },\n    },\n    deploying: {\n      entry: assign({\n        disabled: () => true,\n        label: () => 'Deploying',\n      }),\n      exit: assign({\n        disabled: () => false,\n        label: () => 'Deploy',\n      }),\n      invoke: {\n        src: 'deploy',\n        input: ({context}) => ({deployHook: context.deployHook}),\n        onDone: {\n          target: 'success',\n        },\n        onError: {\n          target: 'error',\n          actions: assign({\n            error: ({event}) => {\n              if ('error' in event) {\n                const {error} = event\n                if (typeof error === 'string') {\n                  return error\n                }\n                if (error instanceof Error) {\n                  return error.message\n                }\n              }\n              return 'Unknown error'\n            },\n          }),\n        },\n      },\n    },\n    success: {\n      entry: assign({\n        feedback: () => 'Successfully started!',\n      }),\n      exit: assign({\n        feedback: () => undefined,\n      }),\n      on: {\n        DEPLOY: {\n          target: 'deploying',\n        },\n      },\n    },\n    error: {\n      on: {\n        DEPLOY: {\n          target: 'deploying',\n        },\n      },\n    },\n  },\n})\n","import {Box, Card, Stack, Text} from '@sanity/ui'\n\nimport {DEBUG_MODE} from '../../constants'\n\ntype Props = {\n  name: string\n  state: any // TODO: type correctly\n}\n\nconst StateDebug = (props: Props) => {\n  const {name, state} = props\n\n  if (!DEBUG_MODE) {\n    return null\n  }\n\n  return (\n    <Card\n      scheme=\"dark\"\n      style={{\n        backgroundColor: 'rgba(0, 0, 255, 0.9)',\n        borderRadius: '3px',\n        fontSize: 1,\n        fontWeight: 500,\n        lineHeight: 'body',\n        right: 0,\n        opacity: 0.75,\n        pointerEvents: 'none',\n        position: 'absolute',\n        textAlign: 'left',\n        top: 0,\n        zIndex: 9000,\n      }}\n    >\n      <Box padding={2}>\n        <Stack gap={2}>\n          <Text size={0}>Name: {name}</Text>\n          <Text size={0}>state.value: {JSON.stringify(state.value)}</Text>\n        </Stack>\n      </Box>\n    </Card>\n  )\n}\n\nexport default StateDebug\n","import {UploadIcon} from '@sanity/icons/Upload'\nimport {Box, Button} from '@sanity/ui'\nimport {useToast} from '@sanity/ui/toast'\nimport {useMachine} from '@xstate/react'\nimport {useEffect} from 'react'\n\nimport {WIDGET_NAME} from '../../constants'\nimport {deployMachine} from '../../machines/deploy'\nimport StateDebug from '../StateDebug'\n\ntype Props = {\n  deployHook: string\n  onDeploySuccess?: () => void\n  targetName: string\n}\n\nconst DeployButton = (props: Props) => {\n  const {deployHook, onDeploySuccess, targetName} = props\n\n  const [deployState, deployStateTransition, deployStateInterpreter] = useMachine(deployMachine, {\n    input: {deployHook},\n  })\n\n  const toast = useToast()\n\n  const isError = deployState.matches('error')\n  const isSuccess = deployState.matches('success')\n\n  // Callbacks\n  const handleDeploy = () => {\n    deployStateTransition({type: 'DEPLOY'})\n  }\n\n  // Effects\n  useEffect(() => {\n    if (isError) {\n      toast.push({\n        closable: true,\n        description: `Unable to queue deploy for ${targetName}: ${deployState.context.error}`,\n        duration: 8000,\n        status: 'error',\n        title: WIDGET_NAME,\n      })\n    }\n\n    if (isSuccess) {\n      toast.push({\n        closable: true,\n        description: `Deploy queued for ${targetName}`,\n        duration: 8000,\n        status: 'success',\n        title: WIDGET_NAME,\n      })\n    }\n  }, [isError, isSuccess, toast, targetName, deployState.context.error])\n\n  useEffect(() => {\n    const subscription = deployStateInterpreter.subscribe((state) => {\n      if (state.value === 'success') {\n        if (onDeploySuccess) {\n          onDeploySuccess()\n        }\n      }\n    })\n\n    return () => subscription.unsubscribe()\n  }, [deployStateInterpreter, onDeploySuccess])\n\n  return (\n    <Box padding={3} style={{position: 'relative'}}>\n      <StateDebug name=\"Deploy\" state={deployState} />\n\n      <Button\n        disabled={deployState.context.disabled}\n        fontSize={1}\n        icon={UploadIcon}\n        mode=\"ghost\"\n        onClick={handleDeploy}\n        padding={3}\n        text={`${deployState.context.label} ${targetName}`}\n        tone=\"default\"\n      />\n    </Box>\n  )\n}\n\nexport default DeployButton\n","import {Box} from '@sanity/ui'\n\nimport {VERCEL_STATUS_COLORS} from '../../constants'\nimport {type Vercel} from '../../types'\n\ntype Props = {\n  state: Vercel.DeploymentState\n}\n\nconst StatusDot = ({state}: Props) => (\n  <Box\n    style={{\n      backgroundColor: VERCEL_STATUS_COLORS[state],\n      borderRadius: '20px',\n      height: '9px',\n      width: '9px',\n    }}\n  />\n)\n\nexport default StatusDot\n","import {Box, Label} from '@sanity/ui'\nimport type {ReactNode} from 'react'\n\nimport {type Sanity} from '../../types'\nimport {useCardColor} from '../../utils/useCardColor'\n\ntype Props = {\n  children: ReactNode\n  colSpan?: number\n  header?: boolean\n  variant?: 'age' | 'branch' | 'creator' | 'state'\n}\n\nconst TableCell = (props: Props) => {\n  const {children, colSpan, header, variant} = props\n\n  let display: Sanity.BoxDisplay | Sanity.BoxDisplay[] = 'table-cell'\n  let cellWidth: string = 'auto'\n\n  switch (variant) {\n    case 'age':\n      cellWidth = '50px'\n      break\n    case 'branch':\n      cellWidth = '300px'\n      display = ['none', 'none', 'none', 'table-cell']\n      break\n    case 'creator':\n      cellWidth = '80px'\n      break\n    case 'state':\n      cellWidth = '110px'\n      display = ['none', 'none', 'none', 'none', 'table-cell']\n      break\n    default:\n      break\n  }\n\n  const {border} = useCardColor()\n\n  if (header) {\n    return (\n      <Box\n        as=\"th\"\n        colSpan={colSpan}\n        // @ts-expect-error -- local `display` allows 'table-cell', which is not part of @sanity/ui's `BoxDisplay` union\n        display={display}\n        paddingX={3}\n        paddingY={2}\n        style={{\n          maxWidth: cellWidth,\n          position: 'relative',\n          textAlign: 'left',\n          width: cellWidth,\n        }}\n      >\n        <Label size={0}>{children}</Label>\n      </Box>\n    )\n  }\n  return (\n    <Box\n      as=\"td\"\n      colSpan={colSpan}\n      // @ts-expect-error -- local `display` allows 'table-cell', which is not part of @sanity/ui's `BoxDisplay` union\n      display={display}\n      paddingX={3}\n      paddingY={[2, 2, 3]}\n      style={{\n        borderTop: `1px solid ${border}`,\n        maxWidth: cellWidth,\n        position: 'relative',\n        textAlign: 'left',\n        width: cellWidth,\n      }}\n    >\n      {children}\n    </Box>\n  )\n}\n\nexport default TableCell\n","import {LinkIcon} from '@sanity/icons/Link'\nimport {Box, Flex, Stack, Text} from '@sanity/ui'\nimport {useMemo} from 'react'\n// oxlint-disable-next-line import/no-unassigned-import\nimport 'react-time-ago/locale/en'\nimport ReactTimeAgo from 'react-time-ago'\n\nimport {type Vercel} from '../../types'\nimport StatusDot from '../StatusDot'\nimport TableCell from '../TableCell'\n\ntype Props = {\n  deployment: Vercel.DeploymentWithAlias\n}\n\nconst Deployment = (props: Props) => {\n  const {deployment} = props\n\n  const date = useMemo(() => new Date(deployment.created), [deployment.created])\n\n  const commitMessage = deployment?.meta?.['githubCommitMessage']\n  const commitRef = deployment?.meta?.['githubCommitRef']\n\n  const targetUrl = deployment.alias ?? deployment.url\n\n  return (\n    <tr>\n      {/* Deployment - alias or regular deployment URL */}\n      <TableCell>\n        <Flex align=\"center\">\n          <Box\n            display={['block', 'block', 'block', 'block', 'none']}\n            marginRight={3}\n            style={{flexShrink: 0}}\n          >\n            <StatusDot state={deployment.state} />\n          </Box>\n\n          {targetUrl ? (\n            <>\n              {/* Alias icon */}\n              {deployment.alias && <LinkIcon />}\n\n              <Box marginLeft={deployment.alias ? 1 : 0}>\n                <Text\n                  muted={!(deployment.state === 'READY')}\n                  size={1}\n                  style={{\n                    textDecoration:\n                      deployment.state === 'CANCELED' || deployment.state === 'ERROR'\n                        ? 'line-through'\n                        : 'normal',\n                  }}\n                  textOverflow=\"ellipsis\"\n                >\n                  {deployment.state === 'READY' ? (\n                    <a href={`https://${targetUrl}`} rel=\"noopener noreferrer\" target=\"_blank\">\n                      {targetUrl}\n                    </a>\n                  ) : (\n                    targetUrl\n                  )}\n                </Text>\n              </Box>\n            </>\n          ) : (\n            <Text size={1}>Uploading...</Text>\n          )}\n        </Flex>\n      </TableCell>\n\n      {/* State */}\n      <TableCell variant=\"state\">\n        <Flex align=\"center\">\n          <StatusDot state={deployment.state} />\n          <Box marginLeft={2}>\n            <Text size={1}>\n              {deployment.state\n                .trim()\n                .toLowerCase()\n                .replace(/^[a-z]/i, (t) => t.toUpperCase())}\n            </Text>\n          </Box>\n        </Flex>\n      </TableCell>\n\n      {/* Branch */}\n      <TableCell variant=\"branch\">\n        <Stack gap={2}>\n          <Text size={1} textOverflow=\"ellipsis\">\n            {commitRef}\n          </Text>\n          {commitMessage && (\n            <Text muted size={1} textOverflow=\"ellipsis\">\n              {commitMessage}\n            </Text>\n          )}\n        </Stack>\n      </TableCell>\n\n      {/* Age */}\n      <TableCell variant=\"age\">\n        <Flex align=\"center\">\n          <Text size={1}>\n            <ReactTimeAgo date={date} locale=\"en-US\" timeStyle=\"mini\" />\n          </Text>\n        </Flex>\n      </TableCell>\n\n      {/* Creator */}\n      <TableCell variant=\"creator\">\n        <Flex align=\"center\" justify=\"center\">\n          <img\n            alt={deployment?.creator?.username || 'Deployment creator avatar'}\n            draggable={false}\n            src={`https://vercel.com/api/www/avatar/${deployment?.creator?.uid}?&s=48`}\n            style={{\n              borderRadius: '20px',\n              height: '20px',\n              width: '20px',\n            }}\n          />\n        </Flex>\n      </TableCell>\n    </tr>\n  )\n}\n\nexport default Deployment\n","import {Box} from '@sanity/ui'\n\nimport {useCardColor} from '../../utils/useCardColor'\n\nconst PlaceholderAvatar = () => {\n  const {border} = useCardColor()\n  return (\n    <Box\n      style={{\n        backgroundColor: border,\n        borderRadius: '20px',\n        height: '20px',\n        userSelect: 'none',\n        width: '20px',\n      }}\n    />\n  )\n}\n\nexport default PlaceholderAvatar\n","import {Box, Stack, Text} from '@sanity/ui'\n\nimport {useCardColor} from '../../utils/useCardColor'\n\ntype Props = {\n  rows: number\n}\n\nconst PlaceholderText = (props: Props) => {\n  const {rows} = props\n  const {border} = useCardColor()\n  return (\n    <Box\n      style={{\n        backgroundColor: border,\n        borderRadius: '3px',\n        userSelect: 'none',\n        width: '100%',\n      }}\n    >\n      <Stack gap={2}>\n        {Array.from({length: rows}, (_, index) => (\n          <Text key={index} size={1}>\n            &nbsp;\n          </Text>\n        ))}\n      </Stack>\n    </Box>\n  )\n}\n\nexport default PlaceholderText\n","import {Flex} from '@sanity/ui'\n\nimport PlaceholderAvatar from '../PlaceholderAvatar'\nimport PlaceholderText from '../PlaceholderText'\nimport TableCell from '../TableCell'\n\nconst DeploymentPlaceholder = () => {\n  return (\n    <tr>\n      {/* Deployment - alias or regular deployment URL */}\n      <TableCell>\n        <PlaceholderText rows={1} />\n      </TableCell>\n\n      {/* State */}\n      <TableCell variant=\"state\">\n        <PlaceholderText rows={1} />\n      </TableCell>\n\n      {/* Branch */}\n      <TableCell variant=\"branch\">\n        <PlaceholderText rows={2} />\n      </TableCell>\n\n      {/* Age */}\n      <TableCell variant=\"age\">\n        <PlaceholderText rows={1} />\n      </TableCell>\n\n      {/* Creator */}\n      <TableCell variant=\"creator\">\n        <Flex justify=\"center\">\n          <PlaceholderAvatar />\n        </Flex>\n      </TableCell>\n    </tr>\n  )\n}\n\nexport default DeploymentPlaceholder\n","import {Box, Text} from '@sanity/ui'\nimport {useToast} from '@sanity/ui/toast'\nimport {useMachine} from '@xstate/react'\nimport {useEffect, useRef} from 'react'\nimport useDeepCompareEffect from 'use-deep-compare-effect'\n\nimport {WIDGET_NAME} from '../../constants'\nimport useDeployments from '../../hooks/useDeployments'\nimport refreshMachine from '../../machines/refresh'\nimport {type Sanity} from '../../types'\nimport {useCardColor} from '../../utils/useCardColor'\nimport DeployButton from '../DeployButton'\nimport Deployment from '../Deployment'\nimport DeploymentPlaceholder from '../DeploymentPlaceholder'\nimport StateDebug from '../StateDebug'\nimport TableCell from '../TableCell'\n\ntype Props = {\n  deploymentTarget: Sanity.DeploymentTargetConfig\n}\n\nconst Deployments = (props: Props) => {\n  const {deploymentTarget} = props\n\n  // Refs\n  const refTimeout = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n  // XState\n  const [refreshState, refreshStateTransition] = useMachine(refreshMachine)\n\n  // Fetch deployments - disable hook / auto-refetching on error state\n  const {deployments, error, isFetching, isSuccess, refetch} = useDeployments(deploymentTarget, {\n    enabled: !refreshState.matches('error'),\n  })\n\n  const toast = useToast()\n  const isError = refreshState.matches('error')\n\n  const handleDeploySuccess = () => {\n    if (refTimeout.current) {\n      clearTimeout(refTimeout.current)\n    }\n    refTimeout.current = setTimeout(() => {\n      void refetch({\n        cancelRefetch: true,\n        throwOnError: true,\n      })\n    }, 4000)\n  }\n\n  useEffect(() => {\n    return () => {\n      if (refTimeout.current) {\n        clearTimeout(refTimeout.current)\n      }\n    }\n  }, [])\n\n  useEffect(() => {\n    if (error) {\n      refreshStateTransition({type: 'ERROR'})\n    }\n\n    if (isFetching) {\n      refreshStateTransition({type: 'REFRESH'})\n    }\n\n    if (!isFetching && isSuccess) {\n      refreshStateTransition({type: 'REFRESHED'})\n    }\n  }, [error, isFetching, isSuccess, refreshStateTransition])\n\n  useDeepCompareEffect(() => {\n    if (!refreshState.matches('refreshing')) {\n      refreshStateTransition({type: 'REFRESH'})\n    }\n  }, [deploymentTarget])\n\n  useDeepCompareEffect(() => {\n    if (isError) {\n      toast.push({\n        closable: true,\n        description: `Unable to fetch deployments for ${deploymentTarget.name}`,\n        duration: 8000,\n        status: 'error',\n        title: WIDGET_NAME,\n      })\n    }\n  }, [deploymentTarget, isError])\n\n  const hasFetched = typeof deployments !== 'undefined'\n  const hasDeployments = deployments && deployments.length > 0\n\n  const {border} = useCardColor()\n  return (\n    <Box marginTop={3} style={{position: 'relative'}}>\n      {/* xstate debug */}\n      <StateDebug name=\"Refresh\" state={refreshState} />\n\n      {!refreshState.matches('error') && (\n        <>\n          <Box\n            as=\"table\"\n            style={{\n              borderBottom: `1px solid ${border}`,\n              borderCollapse: 'collapse',\n              display: 'table',\n              tableLayout: 'fixed',\n              width: '100%',\n            }}\n          >\n            <Box as=\"thead\" style={{display: 'table-header-group'}}>\n              <tr>\n                {/* Deployment */}\n                <TableCell header>Deployment</TableCell>\n\n                {/* State */}\n                <TableCell header variant=\"state\">\n                  State\n                </TableCell>\n\n                {/* Branch */}\n                <TableCell header variant=\"branch\">\n                  Branch\n                </TableCell>\n\n                {/* Age */}\n                <TableCell header variant=\"age\">\n                  Age\n                </TableCell>\n\n                {/* Creator */}\n                <TableCell header variant=\"creator\">\n                  Creator\n                </TableCell>\n              </tr>\n            </Box>\n\n            <Box as=\"tbody\" style={{display: 'table-row-group'}}>\n              {/* Placeholders */}\n              {!deployments &&\n                Array.from({length: deploymentTarget.deployLimit}, (_, index) => (\n                  <DeploymentPlaceholder key={index} />\n                ))}\n              {/* Deployments */}\n              {hasDeployments &&\n                deployments?.map((deployment) => (\n                  <Deployment deployment={deployment} key={deployment.uid} />\n                ))}\n            </Box>\n          </Box>\n\n          {/* No results */}\n          {hasFetched && !hasDeployments && (\n            <Box padding={3} style={{width: '100%'}}>\n              <Text muted size={1}>\n                No deployments found. Don't forget to specify a valid team ID if your project\n                belongs to a team.\n              </Text>\n            </Box>\n          )}\n        </>\n      )}\n\n      {/* Error message */}\n      {refreshState.matches('error') && (\n        <Box padding={3}>\n          <Text muted size={1}>\n            Unable to fetch recent deployments. Please check your network and deployment settings.\n          </Text>\n        </Box>\n      )}\n\n      {/* Deploy button */}\n      {!refreshState.matches('error') && deploymentTarget.deployHook && (\n        <Box>\n          <DeployButton\n            deployHook={deploymentTarget.deployHook}\n            onDeploySuccess={handleDeploySuccess}\n            targetName={deploymentTarget.name}\n          />\n        </Box>\n      )}\n    </Box>\n  )\n}\n\nexport default Deployments\n","import {EditIcon} from '@sanity/icons/Edit'\nimport {Box, Button, Flex, Text} from '@sanity/ui'\nimport {Tooltip} from '@sanity/ui/tooltip'\nimport type {FC} from 'react'\n\nimport {type Sanity} from '../../types'\nimport Deployments from '../Deployments'\n\ntype Props = {\n  item: Sanity.DeploymentTarget\n  onDialogEdit: (deploymentTarget: Sanity.DeploymentTarget) => void\n}\n\nconst DeploymentTarget: FC<Props> = (props: Props) => {\n  const {item, onDialogEdit} = props\n\n  const deploymentTarget: Sanity.DeploymentTargetConfig = {\n    deployHook: item.deployHook,\n    deployLimit: item.deployLimit,\n    name: item.name,\n    projectId: item.projectId,\n    teamId: item.teamId,\n    token: item.token,\n  }\n\n  return (\n    <Box style={{position: 'relative'}}>\n      {/* Header */}\n      <Flex align=\"center\" justify=\"space-between\" marginTop={2} paddingX={3}>\n        <Text size={2}>{item.name}</Text>\n\n        <Tooltip\n          content={\n            <Box padding={2}>\n              <Text muted size={1}>\n                Edit deployment target\n              </Text>\n            </Box>\n          }\n          placement=\"left\"\n        >\n          <Button fontSize={1} icon={EditIcon} mode=\"bleed\" onClick={() => onDialogEdit(item)} />\n        </Tooltip>\n      </Flex>\n\n      {/* Content */}\n      <Deployments deploymentTarget={deploymentTarget} />\n    </Box>\n  )\n}\n\nexport default DeploymentTarget\n","import {Stack} from '@sanity/ui'\n\nimport {type Sanity} from '../../types'\nimport DeploymentTarget from '../DeploymentTarget'\n\ntype Props = {\n  items: Sanity.DeploymentTarget[]\n  onDialogEdit: (deploymentTarget: Sanity.DeploymentTarget) => void\n}\n\nconst DeploymentTargets = (props: Props) => {\n  const {items, onDialogEdit} = props\n\n  return (\n    <Stack gap={5}>\n      {items?.map((item) => (\n        <DeploymentTarget item={item} key={item._id} onDialogEdit={onDialogEdit} />\n      ))}\n    </Stack>\n  )\n}\n\nexport default DeploymentTargets\n","import {uuid} from '@sanity/uuid'\nimport type {SanityClient, SanityDocument} from 'sanity'\nimport {assertEvent, assign, fromPromise, setup} from 'xstate'\n\nimport {DEPLOYMENT_TARGET_DOCUMENT_TYPE} from '../constants'\nimport type {Sanity} from '../types'\n\n// Named locally so dts emit does not reach into `@sanity/client` (TS2883).\ntype DeleteMutationResult = {\n  transactionId: string\n  documentIds: string[]\n  results: {id: string; operation: string}[]\n}\n\ntype Context = {\n  client: SanityClient\n  document?: Sanity.DeploymentTarget\n  id?: string\n  formData?: Record<string, any>\n  message: string\n}\n\ntype Event =\n  | {type: 'CREATE'; formData: Record<string, any>}\n  | {type: 'UPDATE'; id: string; formData: Record<string, any>}\n  | {type: 'DELETE'; id: string}\n\ninterface Input {\n  client: SanityClient\n}\n\nexport const formMachine = setup({\n  types: {} as {\n    children: {\n      createDocumentActor: 'create document'\n      updateDocumentActor: 'update document'\n      deleteDocumentActor: 'delete document'\n    }\n    context: Context\n    events: Event\n    input: Input\n    tags: 'busy'\n  },\n  actions: {\n    setId: assign({\n      id: ({event}) => {\n        assertEvent(event, ['UPDATE', 'DELETE'])\n        return event.id\n      },\n    }),\n    setFormData: assign({\n      formData: ({event}) => {\n        assertEvent(event, ['CREATE', 'UPDATE'])\n        return event.formData\n      },\n    }),\n    setMessage: assign({\n      message: ({event}) => {\n        if (\n          'data' in event &&\n          event.data &&\n          typeof event.data === 'object' &&\n          'details' in event.data &&\n          event.data.details &&\n          typeof event.data.details === 'object' &&\n          'description' in event.data.details\n        ) {\n          return event.data.details.description as string\n        }\n        return 'An error occurred'\n      },\n    }),\n    setDocument: assign({\n      document: ({event}) => {\n        // @ts-expect-error - fix typings later\n        return event.output\n      },\n    }),\n  },\n  actors: {\n    // Explicit return types keep the inferred machine type portable for\n    // declaration emit (TS2883), by referencing aliases imported from `sanity`\n    // instead of a deep `@sanity/client` path. `delete` returns a mutation\n    // result in client v8, not the deleted document.\n    'create document': fromPromise(\n      ({\n        input,\n      }: {\n        input: Required<Pick<Context, 'client' | 'formData'>>\n      }): Promise<SanityDocument> => {\n        return input.client.create({\n          _id: `vercel.${uuid()}`,\n          _type: DEPLOYMENT_TARGET_DOCUMENT_TYPE,\n          ...input.formData,\n        })\n      },\n    ),\n    'update document': fromPromise(\n      ({\n        input,\n      }: {\n        input: Required<Pick<Context, 'client' | 'id' | 'formData'>>\n      }): Promise<SanityDocument> => {\n        return input.client.patch(input.id).set(input.formData).commit()\n      },\n    ),\n    'delete document': fromPromise(\n      ({\n        input,\n      }: {\n        input: Required<Pick<Context, 'client' | 'id'>>\n      }): Promise<DeleteMutationResult> => {\n        return input.client.delete(input.id)\n      },\n    ),\n  },\n}).createMachine({\n  /** @xstate-layout N4IgpgJg5mDOIC5QAoC2BDAxgCwJYDswBKAOlwgBswBiAYQCUBRAQQBVGBtABgF1FQADgHtYuAC64h+fiAAeiAIwBmAGwkuGjQFYALAE4AHACYdWgwYA0IAJ6IjKgOwkdXFUYVa9h-Ua5KAvv5WaFh4hKTkVNQAqgAKACJsnLwywqISUjLyCMpqmtr6xqbmVrYIBgokWvlGWkpaCgZeKoHBGDgExGSUNPGMADKM7Nx8SCBp4pLSY9m56vm6hiZmljaIOipqdXpcDk1aWiYqBlqtICEd4SSYAE5g6BL4UNQQUmBk+ABuQgDW77f3MRgeJCTAAV1QYHwYmYmDEQhuI1SIkmmRmiGOShIDiUOh0SiaCgUegcDj0pTsjhI5iMewUpPsTSMZwuYS6AIeBGeYBuNwRJAEFAeADMEahrncHsDQRCoTC4QikWMJhlpqBspjsbj8YTiaTyWsEKouNT6noiX5zUpiQEgud2mzSGCBBBOU8Xm8Pt8-iRna6gSDwZDobD4YiUsqUaqshiDFicXiCea9WSKeVKiSVIclEYlIY-BUWQ7Ok6XW7ubz+YKRWLfWWAzLg-Kw0rBFGpjGEJqEzrkyTU4b6ToSHojHos7VXEc6kXQiWSBAwFRHs9XoQvb93ovl9Kg3LQ4qI230h30V241rE7r+wayro1A4dO4VHotA5fPTTnbWfPt2AV9QPJ8jcApCmIoo3OKf4NnuIYKuGozHqiapyLG8bakmRI3mmpjxk0XAuEoXAHI+DgtGc+BCIu8BjD+4TIieaLqogAC0Khpmxs6XF0kRgAxyGdk+aYKLSVR7Fweg6A4IkGFwChcY6EqAly-HRmeY7DnSY5GHGL4qFwRhpjpJpmriDjVMRLgGAp84ckCECqaezEIHoObUuZuwKH4xGPgoRnmCQpmOAcqhmPJ37Flcfrlo5TGoQgY4mgYHkeAS+iqH5hqSc4dSuCo+I6SoSjvjZUX1pAsUodkrlGO51TSd5b46JlZRebVuG7IcjRmA05FtHOVzQSpkaMVVdivs4CibHGxg6biSg4ZsJD2AccaFEVGwOKVXTQRVI0CWeNV1Z5jW+WmujDj4HjmMRnhEttpBAQilWdkdyX1V5RFNS1iAEpU1pHER9JWjogSBEAA */\n  context: ({input}) => ({\n    client: input.client,\n    formData: {},\n    message: '',\n  }),\n  initial: 'idle',\n  states: {\n    idle: {\n      on: {\n        CREATE: {\n          actions: ['setFormData'],\n          target: 'creating',\n        },\n        UPDATE: {\n          actions: ['setId', 'setFormData'],\n          target: 'updating',\n        },\n        DELETE: {\n          actions: 'setId',\n          target: 'deleting',\n        },\n      },\n    },\n    creating: {\n      tags: ['busy'],\n      invoke: {\n        src: 'create document',\n        id: 'createDocumentActor',\n        input: ({context}) => ({client: context.client, formData: context.formData!}),\n        onDone: {actions: 'setDocument', target: 'created'},\n        onError: {actions: 'setMessage', target: 'error'},\n      },\n    },\n    created: {type: 'final'},\n    updating: {\n      tags: ['busy'],\n      invoke: {\n        src: 'update document',\n        id: 'updateDocumentActor',\n        input: ({context}) => ({\n          client: context.client,\n          id: context.id!,\n          formData: context.formData!,\n        }),\n        onDone: {actions: 'setDocument', target: 'updated'},\n        onError: {actions: 'setMessage', target: 'error'},\n      },\n    },\n    updated: {type: 'final'},\n    deleting: {\n      tags: ['busy'],\n      invoke: {\n        src: 'delete document',\n        id: 'deleteDocumentActor',\n        input: ({context}) => ({client: context.client, id: context.id!}),\n        onDone: {target: 'deleted'},\n        onError: {actions: 'setMessage', target: 'error'},\n      },\n    },\n    deleted: {type: 'final'},\n    error: {type: 'final'},\n  },\n})\n","// Recursively sanitize form data:\n// - convert empty strings, undefined values and empty arrays to null (to correctly unset / delete fields)\n// - trim whitespace on string fields\n\ntype FormData = Record<string, any>\n\nconst sanitizeFormData = (formData: FormData): FormData => {\n  return Object.keys(formData).reduce((acc: FormData, key) => {\n    const val = formData[key]\n\n    // TODO: refactor\n    if (typeof val === 'object' && val !== null && val.constructor !== Array) {\n      acc[key] = sanitizeFormData(val)\n    } else if (val === '' || typeof val === 'undefined' || val?.length === 0) {\n      acc[key] = null\n    } else if (typeof val === 'string' && val) {\n      acc[key] = formData[key].trim()\n    } else {\n      acc[key] = formData[key]\n    }\n\n    return acc\n  }, {})\n}\n\nexport default sanitizeFormData\n","import {red} from '@sanity/color'\nimport {ErrorOutlineIcon} from '@sanity/icons/ErrorOutline'\nimport {Box, Inline, Text} from '@sanity/ui'\nimport {Tooltip} from '@sanity/ui/tooltip'\nimport type {FC} from 'react'\nimport {type FieldError} from 'react-hook-form'\n\ntype Props = {\n  description?: string\n  error?: FieldError\n  label: string\n  name: string\n}\n\nconst errorIconStyle = {color: red[500].hex}\n\nconst FormFieldInputLabel: FC<Props> = (props: Props) => {\n  const {description, error, label, name} = props\n\n  return (\n    <Box marginBottom={3}>\n      {/* Label */}\n      <Inline gap={2}>\n        <Text as=\"label\" htmlFor={name} size={1} weight=\"semibold\">\n          {label}\n        </Text>\n\n        {/* Error icon + tooltip */}\n        {error && (\n          <Text size={1}>\n            <Tooltip\n              content={\n                <Box padding={2}>\n                  <Text muted size={1}>\n                    <ErrorOutlineIcon style={{...errorIconStyle, marginRight: '0.1em'}} />\n                    {error.message}\n                  </Text>\n                </Box>\n              }\n              fallbackPlacements={['top', 'left']}\n              placement=\"right\"\n              portal\n            >\n              <ErrorOutlineIcon style={errorIconStyle} />\n            </Tooltip>\n          </Text>\n        )}\n      </Inline>\n\n      {/* Description */}\n      {description && (\n        <Box marginY={3}>\n          <Text as=\"p\" muted size={1}>\n            {description}\n          </Text>\n        </Box>\n      )}\n    </Box>\n  )\n}\n\nexport default FormFieldInputLabel\n","import {Box, TextInput} from '@sanity/ui'\nimport {type ChangeEventHandler, type FocusEventHandler, type Ref} from 'react'\nimport {type FieldError} from 'react-hook-form'\n\nimport FormFieldInputLabel from '../FormFieldInputLabel'\n\ntype Props = {\n  description?: string\n  disabled?: boolean\n  error?: FieldError\n  label: string\n  name: string\n  placeholder?: string\n  value?: string\n  onChange?: ChangeEventHandler<HTMLInputElement>\n  onBlur?: FocusEventHandler<HTMLInputElement>\n  ref?: Ref<HTMLInputElement>\n}\n\nconst FormFieldInputText = (props: Props) => {\n  const {description, disabled, error, label, name, placeholder, value, onChange, onBlur, ref} =\n    props\n\n  return (\n    <Box>\n      {/* Label */}\n      <FormFieldInputLabel description={description} error={error} label={label} name={name} />\n      {/* Input */}\n      <TextInput\n        autoComplete=\"off\"\n        autoFocus\n        defaultValue={value}\n        disabled={disabled}\n        id={name}\n        name={name}\n        placeholder={placeholder}\n        onChange={onChange}\n        onBlur={onBlur}\n        ref={ref}\n      />\n    </Box>\n  )\n}\n\nexport default FormFieldInputText\n","import {yupResolver} from '@hookform/resolvers/yup'\nimport {Box, Button, Dialog, Flex, Stack} from '@sanity/ui'\nimport {useToast} from '@sanity/ui/toast'\nimport {useActor} from '@xstate/react'\nimport {type FC, useEffect} from 'react'\nimport {useForm} from 'react-hook-form'\nimport {toPromise} from 'xstate'\nimport * as yup from 'yup'\n\nimport {useSanityClient} from '../../client'\nimport {Z_INDEX_DIALOG} from '../../constants'\nimport {formMachine} from '../../machines/form'\nimport {type Sanity} from '../../types'\nimport sanitizeFormData from '../../utils/sanitizeFormData'\nimport FormFieldInputText from '../FormFieldInputText'\n\ntype Props = {\n  deploymentTarget?: Sanity.DeploymentTarget\n  onClose: () => void\n  onCreate?: (deploymentTarget: Sanity.DeploymentTarget) => void\n  onDelete?: (id: string) => void\n  onUpdate?: (deploymentTarget: Sanity.DeploymentTarget) => void\n}\n\ntype FormData = yup.InferType<typeof formSchema>\n\nconst formSchema = yup.object().shape({\n  deployHook: yup.string().url('Deploy hook must be a valid URL'),\n  deployLimit: yup\n    .number()\n    .positive()\n    .integer()\n    .min(1, 'Deploy limit must no less than 1')\n    .max(15, 'Deploy limit must no higher than 15')\n    .typeError('Deploy limit must be a number')\n    .required('Deploy limit must be a positive integer between 1 and 15'),\n  name: yup.string().required('Name cannot be empty'),\n  projectId: yup.string().required('Vercel Project ID cannot be empty'),\n  teamId: yup.string(),\n  token: yup.string().required('Vercel Account Token cannot be empty'),\n})\n\nconst DialogForm: FC<Props> = (props: Props) => {\n  const {deploymentTarget, onClose, onCreate, onDelete, onUpdate} = props\n  const client = useSanityClient()\n  const toast = useToast()\n\n  const [formState, formStateTransition, formStateActorRef] = useActor(formMachine, {\n    input: {client},\n  })\n\n  const formUpdating = formState.hasTag('busy')\n\n  // react-hook-form v7\n  const {\n    formState: {errors, isDirty, isValid},\n    handleSubmit,\n    register,\n  } = useForm<FormData>({\n    // @ts-expect-error - fix typings later\n    defaultValues: {\n      deployHook: deploymentTarget?.deployHook || '',\n      deployLimit: deploymentTarget?.deployLimit || 5,\n      name: deploymentTarget?.name || '',\n      projectId: deploymentTarget?.projectId || '',\n      teamId: deploymentTarget?.teamId || '',\n      token: deploymentTarget?.token || '',\n    },\n    mode: 'onChange',\n    resolver: yupResolver(formSchema),\n  })\n\n  /**\n   * Handle errors and reaching the done state\n   */\n  useEffect(() => {\n    if (formState.matches('error')) {\n      toast.push({\n        status: 'error',\n        title: formState.context.message || 'An error occurred',\n      })\n    }\n    /**\n     * If the machine is done it means it reached updated, created, deleted or error state.\n     * We don't care which one, we just want to close the dialog\n     */\n    if (formState.status === 'done') {\n      onClose()\n    }\n  }, [formState, onClose, toast])\n\n  // Callbacks\n  // - submit react-hook-form\n  const onSubmit = async (formData: FormData) => {\n    const sanitizedFormData = sanitizeFormData(formData)\n    if (deploymentTarget) {\n      formStateTransition({type: 'UPDATE', id: deploymentTarget._id, formData: sanitizedFormData})\n    } else {\n      formStateTransition({type: 'CREATE', formData: sanitizedFormData})\n    }\n    await toPromise(formStateActorRef)\n    const snapshot = formStateActorRef.getSnapshot()\n    const {document} = snapshot.context\n    if (!document) return\n    if (snapshot.matches('created')) {\n      onCreate?.(document)\n    } else if (snapshot.matches('updated')) {\n      onUpdate?.(document)\n    }\n  }\n\n  const handleDelete = async () => {\n    if (!deploymentTarget) {\n      return\n    }\n    const id = deploymentTarget._id\n    formStateTransition({type: 'DELETE', id})\n    await toPromise(formStateActorRef)\n    if (formStateActorRef.getSnapshot().matches('deleted')) {\n      onDelete?.(id)\n    }\n  }\n\n  return (\n    <Dialog\n      footer={\n        <Box padding={3}>\n          <Flex justify={deploymentTarget ? 'space-between' : 'flex-end'}>\n            {/* Delete button */}\n            {deploymentTarget && (\n              <Button\n                loading={formState.matches('deleting')}\n                disabled={formUpdating}\n                fontSize={1}\n                mode=\"bleed\"\n                onClick={handleDelete}\n                text=\"Delete\"\n                tone=\"critical\"\n              />\n            )}\n\n            {/* Submit button */}\n            <Button\n              loading={formState.matches('creating') || formState.matches('updating')}\n              disabled={!isDirty || !isValid}\n              fontSize={1}\n              // @ts-expect-error - yup 0.32 schema types do not line up with @hookform/resolvers, fix typings later\n              onClick={handleSubmit(onSubmit)}\n              text={deploymentTarget ? 'Update and close' : 'Create'}\n              tone=\"primary\"\n            />\n          </Flex>\n        </Box>\n      }\n      header={`${deploymentTarget ? 'Edit' : 'Create'} deployment target`}\n      id=\"create\"\n      onClose={onClose}\n      width={1}\n      zOffset={Z_INDEX_DIALOG}\n    >\n      {/* We reverse direction to ensure that inline links dont autofocus before other form elements */}\n      <Box\n        as=\"form\"\n        padding={4}\n        // @ts-expect-error - yup 0.32 schema types do not line up with @hookform/resolvers, fix typings later\n        onSubmit={handleSubmit(onSubmit)}\n      >\n        {/* Hidden button to enable enter key submissions */}\n        <button aria-label=\"Submit\" style={{display: 'none'}} tabIndex={-1} type=\"submit\" />\n\n        {/* Form fields */}\n        <Stack gap={5}>\n          {/* Title */}\n          <FormFieldInputText\n            disabled={formUpdating}\n            description=\"Name displayed in this plugin (e.g. production, staging)\"\n            error={errors?.name}\n            label=\"Name\"\n            // @ts-expect-error - fix typings later\n            {...register('name')}\n          />\n\n          <FormFieldInputText\n            disabled={formUpdating}\n            error={errors?.token}\n            label=\"Vercel Account Token\"\n            // @ts-expect-error - fix typings later\n            {...register('token')}\n          />\n\n          <FormFieldInputText\n            disabled={formUpdating}\n            error={errors?.projectId}\n            label=\"Vercel Project ID\"\n            // @ts-expect-error - fix typings later\n            {...register('projectId')}\n          />\n\n          <FormFieldInputText\n            description=\"Required only if your project is owned by a team account\"\n            disabled={formUpdating}\n            error={errors?.teamId}\n            label=\"Vercel Team ID (optional)\"\n            // @ts-expect-error - fix typings later\n            {...register('teamId')}\n          />\n\n          <FormFieldInputText\n            description=\"Enter a valid deploy hook URL to enable manual deploys\"\n            disabled={formUpdating}\n            error={errors?.deployHook}\n            label=\"Vercel Deploy Hook (optional)\"\n            // @ts-expect-error - fix typings later\n            {...register('deployHook')}\n          />\n\n          <FormFieldInputText\n            disabled={formUpdating}\n            error={errors?.deployLimit}\n            label=\"Number of deploys to display\"\n            // @ts-expect-error - fix typings later\n            {...register('deployLimit', {valueAsNumber: true})}\n          />\n        </Stack>\n      </Box>\n    </Dialog>\n  )\n}\n\nexport default DialogForm\n","import type {SanityClient} from 'sanity'\nimport {assign, setup, fromPromise, assertEvent} from 'xstate'\n\nimport {DEPLOYMENT_TARGET_DOCUMENT_TYPE} from '../constants'\nimport {type Sanity} from '../types'\n\ntype Context = {\n  client: SanityClient\n  results: Sanity.DeploymentTarget[] // TODO: type correctly\n}\n\ntype Event =\n  | {type: 'CLOSE'}\n  | {type: 'CREATE'; deploymentTarget: Sanity.DeploymentTarget}\n  | {type: 'DELETE'; id: string}\n  | {type: 'FETCH'}\n  | {type: 'UPDATE'; deploymentTarget: Sanity.DeploymentTarget}\n\ninterface Input {\n  client: SanityClient\n}\n\nconst sortByTargetName = (items: Sanity.DeploymentTarget[]) => {\n  return items.sort((a, b) => {\n    if (a.name > b.name) {\n      return 1\n    }\n    if (a.name < b.name) {\n      return -1\n    }\n    return 0\n  })\n}\n\nexport const deploymentTargetListMachine = setup({\n  types: {} as {\n    children: {fetchData: 'fetch data'}\n    context: Context\n    events: Event\n    input: Input\n  },\n  actions: {\n    targetCreate: assign({\n      results: ({context, event}) => {\n        assertEvent(event, 'CREATE')\n        return sortByTargetName([...context.results, event.deploymentTarget])\n      },\n    }),\n    targetDelete: assign({\n      results: ({context, event}) => {\n        assertEvent(event, 'DELETE')\n        return context.results.filter((target) => target._id !== event.id)\n      },\n    }),\n    targetUpdate: assign({\n      results: ({context, event}) => {\n        assertEvent(event, 'UPDATE')\n        const {deploymentTarget} = event\n        const index = context.results.findIndex((target) => target._id === deploymentTarget._id)\n        const updatedResults = Object.assign([], context.results, {\n          [index]: deploymentTarget,\n        })\n        return sortByTargetName(updatedResults)\n      },\n    }),\n  },\n  guards: {\n    hasData: ({context}) => {\n      return context?.results?.length > 0\n    },\n    hasNoData: ({context}) => {\n      return context?.results?.length === 0\n    },\n  },\n  actors: {\n    'fetch data': fromPromise(\n      ({input, signal}: {input: {client: SanityClient}; signal: AbortSignal}) => {\n        return input.client\n          .fetch<Sanity.DeploymentTarget[]>(\n            '*[_type == $type] | order(name asc)',\n            {\n              type: DEPLOYMENT_TARGET_DOCUMENT_TYPE,\n            },\n            {signal},\n          )\n          .catch((error) => {\n            if (error instanceof Error && error.name === 'AbortError') {\n              return []\n            }\n            console.error('Failed to fetch deployment targets', error)\n            throw error\n          })\n      },\n    ),\n  },\n}).createMachine({\n  /** @xstate-layout N4IgpgJg5mDOIC5QAoC2BDAxgCwJYDswBKAOgAcx8ICoBiCAe0JIIDcGBrMEgMzABccAEXT90AbQAMAXUSgyDWLn64mckAA9EAZkkBOEgHYAjAA5DAFgBsFgEwnJAVkMAaEAE9Ep4yUeT-klbGesbaoYaGAL6RbmhYeISkFFQ0tGAATukM6eQANqI82ai8AsKiEjLqCkoqakiaOvpGZpY29sZOrh6IxpYkFo5h2oaOpnqOxraSFtGxGDgExCTpYOgQ7rQAwgBKAKIAggAqu1Ky9dXKqvjqWggWHSS9eoaS9ibao6aObp4IVh8kL56OzGII2PT-WYgOILRLLVbrWhCXYAGV2x1OVUUlzqoFu90kRm8tlM2gsL1eJJ+iEGBj0gVsFm0YWmVkctihMISSxWaw2AFUAApCI4nSrnbG1a71fGSUz9WzBezTFWvb7dO5MkjjMITZykwxjTnzbmkXnrEgAV3wHHwDAA7vhaJiJTUrjces9fFZGc9TLYrGqA9SEM9CcT7sznH5HHpjfFFmaEe4rTa7Y7ncYzvJJe6ZZ7DN7fYaA0GrCHvD4xs4S+yPnGYtCTYn4XySPblNgRGJneKc27cQ0EI4BiQ2T77noAzXyxrTIESGFGd4rP9DONTPHYTzk+3OwxLfxu+he9mQBcpR7h6Px4ylWyIrPfl9bIvJhZJIYA-7zFZoo27QgOB1C5RMsQHaU8UQABaYIQ2gv9G1AuFkmofAoHAnFIKHOwQz0bRtUMcd-j8WwpnuLdTVbdZMMvfMEFsPQQxMeViQmZkLC+f0oiQ5s4XNFNrVtB1sIvPMoIQCIK1BIsmXXWxtFJcZKJbAS934Ltylo8ShysfDHl9PRxjlekrC6Z9BhIBk5MkXpzFBFT+N3DsNIPI8tNdLCr20L0Wmscw5V0e5pMJYwBiI8kwrDRC5gTOEeHQXBckgbTB1uZwQw6RwrEBd9bEcQZYzsRDoiAA */\n  context: ({input}) => ({\n    client: input.client,\n    results: [],\n  }),\n  initial: 'pending',\n  states: {\n    pending: {\n      invoke: {\n        src: 'fetch data',\n        id: 'fetchData',\n        input: ({context}) => ({client: context.client}),\n        onDone: {\n          actions: assign({results: ({event}) => event.output}),\n          target: 'ready',\n        },\n        onError: {\n          target: 'failed',\n        },\n      },\n    },\n    ready: {\n      initial: 'unknown',\n      on: {\n        CREATE: {\n          actions: 'targetCreate',\n        },\n        DELETE: {\n          actions: 'targetDelete',\n        },\n        UPDATE: {\n          actions: 'targetUpdate',\n        },\n      },\n      states: {\n        unknown: {\n          always: [\n            {target: 'withData', guard: 'hasData'},\n            {target: 'withoutData', guard: 'hasNoData'},\n          ],\n        },\n        withData: {\n          always: [{target: 'withoutData', guard: 'hasNoData'}],\n        },\n        withoutData: {\n          always: [{target: 'withData', guard: 'hasData'}],\n        },\n      },\n    },\n    failed: {\n      type: 'final',\n    },\n  },\n})\n","import {assertEvent, assign, setup} from 'xstate'\n\nimport {type Sanity} from '../types'\n\ntype Context = {\n  editDeploymentTarget?: Sanity.DeploymentTarget\n}\n\ntype Event =\n  | {type: 'CREATE'}\n  | {type: 'CLOSE'}\n  | {type: 'EDIT'; deploymentTarget: Sanity.DeploymentTarget}\n\nexport const dialogMachine = setup({\n  types: {\n    context: {} as Context,\n    events: {} as Event,\n  },\n  actions: {\n    setEditDeploymentTarget: assign({\n      editDeploymentTarget: ({event}) => {\n        assertEvent(event, 'EDIT')\n        return event.deploymentTarget\n      },\n    }),\n  },\n}).createMachine({\n  /** @xstate-layout N4IgpgJg5mDOIC5QAoC2BDAxgCwJYDswBKAOlwgBswBiAYQCUBRAQQBVGBtABgF1FQADgHtYuAC64h+fiAAeiAEwKArCQCcANgAcAdmUbNOhVx0BGLQBoQAT0SmAzApJcXXexoAsW5fbWaFAL4BVmhYeISk5FTUjAAiAJKs3HxIIMKiElIy8ghKqpq6+obGZpY2ivb2zq4e5moeXKZc3kEhGDgExCSQ4nQAMgDyAMqcvDLp4pLSqTn2DSQefn7uyq5aWvZWtgjmTqsuvnU6XMoK9q0goR0RJJgATmDoYjS0gyPJ4yKTWTOIc1wLJZqFZrDZbRBaUwkfZuew6SFcepuILBED4IQQOAyK7hYifDJTbKIAC0GnBCFJFxxnUilDA+O+01AOQ8CnJGxIGn29lMpjUxhcCh0VPauNIPTEDMyTLkiA8PhIxh5Cg8DS8pgM5L5UOalSMah0cP05hFYRptweT3pqQm0qJCHlVSVphVashmvKCDUAN17j0XNMqrUyhRASAA */\n  context: {\n    editDeploymentTarget: undefined,\n  },\n  initial: 'idle',\n  states: {\n    idle: {\n      entry: assign({\n        editDeploymentTarget: () => undefined,\n      }),\n      on: {\n        CREATE: {\n          target: 'create',\n        },\n        EDIT: {\n          actions: 'setEditDeploymentTarget',\n          target: 'edit',\n        },\n      },\n    },\n    edit: {\n      on: {\n        CLOSE: {\n          target: 'idle',\n        },\n      },\n    },\n    create: {\n      on: {\n        CLOSE: {\n          target: 'idle',\n        },\n      },\n    },\n  },\n})\n","import {AddIcon} from '@sanity/icons/Add'\nimport {Box, Button, Card, Flex, Text} from '@sanity/ui'\nimport {ToastProvider} from '@sanity/ui/toast'\nimport {Tooltip} from '@sanity/ui/tooltip'\nimport {QueryClient, QueryClientProvider} from '@tanstack/react-query'\nimport {useMachine} from '@xstate/react'\n\nimport {useSanityClient} from './client'\nimport DeploymentTargets from './components/DeploymentTargets'\nimport DialogForm from './components/DialogForm'\nimport StateDebug from './components/StateDebug'\nimport {Z_INDEX_TOAST_PROVIDER} from './constants'\nimport {deploymentTargetListMachine} from './machines/deploymentTargetList'\nimport {dialogMachine} from './machines/dialog'\nimport {type Sanity} from './types'\n\nconst queryClient = new QueryClient({\n  defaultOptions: {\n    queries: {\n      gcTime: 0,\n      staleTime: 0,\n    },\n  },\n})\n\nconst Widget = () => {\n  const client = useSanityClient()\n\n  const [deploymentTargetListState, deploymentTargetListStateTransition] = useMachine(\n    deploymentTargetListMachine,\n    {input: {client}},\n  )\n  const [dialogState, dialogStateTransition] = useMachine(dialogMachine)\n\n  // Callbacks\n  const handleDialogClose = () => {\n    dialogStateTransition({type: 'CLOSE'})\n  }\n  const handleDialogShowCreate = () => {\n    dialogStateTransition({type: 'CREATE'})\n  }\n  const handleDialogShowEdit = (deploymentTarget: Sanity.DeploymentTarget) => {\n    dialogStateTransition({type: 'EDIT', deploymentTarget})\n  }\n  const handleTargetCreate = (deploymentTarget: Sanity.DeploymentTarget) => {\n    deploymentTargetListStateTransition({type: 'CREATE', deploymentTarget})\n  }\n  const handleTargetDelete = (id: string) => {\n    deploymentTargetListStateTransition({type: 'DELETE', id})\n  }\n  const handleTargetUpdate = (deploymentTarget: Sanity.DeploymentTarget) => {\n    deploymentTargetListStateTransition({type: 'UPDATE', deploymentTarget})\n  }\n\n  return (\n    <ToastProvider zOffset={Z_INDEX_TOAST_PROVIDER}>\n      <QueryClientProvider client={queryClient}>\n        <Card radius={2} style={{overflow: 'hidden '}}>\n          {/* xstate debug */}\n          <StateDebug name=\"List\" state={deploymentTargetListState} />\n\n          {/* Header */}\n          <Flex align=\"center\" justify=\"space-between\" paddingX={3} paddingY={2}>\n            <Text size={5} weight=\"semibold\">\n              Vercel deployments\n            </Text>\n\n            <Tooltip\n              content={\n                <Box padding={2}>\n                  <Text muted size={1}>\n                    Create new deployment target\n                  </Text>\n                </Box>\n              }\n              placement=\"left\"\n            >\n              <Button fontSize={1} icon={AddIcon} onClick={handleDialogShowCreate} mode=\"bleed\" />\n            </Tooltip>\n          </Flex>\n\n          <Box>\n            {deploymentTargetListState.matches('pending') && (\n              <Box paddingX={3} paddingY={4}>\n                <Text>Loading...</Text>\n              </Box>\n            )}\n\n            {deploymentTargetListState.matches({ready: 'withoutData'}) && (\n              <Flex align=\"center\" gap={3} paddingX={3} paddingY={4}>\n                <Text>No deployment targets found.</Text>\n                <Button\n                  fontSize={1}\n                  mode=\"ghost\"\n                  onClick={handleDialogShowCreate}\n                  text=\"Create a new target\"\n                />\n              </Flex>\n            )}\n\n            {deploymentTargetListState.matches({ready: 'withData'}) && (\n              <DeploymentTargets\n                items={deploymentTargetListState.context.results}\n                onDialogEdit={handleDialogShowEdit}\n              />\n            )}\n\n            {deploymentTargetListState.matches('failed') && (\n              <Box paddingX={3} paddingY={4}>\n                <Text>\n                  Failed to retrieve deployment targets. Please check the developer console log for\n                  more information.\n                </Text>\n              </Box>\n            )}\n          </Box>\n        </Card>\n\n        {/* Dialogs */}\n        {dialogState.matches('create') && (\n          <DialogForm onClose={handleDialogClose} onCreate={handleTargetCreate} />\n        )}\n\n        {dialogState.matches('edit') && (\n          <DialogForm\n            deploymentTarget={dialogState.context.editDeploymentTarget}\n            onClose={handleDialogClose}\n            onDelete={handleTargetDelete}\n            onUpdate={handleTargetUpdate}\n          />\n        )}\n      </QueryClientProvider>\n    </ToastProvider>\n  )\n}\n\nexport default Widget\n","import '@sanity/ui/styles.css'\nimport type {DashboardWidget, LayoutConfig} from '@sanity/dashboard'\n\nimport Widget from './app'\n\nexport function vercelWidget(config: {layout?: LayoutConfig} = {}): DashboardWidget {\n  return {\n    name: 'vercel',\n    component: Widget,\n    layout: config.layout ?? {width: 'full'},\n  }\n}\n"],"mappings":"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"}
\ No newline at end of file