{"version":3,"file":"index.mjs","sources":["../src/_lib/connector/helpers.ts","../src/_lib/connector/useRegionRects.ts","../src/_lib/connector/ConnectorRegion.tsx","../src/_lib/connector/ConnectorsStoreContext.ts","../src/_lib/connector/useConnectorsStore.ts","../src/_lib/connector/ConnectFromRegion.tsx","../src/_lib/connector/ConnectorsStore.ts","../src/_lib/connector/ConnectorsProvider.tsx","../src/_lib/connector/mapConnectorToLine.ts","../src/_lib/form/constants.ts","../src/types.ts","../src/helpers/misc.ts","../src/helpers/typeUtils.ts","../src/helpers/assistSupported.ts","../src/onboarding/FirstAssistedPathProvider.tsx","../src/constants.ts","../src/helpers/ids.ts","../src/assistDocument/hooks/useDocumentState.ts","../src/assistDocument/hooks/useStudioAssistDocument.ts","../src/assistDocument/hooks/useInstructionToaster.tsx","../src/assistDocument/AssistDocumentInput.tsx","../src/assistDocument/AssistDocumentContext.tsx","../src/assistDocument/components/SelectedFieldContext.tsx","../src/assistInspector/helpers.ts","../src/assistLayout/AiAssistanceConfigContext.tsx","../src/schemas/serialize/schemaUtils.ts","../src/schemas/serialize/serializeSchema.ts","../src/useApiClient.ts","../src/assistLayout/RunInstructionProvider.tsx","../src/assistDocument/RequestRunInstructionProvider.tsx","../src/assistDocument/hooks/useAssistDocumentContextValue.tsx","../src/assistDocument/AssistDocumentContextProvider.tsx","../src/assistDocument/AssistDocumentLayout.tsx","../src/components/AssistFeatureBadge.tsx","../src/onboarding/FieldActionsOnboarding.tsx","../src/onboarding/onboardingStore.ts","../src/components/FadeInContent.tsx","../../node_modules/@sanity/color/dist/index.js","../src/presence/AssistAvatar.tsx","../src/presence/AiFieldPresence.tsx","../src/presence/useAssistPresence.ts","../src/assistFormComponents/AssistField.tsx","../src/components/SafeValueInput.tsx","../src/assistFormComponents/AssistFormBlock.tsx","../src/assistFormComponents/AssistInlineFormBlock.tsx","../src/assistFormComponents/AssistItem.tsx","../src/_lib/form/DocumentForm.tsx","../src/assistDocument/components/AssistTypeContext.tsx","../src/helpers/conditionalMembers.ts","../src/onboarding/InspectorOnboarding.tsx","../src/assistInspector/FieldAutocomplete.tsx","../src/components/TimeAgo.tsx","../src/assistInspector/InstructionTaskHistoryButton.tsx","../src/assistInspector/AssistInspector.tsx","../src/assistInspector/constants.ts","../src/assistInspector/index.ts","../src/assistConnectors/draw/arrowPath.ts","../src/assistConnectors/draw/connectorPath.ts","../src/assistConnectors/ConnectorPath.tsx","../src/assistConnectors/AssistConnectorsOverlay.tsx","../src/helpers/styleguide.ts","../src/translate/getLanguageParams.ts","../src/translate/languageStore.ts","../src/translate/paths.ts","../src/translate/FieldTranslationProvider.tsx","../src/assistLayout/AssistLayout.tsx","../src/components/ImageContext.tsx","../src/assistDocument/components/instruction/appearance/IconInput.tsx","../src/helpers/useAssistSupported.ts","../src/translate/translateActions.tsx","../src/fieldActions/generateCaptionActions.tsx","../src/fieldActions/generateImageActions.tsx","../src/fieldActions/PrivateIcon.tsx","../../node_modules/get-random-values-esm/index.mjs","../src/_lib/randomKey.ts","../src/fieldActions/customFieldActions.tsx","../src/fieldActions/assistFieldActions.tsx","../src/presence/AssistDocumentPresence.tsx","../src/assistDocument/components/instruction/BackToInstructionsLink.tsx","../src/assistDocument/components/AssistDocumentForm.tsx","../src/assistDocument/components/FieldRefPreview.tsx","../src/assistDocument/components/generic/HiddenFieldTitle.tsx","../src/assistDocument/components/instruction/appearance/InstructionVisibility.tsx","../src/assistDocument/components/instruction/FieldRefInput.tsx","../src/assistDocument/components/helpers.ts","../src/assistDocument/components/instruction/InstructionInput.tsx","../src/assistDocument/components/instruction/InstructionOutputField.tsx","../src/assistDocument/components/instruction/InstructionOutputInput.tsx","../src/assistDocument/components/instruction/PromptInput.tsx","../src/assistDocument/components/InstructionsArrayField.tsx","../src/assistDocument/components/InstructionsArrayInput.tsx","../src/components/HideReferenceChangedBannerInput.tsx","../src/schemas/contextDocumentSchema.tsx","../src/schemas/assistDocumentSchema.tsx","../src/schemas/index.ts","../src/plugin.tsx","../src/_lib/fixedListenQuery.ts","../src/_lib/useListeningQuery.ts","../src/schemas/serialize/SchemTypeTool.tsx","../src/fieldActions/useUserInput.ts"],"sourcesContent":["export function hasOverflowScroll(el: HTMLElement): boolean {\n  const overflow = getComputedStyle(el).overflow\n\n  return overflow.includes('auto') || overflow.includes('hidden') || overflow.includes('scroll')\n}\n","import {useEffect, useMemo, useRef, useState} from 'react'\n\nimport {hasOverflowScroll} from './helpers'\nimport {Rect, Scroll} from './types'\n\nexport function useRegionRects() {\n  const ref = useRef<HTMLDivElement>(null)\n\n  const [relativeBoundsRect, setRelativeBoundsRect] = useState<Rect | null>(null)\n  const [relativeElementRect, setRelativeElementRect] = useState<Rect | null>(null)\n  const [boundsScroll, setBoundsScroll] = useState<Scroll>({x: 0, y: 0})\n  const [scroll, setScroll] = useState<Scroll>({x: 0, y: 0})\n\n  const boundsScrollXRef = useRef(0)\n  const boundsScrollYRef = useRef(0)\n\n  const elementScrollXRef = useRef(0)\n  const elementScrollYRef = useRef(0)\n\n  useEffect(() => {\n    const el = ref.current\n\n    if (!el) return undefined\n\n    const scrollParents: HTMLElement[] = []\n    let parent = el.parentElement\n\n    while (parent && parent !== document.body) {\n      if (\n        hasOverflowScroll(parent)\n        // || parent.scrollHeight > parent.clientHeight\n      ) {\n        scrollParents.push(parent)\n      }\n\n      parent = parent.parentElement\n    }\n\n    function handleResize() {\n      const scrollParent = scrollParents[0]\n\n      const boundsRect = scrollParent?.getBoundingClientRect() || {\n        x: 0,\n        y: 0,\n        width: window.innerWidth,\n        height: window.innerHeight,\n      }\n\n      const domRect = el!.getBoundingClientRect()\n\n      setRelativeBoundsRect({\n        x: boundsRect.x + boundsScrollXRef.current,\n        y: boundsRect.y + boundsScrollYRef.current,\n        w: boundsRect.width,\n        h: boundsRect.height,\n      })\n\n      setRelativeElementRect({\n        x: domRect.x + elementScrollXRef.current,\n        y: domRect.y + elementScrollYRef.current,\n        w: domRect.width,\n        h: domRect.height,\n      })\n    }\n\n    function handleScroll() {\n      let scrollX = window.scrollX\n      let scrollY = window.scrollY\n\n      for (const scrollParent of scrollParents) {\n        scrollX += scrollParent.scrollLeft\n        scrollY += scrollParent.scrollTop\n      }\n\n      const scrollParent = scrollParents[0]\n\n      boundsScrollXRef.current = scrollX - (scrollParent?.scrollLeft || window.scrollX)\n\n      boundsScrollYRef.current = scrollY - (scrollParent?.scrollTop || window.scrollY)\n\n      setBoundsScroll({\n        x: boundsScrollXRef.current,\n        y: boundsScrollYRef.current,\n      })\n\n      elementScrollXRef.current = scrollX\n      elementScrollYRef.current = scrollY\n\n      setScroll({x: scrollX, y: scrollY})\n    }\n\n    window.addEventListener('scroll', handleScroll, {passive: true})\n\n    const ro = new ResizeObserver(handleResize)\n\n    ro.observe(el)\n\n    for (const scrollParent of scrollParents) {\n      scrollParent.addEventListener('scroll', handleScroll, {passive: true})\n      ro.observe(scrollParent)\n    }\n\n    handleScroll()\n\n    return () => {\n      ro.unobserve(el)\n\n      for (const scrollParent of scrollParents) {\n        ro.unobserve(scrollParent)\n        scrollParent.removeEventListener('scroll', handleScroll)\n      }\n\n      ro.disconnect()\n\n      window.removeEventListener('scroll', handleScroll)\n    }\n  }, [])\n\n  const bounds: Rect | null = useMemo(\n    () =>\n      relativeBoundsRect && {\n        x: relativeBoundsRect.x - boundsScroll.x,\n        y: relativeBoundsRect.y - boundsScroll.y,\n        w: relativeBoundsRect.w,\n        h: relativeBoundsRect.h,\n      },\n    [relativeBoundsRect, boundsScroll],\n  )\n\n  const element: Rect | null = useMemo(\n    () =>\n      relativeElementRect && {\n        x: relativeElementRect.x - scroll.x,\n        y: relativeElementRect.y - scroll.y,\n        w: relativeElementRect.w,\n        h: relativeElementRect.h,\n      },\n    [relativeElementRect, scroll],\n  )\n\n  return {bounds, element, ref}\n}\n","import {HTMLProps, useEffect} from 'react'\n\nimport {ConnectorRegionRects} from './types'\nimport {useRegionRects} from './useRegionRects'\n\nexport function ConnectorRegion(\n  props: {\n    onRectsChange?: (rects: ConnectorRegionRects | null) => void\n  } & HTMLProps<HTMLDivElement>,\n) {\n  const {children, onRectsChange, ...restProps} = props\n\n  const {bounds, element, ref} = useRegionRects()\n\n  useEffect(() => {\n    onRectsChange?.(bounds && element ? {bounds, element} : null)\n  }, [bounds, element, onRectsChange])\n\n  return (\n    <div {...restProps} ref={ref}>\n      {children}\n    </div>\n  )\n}\n","import {createContext} from 'react'\n\nimport {ConnectorsStore} from './ConnectorsStore'\n\nexport const ConnectorsStoreContext = createContext<ConnectorsStore | null>(null)\n","import {useContext} from 'react'\n\nimport {ConnectorsStore} from './ConnectorsStore'\nimport {ConnectorsStoreContext} from './ConnectorsStoreContext'\n\nexport function useConnectorsStore(): ConnectorsStore {\n  const store = useContext(ConnectorsStoreContext)\n\n  if (!store) {\n    throw new Error('Missing connectors store context')\n  }\n\n  return store\n}\n","import {HTMLProps, useEffect, useState} from 'react'\n\nimport {ConnectorRegion} from './ConnectorRegion'\nimport {ConnectorRegionRects} from './types'\nimport {useConnectorsStore} from './useConnectorsStore'\n\nexport function ConnectFromRegion(\n  props: {_key: string; zIndex: number} & HTMLProps<HTMLDivElement>,\n) {\n  const {children, _key: key, zIndex, ...restProps} = props\n  const store = useConnectorsStore()\n  const [rects, setRects] = useState<ConnectorRegionRects | null>(null)\n\n  useEffect(() => store.from.subscribe(key, {zIndex}), [key, store, zIndex])\n\n  useEffect(() => {\n    if (rects) store.from.next(key, rects)\n  }, [key, rects, store])\n\n  return (\n    <ConnectorRegion {...restProps} onRectsChange={setRects}>\n      {children}\n    </ConnectorRegion>\n  )\n}\n","import {Connector, ConnectorRegionRects} from './types'\n\nexport interface ConnectorsStore {\n  connectors: {\n    subscribe: (observer: (connectors: Connector[]) => void) => () => void\n  }\n\n  from: {\n    subscribe: (key: string, payload?: Record<string, unknown>) => () => void\n    next: (key: string, rects: ConnectorRegionRects) => void\n  }\n\n  to: {\n    subscribe: (key: string, payload?: Record<string, unknown>) => () => void\n    next: (key: string, rects: ConnectorRegionRects) => void\n  }\n}\n\nexport function createConnectorsStore(): ConnectorsStore {\n  const configKeys: string[] = []\n  const fieldKeys: string[] = []\n\n  const channels = {\n    from: new Map<string, ConnectorRegionRects | null>(),\n    to: new Map<string, ConnectorRegionRects | null>(),\n  }\n\n  const payloads = {\n    from: new Map<string, Record<string, unknown> | undefined>(),\n    to: new Map<string, Record<string, unknown> | undefined>(),\n  }\n\n  const observers: ((connectors: Connector[]) => void)[] = []\n\n  function notifyObservers() {\n    const connectors: Connector[] = []\n\n    for (const key of configKeys) {\n      const toRects = channels.to.get(key)\n      const toPayload = payloads.from.get(key)\n\n      const fromRects = channels.from.get(key)\n      const fromPayload = payloads.from.get(key)\n\n      if (toRects && fromRects) {\n        connectors.push({\n          key,\n          from: {...fromRects, payload: fromPayload},\n          to: {...toRects, payload: toPayload},\n        })\n      }\n    }\n\n    for (const observer of observers) {\n      observer(connectors)\n    }\n  }\n\n  return {\n    to: {\n      subscribe(key, payload) {\n        channels.to.set(key, null)\n        payloads.to.set(key, payload)\n\n        configKeys.push(key)\n\n        return () => {\n          channels.to.delete(key)\n          payloads.to.delete(key)\n\n          const idx = configKeys.indexOf(key)\n\n          if (idx > -1) configKeys.splice(idx, 1)\n\n          notifyObservers()\n        }\n      },\n      next(key, rects) {\n        channels.to.set(key, rects)\n\n        if (fieldKeys.includes(key)) notifyObservers()\n      },\n    },\n\n    connectors: {\n      subscribe(observer) {\n        observers.push(observer)\n\n        return () => {\n          const idx = observers.indexOf(observer)\n\n          if (idx > -1) observers.splice(idx, 1)\n        }\n      },\n    },\n\n    from: {\n      subscribe(key, payload) {\n        channels.from.set(key, null)\n        payloads.from.set(key, payload)\n\n        fieldKeys.push(key)\n\n        return () => {\n          channels.from.delete(key)\n          payloads.from.delete(key)\n\n          const idx = fieldKeys.indexOf(key)\n\n          if (idx > -1) fieldKeys.splice(idx, 1)\n\n          notifyObservers()\n        }\n      },\n      next(key, rects) {\n        channels.from.set(key, rects)\n\n        if (configKeys.includes(key)) notifyObservers()\n      },\n    },\n  }\n}\n","import {ReactNode, useEffect, useMemo} from 'react'\n\nimport {ConnectorsStore, createConnectorsStore} from './ConnectorsStore'\nimport {ConnectorsStoreContext} from './ConnectorsStoreContext'\nimport {Connector} from './types'\n\nexport function ConnectorsProvider(props: {\n  children?: ReactNode\n  onConnectorsChange?: (connectors: Connector[]) => void\n}) {\n  const {children, onConnectorsChange} = props\n  const store: ConnectorsStore = useMemo(() => createConnectorsStore(), [])\n\n  useEffect(\n    () => onConnectorsChange && store.connectors.subscribe(onConnectorsChange),\n    [onConnectorsChange, store],\n  )\n\n  return <ConnectorsStoreContext.Provider value={store}>{children}</ConnectorsStoreContext.Provider>\n}\n","import {\n  ConnectorLine,\n  ConnectorLinePoint,\n  ConnectorOptions,\n  ConnectorRegionRects,\n  Rect,\n} from './types'\n\nfunction getConnectorLinePoint(\n  options: ConnectorOptions,\n  rect: Rect,\n  bounds: Rect,\n): ConnectorLinePoint {\n  const centerY = rect.y + rect.h / 2\n  const isAbove = rect.y + rect.h < bounds.y + options.arrow.marginY\n  const isBelow = rect.y > bounds.y + bounds.h - options.arrow.marginY\n\n  return {\n    bounds,\n    x: rect.x,\n    y: centerY,\n    centerY,\n    startY: rect.y + options.path.marginY,\n    endY: rect.y + rect.h - options.path.marginY,\n    isAbove,\n    isBelow,\n    outOfBounds: isAbove || isBelow,\n  }\n}\n\nexport function mapConnectorToLine(\n  options: ConnectorOptions,\n  connector: {from: ConnectorRegionRects; to: ConnectorRegionRects},\n): ConnectorLine {\n  const fromBounds: Rect = {\n    y: connector.from.bounds.y + options.arrow.threshold,\n    // bottom: connector.from.bounds.y + connector.from.bounds.h - options.arrow.threshold,\n    x: connector.from.bounds.x,\n    // right: connector.from.bounds.x + connector.from.bounds.w,\n    w: connector.from.bounds.w,\n    h: connector.from.bounds.h - options.arrow.threshold * 2,\n  }\n\n  const from = getConnectorLinePoint(options, connector.from.element, fromBounds)\n  from.x = connector.from.element.x + connector.from.element.w // + 1\n\n  const fromBottom = fromBounds.y + fromBounds.h\n\n  const toBounds: Rect = {\n    y: connector.to.bounds.y + options.arrow.threshold,\n    // bottom: connector.to.bounds.y + connector.to.bounds.h - options.arrow.threshold,\n    x: connector.to.bounds.x,\n    // right: connector.to.bounds.x + connector.to.bounds.w,\n    w: connector.to.bounds.w,\n    h: connector.to.bounds.h - options.arrow.threshold * 2,\n  }\n\n  const toBottom = toBounds.y + toBounds.h\n\n  const to = getConnectorLinePoint(options, connector.to.element, toBounds)\n\n  const maxStartY = Math.max(to.startY, from.startY)\n\n  // Align from <-> to vertically\n  from.y = Math.min(maxStartY, from.endY)\n  if (from.y < toBounds.y) {\n    from.y = Math.min(toBounds.y, from.endY)\n  } else if (from.y > toBottom) {\n    from.y = Math.max(toBottom, from.startY)\n  }\n  to.y = Math.min(maxStartY, to.endY)\n  if (to.y < fromBounds.y) {\n    to.y = Math.min(fromBounds.y, to.endY)\n  } else if (to.y > fromBottom) {\n    to.y = Math.max(fromBottom, to.startY)\n  }\n\n  // Keep within bounds\n  from.y = Math.min(Math.max(from.y, fromBounds.y), fromBottom)\n  to.y = Math.min(Math.max(to.y, toBounds.y), toBottom)\n\n  return {from, to}\n}\n","export const assistFormId = 'assist'\n","import {PortableTextBlock, PortableTextMarkDefinition, PortableTextSpan} from '@portabletext/types'\nimport {SanityDocument} from 'sanity'\n\n//id prefixes\nexport const assistDocumentIdPrefix = 'sanity.assist.schemaType.'\nexport const assistDocumentStatusIdPrefix = 'sanity.assist.status.'\nexport const assistSchemaIdPrefix = 'sanity.assist.schema.'\n\n// type names\nexport const assistDocumentTypeName = 'sanity.assist.schemaType.annotations' as const\nexport const assistFieldTypeName = 'sanity.assist.schemaType.field' as const\nexport const instructionTypeName = 'sanity.assist.instruction' as const\nexport const promptTypeName = 'sanity.assist.instruction.prompt' as const\n\nexport const userInputTypeName = 'sanity.assist.instruction.userInput' as const\nexport const instructionContextTypeName = 'sanity.assist.instruction.context' as const\nexport const fieldReferenceTypeName = 'sanity.assist.instruction.fieldRef' as const\n\n// user-facing type. Intentionally does not have sanity. prefix\nexport const contextDocumentTypeName = 'assist.instruction.context' as const\n\nexport const assistTasksStatusTypeName = 'sanity.assist.task.status' as const\nexport const instructionTaskTypeName = 'sanity.assist.instructionTask' as const\nexport const fieldPresenceTypeName = 'sanity.assist.instructionTask.presence' as const\n\nexport const assistSerializedTypeName = 'sanity.assist.serialized.type' as const\nexport const assistSerializedFieldTypeName = 'sanity.assist.serialized.field' as const\n\nexport const outputFieldTypeName = 'sanity.assist.output.field' as const\nexport const outputTypeTypeName = 'sanity.assist.output.type' as const\n\n//url params\nexport const inspectParam = 'inspect' as const\nexport const fieldPathParam = 'pathKey' as const\nexport const instructionParam = 'instruction' as const\n\n// other constants\nexport const documentRootKey = '<document>'\n\nexport type SerializedSchemaMember = Omit<SerializedSchemaType, 'name' | '_type'> & {\n  _type?: typeof assistSerializedFieldTypeName\n  name?: string\n}\n\nexport interface SerializedSchemaType {\n  _type?: typeof assistSerializedTypeName\n  _id?: string\n  type: string\n  name: string\n  title?: string\n  fields?: SerializedSchemaMember[]\n  of?: SerializedSchemaMember[]\n  to?: SerializedSchemaMember[]\n  annotations?: SerializedSchemaMember[]\n  inlineOf?: SerializedSchemaMember[]\n  values?: string[] | {value: string; title?: string}[]\n  hidden?: boolean | 'function'\n  readOnly?: boolean | 'function'\n  options?: {\n    /** equivalent to options.aiAssist.imageDescriptionField - not renamed in the api for backwards compatability */\n    imagePromptField?: string\n    embeddingsIndex?: string\n  }\n}\n\nexport interface AssistDocument extends SanityDocument {\n  fields?: AssistField[]\n  instructions?: StudioInstruction[]\n}\n\nexport interface PresetInstruction {\n  _key: string\n  prompt?: PromptTextBlock[]\n\n  title?: string\n  /**\n   * String key from `@sanity/icons` IconMap\n   */\n  icon?: string\n\n  /**\n   * Type/field filter\n   */\n  output?: (OutputFieldItem | OutputTypeItem)[]\n}\n\nexport interface PresetField {\n  path?: string\n  instructions?: PresetInstruction[]\n}\n\nexport interface AssistPreset {\n  fields?: PresetField[]\n}\n\nexport interface SanityAssistDocument {\n  _id: string\n  _type: typeof assistDocumentTypeName\n  fields?: StudioAssistField[]\n}\n\nexport interface StudioAssistDocument extends SanityAssistDocument {\n  // added after loading\n  tasks?: InstructionTask[]\n}\n\nexport interface AssistField {\n  _key: string\n  _type: typeof assistFieldTypeName\n  path?: string\n  instructions?: StudioInstruction[]\n}\n\nexport interface StudioAssistField {\n  _key: string\n  path?: string\n  instructions?: StudioInstruction[]\n\n  // added\n  tasks?: InstructionTask[]\n}\n\nexport interface FieldRef extends PortableTextMarkDefinition {\n  _type: typeof fieldReferenceTypeName\n  path?: string\n}\n\nexport interface ContextBlock {\n  _type: typeof instructionContextTypeName\n  reference?: {\n    _type: 'reference'\n    _ref?: string\n  }\n}\n\nexport interface UserInputBlock {\n  _type: typeof userInputTypeName\n  _key: string\n  message?: string\n  description?: string\n}\n\nexport type InlinePromptBlock = PortableTextSpan | FieldRef | UserInputBlock | ContextBlock\nexport type PromptTextBlock = Omit<\n  PortableTextBlock<never, InlinePromptBlock, 'normal', never>,\n  '_type'\n> & {_type: 'block'}\n\nexport type PromptBlock = PromptTextBlock | FieldRef | ContextBlock | UserInputBlock\n\nexport interface AiPresence {\n  _key: string\n  _type: typeof fieldPresenceTypeName\n  path?: string\n  started?: string\n}\n\nexport type TaskEndedReason = 'success' | 'error' | 'aborted' | 'timeout'\n\nexport interface InstructionTask {\n  _key: string\n  _type: typeof instructionTaskTypeName\n  instructionKey?: string\n  title?: string\n  path?: string\n  started?: string\n  updated?: string\n  ended?: string\n  message?: string\n  reason?: TaskEndedReason\n  presence?: AiPresence[]\n  startedByUserId?: string\n\n  //added by studio\n  // eslint-disable-next-line no-use-before-define\n  instruction?: StudioInstruction\n}\n\nexport interface StudioInstruction {\n  _key: string\n  _type: typeof instructionTypeName\n  prompt?: PromptBlock[]\n\n  icon?: string\n  userId?: string\n  title?: string\n  placeholder?: string\n  output?: (OutputFieldItem | OutputTypeItem)[]\n\n  //added after query / synthetic fields\n  tasks?: InstructionTask[]\n}\n\nexport interface AssistTasksStatus {\n  _id: string\n  _type: typeof assistTasksStatusTypeName\n  tasks?: InstructionTask[]\n}\n\nexport interface AssistInspectorRouteParams {\n  [inspectParam]?: string\n  [fieldPathParam]?: string\n  [instructionParam]?: string\n}\n\nexport interface OutputFieldItem {\n  _type: typeof outputFieldTypeName\n  _key: string\n  //path relative to the field the instruction is for (same as _key)\n  relativePath?: string\n}\n\nexport interface OutputTypeItem {\n  _type: typeof outputTypeTypeName\n  _key: string\n  /* array item type name */\n  type?: string\n  //path relative to the array-field the instruction is for, can be empty string (the array itself, same as _key)\n  relativePath?: string\n}\n","import {useMemo} from 'react'\nimport {Path, pathToString} from 'sanity'\n\nimport {documentRootKey, StudioInstruction} from '../types'\n\nexport function usePathKey(path: Path | string) {\n  return useMemo(() => {\n    return getPathKey(path)\n  }, [path])\n}\n\nexport function getPathKey(path: Path | string) {\n  if (path.length) {\n    return Array.isArray(path) ? pathToString(path) : path\n  }\n  return documentRootKey\n}\n\nexport function getInstructionTitle(instruction?: StudioInstruction) {\n  return instruction?.title ?? 'Untitled'\n}\n\nexport function isDefined<T>(t: T | undefined | null): t is T {\n  return t !== undefined && t !== null\n}\n","import {ArraySchemaType, ImageOptions, SchemaType} from 'sanity'\n\nexport function isPortableTextArray(type: ArraySchemaType) {\n  return type.of.find((t) => isType(t, 'block'))\n}\n\n/**\n * Returns true if the `schemaType` or any of its parent types (`schemaType.type`)` has `name` equal\n * to `typeName`.\n *\n * Useful for checking if `schemaType` is a type alias of `ìmage`, `code` or similar.\n */\nexport function isType(schemaType: SchemaType, typeName: string): boolean {\n  if (schemaType.name === typeName) {\n    return true\n  }\n  if (!schemaType.type) {\n    return false\n  }\n  return isType(schemaType.type, typeName)\n}\n\nexport function isImage(schemaType: SchemaType) {\n  return isType(schemaType, 'image')\n}\n\nexport function getDescriptionFieldOption(\n  schemaType: SchemaType | undefined,\n): {path: string; updateOnImageChange: boolean} | undefined {\n  if (!schemaType) {\n    return undefined\n  }\n  const descriptionField = (schemaType.options as ImageOptions)?.aiAssist?.imageDescriptionField\n  if (typeof descriptionField === 'string') {\n    return {\n      path: descriptionField,\n      updateOnImageChange: true,\n    }\n  } else if (descriptionField) {\n    return {\n      path: descriptionField.path,\n      updateOnImageChange: descriptionField.updateOnImageChange ?? true,\n    }\n  }\n  return getDescriptionFieldOption(schemaType.type)\n}\n\nexport function getImageInstructionFieldOption(\n  schemaType: SchemaType | undefined,\n): string | undefined {\n  if (!schemaType) {\n    return undefined\n  }\n  const imageInstructionField = (schemaType.options as ImageOptions)?.aiAssist\n    ?.imageInstructionField\n  if (imageInstructionField) {\n    return imageInstructionField\n  }\n  return getImageInstructionFieldOption(schemaType.type)\n}\n","import {ReferenceOptions, SchemaType} from 'sanity'\n\nimport {AssistOptions} from '../schemas/typeDefExtensions'\nimport {isType} from './typeUtils'\n\nexport function isSchemaAssistEnabled(type: SchemaType) {\n  return !(type.options as AssistOptions | undefined)?.aiAssist?.exclude\n}\n\nexport function isAssistSupported(type: SchemaType) {\n  if (!isSchemaAssistEnabled(type)) {\n    return false\n  }\n\n  if (isDisabled(type)) {\n    return false\n  }\n\n  if (type.jsonType === 'array') {\n    const unsupportedArray = type.of.every((t) => isDisabled(t))\n    return !unsupportedArray\n  }\n\n  if (type.jsonType === 'object') {\n    const unsupportedObject = type.fields.every((field) => isDisabled(field.type))\n    return (\n      !unsupportedObject ||\n      /* to allow attaching custom actions on fieldless images */\n      isType(type, 'image')\n    )\n  }\n  return true\n}\n\nfunction isDisabled(type: SchemaType) {\n  return !isSchemaAssistEnabled(type) || isUnsupportedType(type)\n}\n\nfunction isUnsupportedType(type: SchemaType) {\n  return (\n    type.name === 'sanity.imageCrop' ||\n    type.name === 'sanity.imageHotspot' ||\n    isType(type, 'globalDocumentReference') ||\n    (isType(type, 'reference') &&\n      !(type?.options as ReferenceOptions)?.aiAssist?.embeddingsIndex) ||\n    isType(type, 'crossDatasetReference') ||\n    isType(type, 'file')\n  )\n}\n","import {createContext, PropsWithChildren, useMemo} from 'react'\nimport {FieldMember, ObjectInputProps, pathToString} from 'sanity'\n\nimport {isAssistSupported} from '../helpers/assistSupported'\n\nexport const FirstAssistedPathContext = createContext<string | undefined>(undefined)\n\nexport interface FirstAssistedPathProviderProps {\n  members: ObjectInputProps['members']\n}\n\nexport function FirstAssistedPathProvider(\n  props: PropsWithChildren<FirstAssistedPathProviderProps>,\n) {\n  const {members} = props\n\n  const firstAssistedPath = useMemo(() => {\n    const firstAssisted = members.find(\n      (member): member is FieldMember =>\n        member.kind === 'field' && isAssistSupported(member.field.schemaType),\n    )\n    return firstAssisted?.field.path ? pathToString(firstAssisted?.field.path) : undefined\n  }, [members])\n\n  return (\n    <FirstAssistedPathContext.Provider value={firstAssistedPath}>\n      {props.children}\n    </FirstAssistedPathContext.Provider>\n  )\n}\n","import {minutesToMilliseconds} from 'date-fns'\n\nexport const releaseAnnouncementUrl =\n  'https://www.sanity.io/blog/sanity-ai-assist-announcement?utm_source=sanity-assist-plugin&utm_medium=organic_social&utm_campaign=ai-assist&utm_content='\n\nexport const instructionGuideUrl =\n  'https://sanity.io/guides/getting-started-with-ai-assist-instructions?utm_source=sanity-assist-plugin&utm_medium=organic_social&utm_campaign=ai-assist&utm_content='\n\nexport const giveFeedbackUrl = 'https://forms.gle/Kwz7CThxGeA2GiEU8'\n\nexport const salesUrl =\n  'https://www.sanity.io/contact/sales?utm_source=sanity-assist-plugin&utm_medium=organic_social&utm_campaign=ai-assist&utm_content='\n\nexport const packageName = '@sanity/assist'\n\nexport const pluginTitle = 'Sanity AI Assist'\n\nexport const pluginTitleShort = 'AI Assist'\n\nexport const maxHistoryVisibilityMs = minutesToMilliseconds(30)\n","import {getPublishedId, getVersionFromId, isVersionId} from 'sanity'\n\nimport {assistDocumentIdPrefix, assistDocumentStatusIdPrefix} from '../types'\n\nconst illegalIdChars = /[^a-zA-Z0-9._-]/g\n\nexport function publicId(id: string) {\n  return id.replace('drafts.', '')\n}\n\nexport function assistDocumentId(documentType: string) {\n  return `${assistDocumentIdPrefix}${documentType}`.replace(illegalIdChars, '_')\n}\n\nexport function assistTasksStatusId(documentId: string) {\n  if (isVersionId(documentId)) {\n    // Creates an id: sanity.assist.status.<versionName>.<documentId>\n    return `${assistDocumentStatusIdPrefix}${getVersionFromId(documentId)}.${getPublishedId(documentId)}`\n  }\n\n  // Creates an id: sanity.assist.status<documentId>\n  return `${assistDocumentStatusIdPrefix}${getPublishedId(documentId)}`\n}\n","import {useEditState} from 'sanity'\n\nexport function useDocumentState<T>(id: string, docType: string): T | undefined {\n  const state = useEditState(id, docType)\n  return (state.draft || state.published) as T | undefined\n}\n","import {useEffect, useMemo} from 'react'\nimport {type ObjectSchemaType, typed, useClient, useCurrentUser} from 'sanity'\n\nimport {maxHistoryVisibilityMs} from '../../constants'\nimport {assistDocumentId, assistTasksStatusId} from '../../helpers/ids'\nimport {\n  assistDocumentTypeName,\n  type AssistTasksStatus,\n  assistTasksStatusTypeName,\n  type InstructionTask,\n  type StudioAssistDocument,\n  type StudioAssistField,\n  type StudioInstruction,\n} from '../../types'\nimport {useDocumentState} from './useDocumentState'\n\ninterface UseAssistDocumentProps {\n  documentId: string\n  schemaType: ObjectSchemaType\n  initDoc?: boolean\n}\n\nexport function useStudioAssistDocument({\n  documentId,\n  schemaType,\n  initDoc,\n}: UseAssistDocumentProps): StudioAssistDocument | undefined {\n  const documentTypeName = schemaType.name\n  const currentUser = useCurrentUser()\n\n  const assistDocument = useDocumentState<StudioAssistDocument>(\n    assistDocumentId(documentTypeName),\n    assistDocumentTypeName,\n  )\n  const assistTasksStatus = useDocumentState<AssistTasksStatus>(\n    assistTasksStatusId(documentId ?? ''),\n    assistTasksStatusTypeName,\n  )\n\n  const client = useClient({apiVersion: '2023-01-01'})\n\n  useEffect(() => {\n    if (!assistDocument && initDoc) {\n      client\n        .createIfNotExists({\n          _id: assistDocumentId(documentTypeName),\n          _type: assistDocumentTypeName,\n        })\n        .catch(() => {\n          // best effort\n        })\n    }\n  }, [client, assistDocument, documentTypeName, initDoc])\n\n  return useMemo(() => {\n    if (!assistDocument) {\n      return undefined\n    }\n    const tasks = assistTasksStatus?.tasks ?? []\n    const fields = (assistDocument?.fields ?? []).map((assistField): StudioAssistField => {\n      return {\n        ...assistField,\n        tasks: tasks.filter((task) => task.path === assistField.path),\n        instructions: assistField.instructions\n          ?.filter((p) => !p.userId || p.userId === currentUser?.id)\n          .map((instruction) => asStudioInstruction(instruction, tasks)),\n      }\n    })\n    return typed<StudioAssistDocument>({\n      ...assistDocument,\n      tasks: tasks?.map((task) => {\n        const instruction = fields\n          .find((f) => f.path === task.path)\n          ?.instructions?.find((i) => i._key === task.instructionKey)\n        return {\n          ...task,\n          instruction,\n        }\n      }),\n      fields: fields,\n    })\n  }, [assistDocument, assistTasksStatus, currentUser])\n}\n\nfunction asStudioInstruction(\n  instruction: StudioInstruction,\n  run: InstructionTask[],\n): StudioInstruction {\n  return {\n    ...instruction,\n    tasks: run\n      .filter((task) => task.instructionKey === instruction._key)\n      .filter(\n        (task) =>\n          task.started &&\n          new Date().getTime() - new Date(task.started).getTime() < maxHistoryVisibilityMs,\n      ),\n  }\n}\n","import {useToast} from '@sanity/ui'\nimport {addSeconds, isAfter} from 'date-fns'\nimport {useEffect, useRef} from 'react'\nimport {ObjectSchemaType, useCurrentUser} from 'sanity'\n\nimport {getInstructionTitle} from '../../helpers/misc'\nimport {InstructionTask} from '../../types'\nimport {useStudioAssistDocument} from './useStudioAssistDocument'\n\nconst NO_TASKS: InstructionTask[] = []\n\nexport function useInstructionToaster(documentId: string, documentSchemaType: ObjectSchemaType) {\n  const assistDocument = useStudioAssistDocument({documentId, schemaType: documentSchemaType})\n\n  const assistDocLoaded = !!assistDocument\n  const currentUser = useCurrentUser()\n  const toast = useToast()\n  const tasks = assistDocument?.tasks\n  const previousTasks = useRef<InstructionTask[] | undefined | 'initial'>('initial')\n\n  useEffect(() => {\n    if (!assistDocLoaded) {\n      return\n    }\n\n    if (previousTasks.current !== 'initial') {\n      const prevTaskByKey = Object.fromEntries(\n        (previousTasks.current ?? NO_TASKS).map((run) => [run._key, run]),\n      )\n      const endedTasks = tasks\n        ?.filter((task) => task.startedByUserId === currentUser?.id)\n        .filter((task) => {\n          const prevTask = prevTaskByKey[task._key]\n          return (!prevTask && task.ended) || (!prevTask?.ended && task.ended)\n        })\n        // filter out old stuff\n        .filter((task) => task.ended && isAfter(addSeconds(new Date(task.ended), 30), new Date()))\n\n      endedTasks?.forEach((task) => {\n        const title = task.title ?? getInstructionTitle(task.instruction)\n        if (task.reason === 'error') {\n          toast.push({\n            title: `Failed: ${title}`,\n            status: 'error',\n            description: `Instruction failed. ${task.message ?? ''}`,\n            closable: true,\n            duration: 10000,\n          })\n        } else if (task.reason === 'timeout') {\n          toast.push({\n            title: `Timeout: ${title}`,\n            status: 'error',\n            description: `Instruction timed out.`,\n            closable: true,\n          })\n        } else if (task.reason === 'success') {\n          toast.push({\n            title: `Success: ${title}`,\n            status: 'success',\n            description: `Instruction completed.`,\n            closable: true,\n          })\n        } else if (task.reason === 'aborted') {\n          toast.push({\n            title: `Canceled: ${title}`,\n            status: 'warning',\n            description: `Instruction canceled.`,\n            closable: true,\n          })\n        }\n      })\n    }\n    previousTasks.current = tasks\n  }, [tasks, previousTasks, toast, currentUser, assistDocLoaded])\n}\n","import {useLayer} from '@sanity/ui'\nimport {useMemo} from 'react'\nimport type {InputProps, ObjectInputProps, ObjectSchemaType} from 'sanity'\nimport {useDocumentPane} from 'sanity/structure'\n\nimport {ConnectFromRegion} from '../_lib/connector'\nimport {assistFormId} from '../_lib/form/constants'\nimport {usePathKey} from '../helpers/misc'\nimport {isType} from '../helpers/typeUtils'\nimport {FirstAssistedPathProvider} from '../onboarding/FirstAssistedPathProvider'\nimport {assistDocumentTypeName} from '../types'\nimport {useInstructionToaster} from './hooks/useInstructionToaster'\n\nexport function AssistDocumentInputWrapper(props: InputProps) {\n  if (!isType(props.schemaType, 'document') && props.id !== 'root' && props.id !== assistFormId) {\n    return <AssistInput {...props} />\n  }\n\n  const documentId = (props.value as any)?._id as string | undefined\n  if (!documentId) {\n    return props.renderDefault(props)\n  }\n\n  return <AssistDocumentInput {...(props as ObjectInputProps)} documentId={documentId} />\n}\n\nfunction AssistDocumentInput({documentId, ...props}: ObjectInputProps & {documentId: string}) {\n  useInstructionToaster(documentId, props.schemaType)\n\n  const schemaType = useMemo(() => {\n    if (props.schemaType.name !== assistDocumentTypeName) {\n      return props.schemaType\n    }\n    return {\n      ...props.schemaType,\n      type: {\n        ...props.schemaType.type,\n        // compatability with i18nArrays plugin that requires this to be document\n        name: 'document',\n      },\n    } as ObjectSchemaType\n  }, [props.schemaType])\n\n  return (\n    <FirstAssistedPathProvider members={props.members}>\n      {props.renderDefault({...props, schemaType})}\n    </FirstAssistedPathProvider>\n  )\n}\n\nfunction AssistInput(props: InputProps) {\n  const {zIndex} = useLayer()\n  const {paneKey} = useDocumentPane()\n  const pathKey = usePathKey(props.path)\n\n  return (\n    <ConnectFromRegion _key={`${paneKey}_${pathKey}`} zIndex={zIndex} style={{minWidth: 0}}>\n      {props.renderDefault(props)}\n    </ConnectFromRegion>\n  )\n}\n","import {createContext, useContext} from 'react'\nimport {DocumentInspector, ObjectSchemaType, PatchEvent} from 'sanity'\n\nimport {InstructionTask, StudioAssistDocument} from '../types'\nimport {FieldRef} from '../assistInspector/helpers'\n\nexport type AssistDocumentContextValue = (\n  | {assistDocument: StudioAssistDocument; loading: false}\n  | {assistDocument: undefined; loading: true}\n) & {\n  documentIsNew: boolean\n  /**\n   * This is the _actual_ id of the current document (ie the document loaded in the pane); it contains draft. versions. prefix ect depending on context\n   */\n  assistableDocumentId: string\n  documentIsAssistable: boolean\n  documentSchemaType: ObjectSchemaType\n  openInspector: (inspectorName: string, paneParams?: Record<string, string>) => void\n  closeInspector: (inspectorName?: string) => void\n  inspector: DocumentInspector | null\n  selectedPath?: string\n  documentOnChange: (event: PatchEvent) => void\n\n  /**\n   * Synthetic task is used to display AI presence at the document level for the user who started the action.\n   * These are not persisted, so other users will not see them.\n   * It is mostly a helper to give _some_ visual feedback to the user while a custom action is running.\n   * This also means that reloading the page will remove the icon.\n   *\n   * Agent Actions add their own \"real\" tasks, so if a custom action calls an Agent action, _those_ tasks\n   * are visible across sessions.\n   */\n  syntheticTasks?: InstructionTask[]\n  addSyntheticTask: (syntheticTask: InstructionTask) => void\n  removeSyntheticTask: (syntheticTask: InstructionTask) => void\n\n  fieldRefs: FieldRef[]\n  fieldRefsByTypePath: Record<string, FieldRef | undefined>\n}\n\nexport const AssistDocumentContext = createContext<AssistDocumentContextValue | undefined>(\n  undefined,\n)\n\nexport function useAssistDocumentContext(): AssistDocumentContextValue {\n  const context = useContext(AssistDocumentContext)\n  if (!context) {\n    throw new Error('AssistDocumentContext value is missing')\n  }\n  return context\n}\n","import {createContext} from 'react'\nimport {ObjectSchemaType, SchemaType} from 'sanity'\n\nexport interface SelectedFieldContextValue {\n  documentSchema?: ObjectSchemaType\n  fieldSchema?: SchemaType\n}\n\nexport const SelectedFieldContext = createContext<SelectedFieldContextValue | undefined>(undefined)\nexport const SelectedFieldContextProvider = SelectedFieldContext.Provider\n","import {\n  BlockContentIcon,\n  BlockquoteIcon,\n  DocumentIcon,\n  ImageIcon,\n  LinkIcon,\n  OlistIcon,\n  StringIcon,\n} from '@sanity/icons'\nimport {extractWithPath} from '@sanity/mutator'\nimport {type ComponentType, useContext, useMemo} from 'react'\nimport {\n  type ArraySchemaType,\n  isKeySegment,\n  isObjectSchemaType,\n  type ObjectSchemaType,\n  type Path,\n  pathToString,\n  type SanityDocumentLike,\n  type SchemaType,\n  stringToPath,\n} from 'sanity'\nimport {type PaneRouterContextValue, usePaneRouter} from 'sanity/structure'\n\nimport {SelectedFieldContext} from '../assistDocument/components/SelectedFieldContext'\nimport {isAssistSupported} from '../helpers/assistSupported'\nimport {isPortableTextArray, isType} from '../helpers/typeUtils'\nimport {type AssistInspectorRouteParams, documentRootKey, fieldPathParam} from '../types'\n\nexport interface FieldRef {\n  key: string\n  path: Path\n  title: string\n  schemaType: SchemaType\n  icon: ComponentType\n  synthetic?: boolean\n}\n\nconst maxDepth = 6\n\nexport function getTypeIcon(schemaType: SchemaType) {\n  let t: SchemaType | undefined = schemaType\n\n  while (t) {\n    if (t.icon) return t.icon\n    t = t.type\n  }\n\n  if (isType(schemaType, 'slug')) return LinkIcon\n  if (isType(schemaType, 'image')) return ImageIcon\n  if (schemaType.jsonType === 'array' && isPortableTextArray(schemaType)) return BlockContentIcon\n\n  if (schemaType.jsonType === 'array') return OlistIcon\n  if (schemaType.jsonType === 'object') return BlockquoteIcon\n  if (schemaType.jsonType === 'string') return StringIcon\n\n  return DocumentIcon\n}\n\nexport function asFieldRefsByTypePath(fieldRefs: FieldRef[]): Record<string, FieldRef | undefined> {\n  const lookup: Record<string, FieldRef | undefined> = fieldRefs.reduce(\n    (acc, ref) => ({...acc, [ref.key]: ref}),\n    {},\n  )\n  return lookup\n}\n\nexport function getFieldRefsWithDocument(schemaType: ObjectSchemaType): FieldRef[] {\n  const fields = getFieldRefs(schemaType)\n  return [\n    {\n      key: documentRootKey,\n      icon: schemaType.icon ?? DocumentIcon,\n      title: `The entire document`,\n      path: [],\n      schemaType: schemaType,\n    },\n\n    ...fields,\n  ]\n}\n\nexport function getFieldRefs(\n  schemaType: ObjectSchemaType,\n  parent?: FieldRef,\n  depth = 0,\n): FieldRef[] {\n  if (depth >= maxDepth) {\n    return []\n  }\n  return schemaType.fields\n    .filter((f) => !f.name.startsWith('_'))\n    .flatMap((field) => {\n      const path: Path = parent ? [...parent.path, field.name] : [field.name]\n      const title = field.type.title ?? field.name\n      const fieldRef: FieldRef = {\n        key: patchableKey(pathToString(path)),\n        path,\n        title: parent ? [parent.title, title].join(' / ') : title,\n        schemaType: field.type,\n        icon: getTypeIcon(field.type),\n      }\n      const fields =\n        field.type.jsonType === 'object' ? getFieldRefs(field.type, fieldRef, depth + 1) : []\n\n      const syntheticFields =\n        field.type.jsonType === 'array' ? getSyntheticFields(field.type, fieldRef, depth + 1) : []\n      if (!isAssistSupported(field.type)) {\n        return [...fields, ...syntheticFields]\n      }\n      return [fieldRef, ...fields, ...syntheticFields]\n    })\n}\n\nfunction getSyntheticFields(schemaType: ArraySchemaType, parent?: FieldRef, depth = 0) {\n  if (depth >= maxDepth) {\n    return []\n  }\n\n  return schemaType.of\n    .filter((itemType) => !isType(itemType, 'block'))\n    .flatMap((itemType) => {\n      const segment = {_key: itemType.name}\n      const title = itemType.title ?? itemType.name\n      const path: Path = parent ? [...parent.path, segment] : [segment]\n      const fieldRef: FieldRef = {\n        key: patchableKey(pathToString(path)),\n        path,\n        title: parent ? [parent.title, title].join(' / ') : title,\n        schemaType: itemType,\n        icon: getTypeIcon(itemType),\n        synthetic: true,\n      }\n      const fields =\n        itemType.jsonType === 'object' ? getFieldRefs(itemType, fieldRef, depth + 1) : []\n\n      if (!isAssistSupported(itemType)) {\n        return fields\n      }\n      return [fieldRef, ...fields]\n    })\n}\n\nexport function getTypePath(doc: SanityDocumentLike, pathString: string) {\n  if (!pathString) {\n    return undefined\n  }\n\n  const path = stringToPath(pathString)\n  const currentPath: Path = []\n  let valid = true\n  const syntheticPath = path.map((segment) => {\n    currentPath.push(segment)\n\n    if (isKeySegment(segment)) {\n      const match = extractWithPath(pathToString(currentPath), doc)[0]\n      const value = match?.value\n      if (match && value && typeof value === 'object' && '_type' in value) {\n        return {_key: value._type as string}\n      }\n      valid = false\n    }\n    return segment\n  })\n\n  return valid ? patchableKey(pathToString(syntheticPath)) : undefined\n}\n\n/**\n * mutator crashes if path contains certain letters\n * @param pathKey\n */\nfunction patchableKey(pathKey: string) {\n  return pathKey.replace(/[=]=/g, ':').replace(/[[\\]]/g, '|').replace(/\"/g, '')\n}\n\nexport function useTypePath(doc: SanityDocumentLike, pathString: string) {\n  return useMemo(() => getTypePath(doc, pathString), [doc, pathString])\n}\n\nexport function useSelectedField(\n  documentSchemaType?: SchemaType,\n  path?: string,\n): FieldRef | undefined {\n  const selectableFields = useMemo(\n    () =>\n      documentSchemaType && isObjectSchemaType(documentSchemaType)\n        ? getFieldRefsWithDocument(documentSchemaType)\n        : [],\n    [documentSchemaType],\n  )\n\n  return useMemo(() => {\n    return path ? selectableFields?.find((f) => f.key === path) : undefined\n  }, [selectableFields, path])\n}\n\nexport function useSelectedFieldTitle() {\n  const {params} = useAiPaneRouter()\n  const {documentSchema} = useContext(SelectedFieldContext) ?? {}\n  const selectedField = useSelectedField(documentSchema, params[fieldPathParam])\n  return getFieldTitle(selectedField)\n}\n\nexport function getFieldTitle(field?: FieldRef) {\n  const schemaType = field?.schemaType\n  return field?.title ?? schemaType?.title ?? schemaType?.name ?? 'Untitled'\n}\n\nexport type AiPaneRouter = Omit<PaneRouterContextValue, 'setParams' | 'params'> & {\n  params: AssistInspectorRouteParams\n  setParams: (p: Record<keyof AssistInspectorRouteParams, string | undefined>) => void\n}\n\nexport function useAiPaneRouter() {\n  const paneRouter = usePaneRouter()\n\n  return useMemo(\n    () => ({...paneRouter, params: paneRouter.params ?? {}}) as AiPaneRouter,\n    [paneRouter],\n  )\n}\n","import {\n  createContext,\n  ReactNode,\n  useCallback,\n  useContext,\n  useEffect,\n  useMemo,\n  useState,\n} from 'react'\n\nimport {AssistPluginConfig} from '../plugin'\nimport {InstructStatus, useApiClient, useGetInstructStatus, useInitInstruct} from '../useApiClient'\n\nexport interface AiAssistanceConfigContextValue {\n  config: AssistPluginConfig\n  status?: InstructStatus\n  statusLoading: boolean\n  initLoading: boolean\n  init: () => void\n  error?: Error\n}\n\nexport const AiAssistanceConfigContext = createContext<AiAssistanceConfigContextValue>({} as any)\n\nexport function useAiAssistanceConfig() {\n  const context = useContext(AiAssistanceConfigContext)\n  if (!context) {\n    throw new Error('Missing AiAssistanceConfigContext')\n  }\n  return context\n}\n\nexport function AiAssistanceConfigProvider(props: {\n  children?: ReactNode\n  config: AssistPluginConfig\n}) {\n  const [status, setStatus] = useState<InstructStatus | undefined>()\n  const [error, setError] = useState<Error | undefined>()\n\n  const apiClient = useApiClient(props.config?.__customApiClient)\n  const {getInstructStatus, loading: statusLoading} = useGetInstructStatus(apiClient)\n  const {initInstruct, loading: initLoading} = useInitInstruct(apiClient)\n\n  useEffect(() => {\n    getInstructStatus()\n      .then((s) => setStatus(s))\n      .catch((e) => {\n        console.error(e)\n        setError(e as Error)\n      })\n  }, [getInstructStatus])\n\n  const init = useCallback(async () => {\n    setError(undefined)\n    try {\n      await initInstruct()\n      const status = await getInstructStatus()\n      setStatus(status)\n    } catch (e) {\n      console.error('Failed to init ai assistance', e)\n      setError(e as Error)\n    }\n  }, [initInstruct, getInstructStatus, setStatus])\n\n  const {config, children} = props\n  const context = useMemo<AiAssistanceConfigContextValue>(() => {\n    return {\n      config,\n      status,\n      statusLoading,\n      init,\n      initLoading,\n      error,\n    }\n  }, [config, status, init, statusLoading, initLoading, error])\n\n  return (\n    <AiAssistanceConfigContext.Provider value={context}>\n      {children}\n    </AiAssistanceConfigContext.Provider>\n  )\n}\n","import {assistSerializedFieldTypeName, assistSerializedTypeName} from '../../types'\n\nexport const hiddenTypes = [\n  'any',\n  'array',\n  'block',\n  'boolean',\n  'crossDatasetReference',\n  'date',\n  'datetime',\n  'document',\n  'email',\n  'file',\n  'globalDocumentReference',\n  'image',\n  'number',\n  'object',\n  'reference',\n  'span',\n  'string',\n  'text',\n  'url',\n  'slug',\n  'geopoint',\n  'sanity.assetSourceData',\n  'sanity.imageAsset',\n  'sanity.fileAsset',\n  'sanity.imageCrop',\n  'sanity.imageHotspot',\n  'sanity.imageMetadata',\n  'sanity.imageDimensions',\n  'sanity.imagePalette',\n  'sanity.imagePaletteSwatch',\n\n  assistSerializedTypeName,\n  assistSerializedFieldTypeName,\n  'sanity-agent.job.document',\n]\n","import {\n  ArraySchemaType,\n  ImageOptions,\n  isArraySchemaType,\n  ObjectSchemaType,\n  ReferenceOptions,\n  ReferenceSchemaType,\n  Schema,\n  SchemaType,\n  typed,\n} from 'sanity'\n\nimport {isAssistSupported} from '../../helpers/assistSupported'\nimport {isType} from '../../helpers/typeUtils'\nimport {\n  assistSchemaIdPrefix,\n  assistSerializedFieldTypeName,\n  assistSerializedTypeName,\n  SerializedSchemaMember,\n  SerializedSchemaType,\n} from '../../types'\nimport {hiddenTypes} from './schemaUtils'\n\ninterface Options {\n  leanFormat?: boolean\n}\n\nconst inlineTypes = ['document', 'object', 'image', 'file']\n\nexport function serializeSchema(schema: Schema, options?: Options): SerializedSchemaType[] {\n  const list = schema\n    .getTypeNames()\n    .filter((t) => !(hiddenTypes.includes(t) || t.startsWith('sanity.')))\n    .map((t) => schema.get(t))\n    .filter((t): t is SchemaType => !!t)\n    // because a field can override exclude at the type level, we have to also serialize excluded types\n    // so don't do this: .filter((t) => isAssistSupported(t))\n    .map((t) => getSchemaStub(t, schema, options))\n    .filter((t) => {\n      if ('to' in t && t.to && !t.to.length) {\n        return false\n      }\n      if ('of' in t && t.of && !t.of.length) {\n        return false\n      }\n      if ('fields' in t && t.fields && !t.fields.length) {\n        return false\n      }\n      return true\n    })\n  list.sort((a, b) => (a?.name ?? '').localeCompare(b?.name ?? ''))\n  return list\n}\n\nfunction getSchemaStub(\n  schemaType: SchemaType,\n  schema: Schema,\n  options?: Options,\n): SerializedSchemaType {\n  if (!schemaType.type?.name) {\n    // eslint-disable-next-line no-console -- log error\n    console.error('Missing type name', schemaType.type)\n    throw new Error('Type is missing name!')\n  }\n  const baseSchema: SerializedSchemaType = {\n    // we dont need type or id when we send using POST, so leave these out to save bandwidth\n    ...(options?.leanFormat\n      ? {}\n      : {_id: `${assistSchemaIdPrefix}${schemaType.name}`, _type: assistSerializedTypeName}),\n    name: schemaType.name,\n    title: schemaType.title,\n    type: schemaType.type.name,\n    ...getBaseFields(schema, schemaType, schemaType.type.name, options),\n  }\n\n  return removeUndef(baseSchema)\n}\n\nfunction getBaseFields(\n  schema: Schema,\n  type: SchemaType,\n  typeName: string,\n  options: Options | undefined,\n) {\n  const schemaOptions: SerializedSchemaType['options'] = removeUndef({\n    imagePromptField: (type.options as ImageOptions)?.aiAssist?.imageInstructionField,\n    embeddingsIndex: (type.options as ReferenceOptions)?.aiAssist?.embeddingsIndex,\n  })\n  return removeUndef({\n    options: Object.keys(schemaOptions).length ? schemaOptions : undefined,\n    values: Array.isArray(type?.options?.list)\n      ? type?.options?.list.map((v: string | {value: string; title: string}) =>\n          typeof v === 'string' ? v : (v.value ?? `${v.title}`),\n        )\n      : undefined,\n    of: 'of' in type && typeName === 'array' ? arrayOf(type, schema, options) : undefined,\n    to:\n      'to' in type && typeName === 'reference'\n        ? refToTypeNames(type as ReferenceSchemaType)\n        : undefined,\n    fields:\n      'fields' in type && inlineTypes.includes(typeName)\n        ? serializeFields(schema, type, options)\n        : undefined,\n    annotations:\n      typeName === 'block' && 'fields' in type\n        ? serializeAnnotations(type, schema, options)\n        : undefined,\n    inlineOf:\n      typeName === 'block' && 'fields' in type\n        ? serializeInlineOf(type, schema, options)\n        : undefined,\n    hidden:\n      typeof type.hidden === 'function' ? ('function' as const) : type.hidden ? true : undefined,\n    readOnly:\n      typeof type.readOnly === 'function'\n        ? ('function' as const)\n        : type.readOnly\n          ? true\n          : undefined,\n  })\n}\n\nfunction serializeFields(\n  schema: Schema,\n  schemaType: ObjectSchemaType,\n  options: Options | undefined,\n) {\n  const fields = schemaType.fieldsets\n    ? schemaType.fieldsets.flatMap((fs) =>\n        fs.single\n          ? fs.field\n          : fs.fields.map((f) => ({\n              ...f,\n              type: {\n                ...f.type,\n                // if fieldset is (conditionally) hidden, the field must be considered the same way\n                // ie, if the field does not show up in conditionalMembers, it is hidden\n                // regardless of weather or not it is the field function or the fieldset function that hides it\n                hidden:\n                  typeof fs.hidden === 'function' ? fs.hidden : fs.hidden ? true : f.type.hidden,\n              },\n            })),\n      )\n    : schemaType.fields\n\n  return fields\n    .filter((f) => !['sanity.imageHotspot', 'sanity.imageCrop'].includes(f.type?.name ?? ''))\n    .filter((f) => isAssistSupported(f.type))\n    .map((field) => serializeMember(schema, field.type, field.name, options))\n}\n\nfunction serializeMember(\n  schema: Schema,\n  type: SchemaType,\n  name: string,\n  options: Options | undefined,\n): SerializedSchemaMember {\n  const typeNameExists = !!schema.get(type?.name)\n  const typeName = typeNameExists ? type.name : (type.type?.name ?? '')\n  return removeUndef({\n    ...(options?.leanFormat ? {} : {_type: assistSerializedFieldTypeName}),\n    name: name,\n    type: typeName,\n    title: type.title,\n    ...getBaseFields(schema, type, typeName, options),\n  })\n}\n\nfunction serializeInlineOf(\n  blockSchemaType: ObjectSchemaType,\n  schema: Schema,\n  options: Options | undefined,\n): SerializedSchemaMember[] | undefined {\n  const childrenField = blockSchemaType.fields.find((f) => f.name === 'children')\n  const childrenType = childrenField?.type\n  if (!childrenType || !isArraySchemaType(childrenType)) {\n    return undefined\n  }\n  return arrayOf(\n    {\n      ...childrenType,\n      of: childrenType.of.filter((t) => !isType(t, 'span')),\n    },\n    schema,\n    options,\n  )\n}\n\nfunction serializeAnnotations(\n  blockSchemaType: ObjectSchemaType,\n  schema: Schema,\n  options: Options | undefined,\n): SerializedSchemaMember[] | undefined {\n  const markDefs = blockSchemaType.fields.find((f) => f.name === 'markDefs')\n  const marksType = markDefs?.type\n  if (!marksType || !isArraySchemaType(marksType)) {\n    return undefined\n  }\n  return arrayOf(marksType, schema, options)\n}\n\nfunction arrayOf(\n  arrayType: ArraySchemaType,\n  schema: Schema,\n  options: Options | undefined,\n): SerializedSchemaMember[] {\n  return arrayType.of\n    .filter((type) => isAssistSupported(type))\n    .map((t) => {\n      return serializeMember(schema, t, t.name, options)\n    })\n}\n\nfunction refToTypeNames(type: ReferenceSchemaType) {\n  return type.to.map((t) => ({\n    type: typed<string>(t.name),\n  }))\n}\n\nfunction removeUndef<T extends Record<string, any>>(obj: T): T {\n  Object.keys(obj).forEach((key) => (obj[key] === undefined ? delete obj[key] : {}))\n  return obj\n}\n","import type {SanityClient} from '@sanity/client'\nimport {useToast} from '@sanity/ui'\nimport {useCallback, useMemo, useState} from 'react'\nimport {Path, pathToString, useClient, useCurrentUser, useSchema} from 'sanity'\n\nimport {useAiAssistanceConfig} from './assistLayout/AiAssistanceConfigContext'\nimport {ConditionalMemberState} from './helpers/conditionalMembers'\nimport {serializeSchema} from './schemas/serialize/serializeSchema'\nimport {FieldLanguageMap} from './translate/paths'\nimport {documentRootKey} from './types'\n\nexport interface UserTextInstance {\n  blockKey: string\n  userInput: string\n}\n\nexport interface RunInstructionRequest {\n  documentId: string\n  assistDocumentId: string\n  path: string\n  typePath?: string\n  instructionKey: string\n  userId?: string\n  userTexts?: UserTextInstance[]\n  conditionalMembers?: ConditionalMemberState[]\n}\n\nexport interface InstructStatus {\n  enabled: boolean\n  initialized: boolean\n  validToken: boolean\n}\n\nexport interface TranslateRequest {\n  documentId: string\n  translatePath: Path\n  languagePath?: string\n  styleguide: () => Promise<string | undefined>\n  fieldLanguageMap?: FieldLanguageMap[]\n  conditionalMembers?: ConditionalMemberState[]\n}\n\nconst basePath = '/assist/tasks/instruction'\nexport const API_VERSION_WITH_EXTENDED_TYPES = '2025-04-01'\n\nexport function canUseAssist(status: InstructStatus | undefined) {\n  return status?.enabled && status.initialized && status.validToken\n}\n\nexport function useApiClient(customApiClient?: (defaultClient: SanityClient) => SanityClient) {\n  const client = useClient({apiVersion: API_VERSION_WITH_EXTENDED_TYPES})\n  return useMemo(\n    () => (customApiClient ? customApiClient(client) : client),\n    [client, customApiClient],\n  )\n}\n\nexport function useTranslate(apiClient: SanityClient) {\n  const [loading, setLoading] = useState(false)\n  const user = useCurrentUser()\n  const schema = useSchema()\n  const types = useMemo(() => serializeSchema(schema, {leanFormat: true}), [schema])\n  const toast = useToast()\n\n  const translate = useCallback(\n    ({\n      documentId,\n      languagePath,\n      styleguide,\n      translatePath,\n      fieldLanguageMap,\n      conditionalMembers,\n    }: TranslateRequest) => {\n      setLoading(true)\n\n      async function run() {\n        return apiClient.request({\n          method: 'POST',\n          url: `/assist/tasks/translate/${apiClient.config().dataset}?projectId=${\n            apiClient.config().projectId\n          }`,\n          body: {\n            documentId,\n            types,\n            languagePath,\n            userStyleguide: await styleguide(),\n            fieldLanguageMap,\n            conditionalMembers,\n            translatePath:\n              translatePath.length === 0 ? documentRootKey : pathToString(translatePath),\n            userId: user?.id,\n          },\n        })\n      }\n\n      return run()\n        .catch((e) => {\n          toast.push({\n            status: 'error',\n            title: 'Translate failed',\n            description: e.message,\n          })\n          setLoading(false)\n          throw e\n        })\n        .finally(() => {\n          // adding some artificial delay here\n          // server responds with 201 then proceeds; we dont need to allow spamming the button\n          setTimeout(() => {\n            setLoading(false)\n          }, 2000)\n        })\n    },\n    [setLoading, apiClient, toast, user, types],\n  )\n\n  return useMemo(\n    () => ({\n      translate,\n      loading,\n    }),\n    [translate, loading],\n  )\n}\n\nexport function useGenerateCaption(apiClient: SanityClient) {\n  const [loading, setLoading] = useState(false)\n  const user = useCurrentUser()\n  const schema = useSchema()\n  const types = useMemo(() => serializeSchema(schema, {leanFormat: true}), [schema])\n  const toast = useToast()\n\n  const generateCaption = useCallback(\n    ({path, documentId}: {path: string; documentId: string}) => {\n      setLoading(true)\n\n      return apiClient\n        .request({\n          method: 'POST',\n          url: `/assist/tasks/generate-caption/${apiClient.config().dataset}?projectId=${\n            apiClient.config().projectId\n          }`,\n          body: {\n            path,\n            documentId,\n            types,\n            userId: user?.id,\n          },\n        })\n        .catch((e) => {\n          toast.push({\n            status: 'error',\n            title: 'Generate image description failed',\n            description: e.message,\n          })\n          setLoading(false)\n          throw e\n        })\n        .finally(() => {\n          // adding some artificial delay here\n          // server responds with 201 then proceeds; we dont need to allow spamming the button\n          setTimeout(() => {\n            setLoading(false)\n          }, 2000)\n        })\n    },\n    [setLoading, apiClient, toast, user, types],\n  )\n\n  return useMemo(\n    () => ({\n      generateCaption,\n      loading,\n    }),\n    [generateCaption, loading],\n  )\n}\n\nexport function useGenerateImage(apiClient: SanityClient) {\n  const [loading, setLoading] = useState(false)\n  const user = useCurrentUser()\n  const schema = useSchema()\n  const types = useMemo(() => serializeSchema(schema, {leanFormat: true}), [schema])\n  const toast = useToast()\n\n  const generateImage = useCallback(\n    ({path, documentId}: {path: string; documentId: string}) => {\n      setLoading(true)\n\n      return apiClient\n        .request({\n          method: 'POST',\n          url: `/assist/tasks/generate-image/${apiClient.config().dataset}?projectId=${\n            apiClient.config().projectId\n          }`,\n          body: {\n            path,\n            documentId,\n            types,\n            userId: user?.id,\n          },\n        })\n        .catch((e) => {\n          toast.push({\n            status: 'error',\n            title: 'Generate image from prompt failed',\n            description: e.message,\n          })\n          setLoading(false)\n          throw e\n        })\n        .finally(() => {\n          // adding some artificial delay here\n          // server responds with 201 then proceeds; we dont need to allow spamming the button\n          setTimeout(() => {\n            setLoading(false)\n          }, 2000)\n        })\n    },\n    [setLoading, apiClient, toast, user, types],\n  )\n\n  return useMemo(\n    () => ({\n      generateImage,\n      loading,\n    }),\n    [generateImage, loading],\n  )\n}\n\nexport function useGetInstructStatus(apiClient: SanityClient) {\n  const [loading, setLoading] = useState(true)\n\n  const getInstructStatus = useCallback(async () => {\n    setLoading(true)\n\n    const projectId = apiClient.config().projectId\n    try {\n      const status = await apiClient.request<InstructStatus>({\n        method: 'GET',\n        url: `${basePath}/${apiClient.config().dataset}/status?projectId=${projectId}`,\n      })\n\n      return status\n    } finally {\n      setLoading(false)\n    }\n  }, [setLoading, apiClient])\n\n  return {\n    loading,\n    getInstructStatus,\n  }\n}\n\nexport function useInitInstruct(apiClient: SanityClient) {\n  const [loading, setLoading] = useState(false)\n  const initInstruct = useCallback(() => {\n    setLoading(true)\n    return apiClient\n      .request({\n        method: 'GET',\n        url: `${basePath}/${apiClient.config().dataset}/init?projectId=${\n          apiClient.config().projectId\n        }`,\n      })\n      .finally(() => {\n        setLoading(false)\n      })\n  }, [setLoading, apiClient])\n\n  return {\n    loading,\n    initInstruct,\n  }\n}\n\nexport function useRunInstructionApi(apiClient: SanityClient) {\n  const toast = useToast()\n  const [loading, setLoading] = useState(false)\n  const user = useCurrentUser()\n  const schema = useSchema()\n  const types = useMemo(() => serializeSchema(schema, {leanFormat: true}), [schema])\n\n  const {\n    config: {assist: assistConfig},\n  } = useAiAssistanceConfig()\n\n  const runInstruction = useCallback(\n    (request: RunInstructionRequest) => {\n      if (!user) {\n        toast.push({\n          status: 'error',\n          title: 'Unable to get user for instruction.',\n        })\n        return undefined\n      }\n      setLoading(true)\n\n      const {timeZone, locale} = Intl.DateTimeFormat().resolvedOptions()\n      const defaultLocaleSettings = {timeZone, locale}\n      const localeSettings =\n        assistConfig?.localeSettings?.({user, defaultSettings: defaultLocaleSettings}) ??\n        defaultLocaleSettings\n\n      return apiClient\n        .request({\n          method: 'POST',\n          url: `${basePath}/${apiClient.config().dataset}?projectId=${\n            apiClient.config().projectId\n          }`,\n          body: {\n            ...request,\n            types,\n            userId: user?.id,\n            localeSettings,\n            maxPathDepth: assistConfig?.maxPathDepth,\n          },\n        })\n        .catch((e) => {\n          toast.push({\n            status: 'error',\n            title: 'Instruction failed',\n            description: e.message,\n          })\n          throw e\n        })\n        .finally(() => {\n          setLoading(false)\n        })\n    },\n    [apiClient, types, user, toast, assistConfig],\n  )\n\n  return useMemo(\n    () => ({\n      runInstruction,\n      loading,\n    }),\n    [runInstruction, loading],\n  )\n}\n","import {PlayIcon} from '@sanity/icons'\nimport {Button, Dialog, Flex, Stack, Text, TextArea, Tooltip} from '@sanity/ui'\nimport {FormFieldHeaderText} from 'sanity'\n\nimport {getInstructionTitle} from '../helpers/misc'\nimport {type UserInputBlock, userInputTypeName} from '../types'\nimport {useApiClient, useRunInstructionApi} from '../useApiClient'\nimport {useAiAssistanceConfig} from './AiAssistanceConfigContext'\nimport type {RunInstructionArgs} from './AssistLayout'\nimport {CustomInputResult, GetUserInput} from '../fieldActions/useUserInput'\nimport {\n  createContext,\n  type Dispatch,\n  type FormEvent,\n  type PropsWithChildren,\n  type SetStateAction,\n  useCallback,\n  useContext,\n  useEffect,\n  useId,\n  useMemo,\n  useRef,\n  useState,\n} from 'react'\n\ntype BlockInputs = Record<string, string>\nconst NO_INPUT: BlockInputs = {}\n\nexport interface RunInstructionContextValue {\n  runInstruction: (req: RunInstructionArgs) => void\n  getUserInput: GetUserInput\n  instructionLoading: boolean\n}\n\nexport const RunInstructionContext = createContext<RunInstructionContextValue>({\n  runInstruction: () => {},\n  getUserInput: async () => undefined,\n  instructionLoading: false,\n})\n\nexport function useRunInstruction() {\n  return useContext(RunInstructionContext)\n}\n\nfunction isUserInputBlock(block: {_type: string}): block is UserInputBlock {\n  return block._type === userInputTypeName\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function RunInstructionProvider(props: PropsWithChildren<{}>) {\n  const {config} = useAiAssistanceConfig()\n  const apiClient = useApiClient(config?.__customApiClient)\n  const {runInstruction: runInstructionRequest, loading} = useRunInstructionApi(apiClient)\n\n  const id = useId()\n\n  const [inputs, setInputs] = useState(NO_INPUT)\n  const [runRequest, setRunRequest] = useState<\n    | (RunInstructionArgs & {userInputBlocks: UserInputBlock[]})\n    | {dialogTitle: string; userInputBlocks: UserInputBlock[]}\n    | undefined\n  >()\n\n  const [resolveUserInput, setResolveUserInput] =\n    useState<\n      (\n        value: CustomInputResult[] | PromiseLike<CustomInputResult[] | undefined> | undefined,\n      ) => void\n    >()\n\n  const getUserInput: GetUserInput = useCallback(async ({title, inputs}) => {\n    const userInputBlocks: UserInputBlock[] = inputs.map((input, i) => ({\n      _type: userInputTypeName,\n      _key: input.id ?? `${i}`,\n      message: input.title,\n      description: input.description,\n    }))\n\n    if (!userInputBlocks.length) {\n      return undefined\n    }\n    setRunRequest({dialogTitle: title, userInputBlocks})\n    return new Promise<CustomInputResult[] | undefined>((resolve) => {\n      setResolveUserInput(() => resolve)\n    })\n  }, [])\n\n  const runInstruction = useCallback(\n    (req: RunInstructionArgs) => {\n      if (loading) {\n        return\n      }\n      const {instruction, ...request} = req\n      const instructionKey = instruction._key\n      const userInputBlocks = instruction?.prompt\n        ?.flatMap((block) =>\n          block._type === 'block' ? block.children.filter(isUserInputBlock) : [block],\n        )\n        .filter(isUserInputBlock)\n\n      if (!userInputBlocks?.length) {\n        runInstructionRequest({\n          ...request,\n          instructionKey,\n          userTexts: undefined,\n        })\n        return\n      }\n\n      setRunRequest({\n        ...req,\n        userInputBlocks,\n      })\n    },\n    [runInstructionRequest, loading],\n  )\n\n  const close = useCallback(() => {\n    setRunRequest(undefined)\n    setInputs(NO_INPUT)\n    if (resolveUserInput) {\n      resolveUserInput(undefined)\n    }\n    setResolveUserInput(undefined)\n  }, [resolveUserInput])\n\n  const runWithInput = useCallback(() => {\n    if (runRequest) {\n      if ('instruction' in runRequest) {\n        // eslint-disable-next-line @typescript-eslint/no-unused-vars\n        const {instruction, userTexts, ...request} = runRequest\n        runInstructionRequest({\n          ...request,\n          instructionKey: instruction._key,\n          userTexts: Object.entries(inputs).map(([key, value]) => ({\n            blockKey: key,\n            userInput: value,\n          })),\n        })\n      } else {\n        const userInputs = Object.values(inputs).map((input, i) => {\n          const userInputBlock = runRequest.userInputBlocks[i]\n          return {\n            input: {\n              id: userInputBlock._key,\n              title: userInputBlock.message ?? '',\n              description: userInputBlock.description,\n            },\n            result: input,\n          }\n        })\n        resolveUserInput?.(userInputs)\n        setResolveUserInput(undefined)\n      }\n    }\n    close()\n  }, [close, runInstructionRequest, runRequest, inputs, resolveUserInput])\n\n  const open = !!runRequest\n\n  const runDisabled = useMemo(\n    () =>\n      (runRequest?.userInputBlocks?.length ?? 0) >\n      Object.entries(inputs).filter(([, value]) => !!value).length,\n    [runRequest?.userInputBlocks, inputs],\n  )\n\n  const runButton = (\n    <Button\n      text=\"Run instruction\"\n      onClick={runWithInput}\n      tone=\"primary\"\n      icon={PlayIcon}\n      style={{width: '100%'}}\n      disabled={runDisabled}\n    />\n  )\n\n  const contextValue: RunInstructionContextValue = useMemo(\n    () => ({runInstruction, getUserInput, instructionLoading: loading}),\n    [runInstruction, loading],\n  )\n\n  return (\n    <RunInstructionContext.Provider value={contextValue}>\n      {open ? (\n        <Dialog\n          id={id}\n          open={open}\n          onClose={close}\n          width={1}\n          header={\n            'dialogTitle' in runRequest\n              ? runRequest.dialogTitle\n              : getInstructionTitle(runRequest?.instruction)\n          }\n          footer={\n            <Flex justify=\"space-between\" padding={2} flex={1}>\n              {runDisabled ? (\n                <Tooltip\n                  content={\n                    <Flex padding={2}>\n                      <Text>Unable to run instruction. All fields must have a value.</Text>\n                    </Flex>\n                  }\n                  placement=\"top\"\n                >\n                  <Flex flex={1}>{runButton}</Flex>\n                </Tooltip>\n              ) : (\n                runButton\n              )}\n            </Flex>\n          }\n        >\n          <Stack padding={4} space={2}>\n            {runRequest?.userInputBlocks?.map((block, i) => (\n              <UserInput\n                key={block._key}\n                block={block}\n                autoFocus={i === 0}\n                inputs={inputs}\n                setInputs={setInputs}\n              />\n            ))}\n          </Stack>\n        </Dialog>\n      ) : null}\n      {props.children}\n    </RunInstructionContext.Provider>\n  )\n}\n\nexport function UserInput(props: {\n  block: UserInputBlock\n  inputs: BlockInputs\n  setInputs: Dispatch<SetStateAction<BlockInputs>>\n  autoFocus?: boolean\n}) {\n  const {block, autoFocus, setInputs, inputs} = props\n  const key = block._key\n  const textAreaRef = useRef<HTMLTextAreaElement>(null)\n\n  const onChange = useCallback(\n    (e: FormEvent<HTMLTextAreaElement>) => {\n      setInputs((current) => ({\n        ...current,\n        [key]: (e.currentTarget ?? e.target).value,\n      }))\n    },\n    [key, setInputs],\n  )\n\n  const value = useMemo(() => inputs[key], [inputs, key])\n\n  useEffect(() => {\n    if (!autoFocus) {\n      return\n    }\n    setTimeout(() => textAreaRef.current?.focus(), 0)\n  }, [autoFocus])\n\n  return (\n    <Stack padding={2} space={3}>\n      <FormFieldHeaderText\n        title={block?.message ?? 'Provide more context'}\n        description={block.description}\n      />\n      <TextArea\n        ref={textAreaRef}\n        rows={4}\n        value={value}\n        onChange={onChange}\n        style={{resize: 'vertical'}}\n      />\n    </Stack>\n  )\n}\n","import {useCallback, useEffect, useState} from 'react'\nimport {ObjectSchemaType, PatchEvent, SanityDocument, unset} from 'sanity'\n\nimport {useRunInstruction} from '../assistLayout/RunInstructionProvider'\n\nexport interface DraftDelayedTaskArgs<T> {\n  documentOnChange: (event: PatchEvent) => void\n  // indicates if the document is a draft or liveEditable currently\n  isDocAssistable: boolean\n  task: (args: T) => void\n}\n\nexport function isDocAssistable(\n  documentSchemaType: ObjectSchemaType,\n  published?: SanityDocument | null,\n  draft?: SanityDocument | null,\n) {\n  return !!(documentSchemaType.liveEdit ? published : draft)\n}\n\nexport function useRequestRunInstruction(args: {\n  documentOnChange: (event: PatchEvent) => void\n  // indicates if the document is a draft or liveEditable currently\n  isDocAssistable: boolean\n}) {\n  const {runInstruction, instructionLoading} = useRunInstruction()\n  const requestRunInstruction = useDraftDelayedTask({\n    ...args,\n    task: runInstruction,\n  })\n\n  return {\n    instructionLoading,\n    requestRunInstruction,\n  }\n}\n\n/**\n * Ensures that the current document is a draft before running task\n */\nexport function useDraftDelayedTask<T>(args: DraftDelayedTaskArgs<T>) {\n  const {documentOnChange, isDocAssistable, task} = args\n\n  const [queuedArgs, setQueuedArgs] = useState<T | undefined>(undefined)\n\n  useEffect(() => {\n    if (queuedArgs && isDocAssistable) {\n      task(queuedArgs)\n      setQueuedArgs(undefined)\n    }\n  }, [queuedArgs, isDocAssistable, task])\n\n  return useCallback(\n    (taskArgs: T) => {\n      // make a dummy edit: this will trigger the document/draft to be created\n      documentOnChange(PatchEvent.from([unset(['_force_document_creation'])]))\n      setQueuedArgs(taskArgs)\n    },\n    [setQueuedArgs, documentOnChange],\n  )\n}\n","import {useCallback, useEffect, useMemo, useState} from 'react'\nimport {getDraftId, getVersionId, type ObjectSchemaType, useSchema} from 'sanity'\nimport {useDocumentPane} from 'sanity/structure'\n\nimport {asFieldRefsByTypePath, getFieldRefs, useAiPaneRouter} from '../../assistInspector/helpers'\nimport {fieldPathParam, InstructionTask} from '../../types'\nimport type {AssistDocumentContextValue} from '../AssistDocumentContext'\nimport {isDocAssistable} from '../RequestRunInstructionProvider'\nimport {useStudioAssistDocument} from './useStudioAssistDocument'\n\nexport function useAssistDocumentContextValue(documentId: string, documentType: string) {\n  const schema = useSchema()\n\n  const documentSchemaType = useMemo(() => {\n    const schemaType = schema.get(documentType) as ObjectSchemaType | undefined\n    if (!schemaType) {\n      throw new Error(`Schema type \"${documentType}\" not found`)\n    }\n    return schemaType\n  }, [documentType, schema])\n\n  const {\n    openInspector,\n    closeInspector,\n    inspector,\n    onChange: documentOnChange,\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-ignore this is a valid option available in `corel` - Remove after corel is merged to next\n    selectedReleaseId,\n    editState,\n  } = useDocumentPane()\n  // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n  // @ts-ignore this is a valid option available in `corel` - Remove after corel is merged to next\n  const {draft, published, version} = editState || {}\n\n  const assistableDocumentId = selectedReleaseId\n    ? getVersionId(documentId, selectedReleaseId)\n    : documentSchemaType.liveEdit\n      ? documentId\n      : getDraftId(documentId)\n\n  const documentIsNew = selectedReleaseId ? !version?._id : !draft?._id && !published?._id\n  const documentIsAssistable = selectedReleaseId\n    ? !!version\n    : isDocAssistable(documentSchemaType, published, draft)\n\n  const {params} = useAiPaneRouter()\n  const selectedPath = params[fieldPathParam]\n\n  const assistDocument = useStudioAssistDocument({\n    documentId: assistableDocumentId,\n    schemaType: documentSchemaType,\n  })\n  const {syntheticTasks, addSyntheticTask, removeSyntheticTask} =\n    useSyntheticTasks(assistableDocumentId)\n\n  const fieldRefs = getFieldRefs(documentSchemaType)\n  const fieldRefsByTypePath = asFieldRefsByTypePath(fieldRefs)\n\n  const value: AssistDocumentContextValue = useMemo(() => {\n    const base = {\n      assistableDocumentId,\n      documentSchemaType,\n      documentIsNew,\n      documentIsAssistable,\n      openInspector,\n      closeInspector,\n      inspector,\n      documentOnChange,\n      selectedPath,\n      syntheticTasks,\n      addSyntheticTask,\n      removeSyntheticTask,\n      fieldRefs,\n      fieldRefsByTypePath,\n    }\n    if (!assistDocument) {\n      return {...base, loading: true, assistDocument: undefined}\n    }\n    return {\n      ...base,\n      loading: false,\n      assistDocument: assistDocument,\n    }\n  }, [\n    assistDocument,\n    documentIsAssistable,\n    assistableDocumentId,\n    documentSchemaType,\n    documentIsNew,\n    openInspector,\n    closeInspector,\n    inspector,\n    documentOnChange,\n    selectedPath,\n    syntheticTasks,\n    addSyntheticTask,\n    removeSyntheticTask,\n  ])\n\n  return value\n}\n\nfunction useSyntheticTasks(assistableDocumentId: string) {\n  const [syntheticTasks, setSyntheticTasks] = useState<InstructionTask[]>(() => [])\n  const addSyntheticTask = useCallback((task: InstructionTask) => {\n    setSyntheticTasks((current) => [...current, task])\n  }, [])\n  const removeSyntheticTask = useCallback((task: InstructionTask) => {\n    setSyntheticTasks((current) => current.filter((t) => task._key !== t._key))\n  }, [])\n\n  useEffect(() => {\n    setSyntheticTasks([])\n  }, [assistableDocumentId])\n\n  return {\n    syntheticTasks,\n    addSyntheticTask,\n    removeSyntheticTask,\n  }\n}\n","import {PropsWithChildren} from 'react'\n\nimport {AssistDocumentContext} from './AssistDocumentContext'\nimport {useAssistDocumentContextValue} from './hooks/useAssistDocumentContextValue'\n\nexport interface AIDocumentInputProps {\n  documentId: string\n  documentType: string\n}\n\nexport function AssistDocumentContextProvider(props: PropsWithChildren<AIDocumentInputProps>) {\n  const {documentId, documentType} = props\n  const value = useAssistDocumentContextValue(documentId, documentType)\n  return (\n    <AssistDocumentContext.Provider value={value}>{props.children}</AssistDocumentContext.Provider>\n  )\n}\n","import {DocumentLayoutProps} from 'sanity'\n\nimport {AssistDocumentContextProvider} from './AssistDocumentContextProvider'\n\nexport function AssistDocumentLayout(props: DocumentLayoutProps) {\n  const {documentId, documentType} = props\n  return (\n    <AssistDocumentContextProvider documentType={documentType} documentId={documentId}>\n      {props.renderDefault(props)}\n    </AssistDocumentContextProvider>\n  )\n}\n","import {Badge} from '@sanity/ui'\n\nexport function AssistFeatureBadge() {\n  return (\n    <Badge fontSize={0} style={{margin: '-2px 0'}} tone=\"primary\">\n      Beta\n    </Badge>\n  )\n}\n","import {ArrowRightIcon, CheckmarkIcon, SparklesIcon} from '@sanity/icons'\nimport {Button, Card, Flex, Popover, Stack, Text} from '@sanity/ui'\nimport {useRef} from 'react'\n\nimport {AssistFeatureBadge} from '../components/AssistFeatureBadge'\nimport {pluginTitle, releaseAnnouncementUrl} from '../constants'\n\nexport interface FieldActionsOnboardingProps {\n  dismiss: () => void\n}\n\nexport function AssistOnboardingPopover(props: FieldActionsOnboardingProps) {\n  const {dismiss} = props\n\n  return (\n    <Popover\n      content={<AssistIntroCard dismiss={dismiss} />}\n      open\n      portal\n      placeholder=\"bottom\"\n      tone=\"default\"\n      width={0}\n    >\n      <Card radius={2} shadow={2} style={{padding: 2, lineHeight: 0}}>\n        <Button disabled fontSize={1} icon={SparklesIcon} mode=\"bleed\" padding={2} />\n      </Card>\n    </Popover>\n  )\n}\n\nfunction AssistIntroCard(props: {dismiss: () => void}) {\n  const buttonRef = useRef<HTMLButtonElement>(null)\n\n  return (\n    <Stack as=\"section\" padding={3} space={3}>\n      <Stack padding={2} space={4}>\n        <Flex gap={2} align=\"center\">\n          <Text as=\"h1\" size={1} weight=\"semibold\">\n            {pluginTitle}\n          </Text>\n          <div aria-hidden style={{margin: '-3px 0', lineHeight: 0}}>\n            <AssistFeatureBadge />\n          </div>\n        </Flex>\n\n        <Stack space={3}>\n          <Text as=\"p\" muted size={1}>\n            Manage reusable AI instructions to boost your content creation and reduce amount of\n            repetitive chores.{' '}\n            <a href={releaseAnnouncementUrl} target=\"_blank\" rel=\"noreferrer\">\n              Learn more <ArrowRightIcon />\n            </a>\n          </Text>\n        </Stack>\n      </Stack>\n\n      <Button\n        fontSize={1}\n        icon={CheckmarkIcon}\n        onClick={props.dismiss}\n        padding={3}\n        ref={buttonRef}\n        text=\"Ok, good to know!\"\n        tone=\"primary\"\n      />\n    </Stack>\n  )\n}\n","import {useCallback, useState} from 'react'\n\nexport const inspectorOnboardingKey = 'sanityStudio:assist:inspector:onboarding:dismissed'\nexport const fieldOnboardingKey = 'sanityStudio:assist:field:onboarding:dismissed'\n\nexport function isFeatureOnboardingDismissed(featureKey: string): boolean {\n  if (typeof localStorage === 'undefined') {\n    return false\n  }\n\n  const value = localStorage.getItem(featureKey)\n  return value === 'true'\n}\n\nexport function dismissFeatureOnboarding(featureKey: string) {\n  if (typeof localStorage === 'undefined') {\n    return\n  }\n\n  localStorage.setItem(featureKey, 'true')\n}\n\nexport function useOnboardingFeature(featureKey: string) {\n  const [showOnboarding, setShowOnboarding] = useState(\n    () => !isFeatureOnboardingDismissed(featureKey),\n  )\n  const dismissOnboarding = useCallback(() => {\n    setShowOnboarding(false)\n    dismissFeatureOnboarding(featureKey)\n  }, [setShowOnboarding, featureKey])\n\n  return {showOnboarding, dismissOnboarding}\n}\n","import {forwardRef, type ReactElement, type ReactNode} from 'react'\nimport {keyframes, styled} from 'styled-components'\n\nconst fadeIn = keyframes`\n  0% {\n    opacity: 0;\n    transform: scale(0.75);\n  }\n  40% {\n    opacity: 0;\n    transform: scale(0.75);\n  }\n  100% {\n    opacity: 1;\n    transform: scale(1);\n  }\n`\n\nconst FadeInDiv = styled.div`\n  animation-name: ${fadeIn};\n  animation-timing-function: ease-in-out;\n`\n\nexport const FadeInContent = forwardRef(function FadeInContent(\n  {\n    children,\n    durationMs = 250,\n  }: {\n    children?: ReactNode\n    ms?: number\n    durationMs?: number\n  },\n  ref: any,\n): ReactElement {\n  return (\n    <FadeInDiv ref={ref} style={{animationDuration: `${durationMs}ms`}}>\n      {children}\n    </FadeInDiv>\n  )\n})\n","const COLOR_HUES = [\n  \"gray\",\n  \"blue\",\n  \"purple\",\n  \"magenta\",\n  \"red\",\n  \"orange\",\n  \"yellow\",\n  \"green\",\n  \"cyan\"\n], COLOR_TINTS = [\n  \"50\",\n  \"100\",\n  \"200\",\n  \"300\",\n  \"400\",\n  \"500\",\n  \"600\",\n  \"700\",\n  \"800\",\n  \"900\",\n  \"950\"\n];\nfunction hslToRgb(hsl) {\n  const h = hsl[0], s = hsl[1] / 100, l = hsl[2] / 100, k = (n) => (n + h / 30) % 12, a = s * Math.min(l, 1 - l), f = (n) => l - a * Math.max(-1, Math.min(k(n) - 3, Math.min(9 - k(n), 1)));\n  return [255 * f(0), 255 * f(8), 255 * f(4)];\n}\nfunction rgbToHex([r, g, b]) {\n  const _r = Math.round(r), _g = Math.round(g), _b = Math.round(b);\n  return \"#\" + ((1 << 24) + (_r << 16) + (_g << 8) + _b).toString(16).slice(1);\n}\nfunction buildTints(options) {\n  const { hueKey, color: color2 } = options;\n  return COLOR_TINTS.reduce((acc, tintKey) => {\n    const tint = Number(tintKey), rgb = hslToRgb(color2.tints[tintKey].hsl), hex = rgbToHex([Math.round(rgb[0]), Math.round(rgb[1]), Math.round(rgb[2])]);\n    return acc[tintKey] = {\n      title: `${hueKey.slice(0, 1).toUpperCase()}${hueKey.slice(1)} ${tint}`,\n      hex\n    }, acc;\n  }, {});\n}\nconst black = {\n  title: \"Black\",\n  hex: \"#0d0e12\"\n}, white = {\n  title: \"White\",\n  hex: \"#ffffff\"\n}, gray = {\n  50: {\n    title: \"Gray 50\",\n    hex: \"#f6f6f8\"\n  },\n  100: {\n    title: \"Gray 100\",\n    hex: \"#eeeef1\"\n  },\n  200: {\n    title: \"Gray 200\",\n    hex: \"#e3e4e8\"\n  },\n  300: {\n    title: \"Gray 300\",\n    hex: \"#bbbdc9\"\n  },\n  400: {\n    title: \"Gray 400\",\n    hex: \"#9499ad\"\n  },\n  500: {\n    title: \"Gray 500\",\n    hex: \"#727892\"\n  },\n  600: {\n    title: \"Gray 600\",\n    hex: \"#515870\"\n  },\n  700: {\n    title: \"Gray 700\",\n    hex: \"#383d51\"\n  },\n  800: {\n    title: \"Gray 800\",\n    hex: \"#252837\"\n  },\n  900: {\n    title: \"Gray 900\",\n    hex: \"#1b1d27\"\n  },\n  950: {\n    title: \"Gray 950\",\n    hex: \"#13141b\"\n  }\n}, blue = {\n  50: {\n    title: \"Blue 50\",\n    hex: \"#f5f8ff\"\n  },\n  100: {\n    title: \"Blue 100\",\n    hex: \"#e5edff\"\n  },\n  200: {\n    title: \"Blue 200\",\n    hex: \"#dbe5ff\"\n  },\n  300: {\n    title: \"Blue 300\",\n    hex: \"#a8bfff\"\n  },\n  400: {\n    title: \"Blue 400\",\n    hex: \"#7595ff\"\n  },\n  500: {\n    title: \"Blue 500\",\n    hex: \"#556bfc\"\n  },\n  600: {\n    title: \"Blue 600\",\n    hex: \"#4043e7\"\n  },\n  700: {\n    title: \"Blue 700\",\n    hex: \"#2927aa\"\n  },\n  800: {\n    title: \"Blue 800\",\n    hex: \"#192457\"\n  },\n  900: {\n    title: \"Blue 900\",\n    hex: \"#161a41\"\n  },\n  950: {\n    title: \"Blue 950\",\n    hex: \"#101228\"\n  }\n}, purple = {\n  50: {\n    title: \"Purple 50\",\n    hex: \"#f8f5ff\"\n  },\n  100: {\n    title: \"Purple 100\",\n    hex: \"#f1ebff\"\n  },\n  200: {\n    title: \"Purple 200\",\n    hex: \"#ece1fe\"\n  },\n  300: {\n    title: \"Purple 300\",\n    hex: \"#ccb1fc\"\n  },\n  400: {\n    title: \"Purple 400\",\n    hex: \"#b087f7\"\n  },\n  500: {\n    title: \"Purple 500\",\n    hex: \"#8f57ef\"\n  },\n  600: {\n    title: \"Purple 600\",\n    hex: \"#721fe5\"\n  },\n  700: {\n    title: \"Purple 700\",\n    hex: \"#4c1a9e\"\n  },\n  800: {\n    title: \"Purple 800\",\n    hex: \"#2f1862\"\n  },\n  900: {\n    title: \"Purple 900\",\n    hex: \"#23173f\"\n  },\n  950: {\n    title: \"Purple 950\",\n    hex: \"#181128\"\n  }\n}, magenta = {\n  50: {\n    title: \"Magenta 50\",\n    hex: \"#fef6f9\"\n  },\n  100: {\n    title: \"Magenta 100\",\n    hex: \"#fde8ef\"\n  },\n  200: {\n    title: \"Magenta 200\",\n    hex: \"#fcdee9\"\n  },\n  300: {\n    title: \"Magenta 300\",\n    hex: \"#f7abc5\"\n  },\n  400: {\n    title: \"Magenta 400\",\n    hex: \"#f0709b\"\n  },\n  500: {\n    title: \"Magenta 500\",\n    hex: \"#e72767\"\n  },\n  600: {\n    title: \"Magenta 600\",\n    hex: \"#b11651\"\n  },\n  700: {\n    title: \"Magenta 700\",\n    hex: \"#7c1342\"\n  },\n  800: {\n    title: \"Magenta 800\",\n    hex: \"#4b1130\"\n  },\n  900: {\n    title: \"Magenta 900\",\n    hex: \"#341325\"\n  },\n  950: {\n    title: \"Magenta 950\",\n    hex: \"#1f0f14\"\n  }\n}, red = {\n  50: {\n    title: \"Red 50\",\n    hex: \"#fff6f5\"\n  },\n  100: {\n    title: \"Red 100\",\n    hex: \"#ffe7e5\"\n  },\n  200: {\n    title: \"Red 200\",\n    hex: \"#ffdedc\"\n  },\n  300: {\n    title: \"Red 300\",\n    hex: \"#fdada5\"\n  },\n  400: {\n    title: \"Red 400\",\n    hex: \"#f77769\"\n  },\n  500: {\n    title: \"Red 500\",\n    hex: \"#ef4434\"\n  },\n  600: {\n    title: \"Red 600\",\n    hex: \"#cc2819\"\n  },\n  700: {\n    title: \"Red 700\",\n    hex: \"#8b2018\"\n  },\n  800: {\n    title: \"Red 800\",\n    hex: \"#4d1714\"\n  },\n  900: {\n    title: \"Red 900\",\n    hex: \"#321615\"\n  },\n  950: {\n    title: \"Red 950\",\n    hex: \"#1e1011\"\n  }\n}, orange = {\n  50: {\n    title: \"Orange 50\",\n    hex: \"#fff7f0\"\n  },\n  100: {\n    title: \"Orange 100\",\n    hex: \"#ffeadb\"\n  },\n  200: {\n    title: \"Orange 200\",\n    hex: \"#ffddc7\"\n  },\n  300: {\n    title: \"Orange 300\",\n    hex: \"#ffb685\"\n  },\n  400: {\n    title: \"Orange 400\",\n    hex: \"#ff8e42\"\n  },\n  500: {\n    title: \"Orange 500\",\n    hex: \"#fa6400\"\n  },\n  600: {\n    title: \"Orange 600\",\n    hex: \"#b14802\"\n  },\n  700: {\n    title: \"Orange 700\",\n    hex: \"#7c3404\"\n  },\n  800: {\n    title: \"Orange 800\",\n    hex: \"#461e07\"\n  },\n  900: {\n    title: \"Orange 900\",\n    hex: \"#32160b\"\n  },\n  950: {\n    title: \"Orange 950\",\n    hex: \"#21120d\"\n  }\n}, yellow = {\n  50: {\n    title: \"Yellow 50\",\n    hex: \"#fefae1\"\n  },\n  100: {\n    title: \"Yellow 100\",\n    hex: \"#fcf3bb\"\n  },\n  200: {\n    title: \"Yellow 200\",\n    hex: \"#f9e994\"\n  },\n  300: {\n    title: \"Yellow 300\",\n    hex: \"#f7d455\"\n  },\n  400: {\n    title: \"Yellow 400\",\n    hex: \"#f9bc15\"\n  },\n  500: {\n    title: \"Yellow 500\",\n    hex: \"#d28a04\"\n  },\n  600: {\n    title: \"Yellow 600\",\n    hex: \"#965908\"\n  },\n  700: {\n    title: \"Yellow 700\",\n    hex: \"#653a0b\"\n  },\n  800: {\n    title: \"Yellow 800\",\n    hex: \"#3b220c\"\n  },\n  900: {\n    title: \"Yellow 900\",\n    hex: \"#271a11\"\n  },\n  950: {\n    title: \"Yellow 950\",\n    hex: \"#181410\"\n  }\n}, green = {\n  50: {\n    title: \"Green 50\",\n    hex: \"#e7fef5\"\n  },\n  100: {\n    title: \"Green 100\",\n    hex: \"#c5fce8\"\n  },\n  200: {\n    title: \"Green 200\",\n    hex: \"#a9f9dc\"\n  },\n  300: {\n    title: \"Green 300\",\n    hex: \"#59f3ba\"\n  },\n  400: {\n    title: \"Green 400\",\n    hex: \"#0ff0a1\"\n  },\n  500: {\n    title: \"Green 500\",\n    hex: \"#04b97a\"\n  },\n  600: {\n    title: \"Green 600\",\n    hex: \"#01794f\"\n  },\n  700: {\n    title: \"Green 700\",\n    hex: \"#015133\"\n  },\n  800: {\n    title: \"Green 800\",\n    hex: \"#023120\"\n  },\n  900: {\n    title: \"Green 900\",\n    hex: \"#06231a\"\n  },\n  950: {\n    title: \"Green 950\",\n    hex: \"#071715\"\n  }\n}, cyan = {\n  50: {\n    title: \"Cyan 50\",\n    hex: \"#e7fefe\"\n  },\n  100: {\n    title: \"Cyan 100\",\n    hex: \"#c5fcfc\"\n  },\n  200: {\n    title: \"Cyan 200\",\n    hex: \"#96f8f8\"\n  },\n  300: {\n    title: \"Cyan 300\",\n    hex: \"#62efef\"\n  },\n  400: {\n    title: \"Cyan 400\",\n    hex: \"#18e2e2\"\n  },\n  500: {\n    title: \"Cyan 500\",\n    hex: \"#04b8be\"\n  },\n  600: {\n    title: \"Cyan 600\",\n    hex: \"#037782\"\n  },\n  700: {\n    title: \"Cyan 700\",\n    hex: \"#024950\"\n  },\n  800: {\n    title: \"Cyan 800\",\n    hex: \"#042f34\"\n  },\n  900: {\n    title: \"Cyan 900\",\n    hex: \"#072227\"\n  },\n  950: {\n    title: \"Cyan 950\",\n    hex: \"#0d181c\"\n  }\n}, hues = { gray, blue, purple, magenta, red, orange, yellow, green, cyan }, color = { black, white, ...hues }, config = {\n  black: {\n    title: \"Black\",\n    hsl: [225, 16, 6]\n  },\n  white: {\n    title: \"White\",\n    hsl: [0, 0, 100]\n  },\n  gray: {\n    title: \"Gray\",\n    tints: {\n      50: {\n        title: \"Gray 50\",\n        hsl: [240, 12, 97]\n      },\n      100: {\n        title: \"Gray 100\",\n        hsl: [240, 10, 94]\n      },\n      200: {\n        title: \"Gray 200\",\n        hsl: [231, 10, 90]\n      },\n      300: {\n        title: \"Gray 300\",\n        hsl: [232, 11, 76]\n      },\n      400: {\n        title: \"Gray 400\",\n        hsl: [228, 13, 63]\n      },\n      500: {\n        title: \"Gray 500\",\n        hsl: [229, 13, 51]\n      },\n      600: {\n        title: \"Gray 600\",\n        hsl: [228, 16, 38]\n      },\n      700: {\n        title: \"Gray 700\",\n        hsl: [229, 18, 27]\n      },\n      800: {\n        title: \"Gray 800\",\n        hsl: [229, 19, 18]\n      },\n      900: {\n        title: \"Gray 900\",\n        hsl: [228, 19, 13]\n      },\n      950: {\n        title: \"Gray 950\",\n        hsl: [233, 17, 9]\n      }\n    }\n  },\n  blue: {\n    title: \"Blue\",\n    tints: {\n      50: {\n        title: \"Blue 50\",\n        hsl: [222, 100, 98]\n      },\n      100: {\n        title: \"Blue 100\",\n        hsl: [222, 100, 95]\n      },\n      200: {\n        title: \"Blue 200\",\n        hsl: [223, 100, 93]\n      },\n      300: {\n        title: \"Blue 300\",\n        hsl: [224, 100, 83]\n      },\n      400: {\n        title: \"Blue 400\",\n        hsl: [226, 100, 73]\n      },\n      500: {\n        title: \"Blue 500\",\n        hsl: [232, 96, 66]\n      },\n      600: {\n        title: \"Blue 600\",\n        hsl: [239, 78, 58]\n      },\n      700: {\n        title: \"Blue 700\",\n        hsl: [241, 63, 41]\n      },\n      800: {\n        title: \"Blue 800\",\n        hsl: [230, 55, 22]\n      },\n      900: {\n        title: \"Blue 900\",\n        hsl: [234, 49, 17]\n      },\n      950: {\n        title: \"Blue 950\",\n        hsl: [235, 43, 11]\n      }\n    }\n  },\n  purple: {\n    title: \"Purple\",\n    tints: {\n      50: {\n        title: \"Purple 50\",\n        hsl: [260, 95, 98]\n      },\n      100: {\n        title: \"Purple 100\",\n        hsl: [260, 98, 96]\n      },\n      200: {\n        title: \"Purple 200\",\n        hsl: [263, 96, 94]\n      },\n      300: {\n        title: \"Purple 300\",\n        hsl: [262, 92, 84]\n      },\n      400: {\n        title: \"Purple 400\",\n        hsl: [262, 88, 75]\n      },\n      500: {\n        title: \"Purple 500\",\n        hsl: [262, 83, 64]\n      },\n      600: {\n        title: \"Purple 600\",\n        hsl: [265, 79, 51]\n      },\n      700: {\n        title: \"Purple 700\",\n        hsl: [263, 72, 36]\n      },\n      800: {\n        title: \"Purple 800\",\n        hsl: [258, 60, 24]\n      },\n      900: {\n        title: \"Purple 900\",\n        hsl: [257, 46, 17]\n      },\n      950: {\n        title: \"Purple 950\",\n        hsl: [260, 41, 11]\n      }\n    }\n  },\n  magenta: {\n    title: \"Magenta\",\n    tints: {\n      50: {\n        title: \"Magenta 50\",\n        hsl: [340, 82, 98]\n      },\n      100: {\n        title: \"Magenta 100\",\n        hsl: [339, 83, 95]\n      },\n      200: {\n        title: \"Magenta 200\",\n        hsl: [339, 83, 93]\n      },\n      300: {\n        title: \"Magenta 300\",\n        hsl: [340, 82, 82]\n      },\n      400: {\n        title: \"Magenta 400\",\n        hsl: [340, 81, 69]\n      },\n      500: {\n        title: \"Magenta 500\",\n        hsl: [340, 80, 53]\n      },\n      600: {\n        title: \"Magenta 600\",\n        hsl: [337, 78, 39]\n      },\n      700: {\n        title: \"Magenta 700\",\n        hsl: [333, 73, 28]\n      },\n      800: {\n        title: \"Magenta 800\",\n        hsl: [328, 63, 18]\n      },\n      900: {\n        title: \"Magenta 900\",\n        hsl: [327, 46, 14]\n      },\n      950: {\n        title: \"Magenta 950\",\n        hsl: [341, 35, 9]\n      }\n    }\n  },\n  red: {\n    title: \"Red\",\n    tints: {\n      50: {\n        title: \"Red 50\",\n        hsl: [5, 100, 98]\n      },\n      100: {\n        title: \"Red 100\",\n        hsl: [4, 100, 95]\n      },\n      200: {\n        title: \"Red 200\",\n        hsl: [4, 98, 93]\n      },\n      300: {\n        title: \"Red 300\",\n        hsl: [5, 95, 82]\n      },\n      400: {\n        title: \"Red 400\",\n        hsl: [6, 90, 69]\n      },\n      500: {\n        title: \"Red 500\",\n        hsl: [5, 85, 57]\n      },\n      600: {\n        title: \"Red 600\",\n        hsl: [5, 78, 45]\n      },\n      700: {\n        title: \"Red 700\",\n        hsl: [4, 70, 32]\n      },\n      800: {\n        title: \"Red 800\",\n        hsl: [3, 58, 19]\n      },\n      900: {\n        title: \"Red 900\",\n        hsl: [2, 41, 14]\n      },\n      950: {\n        title: \"Red 950\",\n        hsl: [356, 30, 9]\n      }\n    }\n  },\n  orange: {\n    title: \"Orange\",\n    tints: {\n      50: {\n        title: \"Orange 50\",\n        hsl: [28, 100, 97]\n      },\n      100: {\n        title: \"Orange 100\",\n        hsl: [25, 100, 93]\n      },\n      200: {\n        title: \"Orange 200\",\n        hsl: [24, 100, 89]\n      },\n      300: {\n        title: \"Orange 300\",\n        hsl: [24, 100, 76]\n      },\n      400: {\n        title: \"Orange 400\",\n        hsl: [24, 100, 63]\n      },\n      500: {\n        title: \"Orange 500\",\n        hsl: [24, 100, 49]\n      },\n      600: {\n        title: \"Orange 600\",\n        hsl: [24, 98, 35]\n      },\n      700: {\n        title: \"Orange 700\",\n        hsl: [24, 94, 25]\n      },\n      800: {\n        title: \"Orange 800\",\n        hsl: [22, 82, 15]\n      },\n      900: {\n        title: \"Orange 900\",\n        hsl: [17, 65, 12]\n      },\n      950: {\n        title: \"Orange 950\",\n        hsl: [14, 43, 9]\n      }\n    }\n  },\n  yellow: {\n    title: \"Yellow\",\n    tints: {\n      50: {\n        title: \"Yellow 50\",\n        hsl: [51, 94, 94]\n      },\n      100: {\n        title: \"Yellow 100\",\n        hsl: [52, 91, 86]\n      },\n      200: {\n        title: \"Yellow 200\",\n        hsl: [50, 90, 78]\n      },\n      300: {\n        title: \"Yellow 300\",\n        hsl: [47, 91, 65]\n      },\n      400: {\n        title: \"Yellow 400\",\n        hsl: [44, 95, 53]\n      },\n      500: {\n        title: \"Yellow 500\",\n        hsl: [39, 96, 42]\n      },\n      600: {\n        title: \"Yellow 600\",\n        hsl: [34, 90, 31]\n      },\n      700: {\n        title: \"Yellow 700\",\n        hsl: [31, 80, 22]\n      },\n      800: {\n        title: \"Yellow 800\",\n        hsl: [28, 66, 14]\n      },\n      900: {\n        title: \"Yellow 900\",\n        hsl: [24, 40, 11]\n      },\n      950: {\n        title: \"Yellow 950\",\n        hsl: [24, 20, 8]\n      }\n    }\n  },\n  green: {\n    title: \"Green\",\n    tints: {\n      50: {\n        title: \"Green 50\",\n        hsl: [157, 89, 95]\n      },\n      100: {\n        title: \"Green 100\",\n        hsl: [158, 89, 88]\n      },\n      200: {\n        title: \"Green 200\",\n        hsl: [158, 87, 82]\n      },\n      300: {\n        title: \"Green 300\",\n        hsl: [158, 86, 65]\n      },\n      400: {\n        title: \"Green 400\",\n        hsl: [159, 88, 50]\n      },\n      500: {\n        title: \"Green 500\",\n        hsl: [159, 96, 37]\n      },\n      600: {\n        title: \"Green 600\",\n        hsl: [159, 98, 24]\n      },\n      700: {\n        title: \"Green 700\",\n        hsl: [158, 98, 16]\n      },\n      800: {\n        title: \"Green 800\",\n        hsl: [158, 91, 10]\n      },\n      900: {\n        title: \"Green 900\",\n        hsl: [162, 72, 8]\n      },\n      950: {\n        title: \"Green 950\",\n        hsl: [172, 51, 6]\n      }\n    }\n  },\n  cyan: {\n    title: \"Cyan\",\n    tints: {\n      50: {\n        title: \"Cyan 50\",\n        hsl: [180, 92, 95]\n      },\n      100: {\n        title: \"Cyan 100\",\n        hsl: [180, 91, 88]\n      },\n      200: {\n        title: \"Cyan 200\",\n        hsl: [180, 87, 78]\n      },\n      300: {\n        title: \"Cyan 300\",\n        hsl: [180, 81, 66]\n      },\n      400: {\n        title: \"Cyan 400\",\n        hsl: [180, 81, 49]\n      },\n      500: {\n        title: \"Cyan 500\",\n        hsl: [182, 96, 38]\n      },\n      600: {\n        title: \"Cyan 600\",\n        hsl: [185, 96, 26]\n      },\n      700: {\n        title: \"Cyan 700\",\n        hsl: [185, 95, 16]\n      },\n      800: {\n        title: \"Cyan 800\",\n        hsl: [187, 86, 11]\n      },\n      900: {\n        title: \"Cyan 900\",\n        hsl: [188, 68, 9]\n      },\n      950: {\n        title: \"Cyan 950\",\n        hsl: [196, 37, 8]\n      }\n    }\n  }\n};\nfunction hexToRgb(hex) {\n  const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n  if (!result)\n    throw new Error(\"input is not valid hex\");\n  return [parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16)];\n}\nfunction rgbToHsl([r, g, b]) {\n  r /= 255, g /= 255, b /= 255;\n  const cmin = Math.min(r, g, b), cmax = Math.max(r, g, b), delta = cmax - cmin;\n  let h = 0, s = 0, l = 0;\n  return delta == 0 ? h = 0 : cmax == r ? h = (g - b) / delta % 6 : cmax == g ? h = (b - r) / delta + 2 : h = (r - g) / delta + 4, h = Math.round(h * 60), h < 0 && (h += 360), l = (cmax + cmin) / 2, s = delta == 0 ? 0 : delta / (1 - Math.abs(2 * l - 1)), s = +(s * 100).toFixed(0), l = +(l * 100).toFixed(0), [h, s, l];\n}\nfunction clamp(num) {\n  return Math.max(Math.min(num, 255), 0);\n}\nfunction darkenChannel(backdrop, source) {\n  return Math.min(backdrop, source);\n}\nfunction darken(b, s) {\n  return [\n    Math.round(clamp(darkenChannel(b[0] / 255, s[0] / 255) * 255)),\n    Math.round(clamp(darkenChannel(b[1] / 255, s[1] / 255) * 255)),\n    Math.round(clamp(darkenChannel(b[2] / 255, s[2] / 255) * 255))\n  ];\n}\nfunction interpolate(min, max, val) {\n  const size = max - min;\n  return min + size * val;\n}\nfunction limit(darkest, lightest, source) {\n  const r = Math.round(interpolate(darkest[0], lightest[0], source[0] / 255)), g = Math.round(interpolate(darkest[1], lightest[1], source[1] / 255)), b = Math.round(interpolate(darkest[2], lightest[2], source[2] / 255));\n  return [r, g, b];\n}\nfunction screenChannel(backdrop, source) {\n  return backdrop + source - backdrop * source;\n}\nfunction screen(b, s) {\n  return [\n    Math.round(clamp(screenChannel(b[0] / 255, s[0] / 255) * 255)),\n    Math.round(clamp(screenChannel(b[1] / 255, s[1] / 255) * 255)),\n    Math.round(clamp(screenChannel(b[2] / 255, s[2] / 255) * 255))\n  ];\n}\nexport {\n  COLOR_HUES,\n  COLOR_TINTS,\n  black,\n  blue,\n  buildTints,\n  color,\n  config,\n  cyan,\n  darken,\n  gray,\n  green,\n  hexToRgb,\n  hslToRgb,\n  hues,\n  limit,\n  magenta,\n  orange,\n  purple,\n  red,\n  rgbToHex,\n  rgbToHsl,\n  screen,\n  white,\n  yellow\n};\n//# sourceMappingURL=index.js.map\n","import {purple} from '@sanity/color'\nimport {SparklesIcon} from '@sanity/icons'\nimport {Text} from '@sanity/ui'\nimport {type CSSProperties, useMemo} from 'react'\nimport {useColorSchemeValue} from 'sanity'\nimport {keyframes, styled} from 'styled-components'\n\nconst Root = styled.span`\n  display: block;\n  width: 25px;\n  height: 25px;\n  position: relative;\n`\n\nconst dash = keyframes`\n  0% {\n    transform: rotate(0);\n  }\n  100% {\n    transform: rotate(43deg);\n  }\n`\n\nconst Outline = styled.svg`\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n\n  & > circle {\n    stroke: var(--ai-avatar-stroke-color);\n    stroke-width: 1.5px;\n    stroke-linecap: round;\n    transform-origin: center;\n    animation: ${dash} 500ms ease-in-out infinite;\n    transition: stroke-dasharray 200ms ease-in-out;\n\n    stroke-dasharray: 2.34px 0;\n\n    [data-state='active'] > & {\n      stroke-dasharray: 2px 2.34px;\n    }\n  }\n`\n\nconst IconDisc = styled.span`\n  background: var(--ai-avatar-disc-color);\n  color: white;\n  width: 21px;\n  height: 21px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  border-radius: 10.5px;\n  position: absolute;\n  top: 2px;\n  left: 2px;\n`\n\nexport function AssistAvatar(props: {state?: 'present' | 'active'}) {\n  const {state = 'present'} = props\n  const scheme = useColorSchemeValue()\n\n  const style = useMemo(() => {\n    if (scheme === 'dark') {\n      return {\n        [`--ai-avatar-stroke-color`]: purple[400].hex,\n        [`--ai-avatar-disc-color`]: purple[600].hex,\n      } as CSSProperties\n    }\n\n    return {\n      [`--ai-avatar-stroke-color`]: purple[500].hex,\n      [`--ai-avatar-disc-color`]: purple[600].hex,\n    } as CSSProperties\n  }, [scheme])\n\n  return (\n    <Root data-state={state} style={style}>\n      <Outline\n        width=\"25\"\n        height=\"25\"\n        viewBox=\"0 0 25 25\"\n        fill=\"none\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n      >\n        <circle cx=\"12.5\" cy=\"12.5\" r=\"11.75\" />\n      </Outline>\n      <IconDisc>\n        <Text as=\"span\" size={0} style={{color: 'inherit'}}>\n          <SparklesIcon style={{color: 'inherit'}} />\n        </Text>\n      </IconDisc>\n    </Root>\n  )\n}\n","// eslint-disable-next-line react/no-unused-prop-types\nimport {Card, Flex, Text, Tooltip} from '@sanity/ui'\nimport type {FormNodePresence} from 'sanity'\n\nimport {FadeInContent} from '../components/FadeInContent'\nimport {AssistAvatar} from './AssistAvatar'\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function AiFieldPresence(props: {presence: FormNodePresence}) {\n  return (\n    <Card style={{position: 'relative', background: 'transparent'}} contentEditable={false}>\n      <Tooltip\n        placement=\"left\"\n        content={\n          <Card padding={3} border>\n            <Flex align=\"center\">\n              <Text size={1}>Running instruction...</Text>\n            </Flex>\n          </Card>\n        }\n      >\n        <FadeInContent durationMs={300}>\n          <AssistAvatar state=\"active\" />\n        </FadeInContent>\n      </Tooltip>\n    </Card>\n  )\n}\n","import {useMemo} from 'react'\nimport {type FormNodePresence, isKeySegment, type Path, stringToPath} from 'sanity'\n\nimport {useAssistDocumentContext} from '../assistDocument/AssistDocumentContext'\nimport {maxHistoryVisibilityMs, pluginTitle} from '../constants'\nimport type {AiPresence} from '../types'\n\nconst NO_PRESENCE: FormNodePresence[] = []\n\nexport function useAssistPresence(path: Path, showFocusWithin?: boolean): FormNodePresence[] {\n  const context = useAssistDocumentContext()\n  const assistDocument = context && 'assistDocument' in context ? context.assistDocument : undefined\n  const tasks = assistDocument?.tasks\n\n  return useMemo(() => {\n    const activePresence = tasks\n      ?.filter((task) => !task.ended)\n      ?.flatMap((task) => task.presence ?? [])\n      ?.filter(\n        (p) =>\n          p.started &&\n          new Date().getTime() - new Date(p.started).getTime() < maxHistoryVisibilityMs,\n      )\n      .filter((presence) => {\n        if (!presence.path || !path.length) {\n          return false\n        }\n        const statusPath = stringToPath(presence.path)\n\n        if (!showFocusWithin && statusPath.length !== path.length) {\n          return false\n        }\n\n        return path.every((pathSegment, i) => {\n          const statusSegment = statusPath[i]\n          if (typeof pathSegment === 'string') {\n            return pathSegment === statusSegment\n          }\n          if (isKeySegment(pathSegment) && isKeySegment(statusSegment)) {\n            return pathSegment._key === statusSegment._key\n          }\n          return false\n        })\n      })\n    if (!activePresence?.length) {\n      return NO_PRESENCE\n    }\n\n    return activePresence.map((status) => aiPresence(status, path))\n  }, [showFocusWithin, tasks, path])\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function aiPresence(presence: AiPresence, path: Path, title?: string): FormNodePresence {\n  return {\n    user: {\n      id: `sanity-assistant_${presence._key}`,\n      displayName: pluginTitle,\n    },\n    path: path,\n    sessionId: 'not-available',\n    lastActiveAt: presence?.started ?? new Date().toISOString(),\n  }\n}\n","import {Box, Flex} from '@sanity/ui'\nimport {useContext, useMemo} from 'react'\nimport {FieldProps, isArraySchemaType, pathToString} from 'sanity'\n\nimport {assistFormId} from '../_lib/form/constants'\nimport {isAssistSupported} from '../helpers/assistSupported'\nimport {isPortableTextArray, isType} from '../helpers/typeUtils'\nimport {AssistOnboardingPopover} from '../onboarding/FieldActionsOnboarding'\nimport {FirstAssistedPathContext} from '../onboarding/FirstAssistedPathProvider'\nimport {fieldOnboardingKey, useOnboardingFeature} from '../onboarding/onboardingStore'\nimport {AiFieldPresence} from '../presence/AiFieldPresence'\nimport {useAssistPresence} from '../presence/useAssistPresence'\nimport {contextDocumentTypeName} from '../types'\n\nexport function AssistFieldWrapper(props: FieldProps) {\n  const {schemaType} = props\n\n  const isSupported = useMemo(() => isAssistSupported(schemaType), [schemaType])\n\n  if (\n    !isSupported ||\n    schemaType.name.startsWith('sanity.') ||\n    schemaType.name === contextDocumentTypeName\n  ) {\n    return props.renderDefault(props)\n  }\n  if (\n    !isType(props.schemaType, 'document') &&\n    props.inputId !== 'root' &&\n    props.inputId !== assistFormId\n  ) {\n    return <AssistField {...props}>{props.children}</AssistField>\n  }\n\n  return props.renderDefault(props)\n}\n\nexport function AssistField(props: FieldProps) {\n  const {path} = props\n\n  const isPortableText = useMemo(\n    () => !!(isArraySchemaType(props.schemaType) && isPortableTextArray(props.schemaType)),\n    [props.schemaType],\n  )\n\n  const presence = useAssistPresence(props.path, isPortableText)\n\n  const firstAssistedPath = useContext(FirstAssistedPathContext)\n  const isFirstAssisted = useMemo(\n    () => pathToString(path) === firstAssistedPath,\n    [path, firstAssistedPath],\n  )\n\n  const {showOnboarding, dismissOnboarding} = useOnboardingFeature(fieldOnboardingKey)\n  const singlePresence = presence[0]\n\n  const actions = (\n    <Flex gap={2} align=\"center\" justify=\"space-between\">\n      {singlePresence && (\n        <Box>\n          <AiFieldPresence presence={singlePresence} />\n        </Box>\n      )}\n\n      {isFirstAssisted && showOnboarding && <AssistOnboardingPopover dismiss={dismissOnboarding} />}\n    </Flex>\n  )\n\n  return props.renderDefault({\n    ...props,\n\n    // When showing the onboarding, prevent default field actions from being rendered\n    actions: isFirstAssisted && showOnboarding ? [] : props.actions,\n\n    // Render presence (and possibly onboarding) in the internal slot (between presence and the field actions)\n    // eslint-disable-next-line camelcase\n    __internal_slot: actions,\n  })\n}\n","import {Box, Button, Card, ErrorBoundary, Flex, Stack, Text} from '@sanity/ui'\nimport {type ErrorInfo, type PropsWithChildren, useCallback, useMemo, useState} from 'react'\nimport {type InputProps, isArraySchemaType, PatchEvent, unset} from 'sanity'\nimport {styled} from 'styled-components'\n\nimport {isPortableTextArray} from '../helpers/typeUtils'\n\nconst WrapPreCard = styled(Card)`\n  & pre {\n    white-space: pre-wrap !important;\n  }\n`\n\nexport function SafeValueInput(props: InputProps) {\n  return (\n    <ErrorWrapper onChange={props.onChange}>\n      <PteValueFixer {...props} />\n    </ErrorWrapper>\n  )\n}\n\nexport function ErrorWrapper(\n  props: PropsWithChildren<{onChange: (patchEvent: PatchEvent) => void}>,\n) {\n  const {onChange} = props\n  const [error, setError] = useState<Error | undefined>()\n\n  const catchError = useCallback((params: {error: Error; info: ErrorInfo}) => {\n    setError(params.error)\n  }, [])\n\n  const unsetValue = useCallback(() => {\n    onChange(PatchEvent.from(unset()))\n    setError(undefined)\n  }, [onChange])\n  const dismiss = useCallback(() => setError(undefined), [])\n  const catcher = <ErrorBoundary onCatch={catchError}>{props.children}</ErrorBoundary>\n\n  return error ? (\n    <Card border tone=\"critical\" padding={2} contentEditable={false}>\n      <Stack space={3}>\n        <Text muted weight=\"semibold\">\n          An error occurred.\n        </Text>\n\n        <WrapPreCard flex={1} padding={2} tone=\"critical\" border>\n          {catcher}\n        </WrapPreCard>\n\n        <Flex width=\"fill\" flex={1} gap={3}>\n          <Box flex={1}>\n            <Button text=\"Dismiss\" onClick={dismiss} tone=\"primary\" />\n          </Box>\n          <Button text=\"Unset value\" onClick={unsetValue} tone=\"critical\" />\n        </Flex>\n      </Stack>\n    </Card>\n  ) : (\n    catcher\n  )\n}\n\nfunction PteValueFixer(props: InputProps) {\n  const isPortableText = useMemo(\n    () => isArraySchemaType(props.schemaType) && isPortableTextArray(props.schemaType),\n    [props.schemaType],\n  )\n  const value = props.value\n  if (isPortableText && value && !(value as any[]).length) {\n    return props.renderDefault({...props, value: undefined})\n  }\n\n  return props.renderDefault(props)\n}\n","import {Box, Flex} from '@sanity/ui'\nimport {useCallback} from 'react'\nimport {BlockProps, PatchEvent, useFormCallbacks} from 'sanity'\n\nimport {ErrorWrapper} from '../components/SafeValueInput'\nimport {AiFieldPresence} from '../presence/AiFieldPresence'\nimport {useAssistPresence} from '../presence/useAssistPresence'\n\nexport function AssistFormBlock(props: BlockProps) {\n  const presence = useAssistPresence(props.path, true)\n  const {onChange} = useFormCallbacks()\n  const key = props.value._key\n  const localOnChange = useCallback(\n    (patchEvent: PatchEvent) => {\n      if (!key) {\n        return\n      }\n      onChange(PatchEvent.from(patchEvent).prefixAll({_key: key}))\n    },\n    [onChange, key],\n  )\n  const singlePresence = presence[0]\n  return (\n    <ErrorWrapper onChange={localOnChange}>\n      <Flex align=\"center\" justify=\"space-between\">\n        <Box flex={1}>{props.renderDefault(props)}</Box>\n        {singlePresence && <AiFieldPresence presence={singlePresence} />}\n      </Flex>\n    </ErrorWrapper>\n  )\n}\n","import {createContext} from 'react'\nimport {BlockProps} from 'sanity'\n\n// workaround for preview value sometimes lagging behind\nexport const InlineBlockValueContext = createContext<unknown>(undefined)\n\nexport function AssistInlineFormBlock(props: BlockProps) {\n  return (\n    <InlineBlockValueContext.Provider value={props.value}>\n      <>{props.renderDefault(props)}</>\n    </InlineBlockValueContext.Provider>\n  )\n}\n","import {Box, Flex} from '@sanity/ui'\nimport {ItemProps} from 'sanity'\n\nimport {AiFieldPresence} from '../presence/AiFieldPresence'\nimport {useAssistPresence} from '../presence/useAssistPresence'\n\nexport function AssistItem(props: ItemProps) {\n  const {path} = props\n  const presence = useAssistPresence(path, true)\n\n  return (\n    <Flex align=\"center\" width=\"fill\" style={{position: 'relative'}}>\n      <Box flex={1}>{props.renderDefault({...props})}</Box>\n      {presence.map((pre) => (\n        <Box key={pre.user.id} style={{position: 'absolute', right: 35}}>\n          <AiFieldPresence presence={pre} />\n        </Box>\n      ))}\n    </Flex>\n  )\n}\n","import {Box, type BoxProps, Flex, focusFirstDescendant, Spinner, Text} from '@sanity/ui'\nimport type React from 'react'\nimport {type HTMLProps, useEffect, useMemo, useRef} from 'react'\nimport {tap} from 'rxjs/operators'\nimport {\n  createPatchChannel,\n  type DocumentMutationEvent,\n  type DocumentRebaseEvent,\n  FormBuilder,\n  fromMutationPatches,\n  type PatchMsg,\n  useDocumentPresence,\n  useDocumentStore,\n} from 'sanity'\nimport {useDocumentPane} from 'sanity/structure'\n\nimport {assistFormId} from './constants'\n\nconst preventDefault = (ev: React.FormEvent) => ev.preventDefault()\n\nexport function DocumentForm(\n  props: Omit<BoxProps, 'as'> & Omit<HTMLProps<HTMLDivElement>, 'as' | 'onSubmit' | 'ref'>,\n) {\n  const {\n    collapsedFieldSets,\n    collapsedPaths,\n    displayed: value,\n    documentId,\n    documentType,\n    editState,\n    formState,\n    onBlur,\n    onChange,\n    onFocus,\n    onPathOpen,\n    onSetActiveFieldGroup,\n    onSetCollapsedFieldSet,\n    onSetCollapsedPath,\n    ready,\n    validation,\n  } = useDocumentPane()\n\n  const documentStore = useDocumentStore()\n  const presence = useDocumentPresence(documentId)\n\n  // The `patchChannel` is an INTERNAL publish/subscribe channel that we use to notify form-builder\n  // nodes about both remote and local patches.\n  // - Used by the Portable Text input to modify selections.\n  // - Used by `withDocument` to reset value.\n  const patchChannel = useMemo(() => createPatchChannel(), [])\n\n  const isLocked = editState?.transactionSyncLock?.enabled\n\n  useEffect(() => {\n    const sub = documentStore.pair\n      .documentEvents(documentId, documentType)\n      .pipe(\n        tap((event) => {\n          if (event.type === 'mutation') {\n            patchChannel.publish(prepareMutationEvent(event))\n          }\n\n          if (event.type === 'rebase') {\n            patchChannel.publish(prepareRebaseEvent(event))\n          }\n        }),\n      )\n      .subscribe()\n\n    return () => {\n      sub.unsubscribe()\n    }\n  }, [documentId, documentStore, documentType, patchChannel])\n\n  const hasRev = Boolean(value?._rev)\n  useEffect(() => {\n    if (hasRev) {\n      // this is a workaround for an issue that caused the document pushed to withDocument to get\n      // stuck at the first initial value.\n      // This effect is triggered only when the document goes from not having a revision, to getting one\n      // so it will kick in as soon as the document is received from the backend\n      patchChannel.publish({\n        type: 'mutation',\n        patches: [],\n        snapshot: value,\n      })\n    }\n    // React to changes in hasRev only\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [hasRev])\n\n  const formRef = useRef<null | HTMLDivElement>(null)\n\n  useEffect(() => {\n    focusFirstDescendant(formRef.current!)\n  }, [])\n\n  if (isLocked) {\n    return (\n      <Box as=\"form\" {...props} ref={formRef}>\n        <Flex\n          align=\"center\"\n          direction=\"column\"\n          height=\"fill\"\n          justify=\"center\"\n          padding={3}\n          sizing=\"border\"\n        >\n          <Text size={1}>\n            Please hold tight while the document is synced. This usually happens right after the\n            document has been published, and it shouldn’t take more than a few seconds\n          </Text>\n        </Flex>\n      </Box>\n    )\n  }\n\n  return (\n    <Box as=\"form\" {...props} onSubmit={preventDefault} ref={formRef}>\n      {ready ? (\n        formState === null ? (\n          <Flex\n            align=\"center\"\n            direction=\"column\"\n            height=\"fill\"\n            justify=\"center\"\n            padding={3}\n            sizing=\"border\"\n          >\n            <Text size={1}>This form is hidden</Text>\n          </Flex>\n        ) : (\n          <FormBuilder\n            __internal_patchChannel={patchChannel}\n            collapsedFieldSets={collapsedFieldSets}\n            collapsedPaths={collapsedPaths}\n            focusPath={formState.focusPath}\n            changed={formState.changed}\n            focused={formState.focused}\n            groups={formState.groups}\n            id={assistFormId}\n            members={formState.members}\n            onChange={onChange}\n            onFieldGroupSelect={onSetActiveFieldGroup}\n            onPathBlur={onBlur}\n            onPathFocus={onFocus}\n            onPathOpen={onPathOpen}\n            onSetFieldSetCollapsed={onSetCollapsedFieldSet}\n            onSetPathCollapsed={onSetCollapsedPath}\n            presence={presence}\n            readOnly={formState.readOnly}\n            schemaType={formState.schemaType}\n            validation={validation}\n            value={formState.value as any}\n          />\n        )\n      ) : (\n        <Flex\n          align=\"center\"\n          direction=\"column\"\n          height=\"fill\"\n          justify=\"center\"\n          padding={3}\n          sizing=\"border\"\n        >\n          <Spinner muted />\n\n          <Box marginTop={3}>\n            <Text align=\"center\" muted size={1}>\n              Loading document\n            </Text>\n          </Box>\n        </Flex>\n      )}\n    </Box>\n  )\n}\n\nfunction prepareMutationEvent(event: DocumentMutationEvent): PatchMsg {\n  const patches = event.mutations.map((mut) => mut.patch).filter(Boolean)\n\n  return {\n    type: 'mutation',\n    snapshot: event.document,\n    patches: fromMutationPatches(event.origin, patches),\n  }\n}\n\nfunction prepareRebaseEvent(event: DocumentRebaseEvent): PatchMsg {\n  const remotePatches = event.remoteMutations.map((mut) => mut.patch).filter(Boolean)\n  const localPatches = event.localMutations.map((mut) => mut.patch).filter(Boolean)\n\n  return {\n    type: 'rebase',\n    snapshot: event.document,\n    patches: fromMutationPatches('remote', remotePatches).concat(\n      fromMutationPatches('local', localPatches),\n    ),\n  }\n}\n","import {createContext} from 'react'\n\nexport interface AssistTypeContextValue {\n  typePath?: string\n  documentType?: string\n}\nexport const AssistTypeContext = createContext<AssistTypeContextValue>({})\n","/* eslint-disable max-depth */\nimport {\n  type ArrayOfObjectsFormNode,\n  type ArrayOfObjectsItemMember,\n  type ArrayOfPrimitivesFormNode,\n  type DocumentFormNode,\n  type FieldsetState,\n  isObjectSchemaType,\n  type ObjectFormNode,\n  type Path,\n  pathToString,\n  type SchemaType,\n} from 'sanity'\n\nconst DEFAULT_MAX_DEPTH = 8\nconst ABSOLUTE_MAX_DEPTH = 50\n\nexport interface ConditionalMemberState {\n  path: string\n  hidden: boolean\n  readOnly: boolean\n}\n\ninterface ConditionalMemberInnerState extends ConditionalMemberState {\n  conditional: boolean\n}\n\n/**\n * This is used to statically determine the state of the functions on the server-side.\n * Paths which has a schema with conditional config should be considered hidden: true and/or readOnly: true\n * Only conditional paths are included, as static props can be determined from schema.\n *\n * Returns paths that has conditional hidden or readOnly schema config (function) and that.\n * Form-state does not contain hidden members.\n *\n * Note:\n * * If a parent path is hidden, no child paths are included\n * * If a parent path is readOnly, no child paths are included\n * * If a path is hidden, it is not included; only conditionally visible paths will be returned, with hidden: false\n */\nexport function getConditionalMembers(\n  docState: DocumentFormNode,\n  maxDepth = DEFAULT_MAX_DEPTH,\n): ConditionalMemberState[] {\n  const doc: ConditionalMemberInnerState = {\n    path: '',\n    hidden: false,\n    readOnly: !!docState.readOnly,\n    conditional: isConditional(docState.schemaType),\n  }\n  return (\n    [doc, ...extractConditionalPaths(docState, Math.min(maxDepth, ABSOLUTE_MAX_DEPTH))]\n      .filter((v) => v.conditional)\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      .map(({conditional, ...state}) => ({...state}))\n  )\n}\n\nfunction isConditional(schemaType: SchemaType) {\n  return typeof schemaType.hidden === 'function' || typeof schemaType.readOnly === 'function'\n}\n\nfunction conditionalState(memberState: {\n  path: Path\n  schemaType: SchemaType\n  readOnly?: boolean\n}): ConditionalMemberInnerState {\n  return {\n    path: pathToString(memberState.path),\n    readOnly: !!memberState.readOnly,\n    hidden: false, // if its in members, its not hidden\n    conditional: isConditional(memberState.schemaType),\n  }\n}\n\nfunction extractConditionalPaths(\n  node: ObjectFormNode | FieldsetState,\n  maxDepth: number,\n): ConditionalMemberInnerState[] {\n  if (node.path.length >= maxDepth) {\n    return []\n  }\n\n  return node.members.reduce<ConditionalMemberInnerState[]>((acc, member) => {\n    if (member.kind === 'error') {\n      return acc\n    }\n    if (member.kind === 'field') {\n      const schemaType = member.field.schemaType\n      if (schemaType.jsonType === 'object') {\n        const innerFields = member.field.readOnly\n          ? []\n          : extractConditionalPaths(member.field as ObjectFormNode, maxDepth)\n        return [...acc, conditionalState(member.field), ...innerFields]\n      } else if (schemaType.jsonType === 'array') {\n        const array = member.field as ArrayOfObjectsFormNode | ArrayOfPrimitivesFormNode\n\n        let arrayPaths: ConditionalMemberInnerState[] = []\n        const isObjectsArray = array.members.some(\n          (m) => m.kind === 'item' && isObjectSchemaType(m.item.schemaType),\n        )\n        if (!array.readOnly) {\n          for (const arrayMember of array.members) {\n            if (arrayMember.kind === 'error') {\n              continue\n            }\n\n            const innerFields =\n              isObjectsArray && !arrayMember.item.readOnly\n                ? extractConditionalPaths((arrayMember as ArrayOfObjectsItemMember).item, maxDepth)\n                : []\n\n            arrayPaths = [...arrayPaths, conditionalState(arrayMember.item), ...innerFields]\n          }\n        }\n        return [...acc, conditionalState(array), ...arrayPaths]\n      }\n\n      return [...acc, conditionalState(member.field)]\n    } else if (member.kind === 'fieldSet') {\n      const conditionalFieldset = !!(node as ObjectFormNode).schemaType?.fieldsets?.some(\n        (f) => !f.single && f.name === member.fieldSet.name && typeof f.hidden === 'function',\n      )\n      const innerFields = extractConditionalPaths(member.fieldSet, maxDepth).map((f) => ({\n        ...f,\n        // if fieldset is conditional, visible fields must also be considered conditional\n        conditional: conditionalFieldset ?? f.conditional,\n      }))\n      return [...acc, ...innerFields]\n    }\n\n    return acc\n  }, [])\n}\n","import {SparklesIcon} from '@sanity/icons'\nimport {Box, Button, Container, Flex, Stack, Text} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nimport {releaseAnnouncementUrl} from '../constants'\n\nconst SparklesIllustration = styled(SparklesIcon)({\n  fontSize: '3.125em',\n  '& path': {\n    strokeWidth: `0.6px !important`,\n  },\n})\n\nexport function InspectorOnboarding(props: {onDismiss: () => void}) {\n  const {onDismiss} = props\n  return (\n    <Box padding={4}>\n      <Container width={0}>\n        <Stack space={4}>\n          <div style={{textAlign: 'center'}}>\n            <SparklesIllustration />\n          </div>\n          <Text align=\"center\" size={1}>\n            Create reusable AI instructions that can be applied across all documents of a certain\n            type.\n          </Text>\n\n          <Flex align=\"center\" gap={2} justify=\"center\">\n            <Button\n              as=\"a\"\n              href={releaseAnnouncementUrl}\n              rel=\"noreferrer\"\n              target=\"_blank\"\n              fontSize={1}\n              mode=\"default\"\n              onClick={onDismiss}\n              padding={2}\n              text=\"Learn more\"\n              tone=\"primary\"\n            />\n            <Button fontSize={1} mode=\"bleed\" onClick={onDismiss} padding={2} text=\"Dismiss\" />\n          </Flex>\n        </Stack>\n      </Container>\n    </Box>\n  )\n}\n","import {SearchIcon} from '@sanity/icons'\nimport {Autocomplete, Box, Breadcrumbs, Card, Flex, Text} from '@sanity/ui'\nimport {createElement, useCallback, useMemo} from 'react'\nimport {ObjectSchemaType} from 'sanity'\n\nimport {isType} from '../helpers/typeUtils'\nimport {FieldRef, getFieldRefs, getFieldRefsWithDocument} from './helpers'\n\ninterface FieldSelectorProps {\n  id: string\n  schemaType: ObjectSchemaType\n  fieldPath?: string\n  onSelect: (path: string) => void\n  includeDocument?: boolean\n  filter?: (field: FieldRef) => boolean\n}\n\nexport function FieldAutocomplete(props: FieldSelectorProps) {\n  const {id, schemaType, fieldPath, onSelect, includeDocument, filter} = props\n\n  const fieldRefs = useMemo(() => {\n    if (includeDocument) {\n      return getFieldRefsWithDocument(schemaType)\n    }\n    return getFieldRefs(schemaType)\n  }, [schemaType, includeDocument])\n  const currentField = useMemo(\n    () => fieldRefs.find((f) => f.key === fieldPath),\n    [fieldPath, fieldRefs],\n  )\n\n  const autocompleteOptions = useMemo(\n    () =>\n      fieldRefs\n        .filter((field) => (filter ? filter(field) : true))\n        .filter((f) => !isType(f.schemaType, 'reference'))\n        .map((field) => ({value: field.key, field})),\n    [fieldRefs, filter],\n  )\n\n  const renderOption = useCallback((option: {value: string; field: FieldRef}) => {\n    const {value, field} = option\n\n    if (!value) {\n      return (\n        <Card as=\"button\" padding={3} radius={1}>\n          <Text accent size={1}>\n            {option.value}\n          </Text>\n        </Card>\n      )\n    }\n\n    if (isType(field.schemaType, 'document')) {\n      return (\n        <Card as=\"button\" padding={3} radius={1}>\n          <Text size={1} weight=\"semibold\">\n            The entire document\n          </Text>\n        </Card>\n      )\n    }\n\n    return (\n      <Card as=\"button\" padding={3} radius={1}>\n        <Flex gap={3}>\n          <Text size={1}>{createElement(field.icon)}</Text>\n\n          <FieldTitle field={field} />\n        </Flex>\n      </Card>\n    )\n  }, [])\n\n  const renderValue = useCallback((value: string, option?: {value: string; field: FieldRef}) => {\n    return option?.field.title ?? value\n  }, [])\n\n  const filterOption = useCallback((query: string, option: {value: string; field: FieldRef}) => {\n    const lQuery = query.toLowerCase()\n    return (\n      option?.value?.toLowerCase().includes(lQuery) ||\n      option?.field?.title?.toLowerCase().includes(lQuery)\n    )\n  }, [])\n\n  return (\n    <Autocomplete\n      fontSize={1}\n      icon={currentField ? currentField.icon : SearchIcon}\n      onChange={onSelect}\n      openButton\n      id={id}\n      options={autocompleteOptions}\n      placeholder=\"Search for a field\"\n      radius={2}\n      renderOption={renderOption}\n      renderValue={renderValue}\n      value={currentField?.key}\n      filterOption={filterOption}\n    />\n  )\n}\n\nexport function FieldTitle(props: {field: FieldRef}) {\n  const splitTitle = props.field.title.split('/')\n  return (\n    <Box flex=\"none\">\n      <Breadcrumbs\n        style={{\n          display: 'flex',\n          flexWrap: 'wrap',\n          alignItems: 'center',\n          marginTop: '-4px',\n        }}\n        separator={\n          <Box marginTop={1}>\n            <Text muted size={1}>\n              /\n            </Text>\n          </Box>\n        }\n        space={1}\n      >\n        {splitTitle.slice(0, splitTitle.length - 1).map((pt, i) => (\n          // eslint-disable-next-line react/no-array-index-key\n          <Box key={i} marginTop={1}>\n            <Text muted size={1}>\n              {pt.trim()}\n            </Text>\n          </Box>\n        ))}\n        <Box marginTop={1}>\n          <Text size={1} weight=\"medium\">\n            {splitTitle[splitTitle.length - 1]}\n          </Text>\n        </Box>\n      </Breadcrumbs>\n    </Box>\n  )\n}\n","import {formatDistanceToNow} from 'date-fns'\nimport {useEffect, useReducer} from 'react'\n\nfunction useInterval(ms: number) {\n  const [tick, update] = useReducer((n) => n + 1, 0)\n\n  useEffect(() => {\n    const i = setInterval(update, ms)\n    return () => clearInterval(i)\n  }, [ms])\n  return tick\n}\n\nexport function TimeAgo({date}: {date?: string}) {\n  useInterval(1000)\n  const timeSince = formatDistanceToNow(date ? new Date(date) : new Date())\n  return <span title={timeSince}>{timeSince} ago</span>\n}\n","import {\n  CheckmarkCircleIcon,\n  ClockIcon,\n  CloseCircleIcon,\n  ErrorOutlineIcon,\n  SyncIcon,\n} from '@sanity/icons'\nimport {\n  Box,\n  Button,\n  Card,\n  Flex,\n  Popover,\n  Spinner,\n  Stack,\n  Text,\n  useClickOutside,\n  useGlobalKeyDown,\n  useLayer,\n} from '@sanity/ui'\nimport {createElement, type ForwardedRef, forwardRef, useCallback, useMemo, useState} from 'react'\nimport {StatusButton, type StatusButtonProps, typed, useClient} from 'sanity'\nimport {keyframes, styled} from 'styled-components'\n\nimport {TimeAgo} from '../components/TimeAgo'\nimport {maxHistoryVisibilityMs, pluginTitle} from '../constants'\nimport {assistTasksStatusId} from '../helpers/ids'\nimport {getInstructionTitle} from '../helpers/misc'\nimport type {AssistTasksStatus, InstructionTask, StudioInstruction, TaskEndedReason} from '../types'\n\nexport interface InstructionTaskHistoryButtonProps {\n  documentId?: string\n  tasks: InstructionTask[] | undefined\n  instructions: StudioInstruction[] | undefined\n  showTitles: boolean\n}\n\ninterface CancelableInstructionTask extends InstructionTask {\n  cancel: () => void\n  title?: string\n}\n\nconst rotate = keyframes`\n  0% {\n    transform: rotate(0);\n  }\n  100% {\n    transform: rotate(360deg);\n  }\n`\n\nconst SyncSpinningIcon = styled(SyncIcon)`\n  animation: ${rotate} 1s linear infinite;\n`\n\nconst TASK_CONFIG = {\n  aborted: {\n    title: 'Canceled',\n    icon: CloseCircleIcon,\n    tone: 'transparent',\n  },\n  error: {\n    title: 'Error',\n    icon: ErrorOutlineIcon,\n    tone: 'critical',\n  },\n  success: {\n    title: 'Completed',\n    icon: CheckmarkCircleIcon,\n    tone: 'positive',\n  },\n  timeout: {\n    title: 'Timeout',\n    icon: ClockIcon,\n    tone: 'caution',\n  },\n} as const\n\nexport function InstructionTaskHistoryButton(props: InstructionTaskHistoryButtonProps) {\n  const {tasks, instructions, documentId, showTitles} = props\n\n  const client = useClient({apiVersion: '2023-01-01'})\n  const cancelRun = useCallback(\n    (taskKey: string) => {\n      if (!documentId) {\n        return\n      }\n      const statusDocId = assistTasksStatusId(documentId)\n      const basePath = `${typed<keyof AssistTasksStatus>('tasks')}[_key==\"${taskKey}\"]`\n      client\n        .patch(statusDocId)\n        .set({\n          [`${basePath}.${typed<keyof InstructionTask>('ended')}`]: new Date().toISOString(),\n          [`${basePath}.${typed<keyof InstructionTask>('reason')}`]:\n            typed<TaskEndedReason>('aborted'),\n        })\n        .commit()\n        .catch(console.error)\n    },\n    [client, documentId],\n  )\n\n  const titledTasks = useMemo(() => {\n    const t =\n      tasks\n        ?.filter(\n          (task) =>\n            task.started &&\n            new Date().getTime() - new Date(task.started).getTime() < maxHistoryVisibilityMs,\n        )\n        .map((task): CancelableInstructionTask => {\n          const instruction = instructions?.find((i) => i._key === task.instructionKey)\n          return {\n            ...task,\n            title: showTitles ? (task.title ?? getInstructionTitle(instruction)) : undefined,\n            cancel: () => cancelRun(task._key),\n          }\n        }) ?? []\n    t.sort((a, b) => new Date(b.started ?? '').getTime() - new Date(a.started ?? '').getTime())\n    return t\n  }, [tasks, instructions, cancelRun, showTitles])\n\n  // const id = useId()\n\n  const isRunning = useMemo(() => titledTasks.some((r) => !r.ended), [titledTasks])\n  const hasErrors = useMemo(\n    () => titledTasks.some((r) => r.reason === 'error' || r.reason === 'timeout'),\n    [titledTasks],\n  )\n\n  const [open, setOpen] = useState(false)\n\n  const toggleOpen = useCallback(() => setOpen((v) => !v), [])\n\n  const [button, setButton] = useState<HTMLButtonElement | null>(null)\n  const [popover, setPopover] = useState<HTMLDivElement | null>(null)\n\n  const handleClickOutside = useCallback(() => {\n    setOpen(false)\n  }, [])\n\n  useClickOutside(handleClickOutside, [button, popover])\n\n  const handleEscape = useCallback(() => {\n    setOpen(false)\n    button?.focus()\n  }, [button])\n\n  return (\n    <Popover\n      constrainSize\n      content={<TaskList onEscape={handleEscape} tasks={titledTasks} />}\n      open={open && !!titledTasks?.length}\n      placement=\"top\"\n      portal\n      ref={setPopover}\n      width={0}\n    >\n      <TaskStatusButton\n        disabled={!titledTasks?.length}\n        hasErrors={hasErrors}\n        isRunning={isRunning}\n        onClick={toggleOpen}\n        ref={setButton}\n        selected={open}\n      />\n    </Popover>\n  )\n}\n\nconst TASK_STATUS_BUTTON_TOOLTIP_PROPS: StatusButtonProps['tooltipProps'] = {\n  placement: 'top',\n}\n\nconst TaskStatusButton = forwardRef(function TaskStatusButton(\n  props: {\n    disabled: boolean\n    hasErrors: boolean\n    isRunning: boolean\n    onClick: () => void\n    selected: boolean\n  },\n  ref: ForwardedRef<HTMLButtonElement>,\n) {\n  const {disabled, hasErrors, isRunning, onClick, selected} = props\n\n  return (\n    <StatusButton\n      label={`${pluginTitle} status`}\n      aria-label={`${pluginTitle} status`}\n      icon={isRunning ? SyncSpinningIcon : hasErrors ? ErrorOutlineIcon : CheckmarkCircleIcon}\n      mode=\"bleed\"\n      onClick={onClick}\n      tone={hasErrors ? 'critical' : undefined}\n      disabled={disabled}\n      ref={ref}\n      selected={selected}\n      tooltipProps={TASK_STATUS_BUTTON_TOOLTIP_PROPS}\n    />\n  )\n})\n\nfunction TaskList(props: {onEscape: () => void; tasks: CancelableInstructionTask[]}) {\n  const {onEscape, tasks} = props\n\n  const {isTopLayer} = useLayer()\n\n  useGlobalKeyDown(\n    useCallback(\n      (event) => {\n        if (isTopLayer && event.key === 'Escape') {\n          onEscape()\n        }\n      },\n      [isTopLayer, onEscape],\n    ),\n  )\n\n  return (\n    <Stack padding={1} space={1}>\n      {tasks.map((task) => (\n        <TaskItem key={task._key} task={task} />\n      ))}\n    </Stack>\n  )\n}\n\nfunction TaskItem(props: {task: CancelableInstructionTask}) {\n  const {task} = props\n\n  const taskType = task.reason && TASK_CONFIG[task.reason]\n  return (\n    <Card radius={2} tone={taskType && taskType?.tone}>\n      <Flex align=\"center\" gap={1}>\n        <Flex align=\"flex-start\" flex={1} gap={3} padding={3}>\n          <Box flex=\"none\">\n            <Text size={1}>\n              {taskType && createElement(taskType.icon)}\n              {!task.reason && <Spinner />}\n            </Text>\n          </Box>\n          <Stack flex={1} space={2}>\n            <Text size={1} weight=\"medium\">\n              {taskType ? taskType.title : 'Running'}\n              {task.title && <>: {task.title}</>}\n            </Text>\n            {task.message ? <Text size={1}>{task.message}</Text> : null}\n            <Text muted size={1}>\n              <TimeAgo date={task.ended ?? task.started} />\n            </Text>\n          </Stack>\n        </Flex>\n\n        {!task.ended && (\n          <Box flex=\"none\" padding={1}>\n            <Button fontSize={1} mode=\"bleed\" onClick={task.cancel} text=\"Cancel\" />\n          </Box>\n        )}\n      </Flex>\n    </Card>\n  )\n}\n","import {ArrowRightIcon, CloseIcon, PlayIcon, RetryIcon} from '@sanity/icons'\nimport {Box, Button, Card, Flex, Spinner, Stack, Text} from '@sanity/ui'\nimport {useCallback, useMemo, useRef} from 'react'\nimport {\n  type DocumentInspectorProps,\n  PresenceOverlay,\n  VirtualizerScrollInstanceProvider,\n} from 'sanity'\nimport {\n  DocumentInspectorHeader,\n  type DocumentPaneNode,\n  DocumentPaneProvider,\n  useDocumentPane,\n} from 'sanity/structure'\nimport {styled} from 'styled-components'\n\nimport {DocumentForm} from '../_lib/form'\nimport {useAssistDocumentContext} from '../assistDocument/AssistDocumentContext'\nimport {AssistTypeContext} from '../assistDocument/components/AssistTypeContext'\nimport {useStudioAssistDocument} from '../assistDocument/hooks/useStudioAssistDocument'\nimport {useRequestRunInstruction} from '../assistDocument/RequestRunInstructionProvider'\nimport {useAiAssistanceConfig} from '../assistLayout/AiAssistanceConfigContext'\nimport {giveFeedbackUrl, pluginTitle, releaseAnnouncementUrl, salesUrl} from '../constants'\nimport {getConditionalMembers} from '../helpers/conditionalMembers'\nimport {assistDocumentId} from '../helpers/ids'\nimport {InspectorOnboarding} from '../onboarding/InspectorOnboarding'\nimport {inspectorOnboardingKey, useOnboardingFeature} from '../onboarding/onboardingStore'\nimport {assistDocumentTypeName, fieldPathParam, instructionParam} from '../types'\nimport {FieldTitle} from './FieldAutocomplete'\nimport {\n  type FieldRef,\n  getFieldTitle,\n  useAiPaneRouter,\n  useSelectedField,\n  useTypePath,\n} from './helpers'\nimport {InstructionTaskHistoryButton} from './InstructionTaskHistoryButton'\n\nconst CardWithShadowBelow = styled(Card)`\n  position: relative;\n\n  &:after {\n    content: '';\n    display: block;\n    position: absolute;\n    left: 0;\n    right: 0;\n    bottom: -1px;\n    border-bottom: 1px solid var(--card-border-color);\n    opacity: 0.5;\n    z-index: 100;\n  }\n`\n\nconst CardWithShadowAbove = styled(Card)`\n  position: relative;\n\n  &:after {\n    content: '';\n    display: block;\n    position: absolute;\n    left: 0;\n    right: 0;\n    top: -1px;\n    border-top: 1px solid var(--card-border-color);\n    opacity: 0.5;\n    z-index: 100;\n  }\n`\n\nexport function AssistInspectorWrapper(props: DocumentInspectorProps) {\n  const context = useAiAssistanceConfig()\n\n  if (context.statusLoading) {\n    return (\n      <Flex align=\"center\" height=\"fill\" justify=\"center\" padding={4} sizing=\"border\">\n        <Stack space={3} style={{textAlign: 'center'}}>\n          <Spinner muted />\n          <Text muted size={1}>\n            Loading {pluginTitle}...\n          </Text>\n        </Stack>\n      </Flex>\n    )\n  }\n\n  const status = context.status\n\n  if (!status?.enabled) {\n    return (\n      <Flex direction=\"column\" height=\"fill\">\n        <DocumentInspectorHeader\n          closeButtonLabel=\"Close\"\n          onClose={props.onClose}\n          title={pluginTitle}\n        />\n\n        <Stack flex={1} overflow=\"auto\" padding={4} space={3}>\n          <Text as=\"p\" size={1} weight=\"semibold\">\n            {pluginTitle} is not available\n          </Text>\n\n          <Text as=\"p\" muted size={1}>\n            Please get in touch with a Sanity account manager or{' '}\n            <a href={salesUrl} target=\"_blank\" rel=\"noreferrer\">\n              contact our sales team\n            </a>{' '}\n            to get started with {pluginTitle}.{' '}\n            <a href={releaseAnnouncementUrl} target=\"_blank\" rel=\"noreferrer\">\n              Learn more &rarr;\n            </a>\n          </Text>\n        </Stack>\n      </Flex>\n    )\n  }\n\n  if (!status?.initialized || !status.validToken) {\n    return (\n      <Flex direction=\"column\" height=\"fill\">\n        <DocumentInspectorHeader\n          closeButtonLabel=\"Close\"\n          onClose={props.onClose}\n          title={pluginTitle}\n        />\n\n        <Stack padding={4} space={3}>\n          {context.error ? (\n            <Text size={1} weight=\"semibold\">\n              Failed to start {pluginTitle}\n            </Text>\n          ) : null}\n\n          {!context.error && !status?.initialized ? (\n            <Text size={1} weight=\"semibold\">\n              {pluginTitle} is not enabled\n            </Text>\n          ) : null}\n\n          {!context.error && status?.initialized && !status.validToken ? (\n            <>\n              <Text size={1} weight=\"semibold\">\n                Invalid token\n              </Text>\n              <Text muted size={1}>\n                The token used by the AI Assistant is not valid and has to be regenerated.\n              </Text>\n            </>\n          ) : null}\n\n          {context.error && (\n            <Text muted size={1}>\n              Something went wrong. See console for details.\n            </Text>\n          )}\n\n          {!context.error && !status?.initialized && (\n            <Text size={1} muted>\n              Please enable {pluginTitle}.\n            </Text>\n          )}\n\n          <Button\n            fontSize={1}\n            icon={\n              context.initLoading ? (\n                <Box marginTop={1}>\n                  <Spinner />\n                </Box>\n              ) : context.error ? (\n                RetryIcon\n              ) : undefined\n            }\n            text={\n              context.error\n                ? 'Retry'\n                : status?.initialized && !status.validToken\n                  ? `Restore ${pluginTitle}`\n                  : `Enable ${pluginTitle} now`\n            }\n            tone=\"primary\"\n            onClick={context.init}\n            disabled={context.initLoading}\n          />\n        </Stack>\n      </Flex>\n    )\n  }\n\n  return <AssistInspector {...props} />\n}\n\nexport function AssistInspector(props: DocumentInspectorProps) {\n  const {params} = useAiPaneRouter()\n\n  const boundary = useRef<HTMLDivElement | null>(null)\n  const pathKey = params?.[fieldPathParam]\n  const instructionKey = params?.[instructionParam]\n  const documentPane = useDocumentPane()\n  const {\n    documentId,\n    documentType,\n    value: docValue,\n    schemaType,\n    onChange: documentOnChange,\n    formState,\n  } = documentPane\n\n  const {assistableDocumentId, documentIsAssistable} = useAssistDocumentContext()\n\n  const formStateRef = useRef(formState)\n  formStateRef.current = formState\n\n  const {instructionLoading, requestRunInstruction} = useRequestRunInstruction({\n    documentOnChange,\n    isDocAssistable: documentIsAssistable,\n  })\n\n  const typePath = useTypePath(docValue, pathKey ?? '')\n  const selectedField = useSelectedField(schemaType, typePath)\n\n  const aiDocId = assistDocumentId(documentType)\n\n  const assistDocument = useStudioAssistDocument({documentId, schemaType, initDoc: true})\n  const assistField = assistDocument?.fields?.find((f) => f.path === typePath)\n  const instruction = assistField?.instructions?.find((i) => i._key === instructionKey)\n  const tasks = useMemo(\n    () =>\n      assistDocument?.tasks?.filter((i) => !instructionKey || i.instructionKey === instructionKey),\n    [assistDocument?.tasks, instructionKey],\n  )\n  const instructions = useMemo(\n    () => assistDocument?.fields?.flatMap((f) => f.instructions ?? []),\n    [assistDocument?.fields],\n  )\n\n  const promptValue = instruction?.prompt\n  const isEmptyPrompt = useMemo(() => {\n    if (!promptValue?.length) {\n      return true\n    }\n    const firstBlock = promptValue[0] as any\n    const children = firstBlock?.children\n\n    return promptValue.length == 1 && children?.length === 1 && !children?.[0]?.text?.length\n  }, [promptValue])\n\n  const paneNode: DocumentPaneNode = useMemo(\n    () => ({\n      type: 'document',\n      id: aiDocId,\n      title: pluginTitle,\n      options: {\n        id: aiDocId,\n        type: assistDocumentTypeName,\n      },\n    }),\n    [aiDocId],\n  )\n\n  const runCurrentInstruction = useCallback(\n    () =>\n      instruction &&\n      pathKey &&\n      typePath &&\n      requestRunInstruction({\n        documentId: assistableDocumentId,\n        path: pathKey,\n        typePath,\n        assistDocumentId: assistDocumentId(documentType),\n        instruction,\n        conditionalMembers: formStateRef.current ? getConditionalMembers(formStateRef.current) : [],\n      }),\n    [pathKey, instruction, typePath, documentType, assistableDocumentId, requestRunInstruction],\n  )\n\n  const Region = useCallback((_props: any) => {\n    // disabled for now\n    /* return (\n        <ConnectToRegion\n          {..._props}\n          _key={`${paneKey}_${selectedField?.key || '_field'}`}\n          style={{height: '100%', flex: 1, overflow: 'auto'}}\n        />\n      )*/\n    return <div {..._props} style={{height: '100%', flex: 1, overflow: 'auto'}} />\n  }, [])\n\n  const assistTypeContext = useMemo(() => ({typePath, documentType}), [typePath, documentType])\n\n  if (!documentId || !schemaType || schemaType.jsonType !== 'object') {\n    return (\n      <Card flex={1} padding={4}>\n        <Text>Document not ready yet.</Text>\n      </Card>\n    )\n  }\n\n  return (\n    <Flex\n      ref={boundary}\n      direction=\"column\"\n      height=\"fill\"\n      overflow=\"hidden\"\n      sizing=\"border\"\n      style={{lineHeight: 0}}\n    >\n      <AiInspectorHeader\n        onClose={props.onClose}\n        field={selectedField}\n        fieldTitle={getFieldTitle(selectedField)}\n      />\n\n      <Card as={Region} flex={1} overflow=\"auto\">\n        <Flex direction=\"column\" style={{minHeight: '100%'}}>\n          <Box flex={1}>\n            <PresenceOverlay>\n              <Box padding={4}>\n                {selectedField && (\n                  <AssistTypeContext.Provider value={assistTypeContext}>\n                    <VirtualizerScrollInstanceProvider\n                      scrollElement={boundary.current}\n                      containerElement={boundary}\n                    >\n                      <DocumentPaneProvider\n                        paneKey={documentPane.paneKey}\n                        index={documentPane.index}\n                        itemId=\"ai\"\n                        pane={paneNode}\n                        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                        //@ts-ignore this is a valid option available in `corel` - Remove after corel is merged to next\n                        forcedVersion={{\n                          isReleaseLocked: false,\n                          selectedPerspectiveName: 'published',\n                          selectedReleaseId: undefined,\n                        }}\n                      >\n                        <DocumentForm />\n                      </DocumentPaneProvider>\n                    </VirtualizerScrollInstanceProvider>\n                  </AssistTypeContext.Provider>\n                )}\n              </Box>\n            </PresenceOverlay>\n          </Box>\n\n          <Box flex=\"none\" padding={4}>\n            <Text muted size={1}>\n              How is Sanity AI Assist working for you?{' '}\n              <a\n                href={giveFeedbackUrl}\n                target=\"_blank\"\n                rel=\"noreferrer\"\n                style={{whiteSpace: 'nowrap'}}\n              >\n                Let us know <ArrowRightIcon />\n              </a>\n            </Text>\n          </Box>\n        </Flex>\n      </Card>\n      <CardWithShadowAbove flex=\"none\" paddingX={4} paddingY={3} style={{justifySelf: 'flex-end'}}>\n        <Flex gap={2} flex={1} justify=\"flex-end\">\n          {schemaType?.name && pathKey && instructionKey && (\n            <Stack flex={1}>\n              <Button\n                mode=\"ghost\"\n                disabled={isEmptyPrompt || instructionLoading}\n                fontSize={1}\n                icon={instructionLoading ? <Spinner style={{marginTop: 3}} /> : PlayIcon}\n                onClick={runCurrentInstruction}\n                padding={3}\n                text={'Run instruction'}\n              />\n            </Stack>\n          )}\n\n          <InstructionTaskHistoryButton\n            documentId={assistableDocumentId}\n            tasks={tasks}\n            instructions={instructions}\n            showTitles={!instructionKey}\n          />\n        </Flex>\n      </CardWithShadowAbove>\n    </Flex>\n  )\n}\n\nfunction AiInspectorHeader(props: {fieldTitle: string; field?: FieldRef; onClose: () => void}) {\n  const {onClose, field, fieldTitle} = props\n  const {showOnboarding, dismissOnboarding} = useOnboardingFeature(inspectorOnboardingKey)\n\n  return (\n    <CardWithShadowBelow flex=\"none\" padding={2}>\n      <Flex flex={1} align=\"center\">\n        <Flex flex={1} padding={3} gap={2} align=\"center\">\n          <Flex gap={1} align=\"center\" wrap=\"wrap\" style={{marginTop: '-4px'}}>\n            <Box marginTop={1}>\n              <Text size={1} weight=\"semibold\">\n                AI instructions for\n              </Text>\n            </Box>\n            <Card radius={2} border padding={1} marginTop={1}>\n              {field ? (\n                <FieldTitle field={field} />\n              ) : (\n                <Text size={1} weight=\"semibold\">\n                  {fieldTitle}\n                </Text>\n              )}\n            </Card>\n          </Flex>\n        </Flex>\n        <Box flex=\"none\">\n          <Button fontSize={1} icon={CloseIcon} mode=\"bleed\" onClick={onClose} />\n        </Box>\n      </Flex>\n\n      {showOnboarding && <InspectorOnboarding onDismiss={dismissOnboarding} />}\n    </CardWithShadowBelow>\n  )\n}\n","export const aiInspectorId = 'ai-assistance'\n","import {SparklesIcon} from '@sanity/icons'\nimport {DocumentInspector, typed} from 'sanity'\n\nimport {pluginTitle} from '../constants'\nimport {AssistInspectorRouteParams, fieldPathParam, instructionParam} from '../types'\nimport {AssistInspectorWrapper} from './AssistInspector'\nimport {aiInspectorId} from './constants'\n\nexport const assistInspector: DocumentInspector = {\n  name: aiInspectorId,\n  useMenuItem: () => ({\n    icon: SparklesIcon,\n    title: pluginTitle,\n    hidden: true,\n    showAsAction: false,\n  }),\n  component: AssistInspectorWrapper,\n  onClose({params}) {\n    return {\n      params: typed<AssistInspectorRouteParams>({\n        ...params,\n        [fieldPathParam]: undefined,\n        [instructionParam]: undefined,\n      }) as typeof params,\n    }\n  },\n}\n","import {ConnectorOptions} from '../../_lib/connector'\n\nexport function arrowPath(options: ConnectorOptions, x: number, y: number, dir: 1 | -1): string {\n  return [\n    `M ${x - options.arrow.size} ${y - options.arrow.size * dir} `,\n    `L ${x} ${y}`,\n    `L ${x + options.arrow.size} ${y - options.arrow.size * dir}`,\n  ].join('')\n}\n","import {ConnectorLine, ConnectorOptions} from '../../_lib/connector'\n\nexport function drawArrowPath(\n  options: ConnectorOptions,\n  x: number,\n  y: number,\n  dir: number,\n): string {\n  return [\n    `M ${x - options.arrow.size} ${y - options.arrow.size * dir} `,\n    `L ${x} ${y}`,\n    `L ${x + options.arrow.size} ${y - options.arrow.size * dir}`,\n  ].join('')\n}\n\nfunction moveTo(x: number, y: number) {\n  return `M${x} ${y}`\n}\n\nfunction lineTo(x: number, y: number) {\n  return `L${x} ${y}`\n}\n\nfunction join(strings: string[], delim = '') {\n  return strings.join(delim)\n}\n\nfunction quadCurve(x1: number, y1: number, x: number, y: number) {\n  return `Q${x1} ${y1} ${x} ${y}`\n}\n\nexport function drawConnectorPath(options: ConnectorOptions, line: ConnectorLine): string {\n  const {cornerRadius} = options.path\n  const {from, to} = line\n  const {x: fromX, y: fromY} = from\n  const {x: _toX, y: toY} = to\n\n  const toX = _toX - 1\n\n  // Calculate divider position\n  const dividerX = to.bounds.x + options.divider.offsetX\n\n  // Calculate connector FROM path X position\n  const fromPathX = from.isAbove || from.isBelow ? fromX + options.arrow.marginX : fromX\n\n  // Calculate maximum corner radius\n  const r0 = Math.min(cornerRadius, Math.abs(fromPathX - dividerX) / 2)\n  const r1 = Math.min(cornerRadius, Math.abs(fromY - toY) / 2)\n\n  const cmds: string[] = []\n\n  // FROM\n  if (from.isAbove) {\n    cmds.push(\n      moveTo(\n        fromX + options.arrow.marginX,\n        fromY - options.arrow.threshold + options.arrow.marginY,\n      ),\n      lineTo(fromX + options.arrow.marginX, fromY - r0),\n      quadCurve(fromX + options.arrow.marginX, fromY, fromX + options.arrow.marginX + r0, fromY),\n    )\n  } else if (from.isBelow) {\n    cmds.push(\n      moveTo(\n        fromX + options.arrow.marginX,\n        fromY + options.arrow.threshold - options.arrow.marginY,\n      ),\n      lineTo(fromX + options.arrow.marginX, fromY + r0),\n      quadCurve(fromX + options.arrow.marginX, fromY, fromX + options.arrow.marginX + r0, fromY),\n    )\n  } else {\n    cmds.push(moveTo(fromX, fromY))\n  }\n\n  // TO\n  if (to.isAbove) {\n    if (fromY < to.bounds.y) {\n      cmds.push(\n        lineTo(dividerX - r1, fromY),\n        quadCurve(dividerX, fromY, dividerX, fromY + r1),\n        lineTo(dividerX, toY - r1),\n        quadCurve(dividerX, toY, dividerX + r1, toY),\n        lineTo(dividerX - cornerRadius, toY),\n        quadCurve(dividerX, toY, dividerX, toY - cornerRadius),\n        lineTo(dividerX, toY - options.arrow.threshold + options.arrow.marginY),\n      )\n    } else {\n      cmds.push(\n        lineTo(dividerX - cornerRadius, fromY),\n        quadCurve(dividerX, fromY, dividerX, fromY - cornerRadius),\n        lineTo(dividerX, toY - options.arrow.threshold + options.arrow.marginY),\n      )\n    }\n  } else if (to.isBelow) {\n    if (fromY > to.bounds.y + to.bounds.h) {\n      // curl around\n      cmds.push(\n        lineTo(dividerX - options.arrow.marginX - r1, fromY),\n        quadCurve(\n          dividerX - options.arrow.marginX,\n          fromY,\n          dividerX - options.arrow.marginX,\n          fromY - r1,\n        ),\n        lineTo(dividerX - options.arrow.marginX, toY + r1),\n        quadCurve(\n          dividerX - options.arrow.marginX,\n          toY,\n          dividerX - options.arrow.marginX + r1,\n          toY,\n        ),\n        lineTo(dividerX - cornerRadius, toY),\n        quadCurve(dividerX, toY, dividerX, toY + cornerRadius),\n        lineTo(dividerX, toY + options.arrow.threshold - options.arrow.marginY),\n      )\n    } else {\n      cmds.push(\n        lineTo(dividerX - cornerRadius, fromY),\n        quadCurve(dividerX, fromY, dividerX, fromY + cornerRadius),\n        lineTo(dividerX, toY + options.arrow.threshold - options.arrow.marginY),\n      )\n    }\n  } else if (fromY < toY) {\n    cmds.push(\n      lineTo(dividerX - r0, fromY),\n      quadCurve(dividerX, fromY, dividerX, fromY + r1),\n      lineTo(dividerX, toY - r1),\n      quadCurve(dividerX, toY, dividerX + r1, toY),\n      lineTo(toX, toY),\n    )\n  } else {\n    cmds.push(\n      lineTo(dividerX - Math.min(r0, r1), fromY),\n      quadCurve(dividerX, fromY, dividerX, fromY - Math.min(r0, r1)),\n      lineTo(dividerX, toY + r1),\n      quadCurve(dividerX, toY, dividerX + r1, toY),\n      lineTo(toX, toY),\n    )\n  }\n\n  return join(cmds)\n}\n","import {rgba, useTheme} from '@sanity/ui'\nimport {useMemo} from 'react'\n\nimport {ConnectorOptions, mapConnectorToLine, Rect} from '../_lib/connector'\nimport {arrowPath} from './draw/arrowPath'\nimport {drawConnectorPath} from './draw/connectorPath'\n\nexport function ConnectorPath(props: {\n  from: {bounds: Rect; element: Rect}\n  to: {bounds: Rect; element: Rect}\n  options: ConnectorOptions\n}) {\n  const {from, options, to} = props\n  const {strokeWidth} = options.path\n  const theme = useTheme()\n\n  const line = useMemo(() => mapConnectorToLine(options, {from, to}), [from, options, to])\n\n  return (\n    <>\n      <path\n        d={drawConnectorPath(options, line)}\n        stroke={theme.sanity.color.base.bg}\n        strokeWidth={strokeWidth + 4}\n      />\n\n      <path\n        d={drawConnectorPath(options, line)}\n        stroke={rgba(theme.sanity.color.base.border, 0.5)}\n        strokeWidth={strokeWidth}\n      />\n\n      {line.from.isAbove && (\n        <path\n          d={arrowPath(\n            options,\n            line.from.x + options.arrow.marginX,\n            line.from.bounds.y - options.arrow.threshold + options.arrow.marginY,\n            -1,\n          )}\n          stroke={theme.sanity.color.base.border}\n          strokeWidth={strokeWidth}\n        />\n      )}\n\n      {line.from.isBelow && (\n        <path\n          d={arrowPath(\n            options,\n            line.from.x + options.arrow.marginX,\n            line.from.bounds.y +\n              line.from.bounds.h +\n              options.arrow.threshold -\n              options.arrow.marginY,\n            1,\n          )}\n          stroke={theme.sanity.color.base.border}\n          strokeWidth={strokeWidth}\n        />\n      )}\n    </>\n  )\n}\n","import {Fragment, useEffect, useState} from 'react'\n\nimport {Connector, ConnectorOptions} from '../_lib/connector'\nimport {ConnectorPath} from './ConnectorPath'\n\nconst DEBUG = false\n\nconst options: ConnectorOptions = {\n  arrow: {\n    marginX: 10.5,\n    marginY: 5,\n    size: 4,\n    threshold: 16.5,\n  },\n  divider: {\n    offsetX: -10.5,\n  },\n  path: {\n    cornerRadius: 3,\n    marginY: 10.5,\n    strokeWidth: 1,\n  },\n}\n\nexport function AssistConnectorsOverlay(props: {connectors: Connector[]}) {\n  const {connectors} = props\n  // const zIndexes = connectors.map((connector) => {\n  //   const zIndex = connector.from.payload?.zIndex\n\n  //   if (typeof zIndex === 'number') {\n  //     return zIndex\n  //   }\n\n  //   return 1\n  // })\n  const [, setRedraw] = useState(false)\n  useEffect(() => {\n    // hacky workaround to force redraw for connectors on initial render\n    // this seem to improve initial measurements of elements\n    setRedraw(true)\n  }, [])\n\n  // const zIndex = zIndexes.length ? Math.max(...zIndexes) : 1\n\n  return (\n    <>\n      <svg\n        fill=\"none\"\n        width={window.innerWidth}\n        height={window.innerHeight}\n        style={{\n          position: 'absolute',\n          top: 0,\n          left: 0,\n          width: '100%',\n          height: '100%',\n          pointerEvents: 'none',\n          zIndex: 150,\n          // zIndex,\n        }}\n      >\n        {connectors.map((connector) => (\n          <ConnectorPath\n            from={connector.from}\n            key={connector.key}\n            options={options}\n            to={connector.to}\n          />\n        ))}\n      </svg>\n      {DEBUG &&\n        connectors.map(({key, from, to}) => {\n          return (\n            <Fragment key={key}>\n              <div\n                style={{\n                  position: 'fixed',\n                  top: from.bounds.y,\n                  left: from.bounds.x,\n                  width: from.bounds.w,\n                  height: from.bounds.h,\n                  pointerEvents: 'none',\n                  overflow: 'hidden',\n                  outline: '1px dotted red',\n                  outlineOffset: -1,\n                  zIndex: 10000000 - 1,\n                }}\n              >\n                <div\n                  style={{\n                    position: 'absolute',\n                    top: from.element.y - from.bounds.y,\n                    left: from.element.x - from.bounds.x,\n                    width: from.element.w,\n                    height: from.element.h,\n                    border: '1px solid red',\n                    boxSizing: 'border-box',\n                  }}\n                />\n              </div>\n\n              <div\n                style={{\n                  position: 'fixed',\n                  top: to.bounds.y,\n                  left: to.bounds.x,\n                  width: to.bounds.w,\n                  height: to.bounds.h,\n                  pointerEvents: 'none',\n                  overflow: 'hidden',\n                  outline: '1px dotted teal',\n                  outlineOffset: -1,\n                  zIndex: 10000000 - 1,\n                }}\n              >\n                <div\n                  style={{\n                    position: 'absolute',\n                    top: to.element.y - to.bounds.y,\n                    left: to.element.x - to.bounds.x,\n                    width: to.element.w,\n                    height: to.element.h,\n                    border: '1px solid teal',\n                    boxSizing: 'border-box',\n                  }}\n                />\n              </div>\n            </Fragment>\n          )\n        })}\n    </>\n  )\n}\n","import {packageName} from '../constants'\nimport {TranslateStyleguide, TranslateStyleguideContext} from '../translate/types'\n\nexport function validateStyleguide(styleguide: string | undefined) {\n  if (styleguide && styleguide.length > 2000) {\n    throw new Error(\n      `[${packageName}]: \\`translate.styleguide\\` value is too long. It must be 2000 characters or less, but was ${styleguide.length} characters`,\n    )\n  }\n  return styleguide\n}\n\nexport function createStyleGuideResolver(\n  styleguide: TranslateStyleguide | undefined,\n  context: TranslateStyleguideContext,\n) {\n  return async () => {\n    if (typeof styleguide !== 'function') {\n      return styleguide\n    }\n    const styleguideResult = await styleguide(context)\n    return validateStyleguide(styleguideResult)\n  }\n}\n","import {get} from 'lodash'\nimport type {SanityDocumentLike} from 'sanity'\n\nexport const getLanguageParams = (\n  select: Record<string, string> | undefined,\n  document: SanityDocumentLike | undefined,\n): Record<string, unknown> => {\n  if (!select || !document) {\n    return {}\n  }\n\n  const selection: Record<string, string> = select || {}\n  const selectedValue: Record<string, unknown> = {}\n  for (const [key, path] of Object.entries(selection)) {\n    let value = get(document, path)\n    if (Array.isArray(value)) {\n      // If there are references in the array, ensure they have `_ref` set, otherwise they are considered empty and can safely be ignored\n      value = value.filter((item) =>\n        typeof item === 'object' ? item?._type !== 'reference' || '_ref' in item : true,\n      )\n    }\n    selectedValue[key] = value\n  }\n\n  return selectedValue\n}\n","export const toFieldLanguagesKeyPrefix = 'sanityStudio:assist:field-languages:from:'\n\nexport function getPreferredToFieldLanguages(fromLanguageId: string): string[] {\n  if (typeof localStorage === 'undefined') {\n    return []\n  }\n\n  const value = localStorage.getItem(`${toFieldLanguagesKeyPrefix}${fromLanguageId}`)\n  return value ? (JSON.parse(value) as string[]) : []\n}\n\nexport function setPreferredToFieldLanguages(fromLanguageId: string, languageIds: string[]) {\n  if (typeof localStorage === 'undefined') {\n    return\n  }\n\n  localStorage.setItem(`${toFieldLanguagesKeyPrefix}${fromLanguageId}`, JSON.stringify(languageIds))\n}\n","import {extractWithPath} from '@sanity/mutator'\nimport {\n  isDocumentSchemaType,\n  isKeySegment,\n  type ObjectSchemaType,\n  type Path,\n  pathToString,\n  type SanityDocumentLike,\n} from 'sanity'\n\nimport type {DocumentMember, TranslationOutput, TranslationOutputsFunction} from './types'\n\nexport interface FieldLanguageMap {\n  inputLanguageId: string\n  inputPath: Path\n  outputs: TranslationOutput[]\n}\n\nconst DEFAULT_MAX_DEPTH = 6\nconst ABSOLUTE_MAX_DEPTH = 50\n\nexport function getDocumentMembersFlat(\n  doc: SanityDocumentLike,\n  schemaType: ObjectSchemaType,\n  maxDepth = DEFAULT_MAX_DEPTH,\n) {\n  if (!isDocumentSchemaType(schemaType)) {\n    console.error(`Schema type is not a document`)\n    return []\n  }\n\n  return extractPaths(doc, schemaType, [], Math.min(maxDepth, ABSOLUTE_MAX_DEPTH))\n}\n\nfunction extractPaths(\n  doc: SanityDocumentLike,\n  schemaType: ObjectSchemaType,\n  path: Path,\n  maxDepth: number,\n): DocumentMember[] {\n  if (path.length >= maxDepth) {\n    return []\n  }\n\n  return schemaType.fields.reduce<DocumentMember[]>((acc, field) => {\n    const fieldPath = [...path, field.name]\n    const fieldSchema = field.type\n    const {value} = extractWithPath(pathToString(fieldPath), doc)[0] ?? {}\n    if (!value) {\n      return acc\n    }\n\n    const thisFieldWithPath: DocumentMember = {\n      path: fieldPath,\n      name: field.name,\n      schemaType: fieldSchema,\n      value,\n    }\n\n    if (fieldSchema.jsonType === 'object') {\n      const innerFields = extractPaths(doc, fieldSchema, fieldPath, maxDepth)\n\n      return [...acc, thisFieldWithPath, ...innerFields]\n    } else if (\n      fieldSchema.jsonType === 'array' &&\n      fieldSchema.of.length &&\n      fieldSchema.of.some((item) => 'fields' in item) &&\n      // no reason to drill into arrays if the item fields will be culled by maxDepth, ie we need 1 extra path headroom\n      path.length + 1 < maxDepth\n    ) {\n      const {value: arrayValue} = extractWithPath(pathToString(fieldPath), doc)[0] ?? {}\n\n      let arrayPaths: DocumentMember[] = []\n      if ((arrayValue as any)?.length) {\n        for (const item of arrayValue as any[]) {\n          const itemPath = [...fieldPath, {_key: item._key}]\n          let itemSchema = fieldSchema.of.find((t) => t.name === item._type)\n          if (!item._type) {\n            itemSchema = fieldSchema.of[0]\n            console.warn(\n              'Array item is missing _type - using the first defined type in the array.of schema',\n              {\n                itemPath,\n                item,\n                itemSchema,\n              },\n            )\n          }\n          if (item._key && itemSchema) {\n            const innerFields = extractPaths(\n              doc,\n              itemSchema as ObjectSchemaType,\n              itemPath,\n              maxDepth,\n            )\n            const arrayMember = {\n              path: itemPath,\n              name: item._key,\n              schemaType: itemSchema,\n              value: item,\n            }\n            arrayPaths = [...arrayPaths, arrayMember, ...innerFields]\n          }\n        }\n      }\n\n      return [...acc, thisFieldWithPath, ...arrayPaths]\n    }\n\n    return [...acc, thisFieldWithPath]\n  }, [])\n}\n\n/**\n * Default implementation for plugin config `translate.field.translationOutputs`\n *\n * @see FieldTranslationConfig#translationOutputs\n */\nexport const defaultLanguageOutputs: TranslationOutputsFunction = function (\n  member,\n  enclosingType,\n  translateFromLanguageId,\n  translateToLanguageIds,\n) {\n  if (\n    member.schemaType.jsonType === 'object' &&\n    member.schemaType.name.startsWith('internationalizedArray')\n  ) {\n    const pathEnd = member.path.slice(-1)\n\n    const language = isKeySegment(pathEnd[0]) ? pathEnd[0]._key : null\n    return language === translateFromLanguageId\n      ? translateToLanguageIds.map((translateToId) => ({\n          id: translateToId,\n          outputPath: [...member.path.slice(0, -1), {_key: translateToId}],\n        }))\n      : undefined\n  }\n\n  if (enclosingType.jsonType === 'object' && enclosingType.name.startsWith('locale')) {\n    return translateFromLanguageId === member.name\n      ? translateToLanguageIds.map((translateToId) => ({\n          id: translateToId,\n          outputPath: [...member.path.slice(0, -1), translateToId],\n        }))\n      : undefined\n  }\n\n  return undefined\n}\n\nexport function getFieldLanguageMap(\n  documentSchema: ObjectSchemaType,\n  documentMembers: DocumentMember[],\n  translateFromLanguageId: string,\n  outputLanguageIds: string[],\n  langFn: TranslationOutputsFunction,\n): FieldLanguageMap[] {\n  const translationMaps: FieldLanguageMap[] = []\n  for (const member of documentMembers) {\n    const parentPath = member.path.slice(0, -1)\n    const enclosingType =\n      documentMembers.find((m) => pathToString(m.path) === pathToString(parentPath))?.schemaType ??\n      documentSchema\n\n    const translations = langFn(\n      member,\n      enclosingType,\n      translateFromLanguageId,\n      outputLanguageIds,\n    )?.filter((translation) => translation.id !== translateFromLanguageId)\n\n    if (translations) {\n      translationMaps.push({\n        inputLanguageId: translateFromLanguageId,\n        inputPath: member.path,\n        outputs: translations,\n      })\n    }\n  }\n\n  return translationMaps\n}\n","import {PlayIcon} from '@sanity/icons'\nimport {Box, Button, Checkbox, Dialog, Flex, Radio, Spinner, Stack, Text, Tooltip} from '@sanity/ui'\nimport {\n  createContext,\n  type PropsWithChildren,\n  useCallback,\n  useContext,\n  useId,\n  useMemo,\n  useState,\n} from 'react'\nimport {\n  type ObjectSchemaType,\n  type Path,\n  pathToString,\n  type SanityDocumentLike,\n  useClient,\n} from 'sanity'\n\nimport {useAiAssistanceConfig} from '../assistLayout/AiAssistanceConfigContext'\nimport type {ConditionalMemberState} from '../helpers/conditionalMembers'\nimport {createStyleGuideResolver} from '../helpers/styleguide'\nimport {API_VERSION_WITH_EXTENDED_TYPES, useApiClient, useTranslate} from '../useApiClient'\nimport {getLanguageParams} from './getLanguageParams'\nimport {getPreferredToFieldLanguages, setPreferredToFieldLanguages} from './languageStore'\nimport {\n  defaultLanguageOutputs,\n  type FieldLanguageMap,\n  getDocumentMembersFlat,\n  getFieldLanguageMap,\n} from './paths'\nimport type {Language} from './types'\n\ninterface FieldTranslationParams {\n  document: SanityDocumentLike\n  documentSchema: ObjectSchemaType\n  translatePath: Path\n  conditionalMembers: ConditionalMemberState[]\n}\n\nexport interface FieldTranslationContextValue {\n  openFieldTranslation: (args: FieldTranslationParams) => void\n  translationLoading: boolean\n}\n\nexport const FieldTranslationContext = createContext<FieldTranslationContextValue>({\n  openFieldTranslation: () => {},\n  translationLoading: false,\n})\n\nexport function useFieldTranslation() {\n  return useContext(FieldTranslationContext)\n}\n\nfunction hasValuesToTranslate(\n  fieldLanguageMaps: FieldLanguageMap[] | undefined,\n  fromLanguage: Language | undefined,\n  basePath: Path,\n) {\n  return fieldLanguageMaps?.some(\n    (map) =>\n      map.inputLanguageId === fromLanguage?.id &&\n      map.inputPath &&\n      pathToString(map.inputPath).startsWith(pathToString(basePath)),\n  )\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function FieldTranslationProvider(props: PropsWithChildren<{}>) {\n  const {config: assistConfig} = useAiAssistanceConfig()\n\n  const apiClient = useApiClient(assistConfig.__customApiClient)\n  const styleguide = assistConfig.translate?.styleguide\n  const config = assistConfig.translate?.field\n  const {translate: runTranslate} = useTranslate(apiClient)\n\n  const [dialogOpen, setDialogOpen] = useState(false)\n\n  const [fieldTranslationParams, setFieldTranslationParams] = useState<\n    FieldTranslationParams | undefined\n  >()\n  const [languages, setLanguages] = useState<Language[] | undefined>()\n  const [fromLanguage, setFromLanguage] = useState<Language | undefined>(undefined)\n  const [toLanguages, setToLanguages] = useState<Language[] | undefined>(undefined)\n  const [fieldLanguageMaps, setFieldLanguageMaps] = useState<FieldLanguageMap[] | undefined>()\n\n  const close = useCallback(() => {\n    setDialogOpen(false)\n    setLanguages(undefined)\n    setFieldTranslationParams(undefined)\n  }, [])\n  const languageClient = useClient({\n    apiVersion: config?.apiVersion ?? API_VERSION_WITH_EXTENDED_TYPES,\n  })\n  const documentId = fieldTranslationParams?.document?._id\n  const id = useId()\n\n  const selectFromLanguage = useCallback(\n    (\n      from: Language,\n      languages: Language[] | undefined,\n      params: FieldTranslationParams | undefined,\n    ) => {\n      const {document, documentSchema} = params ?? {}\n      setFromLanguage(from)\n      if (!document || !documentSchema || !params || !languages) {\n        setFieldLanguageMaps(undefined)\n        return\n      }\n\n      const preferred = getPreferredToFieldLanguages(from.id)\n      const allToLanguages = languages.filter((l) => l.id !== from?.id)\n      const filteredToLanguages = allToLanguages.filter(\n        (l) => !preferred.length || preferred.includes(l.id),\n      )\n\n      setToLanguages(filteredToLanguages)\n      const fromId = from?.id\n      const allToIds = allToLanguages?.map((l) => l.id) ?? []\n      const docMembers = getDocumentMembersFlat(document, documentSchema, config?.maxPathDepth)\n      if (fromId && allToIds?.length) {\n        const transMap = getFieldLanguageMap(\n          documentSchema,\n          docMembers,\n          fromId,\n          allToIds.filter((toId) => fromId !== toId),\n          config?.translationOutputs ?? defaultLanguageOutputs,\n        )\n        setFieldLanguageMaps(transMap)\n      } else {\n        setFieldLanguageMaps(undefined)\n      }\n    },\n    [config],\n  )\n\n  const toggleToLanguage = useCallback(\n    (\n      toggledLang: Language,\n      toLanguages: Language[] | undefined,\n      languages: Language[] | undefined,\n    ) => {\n      if (!languages || !fromLanguage) {\n        return\n      }\n      const wasSelected = !!toLanguages?.find((l) => l.id === toggledLang.id)\n      const newToLangs = languages.filter(\n        (anyLang) =>\n          !!toLanguages?.find(\n            (selectedLang) => toggledLang.id !== selectedLang.id && selectedLang.id === anyLang.id,\n          ) ||\n          (toggledLang.id === anyLang.id && !wasSelected),\n      )\n      setToLanguages(newToLangs)\n      setPreferredToFieldLanguages(\n        fromLanguage.id,\n        newToLangs.map((l) => l.id),\n      )\n    },\n    [fromLanguage],\n  )\n\n  const openFieldTranslation = useCallback(\n    async (params: FieldTranslationParams) => {\n      setDialogOpen(true)\n      const languageParams = getLanguageParams(config?.selectLanguageParams, params.document)\n      const languages: Language[] | undefined = await (typeof config?.languages === 'function'\n        ? config?.languages(languageClient, languageParams)\n        : Promise.resolve(config?.languages))\n      setLanguages(languages)\n      setFieldTranslationParams(params)\n      const fromLanguage = languages?.[0]\n      if (fromLanguage) {\n        selectFromLanguage(fromLanguage, languages, params)\n      } else {\n        console.error('No languages available for selected language params', languageParams)\n      }\n    },\n    [selectFromLanguage, config, languageClient],\n  )\n\n  const contextValue: FieldTranslationContextValue = useMemo(() => {\n    return {\n      openFieldTranslation,\n      translationLoading: false,\n    }\n  }, [openFieldTranslation])\n\n  const runDisabled =\n    !fromLanguage ||\n    !toLanguages?.length ||\n    !fieldLanguageMaps?.length ||\n    !documentId ||\n    !hasValuesToTranslate(fieldLanguageMaps, fromLanguage, fieldTranslationParams.translatePath)\n\n  const onRunTranslation = useCallback(() => {\n    const translatePath = fieldTranslationParams?.translatePath\n    if (fieldLanguageMaps && documentId && translatePath) {\n      runTranslate({\n        documentId,\n        translatePath,\n        styleguide: createStyleGuideResolver(styleguide, {\n          client: languageClient,\n          documentId,\n          schemaType: fieldTranslationParams?.documentSchema,\n          translatePath,\n        }),\n        fieldLanguageMap: fieldLanguageMaps.map((map) => ({\n          ...map,\n          // eslint-disable-next-line max-nested-callbacks\n          outputs: map.outputs.filter((out) => !!toLanguages?.find((l) => l.id === out.id)),\n        })),\n        conditionalMembers: fieldTranslationParams?.conditionalMembers,\n      })\n    }\n    close()\n  }, [\n    fieldLanguageMaps,\n    documentId,\n    runTranslate,\n    styleguide,\n    close,\n    toLanguages,\n    fieldTranslationParams?.translatePath,\n    fieldTranslationParams?.conditionalMembers,\n    fieldTranslationParams?.documentSchema,\n    languageClient,\n  ])\n\n  const runButton = (\n    <Button\n      text={`Translate`}\n      tone=\"primary\"\n      icon={PlayIcon}\n      style={{width: '100%'}}\n      disabled={runDisabled}\n      onClick={onRunTranslation}\n    />\n  )\n\n  return (\n    <FieldTranslationContext.Provider value={contextValue}>\n      {dialogOpen ? (\n        <Dialog\n          id={id}\n          width={1}\n          open={dialogOpen}\n          onClose={close}\n          header=\"Translate fields\"\n          footer={\n            <Flex justify=\"space-between\" padding={2} flex={1}>\n              {runDisabled ? (\n                <Tooltip\n                  content={\n                    <Flex padding={2}>\n                      <Text>There is nothing to translate in the selected from-language.</Text>\n                    </Flex>\n                  }\n                  placement=\"top\"\n                >\n                  <Flex flex={1}>{runButton}</Flex>\n                </Tooltip>\n              ) : (\n                runButton\n              )}\n            </Flex>\n          }\n        >\n          {languages ? (\n            <Flex padding={4} gap={5} align=\"flex-start\" justify=\"center\">\n              <Stack space={2}>\n                <Box marginBottom={2}>\n                  <Text weight=\"semibold\">From</Text>\n                </Box>\n                {languages?.map((radioLanguage) => (\n                  <FromLanguageRadio\n                    key={radioLanguage.id}\n                    {...{\n                      radioLanguage,\n                      fromLanguage,\n                      selectFromLanguage,\n                      languages,\n                      fieldTranslationParams,\n                    }}\n                  />\n                ))}\n              </Stack>\n\n              <Stack space={2}>\n                <Box marginBottom={2}>\n                  <Text weight=\"semibold\">To</Text>\n                </Box>\n                {languages.map((checkboxLanguage) => (\n                  <ToLanguageCheckbox\n                    key={checkboxLanguage.id}\n                    {...{checkboxLanguage, fromLanguage, toLanguages, toggleToLanguage, languages}}\n                  />\n                ))}\n              </Stack>\n            </Flex>\n          ) : (\n            <Flex padding={4} gap={2} align=\"flex-start\" justify=\"center\">\n              <Box>\n                <Spinner />\n              </Box>\n              <Text>Loading languages...</Text>\n            </Flex>\n          )}\n        </Dialog>\n      ) : null}\n      {props.children}\n    </FieldTranslationContext.Provider>\n  )\n}\n\nfunction ToLanguageCheckbox(props: {\n  checkboxLanguage: Language\n  fromLanguage: Language | undefined\n  toLanguages: Language[] | undefined\n  toggleToLanguage: (\n    toggledLang: Language,\n    toLanguages: Language[] | undefined,\n    languages: Language[] | undefined,\n  ) => void\n  languages: Language[]\n}) {\n  const {checkboxLanguage, fromLanguage, toLanguages, toggleToLanguage, languages} = props\n  const langId = checkboxLanguage.id\n  const onChange = useCallback(\n    () => toggleToLanguage(checkboxLanguage, toLanguages, languages),\n    [toggleToLanguage, checkboxLanguage, toLanguages, languages],\n  )\n  return (\n    <Flex\n      key={langId}\n      gap={3}\n      align=\"center\"\n      as={'label'}\n      style={langId === fromLanguage?.id ? {opacity: 0.5} : undefined}\n    >\n      <Checkbox\n        name=\"toLang\"\n        value={langId}\n        checked={langId !== fromLanguage?.id && !!toLanguages?.find((tl) => tl.id === langId)}\n        onChange={onChange}\n        disabled={langId === fromLanguage?.id}\n      />\n      <Text muted={langId === fromLanguage?.id}>{checkboxLanguage.title ?? langId}</Text>\n    </Flex>\n  )\n}\n\nfunction FromLanguageRadio(props: {\n  radioLanguage: Language\n  fromLanguage: Language | undefined\n  selectFromLanguage: (\n    from: Language,\n    languages: Language[] | undefined,\n    params: FieldTranslationParams | undefined,\n  ) => void\n  languages: Language[] | undefined\n  fieldTranslationParams: FieldTranslationParams | undefined\n}) {\n  const {languages, radioLanguage, selectFromLanguage, fromLanguage, fieldTranslationParams} = props\n  const langId = radioLanguage.id\n\n  const onChange = useCallback(\n    () => selectFromLanguage(radioLanguage, languages, fieldTranslationParams),\n    [selectFromLanguage, radioLanguage, languages, fieldTranslationParams],\n  )\n  return (\n    <Flex key={langId} gap={3} align=\"center\" as={'label'}>\n      <Radio\n        name=\"fromLang\"\n        value={langId}\n        checked={langId === fromLanguage?.id}\n        onChange={onChange}\n      />\n      <Text>{radioLanguage.title ?? radioLanguage.id}</Text>\n    </Flex>\n  )\n}\n","import {ThemeProvider} from '@sanity/ui'\nimport {useState} from 'react'\nimport {LayoutProps} from 'sanity'\n\nimport {Connector, ConnectorsProvider} from '../_lib/connector'\nimport {AssistConnectorsOverlay} from '../assistConnectors'\nimport {AssistPluginConfig} from '../plugin'\nimport {FieldTranslationProvider} from '../translate/FieldTranslationProvider'\nimport {StudioInstruction} from '../types'\nimport {RunInstructionRequest} from '../useApiClient'\nimport {AiAssistanceConfigProvider} from './AiAssistanceConfigContext'\nimport {RunInstructionProvider} from './RunInstructionProvider'\n\nexport interface AIStudioLayoutProps extends LayoutProps {\n  config: AssistPluginConfig\n}\n\nexport type RunInstructionArgs = Omit<RunInstructionRequest, 'instructionKey' | 'userText'> & {\n  instruction: StudioInstruction\n}\n\nexport function AssistLayout(props: AIStudioLayoutProps) {\n  const [connectors, setConnectors] = useState<Connector[]>([])\n\n  return (\n    <AiAssistanceConfigProvider config={props.config}>\n      <RunInstructionProvider>\n        <FieldTranslationProvider>\n          <ConnectorsProvider onConnectorsChange={setConnectors}>\n            {props.renderDefault(props)}\n            <ThemeProvider tone=\"default\">\n              <AssistConnectorsOverlay connectors={connectors} />\n            </ThemeProvider>\n          </ConnectorsProvider>\n        </FieldTranslationProvider>\n      </RunInstructionProvider>\n    </AiAssistanceConfigProvider>\n  )\n}\n","import {createContext, useEffect, useMemo, useState} from 'react'\nimport {getPublishedId, type InputProps, pathToString, useSyncState} from 'sanity'\nimport {useDocumentPane, usePaneRouter} from 'sanity/structure'\n\nimport {useAssistDocumentContext} from '../assistDocument/AssistDocumentContext'\nimport {useAiAssistanceConfig} from '../assistLayout/AiAssistanceConfigContext'\nimport {getDescriptionFieldOption, getImageInstructionFieldOption} from '../helpers/typeUtils'\nimport {canUseAssist, useApiClient, useGenerateCaption} from '../useApiClient'\n\nexport interface ImageContextValue {\n  imageDescriptionPath?: string\n  imageInstructionPath?: string\n  assetRef?: string\n}\n\nexport const ImageContext = createContext<ImageContextValue>({})\n\nexport function ImageContextProvider(props: InputProps) {\n  const {schemaType, path, value, readOnly} = props\n  const assetRef = (value as any)?.asset?._ref\n  const {selectedReleaseId} = useDocumentPane()\n  const [assetRefState, setAssetRefState] = useState<string | undefined>(assetRef)\n\n  const {assistableDocumentId, documentSchemaType} = useAssistDocumentContext()\n  const {config, status} = useAiAssistanceConfig()\n  const apiClient = useApiClient(config?.__customApiClient)\n  const {generateCaption} = useGenerateCaption(apiClient)\n\n  const {isSyncing} = useSyncState(\n    getPublishedId(assistableDocumentId),\n    documentSchemaType.name,\n    selectedReleaseId,\n  )\n\n  const router = usePaneRouter()\n  const isShowingOlderRevision = !!router.params?.rev\n\n  useEffect(() => {\n    const descriptionField = getDescriptionFieldOption(schemaType)\n    if (\n      assetRef &&\n      assistableDocumentId &&\n      descriptionField?.updateOnImageChange &&\n      assetRef !== assetRefState &&\n      !isSyncing &&\n      !isShowingOlderRevision &&\n      !readOnly\n    ) {\n      setAssetRefState(assetRef)\n      if (canUseAssist(status)) {\n        generateCaption({\n          path: pathToString([...path, descriptionField.path]),\n          documentId: assistableDocumentId,\n        })\n      }\n    }\n  }, [\n    schemaType,\n    path,\n    assetRef,\n    assetRefState,\n    assistableDocumentId,\n    generateCaption,\n    isSyncing,\n    status,\n    readOnly,\n    isShowingOlderRevision,\n  ])\n\n  const context: ImageContextValue = useMemo(() => {\n    const descriptionField = getDescriptionFieldOption(schemaType)\n    const imageInstructionField = getImageInstructionFieldOption(schemaType)\n    return {\n      imageDescriptionPath: descriptionField?.path\n        ? pathToString([...path, descriptionField.path])\n        : undefined,\n      imageInstructionPath: imageInstructionField\n        ? pathToString([...path, imageInstructionField])\n        : undefined,\n      assetRef,\n    }\n  }, [schemaType, path, assetRef])\n\n  return <ImageContext.Provider value={context}>{props.renderDefault(props)}</ImageContext.Provider>\n}\n","import {icons} from '@sanity/icons'\nimport {Button, Menu, MenuButton, MenuItem} from '@sanity/ui'\nimport {ElementType, ReactNode, useCallback, useId, useMemo} from 'react'\nimport {set, StringInputProps} from 'sanity'\n\nexport function IconInput(props: StringInputProps) {\n  const {value, onChange} = props\n  const id = useId()\n  const items = useMemo(\n    () =>\n      Object.entries(icons).map(([key, icon]) => (\n        <IconItem key={key} iconKey={key} icon={icon} onChange={onChange} />\n      )),\n    [onChange],\n  )\n\n  const selectedIcon = useMemo(() => getIcon(value), [value])\n\n  return (\n    <MenuButton\n      button={\n        <Button icon={selectedIcon} title=\"Select icon\" padding={3} mode=\"ghost\" radius={1} />\n      }\n      id={id}\n      menu={<Menu style={{maxHeight: 300}}>{items}</Menu>}\n      popover={{portal: true}}\n    />\n  )\n}\n\nfunction IconItem({\n  icon,\n  iconKey: key,\n  onChange,\n}: {\n  iconKey: string\n  icon: ElementType | ReactNode\n  onChange: StringInputProps['onChange']\n}) {\n  const onClick = useCallback(() => onChange(set(key)), [onChange, key])\n  return <MenuItem icon={icon} title={key} text={key} onClick={onClick} />\n}\n\nexport function getIcon(iconName?: string) {\n  return Object.entries(icons).find(([key]) => key === iconName)?.[1] ?? icons.sparkles\n}\n","import {useMemo} from 'react'\nimport {Path, SchemaType} from 'sanity'\n\nimport {isAssistSupported} from './assistSupported'\n\nexport function useAssistSupported(path: Path, schemaType: SchemaType) {\n  return useMemo(() => isAssistSupported(schemaType), [schemaType])\n}\n","/* eslint-disable react-hooks/rules-of-hooks */\nimport {TranslateIcon} from '@sanity/icons'\nimport {Box, Spinner} from '@sanity/ui'\nimport {useMemo, useRef} from 'react'\nimport {\n  DocumentFieldAction,\n  DocumentFieldActionGroup,\n  DocumentFieldActionItem,\n  DocumentFieldActionProps,\n  ObjectSchemaType,\n  useClient,\n} from 'sanity'\nimport {useDocumentPane} from 'sanity/structure'\n\nimport {useDraftDelayedTask} from '../assistDocument/RequestRunInstructionProvider'\nimport {useAiAssistanceConfig} from '../assistLayout/AiAssistanceConfigContext'\nimport {isAssistSupported} from '../helpers/assistSupported'\nimport {getConditionalMembers} from '../helpers/conditionalMembers'\nimport {createStyleGuideResolver} from '../helpers/styleguide'\nimport type {AssistOptions} from '../schemas/typeDefExtensions'\nimport {API_VERSION_WITH_EXTENDED_TYPES, useApiClient, useTranslate} from '../useApiClient'\nimport {useFieldTranslation} from './FieldTranslationProvider'\n\nfunction node(node: DocumentFieldActionItem | DocumentFieldActionGroup) {\n  return node\n}\n\nexport type TranslateProps = DocumentFieldActionProps & {\n  documentIsAssistable?: boolean\n  documentSchemaType?: ObjectSchemaType\n}\nexport const translateActions: DocumentFieldAction = {\n  name: 'sanity-assist-translate',\n  useAction(props: TranslateProps) {\n    const {config, status} = useAiAssistanceConfig()\n    const apiClient = useApiClient(config?.__customApiClient)\n    const client = useClient({apiVersion: API_VERSION_WITH_EXTENDED_TYPES})\n    const {\n      schemaType: fieldSchemaType,\n      path,\n      documentId,\n      documentSchemaType,\n      documentIsAssistable,\n    } = props\n    const isDocumentLevel = path.length === 0\n    const readOnly = fieldSchemaType.readOnly === true\n\n    const docTransTypes = config.translate?.document?.documentTypes\n    const options = fieldSchemaType?.options as AssistOptions | undefined\n    const addFieldAction = isDocumentLevel || options?.aiAssist?.translateAction\n\n    //All props used here MUST have the same value always, or we break the rules of hooks (conditional hook usage)\n    const fieldTransEnabled =\n      addFieldAction &&\n      documentSchemaType &&\n      config.translate?.field?.documentTypes?.includes(documentSchemaType.name)\n    const documentTranslationEnabled =\n      addFieldAction &&\n      documentSchemaType &&\n      ((!docTransTypes && isAssistSupported(fieldSchemaType)) ||\n        docTransTypes?.includes(documentSchemaType.name))\n\n    // these checks are stable (ie, does not change after mount), so not breaking rules of hooks\n    if (documentSchemaType && (documentTranslationEnabled || fieldTransEnabled)) {\n      const {value: documentValue, onChange: documentOnChange, formState} = useDocumentPane()\n      const docRef = useRef(documentValue)\n      docRef.current = documentValue\n      const formStateRef = useRef(formState)\n      formStateRef.current = formState\n\n      const translationApi = useTranslate(apiClient)\n      const translate = useDraftDelayedTask({\n        documentOnChange,\n        isDocAssistable: documentIsAssistable ?? false,\n        task: translationApi.translate,\n      })\n\n      const styleguide = config.translate?.styleguide\n      const languagePath = config.translate?.document?.languageField\n\n      // if this is true, it is stable, and not breaking rules of hooks\n      const translateDocumentAction = useMemo(() => {\n        if (!languagePath || !documentTranslationEnabled) {\n          return undefined\n        }\n        const title = path.length ? `Translate` : `Translate document`\n        return node({\n          type: 'action',\n          icon: translationApi.loading\n            ? () => (\n                <Box style={{height: 17}}>\n                  <Spinner style={{transform: 'translateY(6px)'}} />\n                </Box>\n              )\n            : TranslateIcon,\n          title,\n          onAction: () => {\n            if (translationApi.loading || !languagePath || !documentId) {\n              return\n            }\n            translate({\n              languagePath,\n              translatePath: path,\n              styleguide: createStyleGuideResolver(styleguide, {\n                client,\n                documentId,\n                schemaType: documentSchemaType,\n              }),\n              documentId: documentId ?? '',\n              conditionalMembers: formStateRef.current\n                ? getConditionalMembers(formStateRef.current)\n                : [],\n            })\n          },\n          renderAsButton: true,\n          disabled: translationApi.loading || readOnly,\n        })\n      }, [\n        languagePath,\n        translate,\n        styleguide,\n        documentId,\n        translationApi.loading,\n        documentTranslationEnabled,\n        path,\n        readOnly,\n        client,\n        documentSchemaType,\n      ])\n      const fieldTranslate = useFieldTranslation()\n      const openFieldTranslation = useDraftDelayedTask({\n        documentOnChange,\n        isDocAssistable: documentIsAssistable ?? false,\n        task: fieldTranslate.openFieldTranslation,\n      })\n\n      const maxDepth = config.translate?.field?.maxPathDepth\n      const translateFieldsAction = useMemo(\n        () =>\n          fieldTransEnabled\n            ? node({\n                type: 'action',\n                icon: fieldTranslate.translationLoading\n                  ? () => (\n                      <Box style={{height: 17}}>\n                        <Spinner style={{transform: 'translateY(6px)'}} />\n                      </Box>\n                    )\n                  : TranslateIcon,\n                title: `Translate fields...`,\n                onAction: () => {\n                  if (fieldTranslate.translationLoading || !documentId) {\n                    return\n                  }\n                  if (formStateRef.current) {\n                    getConditionalMembers(formStateRef.current)\n                  }\n                  openFieldTranslation({\n                    document: {\n                      ...docRef.current,\n                      _id: documentId,\n                    },\n                    documentSchema: documentSchemaType,\n                    translatePath: path,\n                    conditionalMembers: formStateRef.current\n                      ? getConditionalMembers(formStateRef.current, maxDepth)\n                      : [],\n                  })\n                },\n                renderAsButton: true,\n                disabled: fieldTranslate.translationLoading || readOnly,\n              })\n            : undefined,\n        [\n          openFieldTranslation,\n          documentSchemaType,\n          documentId,\n          fieldTranslate.translationLoading,\n          fieldTransEnabled,\n          path,\n          readOnly,\n          maxDepth,\n        ],\n      )\n\n      // eslint-disable-next-line react-hooks/rules-of-hooks\n      return useMemo(() => {\n        if (!status?.initialized) {\n          return undefined as unknown as DocumentFieldActionItem\n        }\n        return node({\n          type: 'group',\n          icon: () => null,\n          title: 'Translation',\n          children: [translateDocumentAction, translateFieldsAction].filter(\n            (c): c is DocumentFieldActionItem => !!c,\n          ),\n          expanded: true,\n        })\n      }, [translateDocumentAction, translateFieldsAction, status])\n    }\n    // works but not supported by types\n    return undefined as unknown as DocumentFieldActionItem\n  },\n}\n","import {ImageIcon} from '@sanity/icons'\nimport {Box, Spinner} from '@sanity/ui'\nimport {useContext, useMemo} from 'react'\nimport type {DocumentFieldAction, DocumentFieldActionGroup, DocumentFieldActionItem} from 'sanity'\nimport {useDocumentPane} from 'sanity/structure'\n\nimport {useAssistDocumentContext} from '../assistDocument/AssistDocumentContext'\nimport {aiInspectorId} from '../assistInspector/constants'\nimport {useAiAssistanceConfig} from '../assistLayout/AiAssistanceConfigContext'\nimport {ImageContext} from '../components/ImageContext'\nimport {usePathKey} from '../helpers/misc'\nimport {fieldPathParam, instructionParam} from '../types'\nimport {canUseAssist, useApiClient, useGenerateCaption} from '../useApiClient'\n\nfunction node(node: DocumentFieldActionItem | DocumentFieldActionGroup) {\n  return node\n}\n\nexport const generateCaptionsActions: DocumentFieldAction = {\n  name: 'sanity-assist-generate-captions',\n  useAction(props) {\n    const pathKey = usePathKey(props.path)\n    const {openInspector} = useDocumentPane()\n\n    const {config, status} = useAiAssistanceConfig()\n    const apiClient = useApiClient(config?.__customApiClient)\n    const {generateCaption, loading} = useGenerateCaption(apiClient)\n    const imageContext = useContext(ImageContext)\n\n    if (imageContext && pathKey === imageContext?.imageDescriptionPath) {\n      //if this is true, it is stable, and not breaking rules of hooks\n      // eslint-disable-next-line react-hooks/rules-of-hooks\n      const {assistableDocumentId} = useAssistDocumentContext()\n      // eslint-disable-next-line react-hooks/rules-of-hooks\n      return useMemo(() => {\n        return node({\n          type: 'action',\n          icon: loading\n            ? () => (\n                <Box style={{height: 17}}>\n                  <Spinner style={{transform: 'translateY(6px)'}} />\n                </Box>\n              )\n            : ImageIcon,\n          title: 'Generate image description',\n          onAction: () => {\n            if (loading) {\n              return\n            }\n            if (!canUseAssist(status)) {\n              openInspector(aiInspectorId, {\n                [fieldPathParam]: pathKey,\n                [instructionParam]: undefined as any,\n              })\n              return\n            }\n            generateCaption({path: pathKey, documentId: assistableDocumentId})\n          },\n          renderAsButton: true,\n          disabled: loading,\n          hidden: !imageContext.assetRef,\n        })\n      }, [\n        generateCaption,\n        pathKey,\n        assistableDocumentId,\n        loading,\n        imageContext,\n        status,\n        openInspector,\n      ])\n    }\n\n    // works but not supported by types\n    return undefined as unknown as DocumentFieldActionItem\n  },\n}\n","import {ImageIcon} from '@sanity/icons'\nimport {Box, Spinner} from '@sanity/ui'\nimport {useContext, useMemo} from 'react'\nimport {DocumentFieldAction, DocumentFieldActionGroup, DocumentFieldActionItem} from 'sanity'\n\nimport {useAssistDocumentContext} from '../assistDocument/AssistDocumentContext'\nimport {useAiAssistanceConfig} from '../assistLayout/AiAssistanceConfigContext'\nimport {ImageContext} from '../components/ImageContext'\nimport {usePathKey} from '../helpers/misc'\nimport {useApiClient, useGenerateImage} from '../useApiClient'\n\nfunction node(node: DocumentFieldActionItem | DocumentFieldActionGroup) {\n  return node\n}\n\nexport const generateImagActions: DocumentFieldAction = {\n  name: 'sanity-assist-generate-image',\n  useAction(props) {\n    const pathKey = usePathKey(props.path)\n\n    const {config} = useAiAssistanceConfig()\n    const apiClient = useApiClient(config?.__customApiClient)\n    const {generateImage, loading} = useGenerateImage(apiClient)\n\n    const imageContext = useContext(ImageContext)\n\n    if (imageContext && pathKey === imageContext?.imageInstructionPath) {\n      //if this is true, it is stable, and not breaking rules of hooks\n      // eslint-disable-next-line react-hooks/rules-of-hooks\n      const {assistableDocumentId} = useAssistDocumentContext()\n      // eslint-disable-next-line react-hooks/rules-of-hooks\n      return useMemo(() => {\n        return node({\n          type: 'action',\n          icon: loading\n            ? () => (\n                <Box style={{height: 17}}>\n                  <Spinner style={{transform: 'translateY(6px)'}} />\n                </Box>\n              )\n            : ImageIcon,\n          title: 'Generate image from prompt',\n          onAction: () => {\n            if (loading) {\n              return\n            }\n            generateImage({path: pathKey, documentId: assistableDocumentId})\n          },\n          renderAsButton: true,\n          disabled: loading,\n        })\n      }, [generateImage, pathKey, assistableDocumentId, loading])\n    }\n\n    // works but not supported by types\n    return undefined as unknown as DocumentFieldActionItem\n  },\n}\n","import {LockIcon} from '@sanity/icons'\nimport {Text, Tooltip} from '@sanity/ui'\n\nexport function PrivateIcon() {\n  return (\n    <Tooltip\n      content={\n        <Text size={1} style={{whiteSpace: 'nowrap'}}>\n          Only visible to you\n        </Text>\n      }\n      fallbackPlacements={['bottom']}\n      padding={2}\n      placement=\"top\"\n      portal\n    >\n      <LockIcon />\n    </Tooltip>\n  )\n}\n","// Strict ESM env, designed to run outside Node.js in envs that provide WebCrypto (deno, browsers, etc)\n\nexport default function getRandomValues(typedArray) {\n  const crypto =\n    typeof window !== 'undefined' && 'crypto' in window\n      ? window.crypto\n      : globalThis.crypto\n\n  if (!crypto || !crypto.getRandomValues) {\n    throw new Error('WebCrypto not available in this environment')\n  }\n\n  return crypto.getRandomValues(typedArray)\n}\n","import getRandomValues from 'get-random-values-esm'\n\n// WHATWG crypto RNG - https://w3c.github.io/webcrypto/Overview.html\nfunction whatwgRNG(length = 16) {\n  const rnds8 = new Uint8Array(length)\n  getRandomValues(rnds8)\n  return rnds8\n}\n\nconst getByteHexTable = (() => {\n  let table: string[]\n  return () => {\n    if (table) {\n      return table\n    }\n    table = []\n    for (let i = 0; i < 256; ++i) {\n      table[i] = (i + 0x100).toString(16).substring(1)\n    }\n    return table\n  }\n})()\n\nexport function randomKey(length?: number) {\n  const table = getByteHexTable()\n  return whatwgRNG(length)\n    .reduce((str, n) => str + table[n], '')\n    .slice(0, length)\n}\n","import {\n  DocumentFieldActionDivider,\n  DocumentFieldActionGroup,\n  DocumentFieldActionItem,\n  DocumentFieldActionNode,\n  ObjectSchemaType,\n  SanityDocumentLike,\n  useWorkspaceSchemaId,\n} from 'sanity'\nimport {Path, SchemaType} from '@sanity/types'\nimport {useMemo} from 'react'\nimport {useAiAssistanceConfig} from '../assistLayout/AiAssistanceConfigContext'\nimport {ToastParams, useToast} from '@sanity/ui'\nimport {AgentActionPath} from '@sanity/client/stega'\nimport {useAssistDocumentContext} from '../assistDocument/AssistDocumentContext'\nimport {\n  documentRootKey,\n  fieldPresenceTypeName,\n  InstructionTask,\n  instructionTaskTypeName,\n} from '../types'\nimport {randomKey} from '../_lib/randomKey'\nimport {isDefined} from '../helpers/misc'\n\nexport interface AgentActionConditionalPath {\n  path: AgentActionPath\n  readOnly: boolean\n  hidden: boolean\n}\n\nexport interface AssistFieldActionProps {\n  /**\n   * `actionType` will be `document` for action invoked from the top right document action menu, and\n   * `field` when invoked from a field action menu.\n   */\n  actionType: 'document' | 'field'\n  /**\n   * This is the id of the current document pane; it contains `drafts.`or `versions. prefix` ect depending on context.\n   * Use this for `documentId` when calling any `client.agent.action`.\n   *\n   * It is generally recommended to call actions from the studio like this:\n   * ```ts\n   * await client.agent.action.generate({\n   *   targetDocument: {\n   *      operation: 'createIfNotExists',\n   *      _id: props.documentIdForAction,\n   *      _type: props.documentSchemaType.name,\n   *      initialValues: props.getDocumentValue()\n   *   },\n   *   //...\n   * })\n   * ```\n   */\n  documentIdForAction: string\n\n  /**\n   * Schema type of the current document.\n   * @see documentIdForAction\n   */\n  documentSchemaType: ObjectSchemaType\n\n  /**\n   * Returns the current document value.\n   *\n   * Prefer passing this function to your hooks instead of passing the document value directly to avoid unnecessary re-renders.\n   * @see documentIdForAction\n   */\n  getDocumentValue: () => SanityDocumentLike\n\n  /**\n   * Returns the current readOnly and hidden state of all conditional members in the current document form.\n   *\n   * Intended to be passed to agent actions `conditionalPaths.paths`.\n   */\n  getConditionalPaths: () => AgentActionConditionalPath[]\n\n  /**\n   * `schemaId` for the current workspace.\n   *\n   * Note: the workspace schema has to be deployed using `sanity schema deploy` or `sanity deploy`.\n   *\n   * Use this for `schemaId` when calling any `client.agent.action`.\n   *\n   * It is generally recommended to call actions from the studio like this:\n   * ```ts\n   * await client.agent.action.generate({\n   *   targetDocument: {\n   *      operation: 'createIfNotExists',\n   *      _id: props.documentIdForAction,\n   *      _type: props.documentSchemaType.name,\n   *      initialValues: props.getDocumentValue()\n   *   },\n   *   //...\n   * })\n   *\n   * ```\n   */\n  schemaId: string\n\n  /**\n   * This is the schema type of the field the actions will be attached to (ie, schemaType for `path`)\n   *\n   * It can be used with agent actions using `target.path`, to scope the action to a specific field.\n   *\n   * It is generally recommended to call actions from the studio like this:\n   * ```ts\n   * await client.agent.action.generate({\n   *   targetDocument: {\n   *      operation: 'createIfNotExists',\n   *      _id: props.documentIdForAction,\n   *      _type: props.documentSchemaType.name,\n   *      initialValues: props.getDocumentValue()\n   *   },\n   *   target: {\n   *      path: props.path\n   *   },\n   * })\n   * ```\n   */\n  path: AgentActionPath\n\n  /**\n   * This is the schema type of the field the actions will be attached to (ie, schemaType for `path`).\n   *\n   * Typically useful to dynamically return different actions based on the schema type of the field.\n   *\n   * ```ts\n   * if(isObjectSchemaType(schemaType)) {\n   *   return [\n   *     defineAssistFieldAction({\n   *       title: 'Fill the object fields',\n   *       icon: RobotIcon,\n   *       onAction: () => {\n   *         //...\n   *       }\n   *     })\n   *   ]\n   * }\n   * return useMemo(() => {\n   *\n   *\n   * }, [])\n   *\n   * ```\n   */\n  schemaType: SchemaType\n\n  /**\n   * Schema type of the parent field or array item holding this field.\n   *\n   * This can be undefined if the action was unable to resolve the parent type is excluded from AI Assist.\n   *\n   * @see schemaType\n   * @see documentSchemaType\n   */\n  parentSchemaType?: SchemaType\n}\n\nexport type AssistFieldActionNode =\n  | AssistFieldActionItem\n  | AssistFieldActionGroup\n  | DocumentFieldActionDivider\n\nexport type AssistFieldActionItem = Omit<\n  DocumentFieldActionItem,\n  'renderAsButton' | 'selected' | 'onAction'\n> & {\n  onAction: () => void | Promise<void>\n}\n\nexport type AssistFieldActionGroup = Omit<\n  DocumentFieldActionGroup,\n  'renderAsButton' | 'expanded' | 'children'\n> & {\n  /**\n   * `children` can include undefined entries in the action array. These will be filtered out.\n   * If the group has no defined children, the group will also be filtered out.\n   */\n  children: (AssistFieldActionNode | undefined)[]\n}\n\ntype PushToast = (params: ToastParams) => string\n\nexport function defineAssistFieldAction(\n  action: Omit<AssistFieldActionItem, 'type'>,\n): AssistFieldActionItem {\n  return {\n    ...action,\n    type: 'action',\n  }\n}\n\nexport function defineFieldActionDivider(): DocumentFieldActionDivider {\n  return {\n    type: 'divider',\n  }\n}\n\nexport function defineAssistFieldActionGroup(\n  group: Omit<AssistFieldActionGroup, 'type'>,\n): AssistFieldActionGroup {\n  return {\n    ...group,\n    type: 'group',\n  }\n}\n\nexport function useCustomFieldActions(\n  props: Omit<AssistFieldActionProps, 'schemaId' | 'path'> & {path: Path},\n) {\n  const {\n    config: {fieldActions},\n  } = useAiAssistanceConfig()\n  const {addSyntheticTask, removeSyntheticTask} = useAssistDocumentContext()\n\n  const schemaId = useWorkspaceSchemaId()\n  const {push: pushToast} = useToast()\n  const configActions = fieldActions?.useFieldActions?.({\n    ...props,\n    schemaId,\n    path: props.path as AgentActionPath,\n  })\n\n  return useMemo(() => {\n    const title = fieldActions?.title\n    const customActions = configActions\n      ?.filter(isDefined)\n      .map((node) => {\n        return createSafeNode({\n          node,\n          pushToast,\n          addSyntheticTask,\n          removeSyntheticTask,\n        })\n      })\n      .filter(isDefined)\n    const onlyGroups =\n      customActions?.length && customActions?.every((node) => node.type === 'group')\n    const groups = customActions?.length\n      ? onlyGroups\n        ? customActions\n        : [\n            {\n              type: 'group',\n              title: title || 'Custom actions',\n              children: customActions,\n              expanded: true,\n            } satisfies DocumentFieldActionGroup,\n          ]\n      : []\n    return groups ?? []\n  }, [configActions, fieldActions, pushToast])\n}\n\nfunction createSafeNode(args: {\n  node: AssistFieldActionNode\n  pushToast: PushToast\n  addSyntheticTask: (task: InstructionTask) => void\n  removeSyntheticTask: (task: InstructionTask) => void\n}): DocumentFieldActionNode | undefined {\n  const {node} = args\n  switch (node.type) {\n    case 'action':\n      return createSafeAction({...args, action: node})\n    case 'group':\n      // eslint-disable-next-line no-case-declarations\n      const children = node.children\n        ?.filter(isDefined)\n        .map((child) => createSafeNode({...args, node: child}))\n        .filter(isDefined)\n      if (!children?.length) {\n        return undefined\n      }\n      return {\n        ...node,\n        renderAsButton: false,\n        expanded: true,\n        children,\n      }\n    case 'divider':\n    default:\n      return node\n  }\n}\n\nfunction createSafeAction(args: {\n  action: AssistFieldActionItem\n  pushToast: PushToast\n  addSyntheticTask: (task: InstructionTask) => void\n  removeSyntheticTask: (task: InstructionTask) => void\n}) {\n  const {action, pushToast, addSyntheticTask, removeSyntheticTask} = args\n  return {\n    ...action,\n    onAction: () => {\n      async function runAction() {\n        const task: InstructionTask = {\n          _type: instructionTaskTypeName,\n          _key: randomKey(12),\n          started: new Date().toISOString(),\n          presence: [\n            {\n              _type: fieldPresenceTypeName,\n              _key: randomKey(12),\n              path: documentRootKey,\n              started: new Date().toISOString(),\n            },\n          ],\n        }\n        try {\n          addSyntheticTask(task)\n          const actionResult = action.onAction?.()\n          if (actionResult instanceof Promise) {\n            await actionResult\n          }\n        } catch (err: any) {\n          console.error('Failed to execute action', action, err)\n          pushToast({\n            title: 'Failed to execute action',\n            description: err?.message,\n            status: 'error',\n          })\n        } finally {\n          removeSyntheticTask(task)\n        }\n      }\n      runAction()\n    },\n    renderAsButton: false,\n    selected: false,\n  }\n}\n","import {ControlsIcon, SparklesIcon} from '@sanity/icons'\nimport {useCallback, useMemo, useRef} from 'react'\nimport {\n  type DocumentFieldAction,\n  type DocumentFieldActionGroup,\n  type DocumentFieldActionItem,\n  pathToString,\n  stringToPath,\n  typed,\n  useCurrentUser,\n} from 'sanity'\nimport {useDocumentPane} from 'sanity/structure'\n\nimport {useAssistDocumentContext} from '../assistDocument/AssistDocumentContext'\nimport {getIcon} from '../assistDocument/components/instruction/appearance/IconInput'\nimport {useRequestRunInstruction} from '../assistDocument/RequestRunInstructionProvider'\nimport {aiInspectorId} from '../assistInspector/constants'\nimport {getTypePath, useSelectedField, useTypePath} from '../assistInspector/helpers'\nimport {pluginTitleShort} from '../constants'\nimport {isSchemaAssistEnabled} from '../helpers/assistSupported'\nimport {getConditionalMembers} from '../helpers/conditionalMembers'\nimport {getInstructionTitle, usePathKey} from '../helpers/misc'\nimport {useAssistSupported} from '../helpers/useAssistSupported'\nimport {translateActions, type TranslateProps} from '../translate/translateActions'\nimport {documentRootKey, fieldPathParam, instructionParam, type StudioInstruction} from '../types'\nimport {generateCaptionsActions} from './generateCaptionActions'\nimport {generateImagActions} from './generateImageActions'\nimport {PrivateIcon} from './PrivateIcon'\nimport {AgentActionConditionalPath, useCustomFieldActions} from './customFieldActions'\nimport {AgentActionPath} from '@sanity/client/stega'\n\nfunction node(node: DocumentFieldActionItem | DocumentFieldActionGroup) {\n  return node\n}\n\nexport const assistFieldActions: DocumentFieldAction = {\n  name: 'sanity-assist-actions',\n  useAction(props) {\n    const {schemaType} = props\n\n    const {\n      assistDocument,\n      documentIsNew,\n      documentIsAssistable,\n      openInspector,\n      closeInspector,\n      inspector,\n      documentOnChange,\n      documentSchemaType,\n      selectedPath,\n      assistableDocumentId,\n      fieldRefsByTypePath,\n    } = useAssistDocumentContext()\n\n    const {value: docValue, formState} = useDocumentPane()\n    const docValueRef = useRef(docValue)\n    const formStateRef = useRef(formState)\n    formStateRef.current = formState\n\n    const currentUser = useCurrentUser()\n    const isHidden = !assistDocument\n    const pathKey = usePathKey(props.path)\n    const typePath = useTypePath(docValue, pathKey)\n    const assistDocumentId = assistDocument?._id\n\n    const {requestRunInstruction} = useRequestRunInstruction({\n      documentOnChange,\n      isDocAssistable: documentIsAssistable ?? false,\n    })\n\n    const isSelectable = !!useSelectedField(documentSchemaType, typePath)\n    const assistSupported =\n      useAssistSupported(props.path, schemaType) &&\n      isSelectable &&\n      isSchemaAssistEnabled(documentSchemaType) &&\n      schemaType.readOnly !== true\n\n    const fieldAssist = useMemo(\n      () =>\n        (assistDocument?.fields ?? []).find(\n          (f) => f.path === typePath || (pathKey === documentRootKey && f.path === pathKey),\n        ),\n      [assistDocument?.fields, pathKey, typePath],\n    )\n\n    const fieldAssistKey = fieldAssist?._key\n    const isInspectorOpen = inspector?.name === aiInspectorId\n    const isPathSelected = pathKey === selectedPath\n    const isSelected = isInspectorOpen && isPathSelected\n\n    const imageCaptionAction = generateCaptionsActions.useAction(props)\n    const imageGenAction = generateImagActions.useAction(props)\n    const translateAction = translateActions.useAction(\n      typed<TranslateProps>({\n        ...props,\n        documentId: assistableDocumentId,\n        documentIsAssistable,\n        documentSchemaType,\n      }),\n    )\n    const manageInstructions = useCallback(\n      () =>\n        isSelected\n          ? closeInspector(aiInspectorId)\n          : openInspector(aiInspectorId, {\n              [fieldPathParam]: pathKey,\n              [instructionParam]: undefined as any,\n            }),\n      [openInspector, closeInspector, isSelected, pathKey],\n    )\n\n    const onInstructionAction = useCallback(\n      (instruction: StudioInstruction) => {\n        if (!pathKey || !fieldAssistKey || !assistDocumentId || !assistableDocumentId) {\n          return\n        }\n        requestRunInstruction({\n          documentId: assistableDocumentId,\n          assistDocumentId,\n          path: pathKey,\n          typePath,\n          instruction,\n          conditionalMembers: formStateRef.current\n            ? getConditionalMembers(formStateRef.current)\n            : [],\n        })\n      },\n      [\n        requestRunInstruction,\n        assistableDocumentId,\n        pathKey,\n        typePath,\n        assistDocumentId,\n        fieldAssistKey,\n      ],\n    )\n\n    const privateInstructions = useMemo(\n      () =>\n        fieldAssist?.instructions?.filter((i) => i.userId && i.userId === currentUser?.id) || [],\n      [fieldAssist?.instructions, currentUser],\n    )\n\n    const sharedInstructions = useMemo(\n      () => fieldAssist?.instructions?.filter((i) => !i.userId) || [],\n      [fieldAssist?.instructions],\n    )\n\n    const instructions = useMemo(\n      () => [...privateInstructions, ...sharedInstructions],\n      [privateInstructions, sharedInstructions],\n    )\n\n    const runInstructionsGroup = useMemo(() => {\n      return instructions?.length || imageCaptionAction || translateAction || imageGenAction\n        ? node({\n            type: 'group',\n            icon: () => null,\n            title: 'Run instructions',\n            children: [\n              ...(instructions?.map((instruction) =>\n                instructionItem({\n                  instruction,\n                  isPrivate: Boolean(instruction.userId && instruction.userId === currentUser?.id),\n                  onInstructionAction,\n                  hidden: isHidden,\n                  documentIsNew: !!documentIsNew,\n                  assistSupported,\n                }),\n              ) || []),\n              imageCaptionAction,\n              imageGenAction,\n            ].filter((a): a is DocumentFieldActionItem => !!a),\n            expanded: true,\n          })\n        : undefined\n    }, [\n      instructions,\n      currentUser?.id,\n      onInstructionAction,\n      isHidden,\n      documentIsNew,\n      assistSupported,\n      imageCaptionAction,\n      translateAction,\n      imageGenAction,\n    ])\n\n    const getDocumentValue = useCallback(() => {\n      return docValueRef.current\n    }, [])\n\n    const getConditionalPaths: () => AgentActionConditionalPath[] = useCallback(() => {\n      return (formStateRef.current ? getConditionalMembers(formStateRef.current) : []).flatMap(\n        (cm) => {\n          const path = stringToPath(cm.path)\n          if (path.some((s) => typeof s === 'number')) {\n            //agent actions does not support indexed paths\n            return []\n          }\n          return {\n            ...cm,\n            path: path as AgentActionPath,\n          }\n        },\n      )\n    }, [])\n\n    const parentSchemaType = useMemo(() => {\n      if (!props.path.length) {\n        return undefined\n      } else if (props.path.length === 1) {\n        return documentSchemaType\n      }\n      const parentPath = props.path.slice(0, -1)\n      const typePath = getTypePath(docValueRef.current, pathToString(parentPath))\n      return typePath ? fieldRefsByTypePath[typePath]?.schemaType : undefined\n    }, [fieldRefsByTypePath, props.path, documentSchemaType])\n\n    const customActions = useCustomFieldActions({\n      actionType: props.path.length ? 'field' : 'document',\n      documentIdForAction: assistableDocumentId,\n      schemaType,\n      documentSchemaType,\n      path: props.path,\n      getDocumentValue,\n      getConditionalPaths,\n      parentSchemaType,\n    })\n\n    const manageInstructionsItem = useMemo(\n      () =>\n        node({\n          type: 'action',\n          icon: ControlsIcon,\n          title: 'Manage instructions',\n          onAction: manageInstructions,\n          selected: isSelected,\n        }),\n      [manageInstructions, isSelected],\n    )\n\n    const group = useMemo(\n      () =>\n        node({\n          type: 'group',\n          icon: SparklesIcon,\n          title: pluginTitleShort,\n          children: [\n            runInstructionsGroup,\n            translateAction,\n            ...customActions,\n            assistSupported && manageInstructionsItem,\n          ]\n            .filter((c): c is DocumentFieldActionItem | DocumentFieldActionGroup => !!c)\n            .filter((c) => (c.type === 'group' ? c.children.length : true)),\n          expanded: false,\n          renderAsButton: true,\n          hidden: !assistSupported && !imageCaptionAction && !translateAction && !imageGenAction,\n        }),\n      [\n        //documentIsNew,\n        runInstructionsGroup,\n        manageInstructionsItem,\n        assistSupported,\n        imageCaptionAction,\n        translateAction,\n        imageGenAction,\n        customActions,\n      ],\n    )\n\n    const emptyAction = useMemo(\n      () =>\n        node({\n          type: 'action',\n          hidden: !assistSupported,\n          icon: SparklesIcon,\n          onAction: manageInstructions,\n          renderAsButton: true,\n          title: pluginTitleShort,\n          selected: isSelected,\n        }),\n      [assistSupported, manageInstructions, isSelected],\n    )\n\n    // If there are no instructions, we don't want to render the group\n    if (\n      !instructions?.length &&\n      !imageCaptionAction &&\n      !translateAction &&\n      !imageGenAction &&\n      !customActions.length\n    ) {\n      return emptyAction\n    }\n\n    return group\n  },\n}\n\nfunction instructionItem(props: {\n  instruction: StudioInstruction\n  isPrivate: boolean\n  onInstructionAction: (ins: StudioInstruction) => void\n  assistSupported: boolean\n  documentIsNew: boolean\n  hidden: boolean\n}) {\n  const {hidden, isPrivate, onInstructionAction, assistSupported, instruction} = props\n  return node({\n    type: 'action',\n    icon: getIcon(instruction.icon),\n    iconRight: isPrivate ? PrivateIcon : undefined,\n    title: getInstructionTitle(instruction),\n    onAction: () => onInstructionAction(instruction),\n    disabled: !assistSupported,\n    hidden,\n  })\n}\n","import {Card, Flex} from '@sanity/ui'\nimport {useMemo} from 'react'\n\nimport {useAssistDocumentContext} from '../assistDocument/AssistDocumentContext'\nimport {documentRootKey, fieldPresenceTypeName} from '../types'\nimport {AiFieldPresence} from './AiFieldPresence'\nimport {aiPresence} from './useAssistPresence'\n\nexport function createAssistDocumentPresence(documentId: string | undefined) {\n  return function AssistDocumentPresenceWrapper() {\n    return documentId ? <AssistDocumentPresence /> : null\n  }\n}\n\nfunction AssistDocumentPresence() {\n  const {assistDocument, syntheticTasks} = useAssistDocumentContext()\n  const anyPresence = useMemo(() => {\n    const anyPresence = [...(assistDocument?.tasks ?? []), ...(syntheticTasks ?? [])]\n      ?.filter((run) => !run.ended && !run.reason)\n      ?.flatMap((run) => run.presence ?? [])\n      .find((f) => f.started && new Date().getTime() - new Date(f.started).getTime() < 30000)\n    if (anyPresence) {\n      return aiPresence(anyPresence, [])\n    }\n    const anyRun = assistDocument?.tasks\n      ?.filter((run) => !run.ended && !run.reason)\n      ?.find((f) => f.started && new Date().getTime() - new Date(f.started).getTime() < 30000)\n    return anyRun\n      ? aiPresence(\n          {\n            started: anyRun.started,\n            path: documentRootKey,\n            _key: anyRun._key,\n            _type: fieldPresenceTypeName,\n          },\n          [],\n        )\n      : undefined\n  }, [assistDocument?.tasks, syntheticTasks])\n\n  return (\n    <Card>\n      <Flex flex={1} justify=\"flex-end\">\n        <Flex gap={2} align={'center'}>\n          {anyPresence && <AiFieldPresence presence={anyPresence} />}\n        </Flex>\n      </Flex>\n    </Card>\n  )\n}\n","import {ArrowLeftIcon} from '@sanity/icons'\nimport {Button} from '@sanity/ui'\nimport {useCallback} from 'react'\nimport {useDocumentPane} from 'sanity/structure'\n\nimport {aiInspectorId} from '../../../assistInspector/constants'\nimport {instructionParam} from '../../../types'\n\nexport function BackToInstructionListLink() {\n  const {openInspector} = useDocumentPane()\n\n  const goBack = useCallback(\n    () => openInspector(aiInspectorId, {[instructionParam]: undefined as any}),\n    [openInspector],\n  )\n\n  return (\n    <div>\n      <Button\n        as=\"a\"\n        fontSize={1}\n        icon={ArrowLeftIcon}\n        mode=\"bleed\"\n        padding={1}\n        space={2}\n        onClick={goBack}\n        text=\"  Instructions\"\n        textAlign=\"left\"\n      />\n    </div>\n  )\n}\n","import {Card, Stack, Text} from '@sanity/ui'\nimport {useContext, useEffect, useMemo, useRef} from 'react'\nimport {\n  FormCallbacksProvider,\n  FormCallbacksValue,\n  FormInput,\n  insert,\n  KeyedSegment,\n  ObjectInputProps,\n  ObjectSchemaType,\n  PatchEvent,\n  Path,\n  SchemaType,\n  set,\n  setIfMissing,\n  stringToPath,\n  typed,\n  useFormCallbacks,\n  useSchema,\n} from 'sanity'\n\nimport {useAiPaneRouter} from '../../assistInspector/helpers'\nimport {useAiAssistanceConfig} from '../../assistLayout/AiAssistanceConfigContext'\nimport {\n  AssistDocument,\n  AssistField,\n  assistFieldTypeName,\n  AssistInspectorRouteParams,\n  documentRootKey,\n  fieldPathParam,\n  instructionParam,\n  StudioInstruction,\n} from '../../types'\nimport {AssistTypeContext} from './AssistTypeContext'\nimport {BackToInstructionListLink} from './instruction/BackToInstructionsLink'\nimport {SelectedFieldContextProvider, SelectedFieldContextValue} from './SelectedFieldContext'\n\nconst EMPTY_FIELDS: AssistField[] = []\n\nexport function AssistDocumentForm(props: ObjectInputProps) {\n  if (props.readOnly) {\n    return (\n      <Card border tone=\"caution\" padding={2}>\n        <Text size={1}> You do not have sufficient permissions to manage instructions.</Text>\n      </Card>\n    )\n  }\n  return <AssistDocumentFormEditable {...props} />\n}\nfunction AssistDocumentFormEditable(props: ObjectInputProps) {\n  const {onChange} = props\n  const value = props.value as AssistDocument | undefined\n  const id = value?._id\n  const fields = value?.fields\n\n  const {params, setParams} = useAiPaneRouter()\n  const pathKey = params[fieldPathParam]\n  const {typePath, documentType: targetDocumentType} = useContext(AssistTypeContext)\n  const instruction = params[instructionParam]\n\n  const activeKey = useMemo(() => {\n    if (!typePath) {\n      return undefined\n    }\n    return (fields ?? EMPTY_FIELDS).find((f) => f.path === typePath)?._key\n  }, [fields, typePath])\n\n  const activePath: Path | undefined = useMemo(() => {\n    if (!activeKey) {\n      return undefined\n    }\n    const base = ['fields', {_key: activeKey}]\n    return instruction ? [...base, 'instructions', {_key: instruction}] : base\n  }, [activeKey, instruction])\n\n  const schema = useSchema()\n  const documentSchema: ObjectSchemaType | undefined = useMemo(() => {\n    if (!targetDocumentType) {\n      return undefined\n    }\n    return schema.get(targetDocumentType) as ObjectSchemaType\n  }, [schema, targetDocumentType])\n\n  const fieldSchema = useSelectedSchema(pathKey, documentSchema)\n\n  const context: SelectedFieldContextValue = useMemo(\n    () => ({\n      documentSchema,\n      fieldSchema: fieldSchema ?? documentSchema,\n    }),\n    [fieldSchema, documentSchema],\n  )\n\n  const title = value?.title\n\n  useEffect(() => {\n    if (!title && documentSchema && !id?.startsWith('drafts.')) {\n      onChange(set(documentSchema.title ?? documentSchema.name, ['title']))\n    }\n  }, [title, documentSchema, onChange, id])\n\n  const {onPathOpen, ...formCallbacks} = useFormCallbacks()\n\n  const newCallbacks: FormCallbacksValue = useMemo(\n    () => ({\n      ...formCallbacks,\n      onPathOpen: (path) => {\n        if (!instruction && path.length === 4 && path[2] === 'instructions') {\n          setParams(\n            typed<AssistInspectorRouteParams>({\n              ...params,\n              [instructionParam]: (path[3] as KeyedSegment)?._key,\n            }) as Record<keyof AssistInspectorRouteParams, string | undefined>,\n          )\n          onPathOpen([])\n        } else {\n          setTimeout(() => onPathOpen(path), 0)\n        }\n      },\n    }),\n    [formCallbacks, onPathOpen, params, setParams, instruction],\n  )\n\n  useEffect(() => {\n    if (activePath && !instruction) {\n      onPathOpen([])\n    }\n  }, [activePath, instruction, onPathOpen])\n\n  return (\n    <SelectedFieldContextProvider value={context}>\n      <Stack space={5}>\n        <FieldsInitializer\n          key={typePath}\n          pathKey={typePath}\n          activePath={activePath}\n          fields={fields}\n          documentSchema={documentSchema}\n          onChange={onChange}\n        />\n        {instruction && <BackToInstructionListLink />}\n\n        {activePath && (\n          <FormCallbacksProvider {...newCallbacks}>\n            <div style={{lineHeight: '1.25em'}}>\n              <FormInput {...props} absolutePath={activePath} />\n            </div>\n          </FormCallbacksProvider>\n        )}\n\n        {!activePath && props.renderDefault(props)}\n      </Stack>\n    </SelectedFieldContextProvider>\n  )\n}\n\nfunction useSelectedSchema(\n  fieldPath: string | undefined,\n  documentSchema: ObjectSchemaType | undefined,\n): SchemaType | undefined {\n  return useMemo(() => {\n    if (!fieldPath) {\n      return undefined\n    }\n    if (fieldPath === documentRootKey) {\n      return documentSchema\n    }\n\n    const path = stringToPath(fieldPath)\n    let currentSchema: ObjectSchemaType | undefined = documentSchema\n    for (let i = 0; i < path.length; i++) {\n      const segment = path[i]\n      const field = currentSchema?.fields.find((f) => f.name === segment)\n      if (!field) {\n        return undefined\n      }\n      if (i === path.length - 1) {\n        return field.type\n      }\n      if (field.type.jsonType !== 'object') {\n        return undefined\n      }\n      currentSchema = field.type\n    }\n    return currentSchema\n  }, [documentSchema, fieldPath])\n}\n\nfunction FieldsInitializer({\n  pathKey,\n  activePath,\n  fields,\n  documentSchema,\n  onChange,\n}: {\n  pathKey?: string\n  activePath?: Path\n  fields: AssistField[] | undefined\n  documentSchema: ObjectSchemaType | undefined\n  onChange: ObjectInputProps['onChange']\n}) {\n  const {\n    config: {__presets: presets},\n  } = useAiAssistanceConfig()\n\n  const existingField = fields?.find((f) => f._key === pathKey)\n  const documentPresets = !!documentSchema?.name && presets?.[documentSchema?.name]\n\n  const missingPresetInstructions = useMemo(() => {\n    if (!documentPresets || !pathKey) {\n      return undefined\n    }\n    const existingInstructions = existingField?.instructions\n    const presetField = documentPresets.fields?.find((f) => f.path === pathKey)\n    return presetField?.instructions?.filter(\n      (i) => !existingInstructions?.some((ei) => ei._key === i._key),\n    )\n  }, [documentPresets, pathKey, existingField])\n\n  // need this to not fire onChange twice in React strict mode\n  const initialized = useRef(false)\n  useEffect(() => {\n    if (initialized.current || !pathKey) {\n      return\n    }\n    if (existingField && !missingPresetInstructions?.length) {\n      return\n    }\n\n    let event = PatchEvent.from([setIfMissing([], ['fields'])])\n    if (!existingField) {\n      event = event.append(\n        insert(\n          [\n            typed<AssistField>({\n              _key: pathKey,\n              _type: assistFieldTypeName,\n              path: pathKey,\n              instructions: [],\n            }),\n          ],\n          'after',\n          ['fields', -1],\n        ),\n      )\n    }\n\n    if (!existingField?.instructions?.length) {\n      event = event.append([setIfMissing([], ['fields', {_key: pathKey}, 'instructions'])])\n    }\n\n    if (missingPresetInstructions?.length) {\n      event = event.append(\n        insert(\n          missingPresetInstructions.map(\n            (preset): StudioInstruction => ({\n              ...preset,\n              _type: 'sanity.assist.instruction',\n              prompt: preset.prompt?.map((p) => ({markDefs: [], ...p})),\n            }),\n          ),\n          'after',\n          ['fields', {_key: pathKey}, 'instructions', -1],\n        ),\n      )\n    }\n    onChange(event)\n    initialized.current = true\n  }, [activePath, onChange, pathKey, existingField, missingPresetInstructions])\n\n  return null\n}\n","import {Box, Flex, Text} from '@sanity/ui'\nimport {useContext} from 'react'\nimport {PreviewProps} from 'sanity'\n\nimport {InlineBlockValueContext} from '../../assistFormComponents/AssistInlineFormBlock'\nimport {useSelectedField} from '../../assistInspector/helpers'\nimport {SelectedFieldContext} from './SelectedFieldContext'\n\nexport function FieldRefPreview(props: PreviewProps & {path?: string}) {\n  const {actions} = props\n  const documentSchema = useContext(SelectedFieldContext)?.documentSchema\n  const path = (useContext(InlineBlockValueContext) as {path?: string})?.path ?? props.path\n  const selectedField = useSelectedField(documentSchema, path)\n  return (\n    <Flex gap={2} align=\"center\" style={{width: '100%'}}>\n      <Flex flex={1} gap={2} align=\"center\" paddingY={3} paddingX={1}>\n        <Box>\n          <Text size={1} textOverflow=\"ellipsis\">\n            {selectedField?.title ?? 'Select field'}\n          </Text>\n        </Box>\n      </Flex>\n      {actions as any}\n    </Flex>\n  )\n}\n","import {FieldProps} from 'sanity'\n\nexport function HiddenFieldTitle(props: FieldProps) {\n  return props.renderDefault({...props, title: '', level: props.level - 2, changed: false})\n}\n","import {Card, Flex, Switch, Text} from '@sanity/ui'\nimport {useCallback, useId} from 'react'\nimport {set, StringInputProps, unset, useCurrentUser} from 'sanity'\n\nexport function InstructionVisibility(props: StringInputProps) {\n  const {value, onChange} = props\n\n  const user = useCurrentUser()\n\n  const handleChange = useCallback(() => {\n    const newValue = value ? '' : (user?.id ?? '')\n    onChange(newValue ? set(newValue) : unset())\n  }, [onChange, user, value])\n\n  const id = useId()\n\n  return (\n    <Card>\n      <Flex gap={2} align=\"flex-start\">\n        <div style={{margin: '-3px 0'}}>\n          <Switch\n            {...props.elementProps}\n            id={id}\n            value={`${!value}`}\n            checked={!value}\n            onChange={handleChange}\n            disabled={props.elementProps.readOnly}\n          />\n        </div>\n\n        <Text muted size={1} weight=\"medium\">\n          <label htmlFor={id}>Make visible to all Studio members</label>\n        </Text>\n      </Flex>\n    </Card>\n  )\n}\n","import {Box} from '@sanity/ui'\nimport {useCallback, useContext, useEffect, useId, useRef} from 'react'\nimport {set, StringInputProps} from 'sanity'\n\nimport {FieldAutocomplete} from '../../../assistInspector/FieldAutocomplete'\nimport {FieldRef} from '../../../assistInspector/helpers'\nimport {AssistTypeContext} from '../AssistTypeContext'\nimport {SelectedFieldContext} from '../SelectedFieldContext'\n\nexport function FieldRefPathInput(props: StringInputProps) {\n  const documentSchema = useContext(SelectedFieldContext)?.documentSchema\n  const {typePath} = useContext(AssistTypeContext)\n  const ref = useRef<HTMLDivElement>(null)\n  const id = useId()\n  const {onChange} = props\n\n  useEffect(() => {\n    ref.current?.querySelector('input')?.focus()\n  }, [])\n\n  const onSelect = useCallback((path: string) => onChange(set(path)), [onChange])\n\n  const filter = useCallback(\n    (field: FieldRef) => {\n      if (!field.key.includes('|') || !typePath) {\n        return true\n      }\n      if (field.key.includes('|') && !typePath.includes('|')) {\n        return false\n      }\n\n      const fieldSegments = field.key.split('.')\n      const lastArrayItemIndex = fieldSegments.findLastIndex((s) => s.includes('|'))\n      const mustStartWith = fieldSegments.slice(0, lastArrayItemIndex + 1).join('.')\n      return typePath.startsWith(mustStartWith)\n    },\n    [typePath],\n  )\n  if (!documentSchema) {\n    return props.renderDefault(props)\n  }\n\n  return (\n    <Box flex={1} style={{minWidth: 300}} ref={ref}>\n      <FieldAutocomplete\n        id={id}\n        schemaType={documentSchema}\n        onSelect={onSelect}\n        fieldPath={props.value}\n        filter={filter}\n      />\n    </Box>\n  )\n}\n","import {FieldError, FieldMember, FieldSetMember, ObjectMember} from 'sanity'\n\nexport function findFieldMember(\n  members: ObjectMember[],\n  fieldName: string,\n): FieldMember | FieldError | undefined {\n  return members.find(\n    (m): m is FieldMember | FieldError =>\n      (m.kind === 'field' && m.name === fieldName) ||\n      (m.kind === 'error' && m.fieldName === fieldName),\n  )\n}\n\nexport function findFieldsetMember(\n  members: ObjectMember[],\n  fieldsetName: string,\n): FieldSetMember | undefined {\n  return members.find(\n    (m): m is FieldSetMember => m.kind === 'fieldSet' && m.fieldSet.name === fieldsetName,\n  )\n}\n","import {Box, Flex, Stack, Text} from '@sanity/ui'\nimport {useId, useMemo} from 'react'\nimport {FieldError, FieldMember, ObjectInputMember, ObjectInputProps} from 'sanity'\n\nimport {findFieldMember, findFieldsetMember} from '../helpers'\n\nexport function InstructionInput(props: ObjectInputProps) {\n  return (\n    <Stack space={[4, 4, 4, 5]}>\n      <NameField {...props} />\n      <ShareField {...props} />\n      <ObjectMember fieldName={'prompt'} {...props} />\n      <ObjectMember fieldName={'output'} {...props} />\n    </Stack>\n  )\n}\n\nfunction ObjectMember({fieldName, ...props}: ObjectInputProps & {fieldName: string}) {\n  const member = findFieldMember(props.members, fieldName)\n  return member ? <ObjectInputMember {...props} member={member} /> : null\n}\n\nconst NONE: (FieldMember | FieldError)[] = []\n\nfunction NameField(props: ObjectInputProps) {\n  const fieldsetMember = findFieldsetMember(props.members, 'appearance')\n  const titleId = useId()\n\n  const members = fieldsetMember?.fieldSet.members ?? NONE\n  const iconMember = findFieldMember(members, 'icon')\n  const titleMember = findFieldMember(members, 'title')\n\n  const titlePlaceholder = 'Untitled'\n  const moddedTitleMember = useMemo(() => {\n    if (!titleMember) {\n      return undefined\n    }\n    if (titleMember.kind === 'error') {\n      return titleMember\n    }\n    return {\n      ...titleMember,\n      field: {\n        ...titleMember?.field,\n        schemaType: {\n          ...titleMember?.field.schemaType,\n          placeholder: titlePlaceholder,\n        },\n      },\n    }\n  }, [titleMember, titlePlaceholder])\n\n  return (\n    <Stack space={5}>\n      <Stack space={2}>\n        <Flex gap={1}>\n          <Text as=\"label\" weight=\"semibold\" size={1} htmlFor={titleId}>\n            Name\n          </Text>\n        </Flex>\n\n        <Text muted size={1}>\n          How this instruction appears in menus\n        </Text>\n\n        <Flex align=\"center\">\n          {iconMember && (\n            <Box flex=\"none\">\n              <ObjectInputMember {...props} member={iconMember} />\n            </Box>\n          )}\n          {moddedTitleMember && (\n            <Box flex={1} style={{marginLeft: -1}}>\n              <ObjectInputMember {...props} member={moddedTitleMember} />\n            </Box>\n          )}\n        </Flex>\n      </Stack>\n    </Stack>\n  )\n}\n\nfunction ShareField(props: ObjectInputProps) {\n  const fieldsetMember = findFieldsetMember(props.members, 'appearance')\n  const members = fieldsetMember?.fieldSet.members ?? NONE\n  const visibilityMember = findFieldMember(members, 'userId')\n\n  return <>{visibilityMember && <ObjectInputMember {...props} member={visibilityMember} />}</>\n}\n","import {useCallback, useContext, useState} from 'react'\nimport {\n  ArrayFieldProps,\n  ArraySchemaType,\n  isArrayOfObjectsSchemaType,\n  isObjectSchemaType,\n  ObjectSchemaType,\n} from 'sanity'\n\nimport {SelectedFieldContext} from '../SelectedFieldContext'\n\nexport function InstructionOutputField(props: ArrayFieldProps) {\n  const {fieldSchema} = useContext(SelectedFieldContext) ?? {}\n\n  if (\n    !fieldSchema ||\n    !(isObjectSchemaType(fieldSchema) || isArrayOfObjectsSchemaType(fieldSchema))\n  ) {\n    return null\n  }\n\n  return (\n    <EnabledOutputField {...props} fieldSchema={fieldSchema}>\n      {props.children}\n    </EnabledOutputField>\n  )\n}\n\nfunction EnabledOutputField({\n  fieldSchema,\n  ...props\n}: ArrayFieldProps & {fieldSchema: ObjectSchemaType | ArraySchemaType<ObjectSchemaType>}) {\n  const [open, setOpen] = useState(!!props.value?.length)\n  const onExpand = useCallback(() => setOpen(true), [])\n  const onCollapse = useCallback(() => setOpen(false), [])\n\n  return props.renderDefault({\n    ...props,\n    collapsible: true,\n    onExpand,\n    onCollapse,\n    collapsed: !open,\n    level: 1,\n    title: isObjectSchemaType(fieldSchema) ? 'Allowed fields' : 'Allowed types',\n  })\n}\n","import {Card, Checkbox, Flex, Stack, Text} from '@sanity/ui'\nimport {useCallback, useContext, useEffect, useMemo} from 'react'\nimport {\n  ArrayOfObjectsInputProps,\n  ArraySchemaType,\n  FormPatch,\n  insert,\n  isArrayOfObjectsSchemaType,\n  isObjectSchemaType,\n  ObjectSchemaType,\n  PatchEvent,\n  setIfMissing,\n  typed,\n  unset,\n} from 'sanity'\n\nimport {isAssistSupported} from '../../../helpers/assistSupported'\nimport {isType} from '../../../helpers/typeUtils'\nimport {OutputFieldItem, outputFieldTypeName, OutputTypeItem} from '../../../types'\nimport {SelectedFieldContext} from '../SelectedFieldContext'\n\nexport function InstructionOutputInput(props: ArrayOfObjectsInputProps) {\n  const {fieldSchema} = useContext(SelectedFieldContext) ?? {}\n\n  if (!fieldSchema) {\n    return null\n  }\n\n  if (isObjectSchemaType(fieldSchema)) {\n    return <ObjectOutputInput {...props} fieldSchema={fieldSchema} />\n  }\n\n  if (isArrayOfObjectsSchemaType(fieldSchema)) {\n    return <ArrayOutputInput {...props} fieldSchema={fieldSchema} />\n  }\n  return null\n}\n\nfunction useEmptySelectAllValue(\n  value: (OutputTypeItem | OutputFieldItem)[],\n  allowedValues: {name: string}[],\n  onChange: (patch: FormPatch | FormPatch[] | PatchEvent) => void,\n) {\n  useEffect(() => {\n    const validValues = value?.filter((v) =>\n      allowedValues.find(\n        (f) => f.name === (v._type === outputFieldTypeName ? v.relativePath : v.type),\n      ),\n    )\n    const valueLength = value?.length ?? 0\n    const validLength = validValues?.length ?? 0\n    if ((!validLength && valueLength) || validLength >= allowedValues.length) {\n      // if we end up here, we consider this a \"no selected fields/types\" selections. This should render and behave as all values selected.\n      // we need this behaviour to accommodate new fields/types being added to the model, so they get visited by instructions without having to update the filter\n      // when things have been explicitly selected, we let the selection remain as is\n      onChange(PatchEvent.from([unset()]))\n    }\n  }, [allowedValues, value, onChange])\n}\n\nfunction ObjectOutputInput({\n  fieldSchema,\n  ...props\n}: ArrayOfObjectsInputProps & {fieldSchema: ObjectSchemaType}) {\n  const {value, onChange} = props\n\n  const fields = useMemo(\n    () => fieldSchema.fields.filter((field) => isAssistSupported(field.type)),\n    [fieldSchema.fields],\n  )\n\n  useEmptySelectAllValue(value as OutputTypeItem[], fields, onChange)\n\n  const onSelectChange = useCallback(\n    (checked: boolean, selectedValue: string) => {\n      if (checked) {\n        if (value?.length) {\n          onChange(PatchEvent.from(unset([{_key: selectedValue}])))\n        } else {\n          // we went from empty array to everything selected but one\n          const items = fields\n            .filter((f) => f.name !== selectedValue)\n            .map((field) =>\n              typed<OutputFieldItem>({\n                _key: field.name,\n                _type: 'sanity.assist.output.field',\n                relativePath: field.name,\n              }),\n            )\n          onChange(PatchEvent.from([setIfMissing([]), insert(items, 'after', [-1])]))\n        }\n      } else {\n        const patchValue: OutputFieldItem = {\n          _key: selectedValue,\n          _type: 'sanity.assist.output.field',\n          relativePath: selectedValue,\n        }\n        onChange(PatchEvent.from([setIfMissing([]), insert([patchValue], 'after', [-1])]))\n      }\n    },\n    [onChange, value, fields],\n  )\n\n  return (\n    <Stack space={2}>\n      {fields.map((field) => {\n        return (\n          <Flex key={field.name} align=\"center\" gap={2}>\n            <Selectable\n              value={field.name}\n              title={field.type.title ?? field.name}\n              arrayValue={value as OutputFieldItem[]}\n              onChange={onSelectChange}\n            />\n          </Flex>\n        )\n      })}\n    </Stack>\n  )\n}\n\nfunction ArrayOutputInput({\n  fieldSchema,\n  ...props\n}: ArrayOfObjectsInputProps & {fieldSchema: ArraySchemaType}) {\n  const {value, onChange} = props\n\n  const ofItems = useMemo(\n    () => fieldSchema.of.filter((itemType) => isAssistSupported(itemType)),\n    [fieldSchema.of],\n  )\n\n  useEmptySelectAllValue(value as OutputTypeItem[], ofItems, onChange)\n\n  const onSelectChange = useCallback(\n    (checked: boolean, selectedValue: string) => {\n      if (checked) {\n        if (value?.length) {\n          onChange(PatchEvent.from(unset([{_key: selectedValue}])))\n        } else {\n          // we went from empty array to everything selected but one\n          const items = ofItems\n            .filter((f) => f.name !== selectedValue)\n            .map((field) =>\n              typed<OutputTypeItem>({\n                _key: field.name,\n                _type: 'sanity.assist.output.type',\n                type: field.name,\n              }),\n            )\n          onChange(PatchEvent.from([setIfMissing([]), insert(items, 'after', [-1])]))\n        }\n      } else {\n        const patchValue: OutputTypeItem = {\n          _key: selectedValue,\n          _type: 'sanity.assist.output.type',\n          type: selectedValue,\n        }\n        onChange(PatchEvent.from([setIfMissing([]), insert([patchValue], 'after', [-1])]))\n      }\n    },\n    [onChange, value, ofItems],\n  )\n  return (\n    <Stack space={2}>\n      {ofItems.map((itemType) => {\n        return (\n          <Flex key={itemType.name}>\n            <Selectable\n              value={itemType.name}\n              title={isType(itemType, 'block') ? 'Text' : (itemType.title ?? itemType.name)}\n              arrayValue={value as OutputTypeItem[] | undefined}\n              onChange={onSelectChange}\n            />\n          </Flex>\n        )\n      })}\n    </Stack>\n  )\n}\n\nfunction Selectable({\n  title,\n  arrayValue,\n  value,\n  onChange,\n}: {\n  title: string\n  value: string\n  arrayValue?: {_key: string}[]\n  onChange: (checked: boolean, value: string) => void\n}) {\n  const checked = !arrayValue?.length || !!arrayValue?.find((v) => v._key === value)\n  const handleChange = useCallback(() => onChange(checked, value), [onChange, checked, value])\n\n  return (\n    <Flex gap={2} align=\"flex-start\">\n      <Checkbox checked={checked} onChange={handleChange} />\n      <Card marginTop={1} onClick={handleChange}>\n        <Text style={{cursor: 'default'}} size={1}>\n          {title}\n        </Text>\n      </Card>\n    </Flex>\n  )\n}\n","import {Box} from '@sanity/ui'\nimport {useEffect} from 'react'\nimport {type ArrayOfObjectsInputProps, set, typed} from 'sanity'\nimport {styled} from 'styled-components'\n\nimport {randomKey} from '../../../_lib/randomKey'\nimport type {\n  ContextBlock,\n  FieldRef,\n  PromptBlock,\n  PromptTextBlock,\n  UserInputBlock,\n} from '../../../types'\n\nconst PteMods = styled(Box)`\n  & [data-testid='pt-editor__toolbar-card'] > div > div:last-child {\n    display: none;\n  }\n  & [data-testid='pt-editor'] {\n    min-height: 300px;\n  }\n  & [data-testid='pt-editor'] .pt-inline-object * {\n    max-width: 400px;\n  }\n`\n\nexport function PromptInput(props: ArrayOfObjectsInputProps) {\n  // quickfixes the model (converts blocks to inline blocks for alpha customers)\n  // backend supports both types, but this prevents \"missing block\" schema errors\n  useOnlyInlineBlocks(props)\n  return <PteMods>{props.renderDefault(props)}</PteMods>\n}\n\nfunction useOnlyInlineBlocks(props: ArrayOfObjectsInputProps) {\n  useEffect(() => {\n    let needsFix = false\n    const val = ((props.value as PromptBlock[]) ?? []).map((block) => {\n      if (block._type === 'block') {\n        return block\n      }\n\n      needsFix = true\n      return typed<PromptTextBlock>({\n        _key: randomKey(12),\n        _type: 'block',\n        level: 0,\n        markDefs: [],\n        style: 'normal',\n        children: [block as FieldRef | ContextBlock | UserInputBlock],\n      })\n    })\n\n    if (needsFix) {\n      props.onChange(set(val))\n    }\n    // only run this once when loading the field\n    // eslint-disable-next-line\n  }, [])\n}\n","import {ArrayFieldProps} from 'sanity'\n\nexport function InstructionsArrayField(props: ArrayFieldProps) {\n  return props.renderDefault({\n    ...props,\n    title: ' ',\n  })\n}\n","import {useMemo} from 'react'\nimport {ArrayOfObjectsInputProps, useCurrentUser} from 'sanity'\n\nimport {StudioInstruction} from '../../types'\n\nexport function InstructionsArrayInput(props: ArrayOfObjectsInputProps) {\n  const user = useCurrentUser()\n\n  const originalValue = props.value as StudioInstruction[] | undefined\n  const originalMembers = props.members\n  const value = useMemo(\n    () => (originalValue ?? []).filter((v) => !v.userId || v.userId === user?.id),\n    [originalValue, user],\n  )\n  const members = useMemo(\n    () =>\n      (originalMembers ?? []).filter((v) => {\n        if (v.kind === 'error') {\n          return true\n        }\n        const value = v?.item?.value as any\n        return !value.userId || value.userId === user?.id\n      }),\n    [originalMembers, user],\n  )\n  return props.renderDefault({...props, value, members})\n}\n","import {Box} from '@sanity/ui'\nimport {useEffect, useRef} from 'react'\nimport {ObjectInputProps} from 'sanity'\n\nexport function HideReferenceChangedBannerInput(props: ObjectInputProps) {\n  const ref = useRef<HTMLDivElement>(null)\n\n  // hides \"reference was changed\" banner (it is incorrectly flashing because the pane handler does not support the way wie use the assist pane)\n  useEffect(() => {\n    const parent = ref.current?.closest('[data-testid=\"pane-content\"]')\n    if (!parent) {\n      return\n    }\n    const style = document.createElement('style')\n    const parentId = `id-${Math.random()}`.replace('.', '-')\n    parent.id = parentId\n\n    style.innerText = `\n      #${parentId} [data-testid=\"reference-changed-banner\"] { display: none; }\n    `\n    parent.prepend(style)\n  }, [ref])\n\n  return <Box ref={ref}>{props.renderDefault(props)}</Box>\n}\n","import {DocumentTextIcon, TokenIcon} from '@sanity/icons'\nimport {defineArrayMember, defineField, defineType} from 'sanity'\n\nimport {HideReferenceChangedBannerInput} from '../components/HideReferenceChangedBannerInput'\nimport {contextDocumentTypeName} from '../types'\n\nexport const contextDocumentSchema = defineType({\n  type: 'document',\n  name: contextDocumentTypeName,\n  title: 'AI context',\n  liveEdit: true,\n  icon: TokenIcon,\n  components: {\n    input: HideReferenceChangedBannerInput,\n  },\n  fields: [\n    defineField({\n      type: 'string',\n      name: 'title',\n      title: 'Title',\n    }),\n    defineField({\n      name: 'context',\n      type: 'array',\n      title: 'Context',\n      of: [\n        defineArrayMember({\n          type: 'block',\n          styles: [{title: 'Normal', value: 'normal'}],\n          lists: [],\n          marks: {\n            decorators: [],\n            annotations: [],\n          },\n        }),\n      ],\n    }),\n  ],\n  preview: {\n    select: {\n      title: 'title',\n      context: 'context',\n    },\n    prepare({title, context}) {\n      const text = context\n        ?.flatMap((block: any) => block?.children)\n        .flatMap((child: any) => child?.text?.split(' '))\n        .filter(Boolean)\n      const words = text?.length ?? 0\n      return {\n        title,\n        subtitle: `Words: ${words}`,\n        media: DocumentTextIcon,\n      }\n    },\n  },\n})\n","import {\n  ArrowRightIcon,\n  CodeIcon,\n  ComposeIcon,\n  icons,\n  IconSymbol,\n  LockIcon,\n  SparklesIcon,\n  ThListIcon,\n} from '@sanity/icons'\nimport {Box, Flex, Stack, Text, Tooltip} from '@sanity/ui'\nimport {createElement} from 'react'\nimport {defineArrayMember, defineField, defineType, ObjectSchemaType} from 'sanity'\n\nimport {AssistDocumentForm} from '../assistDocument/components/AssistDocumentForm'\nimport {FieldRefPreview} from '../assistDocument/components/FieldRefPreview'\nimport {HiddenFieldTitle} from '../assistDocument/components/generic/HiddenFieldTitle'\nimport {IconInput} from '../assistDocument/components/instruction/appearance/IconInput'\nimport {InstructionVisibility} from '../assistDocument/components/instruction/appearance/InstructionVisibility'\nimport {FieldRefPathInput} from '../assistDocument/components/instruction/FieldRefInput'\nimport {InstructionInput} from '../assistDocument/components/instruction/InstructionInput'\nimport {InstructionOutputField} from '../assistDocument/components/instruction/InstructionOutputField'\nimport {InstructionOutputInput} from '../assistDocument/components/instruction/InstructionOutputInput'\nimport {PromptInput} from '../assistDocument/components/instruction/PromptInput'\nimport {InstructionsArrayField} from '../assistDocument/components/InstructionsArrayField'\nimport {InstructionsArrayInput} from '../assistDocument/components/InstructionsArrayInput'\nimport {getFieldRefsWithDocument} from '../assistInspector/helpers'\nimport {instructionGuideUrl} from '../constants'\nimport {getInstructionTitle} from '../helpers/misc'\nimport {\n  assistDocumentIdPrefix,\n  assistDocumentTypeName,\n  assistFieldTypeName,\n  assistTasksStatusTypeName,\n  fieldReferenceTypeName,\n  instructionContextTypeName,\n  instructionTaskTypeName,\n  instructionTypeName,\n  outputFieldTypeName,\n  outputTypeTypeName,\n  promptTypeName,\n  userInputTypeName,\n} from '../types'\nimport {contextDocumentSchema} from './contextDocumentSchema'\n\nexport const fieldReference = defineType({\n  type: 'object',\n  name: fieldReferenceTypeName,\n  title: 'Field',\n  icon: ThListIcon,\n\n  fields: [\n    defineField({\n      type: 'string',\n      name: 'path',\n      title: 'Field',\n      components: {\n        input: FieldRefPathInput,\n      },\n      validation: (rule) =>\n        rule.custom((value, context) => {\n          if (!value) {\n            return 'Please select a field'\n          }\n          try {\n            const docId = context.document?._id\n            if (!docId) {\n              return `Field reference cannot be used outside document inspector context. Could not resolve document id.`\n            }\n            const targetDocType = docId.replace(new RegExp(`^${assistDocumentIdPrefix}`), '')\n            const schema = context.schema.get(targetDocType)\n            if (!schema) {\n              return `Field reference cannot be used outside document inspector context. Could not resolve schema: ${targetDocType}`\n            }\n            const refs = getFieldRefsWithDocument(schema as ObjectSchemaType)\n            const fieldRef = refs.find((r) => r.key === value)\n            if (!fieldRef) {\n              return `Field with path \"${value}\" does not exist in the schema.`\n            }\n            return true\n          } catch (e) {\n            console.error('Failed to resolve field reference', e)\n            return 'Invalid field reference.'\n          }\n        }),\n    }),\n  ],\n  preview: {\n    select: {\n      path: 'path',\n    },\n    prepare({path}) {\n      return {\n        title: path,\n        path,\n        icon: CodeIcon,\n      }\n    },\n  },\n  components: {\n    preview: FieldRefPreview,\n  },\n  options: {\n    modal: {\n      type: 'popover',\n    },\n  },\n})\n\nexport const userInput = defineType({\n  type: 'object',\n  name: userInputTypeName,\n  title: 'User input',\n  icon: ComposeIcon,\n  fields: [\n    defineField({\n      type: 'string',\n      name: 'message',\n      title: 'User input title',\n      placeholder: 'Provide instruction text',\n      description: 'The header above the user input text field',\n      validation: (rule) => rule.required(),\n    }),\n    defineField({\n      type: 'text',\n      rows: 3,\n      name: 'description',\n      title: 'User input description',\n      description: 'The description above the user input text field',\n    }),\n  ],\n  preview: {\n    select: {\n      title: 'message',\n    },\n  },\n  options: {\n    modal: {\n      type: 'popover',\n      width: 1,\n    },\n  },\n})\n\nexport const promptContext = defineType({\n  type: 'object',\n  name: instructionContextTypeName,\n  title: contextDocumentSchema.title,\n  icon: contextDocumentSchema.icon,\n  fields: [\n    defineField({\n      type: 'reference',\n      name: 'reference',\n      to: [{type: contextDocumentSchema.name}],\n      title: 'Context',\n      description: 'The referenced context will be inserted into the instruction',\n      validation: (rule) => rule.required(),\n      components: {\n        input: function Fix(props) {\n          return <Box style={{maxWidth: 300}}>{props.renderDefault(props)}</Box>\n        },\n      },\n    }),\n  ],\n  preview: {\n    select: {\n      ref: 'reference._ref',\n      title: 'reference.title',\n      context: 'reference.context',\n    },\n    prepare(select) {\n      return select.ref\n        ? (contextDocumentSchema?.preview?.prepare?.(select) ?? select)\n        : {title: 'No reference selected', media: contextDocumentSchema.icon}\n    },\n  },\n  options: {\n    modal: {\n      type: 'popover',\n      width: 'auto',\n    },\n  },\n})\n\nexport const prompt = defineType({\n  type: 'array',\n  name: promptTypeName,\n  title: 'Prompt',\n  of: [\n    defineArrayMember({\n      type: 'block',\n      styles: [{title: 'Normal', value: 'normal'}],\n      lists: [],\n      marks: {\n        decorators: [],\n        annotations: [],\n      },\n      of: [\n        defineArrayMember({\n          type: fieldReference.name,\n        }),\n        defineArrayMember({\n          type: promptContext.name,\n        }),\n        defineArrayMember({\n          type: userInput.name,\n        }),\n      ],\n    }),\n    /*    defineArrayMember({\n      type: fieldReference.name,\n    }),\n    defineArrayMember({\n      type: promptContext.name,\n    }),\n    defineArrayMember({\n      type: userInput.name,\n    }),*/\n  ],\n})\n\nexport const outputFieldType = defineType({\n  type: 'object',\n  name: outputFieldTypeName,\n  title: 'Output field',\n  fields: [\n    defineField({\n      type: 'string',\n      name: 'path',\n      title: 'Path',\n    }),\n  ],\n})\n\nexport const outputTypeType = defineType({\n  type: 'object',\n  name: outputTypeTypeName,\n  title: 'Output type',\n  fields: [\n    defineField({\n      type: 'string',\n      name: 'type',\n      title: 'Type',\n    }),\n  ],\n})\n\nexport const instruction = defineType({\n  type: 'object',\n  name: instructionTypeName,\n  title: 'Instruction',\n  fieldsets: [\n    {name: 'appearance', title: 'Appearance', options: {collapsible: true, collapsed: true}},\n  ],\n  preview: {\n    select: {\n      icon: 'icon',\n      title: 'title',\n      userId: 'userId',\n    },\n    prepare: ({icon, title, userId}) => {\n      return {\n        title,\n        icon: icon ? icons[icon as IconSymbol] : SparklesIcon,\n        userId,\n      }\n    },\n  },\n  components: {\n    input: InstructionInput,\n    preview: (props: any) => {\n      return (\n        <Flex gap={3} align=\"center\" padding={2}>\n          {props.icon && (\n            <Box flex=\"none\">\n              <Text size={1}>{createElement(props.icon)}</Text>\n            </Box>\n          )}\n\n          <Stack flex={1} space={2}>\n            <Text size={1} textOverflow=\"ellipsis\" weight=\"medium\">\n              {getInstructionTitle(props)}\n            </Text>\n          </Stack>\n\n          {props.userId && (\n            <Text size={1}>\n              <Tooltip\n                content={<Text size={1}>Only visible to you</Text>}\n                padding={2}\n                placement=\"top\"\n                portal\n              >\n                <LockIcon />\n              </Tooltip>\n            </Text>\n          )}\n        </Flex>\n      )\n    },\n  },\n  fields: [\n    defineField({\n      type: prompt.name,\n      name: 'prompt',\n      title: 'Instruction',\n      description: (\n        <>\n          Learn from{' '}\n          <a href={instructionGuideUrl} target=\"_blank\" rel=\"noreferrer\">\n            our instruction guide <ArrowRightIcon />\n          </a>\n        </>\n      ),\n      components: {\n        input: PromptInput,\n      },\n    }),\n    defineField({\n      type: 'string',\n      name: 'icon',\n      title: 'Icon',\n      fieldset: 'appearance',\n      components: {\n        field: HiddenFieldTitle,\n        input: IconInput,\n      },\n    }),\n    defineField({\n      type: 'string',\n      name: 'title',\n      title: 'Title',\n      fieldset: 'appearance',\n      components: {\n        field: HiddenFieldTitle,\n      },\n    }),\n    defineField({\n      type: 'string',\n      name: 'userId',\n      title: 'Visibility',\n      fieldset: 'appearance',\n      components: {\n        field: HiddenFieldTitle,\n        input: InstructionVisibility,\n      },\n      initialValue: (params, context) => context.currentUser?.id ?? '',\n      readOnly: (context) =>\n        Boolean(\n          context.parent?.createdById && context.parent?.createdById !== context.currentUser?.id,\n        ),\n    }),\n    defineField({\n      type: 'string',\n      name: 'createdById',\n      title: 'Created by',\n      hidden: true,\n      fieldset: 'appearance',\n      initialValue: (params, context) => {\n        return context.currentUser?.id ?? ''\n      },\n    }),\n    defineField({\n      type: 'array',\n      name: 'output',\n      title: 'Output filter',\n      components: {\n        input: InstructionOutputInput,\n        field: InstructionOutputField,\n      },\n      of: [\n        defineArrayMember({type: outputFieldType.name}),\n        defineArrayMember({type: outputTypeType.name}),\n      ],\n    }),\n  ],\n})\n\nexport const fieldInstructions = defineType({\n  type: 'object',\n  name: assistFieldTypeName,\n  title: 'Field prompt',\n  /*  components: {\n    input: FieldPromptInput,\n  },*/\n  fields: [\n    defineField({\n      type: 'string',\n      name: 'path',\n      title: 'Path',\n      readOnly: true,\n      hidden: true,\n    }),\n    defineField({\n      type: 'array',\n      name: 'instructions',\n      title: 'Instructions',\n      of: [{type: instruction.name}],\n      components: {\n        field: InstructionsArrayField,\n        input: InstructionsArrayInput,\n      },\n    }),\n  ],\n  preview: {\n    select: {\n      title: 'path',\n    },\n  },\n})\n\nexport const assistDocumentSchema = defineType({\n  //NOTE: this is a document type. Using object here ensures it does not appear in structure menus\n  type: 'object',\n  //workaround for using object and not document\n  ...({liveEdit: true} as any),\n  name: assistDocumentTypeName,\n  title: 'AI Document',\n\n  components: {\n    input: AssistDocumentForm,\n    field: (props: any) => {\n      return props.renderDefault({...props, title: ''})\n    },\n  },\n  fields: [\n    defineField({\n      type: 'string',\n      name: 'title',\n      title: 'Title',\n    }),\n    defineField({\n      type: 'array',\n      name: 'fields',\n      title: 'Fields',\n      of: [{type: fieldInstructions.name}],\n    }),\n  ],\n  preview: {\n    select: {\n      title: 'title',\n    },\n  },\n})\n\nexport const instructionTask = defineType({\n  type: 'object',\n  name: instructionTaskTypeName,\n  title: 'Instruction task',\n  fields: [\n    defineField({\n      type: 'string',\n      name: 'path',\n      title: 'Path',\n    }),\n    defineField({\n      type: 'string',\n      name: 'instructionKey',\n      title: 'Instruction key',\n    }),\n    defineField({\n      type: 'datetime',\n      name: 'started',\n      title: 'Started',\n    }),\n    defineField({\n      type: 'datetime',\n      name: 'updated',\n      title: 'Updated',\n    }),\n    defineField({\n      type: 'string',\n      name: 'info',\n      title: 'Info',\n    }),\n  ],\n})\n\nexport const documentInstructionStatus = defineType({\n  //NOTE: this is a document type. Using object here ensures it does not appear in structure menus\n  type: 'object',\n  //workaround for using object and not document\n  ...({liveEdit: true} as any),\n  name: assistTasksStatusTypeName,\n  title: 'Document instruction status',\n  fields: [\n    defineField({\n      type: 'array',\n      name: 'tasks',\n      title: 'Tasks',\n      of: [{type: instructionTask.name}],\n    }),\n  ],\n})\n","/* eslint-disable camelcase */\nimport {ArrayOfType, FieldProps, SchemaTypeDefinition} from 'sanity'\n\nimport {\n  assistDocumentSchema,\n  documentInstructionStatus,\n  fieldInstructions,\n  fieldReference,\n  instruction,\n  instructionTask,\n  outputFieldType,\n  outputTypeType,\n  prompt,\n  promptContext,\n  userInput,\n} from './assistDocumentSchema'\nimport {contextDocumentSchema} from './contextDocumentSchema'\n\nfunction excludeComments<T extends SchemaTypeDefinition | ArrayOfType>(type: T): T {\n  const existingRender = (type as any)?.components?.field\n  return {\n    ...type,\n    ...('components' in type\n      ? {\n          components: {\n            ...type.components,\n            field: (props: FieldProps) => {\n              const newProps = {...props, ...{__internal_comments: undefined}}\n              if (typeof existingRender === 'function') {\n                return existingRender(newProps)\n              }\n              return props.renderDefault(newProps)\n            },\n          },\n        }\n      : {}),\n    ...('fields' in type\n      ? {\n          // recursively disable comments in fields\n          fields: type.fields?.map((field) => excludeComments(field)),\n        }\n      : {}),\n    ...('of' in type\n      ? {\n          // recursively disable comments in array items\n          of: type.of?.map((arrayItemType) => excludeComments(arrayItemType)),\n        }\n      : {}),\n  }\n}\n\nconst instructionForm = [\n  fieldInstructions,\n  instruction,\n  fieldReference,\n  prompt,\n  userInput,\n  promptContext,\n].map(excludeComments)\n\nexport const schemaTypes = [\n  ...instructionForm,\n  outputFieldType,\n  outputTypeType,\n  assistDocumentSchema,\n  documentInstructionStatus,\n  instructionTask,\n  contextDocumentSchema,\n]\n","import type {SanityClient} from '@sanity/client'\nimport {definePlugin, isObjectSchemaType} from 'sanity'\n\nimport {AssistDocumentInputWrapper} from './assistDocument/AssistDocumentInput'\nimport {AssistDocumentLayout} from './assistDocument/AssistDocumentLayout'\nimport {AssistFieldWrapper} from './assistFormComponents/AssistField'\nimport {AssistFormBlock} from './assistFormComponents/AssistFormBlock'\nimport {AssistInlineFormBlock} from './assistFormComponents/AssistInlineFormBlock'\nimport {AssistItem} from './assistFormComponents/AssistItem'\nimport {assistInspector} from './assistInspector'\nimport {AssistLayout} from './assistLayout/AssistLayout'\nimport {AssistConfig} from './assistTypes'\nimport {ImageContextProvider} from './components/ImageContext'\nimport {SafeValueInput} from './components/SafeValueInput'\nimport {packageName} from './constants'\nimport {assistFieldActions} from './fieldActions/assistFieldActions'\nimport {isSchemaAssistEnabled} from './helpers/assistSupported'\nimport {validateStyleguide} from './helpers/styleguide'\nimport {isImage} from './helpers/typeUtils'\nimport {createAssistDocumentPresence} from './presence/AssistDocumentPresence'\nimport {schemaTypes} from './schemas'\nimport {TranslationConfig} from './translate/types'\nimport {assistDocumentTypeName, AssistPreset} from './types'\nimport {AssistFieldActionNode, AssistFieldActionProps} from './fieldActions/customFieldActions'\n\nexport interface AssistPluginConfig {\n  translate?: TranslationConfig\n\n  /**\n   * Config that affects all instructions\n   */\n  assist?: AssistConfig\n\n  fieldActions?: {\n    title?: string\n    /**\n     * The returned array can include `undefined` entries in the action array. These will be filtered out.\n     */\n    useFieldActions?: (props: AssistFieldActionProps) => (AssistFieldActionNode | undefined)[]\n  }\n\n  /**\n   * @internal\n   */\n  __customApiClient?: (defaultClient: SanityClient) => SanityClient\n\n  /**\n   * @internal\n   */\n  __presets?: Record<string, AssistPreset>\n}\n\nexport const assist = definePlugin<AssistPluginConfig | void>((config) => {\n  const configWithDefaults = config ?? {}\n  const styleguide = configWithDefaults.translate?.styleguide || ''\n  const maxPathDepth = configWithDefaults.assist?.maxPathDepth\n  const temperature = configWithDefaults.assist?.temperature\n\n  if (typeof styleguide === 'string') {\n    validateStyleguide(styleguide)\n  }\n\n  if (maxPathDepth !== undefined && (maxPathDepth < 1 || maxPathDepth > 12)) {\n    throw new Error(\n      `[${packageName}]: \\`assist.maxPathDepth\\` must be be in the range [1,12] inclusive, but was ${maxPathDepth}`,\n    )\n  }\n\n  if (temperature !== undefined && (temperature < 0 || temperature > 1)) {\n    throw new Error(\n      `[${packageName}]: \\`assist.maxPathDepth\\` must be be in the range [0,1] inclusive, but was ${temperature}`,\n    )\n  }\n\n  return {\n    name: packageName,\n    // the addition of global references broke auto updating studios\n    // new versions of studio know to look for this prop on assist plugin, and filter + console.warn if it is missing\n    ...({handlesGDR: true} as any),\n    schema: {\n      types: schemaTypes,\n    },\n    i18n: {\n      bundles: [{}],\n    },\n\n    document: {\n      inspectors: (prev, context) => {\n        const documentType = context.documentType\n        const docSchema = context.schema.get(documentType)\n        if (docSchema && isSchemaAssistEnabled(docSchema)) {\n          return [...prev, assistInspector]\n        }\n        return prev\n      },\n      unstable_fieldActions: (prev, {documentType, schema}) => {\n        if (documentType === assistDocumentTypeName) {\n          return []\n        }\n        const docSchema = schema.get(documentType)\n        if (docSchema && isSchemaAssistEnabled(docSchema)) {\n          return [...prev, assistFieldActions]\n        }\n        return prev\n      },\n      unstable_languageFilter: (prev, {documentId, schema, schemaType}) => {\n        if (schemaType === assistDocumentTypeName) {\n          return []\n        }\n        const docSchema = schema.get(schemaType)\n        if (docSchema && isObjectSchemaType(docSchema) && isSchemaAssistEnabled(docSchema)) {\n          return [...prev, createAssistDocumentPresence(documentId)]\n        }\n        return prev\n      },\n      components: {\n        unstable_layout: AssistDocumentLayout,\n      },\n    },\n\n    studio: {\n      components: {\n        layout: function Layout(props) {\n          return <AssistLayout {...props} config={configWithDefaults} />\n        },\n      },\n    },\n\n    form: {\n      components: {\n        input: AssistDocumentInputWrapper,\n        field: AssistFieldWrapper,\n        item: AssistItem,\n        block: AssistFormBlock,\n        inlineBlock: AssistInlineFormBlock,\n      },\n    },\n\n    plugins: [\n      definePlugin({\n        name: `${packageName}/safe-value-input`,\n        form: {components: {input: SafeValueInput}},\n      })(),\n\n      definePlugin({\n        name: `${packageName}/generate-caption`,\n        form: {\n          components: {\n            input: (props) => {\n              const {schemaType} = props\n\n              if (isImage(schemaType)) {\n                return <ImageContextProvider {...props} />\n              }\n              return props.renderDefault(props)\n            },\n          },\n        },\n      })(),\n    ],\n  }\n})\n","import type {SanityClient} from '@sanity/client'\nimport {defer, delay, merge, Observable, of, partition, switchMap, throwError} from 'rxjs'\nimport {filter, mergeMap, share, take} from 'rxjs/operators'\nimport {exhaustMapToWithTrailing} from 'rxjs-exhaustmap-with-trailing'\nimport {MutationEvent, ReconnectEvent, WelcomeEvent} from 'sanity'\n\n/** @internal */\nexport type ListenQueryParams = Record<string, string | number | boolean | string[]>\n\n/** @beta */\nexport interface ListenQueryOptions {\n  tag?: string\n  apiVersion?: string\n  throttleTime?: number\n  transitions?: ('update' | 'appear' | 'disappear')[]\n}\n\nconst fetch = (\n  client: SanityClient,\n  query: string,\n  params: ListenQueryParams,\n  options: ListenQueryOptions,\n) =>\n  defer(() =>\n    // getVersionedClient(options.apiVersion)\n    client.observable.fetch(query, params, {\n      tag: options.tag,\n      filterResponse: true,\n    }),\n  )\n\nconst listen = (\n  client: SanityClient,\n  query: string,\n  params: ListenQueryParams,\n  options: ListenQueryOptions,\n) =>\n  defer(() =>\n    // getVersionedClient(options.apiVersion)\n    client.listen(query, params, {\n      events: ['welcome', 'mutation', 'reconnect'],\n      includeResult: false,\n      visibility: 'query',\n      tag: options.tag,\n    }),\n  ) as Observable<ReconnectEvent | WelcomeEvent | MutationEvent>\n\nfunction isWelcomeEvent(\n  event: MutationEvent | ReconnectEvent | WelcomeEvent,\n): event is WelcomeEvent {\n  return event.type === 'welcome'\n}\n\n/** @internal */\nexport const listenQuery = (\n  client: SanityClient,\n  query: string | {fetch: string; listen: string},\n  params: ListenQueryParams = {},\n  options: ListenQueryOptions = {},\n) => {\n  const fetchQuery = typeof query === 'string' ? query : query.fetch\n  const listenerQuery = typeof query === 'string' ? query : query.listen\n\n  const fetchOnce$ = fetch(client, fetchQuery, params, options)\n\n  const events$ = listen(client, listenerQuery, params, options).pipe(\n    mergeMap((ev, i) => {\n      const isFirst = i === 0\n      if (isFirst && !isWelcomeEvent(ev)) {\n        // if the first event is not welcome, it is most likely a reconnect and\n        // if it's not a reconnect something is very wrong\n        return throwError(\n          new Error(\n            ev.type === 'reconnect'\n              ? 'Could not establish EventSource connection'\n              : `Received unexpected type of first event \"${ev.type}\"`,\n          ),\n        )\n      }\n      return of(ev)\n    }),\n    share(),\n  )\n\n  const [welcome$, mutationAndReconnect$] = partition(events$, isWelcomeEvent)\n  const isRelevantEvent = (event: MutationEvent | ReconnectEvent | WelcomeEvent): boolean => {\n    if (!options.transitions || event.type !== 'mutation') {\n      return true\n    }\n\n    return options.transitions.includes(event.transition)\n  }\n\n  return merge(\n    welcome$.pipe(take(1)),\n    mutationAndReconnect$.pipe(\n      filter(isRelevantEvent),\n      switchMap((event) => merge(of(event), of(event).pipe(delay(options.throttleTime || 1000)))),\n    ),\n  ).pipe(exhaustMapToWithTrailing(fetchOnce$))\n}\n","import {useEffect, useRef, useState} from 'react'\nimport isEqual from 'react-fast-compare'\nimport {catchError, distinctUntilChanged} from 'rxjs/operators'\nimport {ListenQueryOptions, useClient} from 'sanity'\n\nimport {listenQuery} from './fixedListenQuery'\n\ntype Params = Record<string, string | number | boolean | string[]>\n\ntype ReturnShape<T> = {\n  loading: boolean\n  error: boolean\n  data: T | null\n}\n\ntype Observable = {\n  unsubscribe: () => void\n}\n\nconst DEFAULT_PARAMS = {}\nconst DEFAULT_OPTIONS: ListenQueryOptions = {apiVersion: `v2022-05-09`}\n\nexport function useListeningQuery<T>(\n  query: string,\n  params: Params = DEFAULT_PARAMS,\n  options: ListenQueryOptions = DEFAULT_OPTIONS,\n): ReturnShape<T> {\n  const [loading, setLoading] = useState(true)\n  const [error, setError] = useState(false)\n  const [data, setData] = useState<T | null>(null)\n  const subscription = useRef<null | Observable>(null)\n\n  const client = useClient({apiVersion: `v2022-05-09`})\n\n  useEffect(() => {\n    if (query) {\n      subscription.current = listenQuery(client, query, params, options)\n        .pipe(\n          distinctUntilChanged(isEqual),\n          catchError((err) => {\n            console.error(err)\n            setError(err)\n            setLoading(false)\n            setData(null)\n\n            return err\n          }),\n        )\n        .subscribe((documents) => {\n          setData((current) => (isEqual(current, documents) ? current : documents))\n          setLoading(false)\n          setError(false)\n        })\n    }\n\n    return () => {\n      return subscription.current ? subscription.current.unsubscribe() : undefined\n    }\n  }, [query, params, options, client])\n\n  return {loading, error, data}\n}\n","import {SyncIcon} from '@sanity/icons'\nimport {Box, Button, Card, Flex, Label, Spinner, Stack} from '@sanity/ui'\nimport {useCallback, useMemo, useState} from 'react'\nimport {useClient, useSchema} from 'sanity'\n\nimport {useListeningQuery} from '../../_lib/useListeningQuery'\nimport {assistSerializedTypeName, SerializedSchemaType} from '../../types'\nimport {serializeSchema} from './serializeSchema'\n\nconst NO_DATA: SerializedSchemaType[] = []\n\nconst defaultTitle = 'Sync schema'\n\nexport function SchemaTypeTool() {\n  const schema = useSchema()\n  const client = useClient({apiVersion: '2023-01-01'})\n  const [saving, setSaving] = useState(false)\n  const [syncTitle, setSyncTitle] = useState(defaultTitle)\n\n  const {data} = useListeningQuery<SerializedSchemaType[]>('*[_type==$type] | order(_type)', {\n    type: assistSerializedTypeName,\n  })\n\n  const types = useMemo(() => {\n    return serializeSchema(schema)\n  }, [schema])\n\n  const storeTypes = useCallback(() => {\n    setSaving(true)\n    let canSave = true\n    async function store() {\n      setSyncTitle(`Syncing 0/${types.length}`)\n      const transaction = client.transaction()\n      for (let i = 0; i < types.length; i++) {\n        if (!canSave) {\n          break\n        }\n        const type = types[i]\n        await transaction.createOrReplace(type as Required<typeof type>)\n        if (i > 0 && i % 50 === 0) {\n          await transaction.commit()\n          transaction.reset()\n          setSyncTitle(`Syncing ${i}/${types.length}`)\n        }\n      }\n      await transaction.commit()\n    }\n    store()\n      .catch(console.error)\n      .finally(() => {\n        setSaving(false)\n        setSyncTitle(defaultTitle)\n      })\n    return () => {\n      canSave = false\n      setSaving(false)\n      setSyncTitle(defaultTitle)\n    }\n  }, [types, client, setSaving, setSyncTitle])\n\n  return (\n    <Card padding={4} overflow=\"auto\" style={{height: 'calc(100vh - 81px)'}}>\n      <Stack space={4}>\n        <Box>\n          <Button\n            icon={saving ? <Spinner style={{marginTop: 5}} /> : SyncIcon}\n            text={syncTitle}\n            disabled={saving}\n            onClick={storeTypes}\n          />\n        </Box>\n        <Flex gap={2}>\n          <Stack space={2}>\n            <Label>Studio schema</Label>\n            <ul>\n              {types.map((type) => (\n                <li key={type.name}>\n                  <SchemaEntry schemaStub={type} />\n                </li>\n              ))}\n            </ul>\n          </Stack>\n\n          <Stack space={2}>\n            <Label>Stored schema</Label>\n            <ul>\n              {(data ?? NO_DATA).map((type) => (\n                <li key={type.name}>\n                  <SchemaEntry schemaStub={type} />\n                </li>\n              ))}\n            </ul>\n          </Stack>\n        </Flex>\n      </Stack>\n    </Card>\n  )\n}\n\nfunction SchemaEntry({schemaStub}: {schemaStub: SerializedSchemaType}) {\n  const out = useMemo(() => JSON.stringify(schemaStub, null, 2), [schemaStub])\n  return <pre>{out}</pre>\n}\n","import {useRunInstruction} from '../assistLayout/RunInstructionProvider'\n\nexport type GetUserInput = (args: {\n  /**\n   * Dialog title\n   */\n  title: string\n  /**\n   * One titled input per array item\n   */\n  inputs: CustomInput[]\n}) => Promise<CustomInputResult[] | undefined>\n\n/**\n *\n */\nexport interface CustomInput {\n  /**\n   * Id for the input\n   */\n  id: string\n  /**\n   * Title of the input field\n   */\n  title: string\n  /**\n   * Additional info that will be displayed over the input\n   */\n  description?: string\n}\n\nexport type CustomInputResult = {\n  /**\n   * Identifies which custom input the `result`belongs to\n   */\n  input: CustomInput\n\n  /**\n   * The text provided by the user in the input\n   */\n  result: string\n}\n\n/**\n * `useUserInput` returns a function that can be used to await user input.\n *\n * Useful for custom `fieldActions` to get user input for populating Agent Action requests,.\n *\n * ```ts\n *  fieldActions: {\n *   useFieldActions: (props) => {\n *     const {\n *       documentSchemaType,\n *       schemaId,\n *       getDocumentValue,\n *       getConditionalPaths,\n *       documentIdForAction,\n *     } = props\n *     const client = useClient({apiVersion: 'vX'})\n *     const getUserInput = useUserInput()\n *     return useMemo(() => {\n *       return [\n *         defineAssistFieldAction({\n *           title: 'Log user input',\n *           icon: UserIcon,\n *           onAction: async () => {\n *             const input = await getUserInput({\n *               title: 'Topic',\n *               inputs: [{id: 'about', title: 'What should the article be about?'}],\n *             })\n *             if (!input) return // user canceled input\n *             await client.agent.action.generate({\n *               schemaId,\n *               targetDocument: {\n *                 operation: 'createIfNotExists',\n *                 _id: documentIdForAction,\n *                 _type: documentSchemaType.name,\n *                 initialValues: getDocumentValue(),\n *               },\n *               instruction: `\n *                   Create a document about the following topic:\n *                   $about\n *                   ---\n *                `,\n *               instructionParams: {about: input[0].result},\n *               conditionalPaths: {paths: getConditionalPaths()},\n *             })\n *           },\n *         }),\n *       ]\n *     }, [\n *       client,\n *       documentSchemaType,\n *       schemaId,\n *       getDocumentValue,\n *       getConditionalPaths,\n *       documentIdForAction,\n *       getUserInput,\n *     ])\n *   },\n * }\n * ```\n */\nexport function useUserInput(): GetUserInput {\n  const {getUserInput} = useRunInstruction()\n  return getUserInput\n}\n"],"names":["scrollParent","options","instruction","status","inputs","isDocAssistable","catchError","DEFAULT_MAX_DEPTH","ABSOLUTE_MAX_DEPTH","maxDepth","filter","basePath","document","languages","toLanguages","fromLanguage","assistDocumentId","typePath","anyPresence","value"],"mappings":"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","x_google_ignoreList":[37,73]}