@sanity/assist 6.0.0 → 6.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +12 -9
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","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/assistLayout/AiAssistanceConfigContext.tsx","../src/assistInspector/helpers.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/FadeInContent.tsx","../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/onboarding/onboardingStore.ts","../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/schemas/serialize/schemaUtils.ts","../src/schemas/serialize/serializeSchema.ts","../src/assistLayout/fieldRefCache.tsx","../src/assistLayout/AiAssistanceConfigProvider.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/_lib/randomKey.ts","../src/fieldActions/customFieldActions.tsx","../src/fieldActions/generateCaptionActions.tsx","../src/fieldActions/generateImageActions.tsx","../src/fieldActions/PrivateIcon.tsx","../src/fieldActions/assistFieldActions.tsx","../src/presence/AssistDocumentPresence.tsx","../src/assistDocument/components/instruction/BackToInstructionsLink.tsx","../src/assistDocument/components/SelectedFieldContext.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 type {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 {type HTMLProps, useEffect} from 'react'\n\nimport type {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 type {ConnectorsStore} from './ConnectorsStore'\n\nexport const ConnectorsStoreContext = createContext<ConnectorsStore | null>(null)\n","import {useContext} from 'react'\n\nimport type {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 {type HTMLProps, useEffect, useState} from 'react'\n\nimport {ConnectorRegion} from './ConnectorRegion'\nimport type {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 type {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 {type ReactNode, useEffect, useMemo} from 'react'\n\nimport {type ConnectorsStore, createConnectorsStore} from './ConnectorsStore'\nimport {ConnectorsStoreContext} from './ConnectorsStoreContext'\nimport type {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 type {\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 type {\n PortableTextBlock,\n PortableTextMarkDefinition,\n PortableTextSpan,\n} from '@portabletext/types'\nimport type {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 compatibility */\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 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 {type Path, pathToString} from 'sanity'\n\nimport {documentRootKey, type 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 type {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 // oxlint-disable-next-line no-unsafe-type-assertion\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 // oxlint-disable-next-line no-unsafe-type-assertion\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 type {ReferenceOptions, SchemaType} from 'sanity'\n\nimport type {AssistOptions} from '../schemas/typeDefExtensions'\nimport {isType} from './typeUtils'\n\nexport function isSchemaAssistEnabled(type: SchemaType) {\n // oxlint-disable-next-line no-unsafe-type-assertion\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 // oxlint-disable-next-line no-unsafe-type-assertion\n !(type?.options as ReferenceOptions)?.aiAssist?.embeddingsIndex) ||\n isType(type, 'crossDatasetReference') ||\n isType(type, 'file')\n )\n}\n","import {createContext, type PropsWithChildren, useMemo} from 'react'\nimport {type FieldMember, type 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 // oxlint-disable-next-line no-unsafe-type-assertion\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 // oxlint-disable-next-line no-map-spread\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 // oxlint-disable-next-line no-map-spread\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 {type ObjectSchemaType, useCurrentUser} from 'sanity'\n\nimport {getInstructionTitle} from '../../helpers/misc'\nimport type {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 // oxlint-disable-next-line no-unsafe-type-assertion\n const documentId = (props.value as any)?._id as string | undefined\n if (!documentId) {\n return props.renderDefault(props)\n }\n\n // oxlint-disable-next-line no-unsafe-type-assertion\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 // oxlint-disable-next-line no-unsafe-type-assertion\n return {\n ...props.schemaType,\n type: {\n ...props.schemaType.type,\n // compatibility 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 {type DocumentInspector, type ObjectSchemaType, PatchEvent} from 'sanity'\n\nimport type {FieldRef} from '../assistInspector/helpers'\nimport type {InstructionTask, StudioAssistDocument} from '../types'\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, useContext} from 'react'\n\nimport type {FieldRef} from '../assistInspector/helpers'\nimport type {AssistPluginConfig} from '../plugin'\nimport type {SerializedSchemaType} from '../types'\nimport type {InstructStatus} 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 serializedTypes: SerializedSchemaType[]\n getFieldRefs: (documentType: string) => FieldRef[]\n getFieldRefsByTypePath: (documentType: string) => Record<string, FieldRef | undefined>\n}\n\n// oxlint-disable-next-line no-unsafe-type-assertion\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 useSerializedTypes() {\n return useAiAssistanceConfig().serializedTypes\n}\n","// oxlint-disable no-accumulating-spread\nimport {\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, 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 {useAiAssistanceConfig} from '../assistLayout/AiAssistanceConfigContext'\nimport {isAssistSupported} from '../helpers/assistSupported'\nimport {isPortableTextArray, isType} from '../helpers/typeUtils'\nimport {type AssistInspectorRouteParams, documentRootKey} 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): ComponentType {\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 getDocumentFieldRef(schemaType: ObjectSchemaType): FieldRef {\n return {\n key: documentRootKey,\n icon: schemaType.icon ?? DocumentIcon,\n title: `The entire document`,\n path: [],\n schemaType: schemaType,\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 (\n schemaType.fields\n .filter((f) => !f.name.startsWith('_'))\n // oxlint-disable-next-line no-map-spread\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}\n\nfunction getSyntheticFields(schemaType: ArraySchemaType, parent?: FieldRef, depth = 0) {\n if (depth >= maxDepth) {\n return []\n }\n\n return (\n schemaType.of\n .filter((itemType) => !isType(itemType, 'block'))\n // oxlint-disable-next-line no-map-spread\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}\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 // oxlint-disable-next-line no-unsafe-type-assertion\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 {getFieldRefs} = useAiAssistanceConfig()\n\n const selectableFields = useMemo(\n () =>\n documentSchemaType && isObjectSchemaType(documentSchemaType)\n ? [getDocumentFieldRef(documentSchemaType), ...getFieldRefs(documentSchemaType.name)]\n : [],\n [documentSchemaType, getFieldRefs],\n )\n\n return useMemo(() => {\n return path ? selectableFields?.find((f) => f.key === path) : undefined\n }, [selectableFields, path])\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 type {SanityClient} from '@sanity/client'\nimport {useToast} from '@sanity/ui'\nimport {useCallback, useMemo, useState} from 'react'\nimport {type Path, pathToString, useClient, useCurrentUser} from 'sanity'\n\nimport {useAiAssistanceConfig, useSerializedTypes} from './assistLayout/AiAssistanceConfigContext'\nimport type {ConditionalMemberState} from './helpers/conditionalMembers'\nimport type {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 types = useSerializedTypes()\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 types = useSerializedTypes()\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 types = useSerializedTypes()\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 // oxlint-disable-next-line react-hooks-js/todo\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 types = useSerializedTypes()\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 {\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'\nimport {FormFieldHeaderText} from 'sanity'\n\nimport type {CustomInputResult, GetUserInput} from '../fieldActions/useUserInput'\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'\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\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 void 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 const {instruction, userInputBlocks: _, ...request} = runRequest\n void 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 // oxlint-disable-next-line react-hooks/exhaustive-deps\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 // oxlint-disable-next-line no-deprecated\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 {type ObjectSchemaType, PatchEvent, type 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 // oxlint-disable-next-line react-hooks-js/set-state-in-effect\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, usePerspective, useSchema} from 'sanity'\nimport {useDocumentPane} from 'sanity/structure'\n\nimport {useAiPaneRouter} from '../../assistInspector/helpers'\nimport {useAiAssistanceConfig} from '../../assistLayout/AiAssistanceConfigContext'\nimport {fieldPathParam, type 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 {getFieldRefs, getFieldRefsByTypePath} = useAiAssistanceConfig()\n const documentSchemaType = useMemo(() => {\n // oxlint-disable-next-line no-unsafe-type-assertion\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 {fieldRefs, fieldRefsByTypePath} = useMemo(() => {\n return {\n fieldRefs: getFieldRefs(documentType),\n fieldRefsByTypePath: getFieldRefsByTypePath(documentType),\n }\n }, [getFieldRefs, getFieldRefsByTypePath, documentType])\n\n const {\n openInspector,\n closeInspector,\n inspector,\n onChange: documentOnChange,\n editState,\n } = useDocumentPane()\n const {selectedReleaseId} = usePerspective()\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 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 fieldRefs,\n fieldRefsByTypePath,\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 // oxlint-disable-next-line react-hooks-js/set-state-in-effect\n setSyntheticTasks([])\n }, [assistableDocumentId])\n\n return {\n syntheticTasks,\n addSyntheticTask,\n removeSyntheticTask,\n }\n}\n","import type {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 type {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 {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","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 // oxlint-disable-next-line no-unsafe-type-assertion\n return {\n [`--ai-avatar-stroke-color`]: purple[400].hex,\n [`--ai-avatar-disc-color`]: purple[600].hex,\n } as CSSProperties\n }\n\n // oxlint-disable-next-line no-unsafe-type-assertion\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","import {Card, Flex, Text, Tooltip} from '@sanity/ui'\nimport type {FormNodePresence} from 'sanity'\n\nimport {FadeInContent} from '../components/FadeInContent'\nimport {AssistAvatar} from './AssistAvatar'\n\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) && statusSegment && 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\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 {useMemo} from 'react'\nimport {type FieldProps, isArraySchemaType} from 'sanity'\n\nimport {assistFormId} from '../_lib/form/constants'\nimport {isAssistSupported} from '../helpers/assistSupported'\nimport {isPortableTextArray, isType} from '../helpers/typeUtils'\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 isPortableText = useMemo(\n () => !!(isArraySchemaType(props.schemaType) && isPortableTextArray(props.schemaType)),\n [props.schemaType],\n )\n\n const presence = useAssistPresence(props.path, isPortableText)\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 </Flex>\n )\n\n return props.renderDefault({\n ...props,\n\n actions: props.actions,\n\n // Render presence in the internal slot (between presence and the field actions)\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 // oxlint-disable-next-line no-unsafe-type-assertion\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 {type 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 type {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 type {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\n// oxlint-disable-next-line no-deprecated\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 // oxlint-disable-next-line react-hooks-js/rule-suppression\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 // oxlint-disable-next-line no-unsafe-type-assertion\n value={formState.value as any}\n hasUpstreamVersion={false}\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","// oxlint-disable no-accumulating-spread\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 // oxlint-disable-next-line no-map-spread\n .map(({conditional: _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, // Use actual form state readOnly value\n hidden: false, // If it's in form state members, it's 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 : // oxlint-disable-next-line no-unsafe-type-assertion\n extractConditionalPaths(member.field as ObjectFormNode, maxDepth)\n return [...acc, conditionalState(member.field), ...innerFields]\n } else if (schemaType.jsonType === 'array') {\n // oxlint-disable-next-line no-unsafe-type-assertion\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 ? // oxlint-disable-next-line no-unsafe-type-assertion\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 // oxlint-disable-next-line no-unsafe-type-assertion\n const conditionalFieldset = !!(node as ObjectFormNode).schemaType?.fieldsets?.some(\n (f) => !f.single && f.name === member.fieldSet.name && typeof f.hidden === 'function',\n )\n // oxlint-disable-next-line no-map-spread\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 {useCallback, useState} from 'react'\n\nexport const inspectorOnboardingKey = 'sanityStudio:assist:inspector: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 {SearchIcon} from '@sanity/icons'\nimport {Autocomplete, Box, Breadcrumbs, Card, Flex, Text} from '@sanity/ui'\nimport {createElement, useCallback, useMemo} from 'react'\nimport type {ObjectSchemaType} from 'sanity'\n\nimport {useAiAssistanceConfig} from '../assistLayout/AiAssistanceConfigContext'\nimport {isType} from '../helpers/typeUtils'\nimport {type FieldRef, getDocumentFieldRef} 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 {getFieldRefs} = useAiAssistanceConfig()\n\n const fieldRefs = useMemo(() => {\n const refs = getFieldRefs(schemaType.name)\n if (includeDocument) {\n return [getDocumentFieldRef(schemaType), ...refs]\n }\n return refs\n }, [schemaType, includeDocument, getFieldRefs])\n\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 // oxlint-disable-next-line no-map-spread\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 // oxlint-disable-next-line no-deprecated\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 PerspectiveProvider,\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 →\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 // oxlint-disable-next-line react-hooks-js/refs\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 // oxlint-disable-next-line no-unsafe-type-assertion\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 // oxlint-disable-next-line react-hooks-js/refs\n scrollElement={boundary.current}\n containerElement={boundary}\n >\n <PerspectiveProvider selectedPerspectiveName={undefined}>\n <DocumentPaneProvider\n paneKey={documentPane.paneKey}\n index={documentPane.index}\n itemId=\"ai\"\n pane={paneNode}\n >\n <DocumentForm />\n </DocumentPaneProvider>\n </PerspectiveProvider>\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 {type DocumentInspector, typed} from 'sanity'\n\nimport {pluginTitle} from '../constants'\nimport {type 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 // oxlint-disable-next-line no-unsafe-type-assertion\n params: typed<AssistInspectorRouteParams>({\n ...params,\n [fieldPathParam]: undefined,\n [instructionParam]: undefined,\n }) as typeof params,\n }\n },\n}\n","import type {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 type {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","// oxlint-disable no-deprecated\nimport {rgba, useTheme} from '@sanity/ui'\nimport {useMemo} from 'react'\n\nimport {type ConnectorOptions, mapConnectorToLine, type 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 type {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 // oxlint-disable-next-line react-hooks-js/set-state-in-effect\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 type {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-es/get.js'\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 if (!value) return []\n try {\n // oxlint-disable-next-line no-unsafe-type-assertion\n return JSON.parse(value) as string[]\n } catch {\n return []\n }\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","// oxlint-disable no-accumulating-spread\nimport {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 === undefined || value === null) {\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 // oxlint-disable-next-line no-unsafe-type-assertion\n if ((arrayValue as any)?.length) {\n // oxlint-disable-next-line no-unsafe-type-assertion\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 // oxlint-disable-next-line no-unsafe-type-assertion\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 = pathEnd[0] && 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\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 void 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 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 {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 type ArraySchemaType,\n type ImageOptions,\n isArraySchemaType,\n type ObjectSchemaType,\n type ReferenceOptions,\n type ReferenceSchemaType,\n type Schema,\n type 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 type SerializedSchemaMember,\n type SerializedSchemaType,\n} from '../../types'\nimport {hiddenTypes} from './schemaUtils'\n\ninterface Options {\n leanFormat?: boolean\n}\n\n// oxlint-disable-next-line prefer-set-has\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 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 // oxlint-disable-next-line no-unsafe-type-assertion\n imagePromptField: (type.options as ImageOptions)?.aiAssist?.imageInstructionField,\n // oxlint-disable-next-line no-unsafe-type-assertion\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: 'to' in type && typeName === 'reference' ? refToTypeNames(type) : 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 {ObjectSchemaType} from 'sanity'\n\nimport {\n asFieldRefsByTypePath,\n type FieldRef,\n getFieldRefs as createFieldRefs,\n} from '../assistInspector/helpers'\n\nexport function createFieldRefCache() {\n const byType: Record<\n string,\n | {\n fieldRefs: FieldRef[]\n fieldRefsByTypePath: Record<string, FieldRef | undefined>\n }\n | undefined\n > = {}\n\n function getRefsForType(schemaType: ObjectSchemaType) {\n const documentType = schemaType.name\n const cached = byType[documentType]\n if (cached) return cached\n\n const fieldRefs = createFieldRefs(schemaType)\n const fieldRefsByTypePath = asFieldRefsByTypePath(fieldRefs)\n const refs = {\n fieldRefs,\n fieldRefsByTypePath,\n }\n byType[documentType] = refs\n return refs\n }\n\n return getRefsForType\n}\n","import {type ReactNode, useCallback, useEffect, useMemo, useState} from 'react'\nimport {type ObjectSchemaType, type Schema, useSchema} from 'sanity'\n\nimport type {AssistPluginConfig} from '../plugin'\nimport {serializeSchema} from '../schemas/serialize/serializeSchema'\nimport {\n type InstructStatus,\n useApiClient,\n useGetInstructStatus,\n useInitInstruct,\n} from '../useApiClient'\nimport {\n AiAssistanceConfigContext,\n type AiAssistanceConfigContextValue,\n} from './AiAssistanceConfigContext'\nimport {createFieldRefCache} from './fieldRefCache'\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 const schema = useSchema()\n const serializedTypes = useMemo(() => serializeSchema(schema, {leanFormat: true}), [schema])\n const {getFieldRefs, getFieldRefsByTypePath} = useFieldRefGetters(schema)\n\n useEffect(() => {\n getInstructStatus()\n .then((s) => setStatus(s))\n .catch((e) => {\n console.error(e)\n // oxlint-disable-next-line no-unsafe-type-assertion\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 // oxlint-disable-next-line no-unsafe-type-assertion\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 serializedTypes,\n getFieldRefs,\n getFieldRefsByTypePath,\n }\n }, [\n config,\n status,\n init,\n statusLoading,\n initLoading,\n error,\n serializedTypes,\n getFieldRefs,\n getFieldRefsByTypePath,\n ])\n\n return (\n <AiAssistanceConfigContext.Provider value={context}>\n {children}\n </AiAssistanceConfigContext.Provider>\n )\n}\n\nfunction useFieldRefGetters(schema: Schema) {\n return useMemo(() => {\n const getForSchemaType = createFieldRefCache()\n\n function getRefsForType(documentType: string) {\n // oxlint-disable-next-line no-unsafe-type-assertion\n const schemaType = schema.get(documentType) as ObjectSchemaType | undefined\n if (!schemaType) {\n throw new Error(`Schema type \"${documentType}\" not found`)\n }\n return getForSchemaType(schemaType)\n }\n\n return {\n getFieldRefs: (documentType: string) => getRefsForType(documentType).fieldRefs,\n getFieldRefsByTypePath: (documentType: string) =>\n getRefsForType(documentType).fieldRefsByTypePath,\n }\n }, [schema])\n}\n","import {ThemeProvider} from '@sanity/ui'\nimport {useState} from 'react'\nimport type {LayoutProps} from 'sanity'\n\nimport {type Connector, ConnectorsProvider} from '../_lib/connector'\nimport {AssistConnectorsOverlay} from '../assistConnectors'\nimport type {AssistPluginConfig} from '../plugin'\nimport {FieldTranslationProvider} from '../translate/FieldTranslationProvider'\nimport type {StudioInstruction} from '../types'\nimport type {RunInstructionRequest} from '../useApiClient'\nimport {AiAssistanceConfigProvider} from './AiAssistanceConfigProvider'\nimport {RunInstructionProvider} from './RunInstructionProvider'\n\nexport interface AIStudioLayoutProps extends LayoutProps {\n config: AssistPluginConfig\n}\n\nexport type RunInstructionArgs = Omit<RunInstructionRequest, 'instructionKey' | 'userTexts'> & {\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, usePerspective, useSyncState} from 'sanity'\nimport {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 // oxlint-disable-next-line no-unsafe-type-assertion\n const assetRef = (value as any)?.asset?._ref\n const {selectedReleaseId} = usePerspective()\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 // oxlint-disable-next-line react-hooks-js/set-state-in-effect\n setAssetRefState(assetRef)\n if (canUseAssist(status)) {\n void 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 {type ElementType, type ReactNode, useCallback, useId, useMemo} from 'react'\nimport {set, type 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 // oxlint-disable-next-line no-redundant-type-constituents\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 type {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","import {TranslateIcon} from '@sanity/icons'\nimport {Box, Spinner} from '@sanity/ui'\nimport {useMemo, useRef} from 'react'\nimport {\n type DocumentFieldAction,\n type DocumentFieldActionGroup,\n type DocumentFieldActionItem,\n type DocumentFieldActionProps,\n type 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 // oxlint-disable-next-line no-unsafe-type-assertion\n const options = fieldSchemaType?.options as AssistOptions | undefined\n const addFieldAction = isDocumentLevel || options?.aiAssist?.translateAction\n\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 const isActive = !!(documentSchemaType && (documentTranslationEnabled || fieldTransEnabled))\n\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 const translateDocumentAction = useMemo(() => {\n if (!isActive || !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 isActive,\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 isActive && 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 isActive,\n openFieldTranslation,\n documentSchemaType,\n documentId,\n fieldTranslate.translationLoading,\n fieldTransEnabled,\n path,\n readOnly,\n maxDepth,\n ],\n )\n\n return useMemo(() => {\n if (!isActive || !status?.initialized) {\n // oxlint-disable-next-line no-unsafe-type-assertion\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 }, [isActive, translateDocumentAction, translateFieldsAction, status])\n },\n}\n","// WHATWG crypto RNG - https://w3c.github.io/webcrypto/Overview.html\nfunction whatwgRNG(length = 16) {\n const rnds8 = new Uint8Array(length)\n crypto.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 type {AgentActionPath} from '@sanity/client/stega'\nimport {type ToastParams, useToast} from '@sanity/ui'\nimport {useMemo} from 'react'\nimport {\n type DocumentFieldActionDivider,\n type DocumentFieldActionGroup,\n type DocumentFieldActionItem,\n type DocumentFieldActionNode,\n type ObjectSchemaType,\n type Path,\n type SanityDocumentLike,\n type SchemaType,\n useWorkspaceSchemaId,\n} from 'sanity'\n\nimport {randomKey} from '../_lib/randomKey'\nimport {useAssistDocumentContext} from '../assistDocument/AssistDocumentContext'\nimport {useAiAssistanceConfig} from '../assistLayout/AiAssistanceConfigContext'\nimport {isDefined} from '../helpers/misc'\nimport {\n documentRootKey,\n fieldPresenceTypeName,\n type InstructionTask,\n instructionTaskTypeName,\n} from '../types'\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 // oxlint-disable-next-line react-hooks-js/hooks\n const configActions = fieldActions?.useFieldActions?.({\n ...props,\n schemaId,\n // oxlint-disable-next-line no-unsafe-type-assertion\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 // oxlint-disable-next-line react-hooks/exhaustive-deps\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 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 void runAction()\n },\n renderAsButton: false,\n selected: false,\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 const {assistableDocumentId} = useAssistDocumentContext()\n\n const isActive = !!imageContext && pathKey === imageContext?.imageDescriptionPath\n\n return useMemo(() => {\n if (!isActive || !imageContext) {\n // works but not supported by types\n // oxlint-disable-next-line no-unsafe-type-assertion\n return undefined as unknown as DocumentFieldActionItem\n }\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 // oxlint-disable-next-line no-unsafe-type-assertion\n [instructionParam]: undefined as any,\n })\n return\n }\n void generateCaption({path: pathKey, documentId: assistableDocumentId})\n },\n renderAsButton: true,\n disabled: loading,\n hidden: !imageContext.assetRef,\n })\n }, [\n isActive,\n imageContext,\n generateCaption,\n pathKey,\n assistableDocumentId,\n loading,\n status,\n openInspector,\n ])\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'\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 const {assistableDocumentId} = useAssistDocumentContext()\n\n const isActive = !!imageContext && pathKey === imageContext?.imageInstructionPath\n\n return useMemo(() => {\n if (!isActive) {\n // works but not supported by types\n // oxlint-disable-next-line no-unsafe-type-assertion\n return undefined as unknown as DocumentFieldActionItem\n }\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 void generateImage({path: pathKey, documentId: assistableDocumentId})\n },\n renderAsButton: true,\n disabled: loading,\n })\n }, [isActive, generateImage, pathKey, assistableDocumentId, loading])\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","import type {AgentActionPath} from '@sanity/client/stega'\nimport {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 {type AgentActionConditionalPath, useCustomFieldActions} from './customFieldActions'\nimport {generateCaptionsActions} from './generateCaptionActions'\nimport {generateImagActions} from './generateImageActions'\nimport {PrivateIcon} from './PrivateIcon'\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 // oxlint-disable-next-line no-unsafe-type-assertion\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 // oxlint-disable-next-line no-map-spread\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 // oxlint-disable-next-line no-unsafe-type-assertion\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 // oxlint-disable-next-line react-hooks-js/todo\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 // oxlint-disable-next-line no-unsafe-type-assertion\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 {createContext} from 'react'\nimport type {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 {Card, Stack, Text} from '@sanity/ui'\nimport {useContext, useEffect, useMemo, useRef} from 'react'\nimport {\n type FieldError,\n FormCallbacksProvider,\n type FormCallbacksValue,\n FormInput,\n insert,\n type KeyedSegment,\n MemberFieldError,\n type ObjectInputProps,\n type ObjectSchemaType,\n PatchEvent,\n type Path,\n type 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 type AssistDocument,\n type AssistField,\n assistFieldTypeName,\n type AssistInspectorRouteParams,\n documentRootKey,\n fieldPathParam,\n instructionParam,\n type StudioInstruction,\n} from '../../types'\nimport {AssistTypeContext} from './AssistTypeContext'\nimport {BackToInstructionListLink} from './instruction/BackToInstructionsLink'\nimport {SelectedFieldContextProvider, type 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 // oxlint-disable-next-line no-unsafe-type-assertion\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 // oxlint-disable-next-line no-unsafe-type-assertion\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 // oxlint-disable-next-line no-unsafe-type-assertion\n typed<AssistInspectorRouteParams>({\n ...params,\n // oxlint-disable-next-line no-unsafe-type-assertion\n [instructionParam]: (path[3] as KeyedSegment)?._key,\n }) as Record<keyof AssistInspectorRouteParams, string | undefined>,\n )\n } else {\n setTimeout(() => onPathOpen(path), 0)\n }\n },\n }),\n [formCallbacks, onPathOpen, params, setParams, instruction],\n )\n\n // When showing the instruction list (no specific instruction selected),\n // tell the form to focus on the field path to close any open modals\n useEffect(() => {\n if (activePath && !instruction) {\n onPathOpen(activePath)\n }\n }, [activePath, instruction, onPathOpen])\n\n const fieldError = useMemo(() => {\n const fieldError = props.members.find(\n (m): m is FieldError => m.kind === 'error' && m.fieldName === 'fields',\n )\n if (fieldError) {\n return <MemberFieldError member={fieldError} />\n }\n return undefined\n }, [props.members])\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 && !fieldError && (\n <FormCallbacksProvider {...newCallbacks}>\n <div style={{lineHeight: '1.25em'}}>\n <FormInput {...props} absolutePath={activePath} />\n </div>\n </FormCallbacksProvider>\n )}\n\n {fieldError}\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 type {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 // oxlint-disable-next-line no-unsafe-type-assertion\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 {/* oxlint-disable-next-line no-unsafe-type-assertion */}\n {actions as any}\n </Flex>\n )\n}\n","import type {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, type 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, type StringInputProps} from 'sanity'\n\nimport {FieldAutocomplete} from '../../../assistInspector/FieldAutocomplete'\nimport type {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 type {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 {type FieldError, type FieldMember, ObjectInputMember, type 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 type ArrayFieldProps,\n type ArraySchemaType,\n isArrayOfObjectsSchemaType,\n isObjectSchemaType,\n type 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 type ArrayOfObjectsInputProps,\n type ArraySchemaType,\n type FormPatch,\n insert,\n isArrayOfObjectsSchemaType,\n isObjectSchemaType,\n type ObjectSchemaType,\n PatchEvent,\n setIfMissing,\n typed,\n unset,\n} from 'sanity'\n\nimport {isAssistSupported} from '../../../helpers/assistSupported'\nimport {isType} from '../../../helpers/typeUtils'\nimport {type OutputFieldItem, outputFieldTypeName, type 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 // oxlint-disable-next-line no-unsafe-type-assertion\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 // oxlint-disable-next-line no-unsafe-type-assertion\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 // oxlint-disable-next-line no-unsafe-type-assertion\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 // oxlint-disable-next-line no-unsafe-type-assertion\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 {PromptBlock, PromptTextBlock} 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 // oxlint-disable-next-line no-unsafe-type-assertion\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],\n })\n })\n\n if (needsFix) {\n props.onChange(set(val))\n }\n // only run this once when loading the field\n // oxlint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n}\n","import type {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 {type ArrayOfObjectsInputProps, useCurrentUser} from 'sanity'\n\nimport type {StudioInstruction} from '../../types'\n\nexport function InstructionsArrayInput(props: ArrayOfObjectsInputProps) {\n const user = useCurrentUser()\n\n // oxlint-disable-next-line no-unsafe-type-assertion\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 // oxlint-disable-next-line no-unsafe-type-assertion\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 type {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 type 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, type 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 {createFieldRefCache} from '../assistLayout/fieldRefCache'\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 const getForSchemaType = createFieldRefCache()\n return 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 // oxlint-disable-next-line no-unsafe-type-assertion\n const {fieldRefs} = getForSchemaType(schema as ObjectSchemaType)\n const fieldRef = fieldRefs.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 ],\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._id',\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 // oxlint-disable-next-line no-unsafe-type-assertion\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 // oxlint-disable-next-line no-unsafe-type-assertion\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 // oxlint-disable-next-line no-unsafe-type-assertion\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","import type {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 // oxlint-disable-next-line no-unsafe-type-assertion\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 type {AssistConfig} from './assistTypes'\nimport {ImageContextProvider} from './components/ImageContext'\nimport {SafeValueInput} from './components/SafeValueInput'\nimport {packageName} from './constants'\nimport {assistFieldActions} from './fieldActions/assistFieldActions'\nimport type {AssistFieldActionNode, AssistFieldActionProps} from './fieldActions/customFieldActions'\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 type {TranslationConfig} from './translate/types'\nimport {assistDocumentTypeName, type AssistPreset} from './types'\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.temperature\\` must 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 // oxlint-disable-next-line no-unsafe-type-assertion\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 {exhaustMapToWithTrailing} from 'rxjs-exhaustmap-with-trailing'\nimport {filter, mergeMap, share, take} from 'rxjs/operators'\nimport type {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 // oxlint-disable-next-line no-unsafe-type-assertion\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 // oxlint-disable-next-line no-deprecated\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 {of} from 'rxjs'\nimport {catchError, distinctUntilChanged} from 'rxjs/operators'\nimport {type 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(true)\n setLoading(false)\n setData(null)\n\n return of(null)\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, type 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 // oxlint-disable-next-line no-await-in-loop, no-unsafe-type-assertion, await-thenable\n await transaction.createOrReplace(type as Required<typeof type>)\n if (i > 0 && i % 50 === 0) {\n // oxlint-disable-next-line no-await-in-loop\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":["hasOverflowScroll","el","overflow","getComputedStyle","includes","useRegionRects","$","_c","ref","useRef","relativeBoundsRect","setRelativeBoundsRect","useState","relativeElementRect","setRelativeElementRect","t0","for","x","y","boundsScroll","setBoundsScroll","t1","scroll","setScroll","boundsScrollXRef","boundsScrollYRef","elementScrollXRef","elementScrollYRef","t2","t3","Symbol","current","scrollParents","parent","parentElement","document","body","push","handleResize","boundsRect","getBoundingClientRect","width","window","innerWidth","height","innerHeight","domRect","w","h","handleScroll","scrollX","scrollY","scrollParent_0","scrollParent","scrollLeft","scrollTop","scrollParent_1","addEventListener","passive","ro","ResizeObserver","observe","scrollParent_2","unobserve","scrollParent_3","removeEventListener","disconnect","useEffect","t4","bounds","t5","element","t6","ConnectorRegion","props","children","onRectsChange","restProps","ConnectorsStoreContext","createContext","useConnectorsStore","store","useContext","Error","ConnectFromRegion","key","zIndex","_key","rects","setRects","from","subscribe","next","createConnectorsStore","configKeys","fieldKeys","channels","Map","to","payloads","observers","notifyObservers","connectors","toRects","get","toPayload","fromRects","fromPayload","payload","observer","set","delete","idx","indexOf","splice","ConnectorsProvider","onConnectorsChange","getConnectorLinePoint","options","rect","centerY","isAbove","arrow","marginY","isBelow","startY","path","endY","outOfBounds","mapConnectorToLine","connector","fromBounds","threshold","fromBottom","toBounds","toBottom","maxStartY","Math","max","min","assistFormId","assistDocumentIdPrefix","assistDocumentStatusIdPrefix","assistSchemaIdPrefix","assistDocumentTypeName","assistFieldTypeName","instructionTypeName","promptTypeName","userInputTypeName","instructionContextTypeName","fieldReferenceTypeName","contextDocumentTypeName","assistTasksStatusTypeName","instructionTaskTypeName","fieldPresenceTypeName","assistSerializedTypeName","assistSerializedFieldTypeName","outputFieldTypeName","outputTypeTypeName","fieldPathParam","instructionParam","documentRootKey","usePathKey","getPathKey","length","Array","isArray","pathToString","getInstructionTitle","instruction","title","isDefined","t","isPortableTextArray","type","of","find","isType","schemaType","typeName","name","isImage","getDescriptionFieldOption","descriptionField","aiAssist","imageDescriptionField","updateOnImageChange","getImageInstructionFieldOption","imageInstructionField","isSchemaAssistEnabled","exclude","isAssistSupported","isDisabled","jsonType","every","fields","field","isUnsupportedType","embeddingsIndex","FirstAssistedPathContext","undefined","FirstAssistedPathProvider","members","firstAssisted","_temp","firstAssistedPath","member","kind","releaseAnnouncementUrl","instructionGuideUrl","giveFeedbackUrl","salesUrl","packageName","pluginTitle","pluginTitleShort","maxHistoryVisibilityMs","minutesToMilliseconds","illegalIdChars","assistDocumentId","documentType","replace","assistTasksStatusId","documentId","isVersionId","getVersionFromId","getPublishedId","useDocumentState","id","docType","state","useEditState","draft","published","useStudioAssistDocument","initDoc","documentTypeName","currentUser","useCurrentUser","assistDocument","assistTasksStatus","apiVersion","client","useClient","createIfNotExists","_id","_type","catch","t7","bb0","t8","tasks","map","assistField","filter","task","instructions","p","userId","asStudioInstruction","typed","task_0","instruction_0","f","i","instructionKey","run","started","Date","getTime","NO_TASKS","useInstructionToaster","documentSchemaType","assistDocLoaded","toast","useToast","previousTasks","prevTaskByKey","Object","fromEntries","startedByUserId","prevTask","ended","_temp2","forEach","task_2","reason","status","description","message","closable","duration","task_1","isAfter","addSeconds","AssistDocumentInputWrapper","value","renderDefault","AssistDocumentInput","AssistInput","useLayer","paneKey","useDocumentPane","pathKey","minWidth","AssistDocumentContext","useAssistDocumentContext","context","AiAssistanceConfigContext","useAiAssistanceConfig","useSerializedTypes","serializedTypes","maxDepth","getTypeIcon","icon","LinkIcon","ImageIcon","BlockContentIcon","OlistIcon","BlockquoteIcon","StringIcon","DocumentIcon","asFieldRefsByTypePath","fieldRefs","reduce","acc","getDocumentFieldRef","getFieldRefs","depth","startsWith","flatMap","fieldRef","patchableKey","join","syntheticFields","getSyntheticFields","itemType","segment","synthetic","getTypePath","doc","pathString","stringToPath","currentPath","valid","syntheticPath","isKeySegment","match","extractWithPath","useTypePath","useSelectedField","isObjectSchemaType","selectableFields","getFieldTitle","useAiPaneRouter","paneRouter","usePaneRouter","params","basePath","API_VERSION_WITH_EXTENDED_TYPES","canUseAssist","enabled","initialized","validToken","useApiClient","customApiClient","useTranslate","apiClient","loading","setLoading","user","types","languagePath","styleguide","translatePath","fieldLanguageMap","conditionalMembers","request","method","url","config","dataset","projectId","userStyleguide","e","finally","setTimeout","translate","useGenerateCaption","generateCaption","useGenerateImage","generateImage","useGetInstructStatus","getInstructStatus","useCallback","useInitInstruct","initInstruct","useRunInstructionApi","assist","assistConfig","timeZone","locale","Intl","DateTimeFormat","resolvedOptions","defaultLocaleSettings","localeSettings","defaultSettings","maxPathDepth","runInstruction","NO_INPUT","RunInstructionContext","getUserInput","instructionLoading","useRunInstruction","isUserInputBlock","block","RunInstructionProvider","__customApiClient","runInstructionRequest","useId","inputs","setInputs","runRequest","setRunRequest","resolveUserInput","setResolveUserInput","inputs_0","userInputBlocks","dialogTitle","Promise","resolve","req","userInputBlocks_0","prompt","userTexts","close","_","request_0","entries","_temp3","userInputs","values","input_0","i_0","userInputBlock","input","result","runWithInput","open","_temp4","runDisabled","PlayIcon","runButton","contextValue","block_0","i_1","t9","value_0","blockKey","userInput","UserInput","autoFocus","textAreaRef","currentTarget","target","onChange","focus","resize","isDocAssistable","liveEdit","useRequestRunInstruction","args","requestRunInstruction","useDraftDelayedTask","documentOnChange","queuedArgs","setQueuedArgs","taskArgs","PatchEvent","unset","useAssistDocumentContextValue","schema","useSchema","getFieldRefsByTypePath","fieldRefsByTypePath","openInspector","closeInspector","inspector","editState","selectedReleaseId","usePerspective","version","getVersionId","getDraftId","assistableDocumentId","documentIsNew","documentIsAssistable","selectedPath","syntheticTasks","addSyntheticTask","removeSyntheticTask","useSyntheticTasks","t10","base","t11","setSyntheticTasks","current_0","AssistDocumentContextProvider","AssistDocumentLayout","fadeIn","keyframes","FadeInDiv","styled","div","withConfig","displayName","componentId","FadeInContent","forwardRef","durationMs","animationDuration","Root","span","dash","Outline","svg","IconDisc","AssistAvatar","scheme","useColorSchemeValue","style","useMemo","purple","hex","color","AiFieldPresence","_props","position","background","NO_PRESENCE","useAssistPresence","showFocusWithin","activePresence","presence","statusPath","pathSegment","statusSegment","aiPresence","_title","sessionId","lastActiveAt","toISOString","AssistFieldWrapper","inputId","AssistField","isArraySchemaType","isPortableText","singlePresence","actions","__internal_slot","WrapPreCard","Card","SafeValueInput","ErrorWrapper","error","setError","catchError","unsetValue","dismiss","catcher","PteValueFixer","AssistFormBlock","useFormCallbacks","patchEvent","prefixAll","localOnChange","InlineBlockValueContext","AssistInlineFormBlock","AssistItem","pre","right","preventDefault","ev","DocumentForm","collapsedFieldSets","collapsedPaths","displayed","formState","onBlur","onFocus","onPathOpen","onSetActiveFieldGroup","onSetCollapsedFieldSet","onSetCollapsedPath","ready","validation","documentStore","useDocumentStore","useDocumentPresence","patchChannel","createPatchChannel","isLocked","transactionSyncLock","sub","pair","documentEvents","pipe","tap","event","publish","prepareMutationEvent","prepareRebaseEvent","unsubscribe","hasRev","Boolean","_rev","patches","snapshot","formRef","focusFirstDescendant","focusPath","changed","focused","groups","readOnly","mutations","mut","patch","fromMutationPatches","origin","remotePatches","remoteMutations","localPatches","localMutations","concat","AssistTypeContext","DEFAULT_MAX_DEPTH","ABSOLUTE_MAX_DEPTH","getConditionalMembers","docState","hidden","conditional","isConditional","extractConditionalPaths","v","_conditional","conditionalState","memberState","node","innerFields","array","arrayPaths","isObjectsArray","some","m","item","arrayMember","conditionalFieldset","fieldsets","single","fieldSet","SparklesIllustration","SparklesIcon","strokeWidth","InspectorOnboarding","onDismiss","textAlign","inspectorOnboardingKey","isFeatureOnboardingDismissed","featureKey","localStorage","getItem","dismissFeatureOnboarding","setItem","useOnboardingFeature","showOnboarding","setShowOnboarding","dismissOnboarding","FieldAutocomplete","fieldPath","onSelect","includeDocument","refs","currentField","autocompleteOptions","renderOption","renderValue","filterOption","_temp5","SearchIcon","query","option_1","lQuery","toLowerCase","option","option_0","field_1","createElement","field_0","f_0","FieldTitle","T0","T1","splitTitle","split","Box","Breadcrumbs","display","flexWrap","alignItems","marginTop","slice","_temp6","pt","trim","useInterval","ms","tick","update","useReducer","setInterval","clearInterval","n","TimeAgo","date","formatDistanceToNow","timeSince","rotate","SyncSpinningIcon","SyncIcon","TASK_CONFIG","aborted","CloseCircleIcon","tone","ErrorOutlineIcon","success","CheckmarkCircleIcon","timeout","ClockIcon","InstructionTaskHistoryButton","showTitles","cancelRun","taskKey","statusDocId","commit","console","titledTasks","cancel","sort","a","b","isRunning","r","hasErrors","setOpen","toggleOpen","button","setButton","popover","setPopover","handleClickOutside","useClickOutside","handleEscape","TASK_STATUS_BUTTON_TOOLTIP_PROPS","placement","TaskStatusButton","disabled","onClick","selected","TaskList","onEscape","isTopLayer","useGlobalKeyDown","TaskItem","taskType","t12","t13","t14","CardWithShadowBelow","CardWithShadowAbove","AssistInspectorWrapper","statusLoading","onClose","initLoading","RetryIcon","init","AssistInspector","boundary","documentPane","docValue","formStateRef","typePath","selectedField","aiDocId","promptValue","isEmptyPrompt","text","paneNode","runCurrentInstruction","Region","flex","assistTypeContext","lineHeight","minHeight","index","whiteSpace","justifySelf","AiInspectorHeader","fieldTitle","CloseIcon","aiInspectorId","assistInspector","useMenuItem","showAsAction","component","arrowPath","dir","size","moveTo","lineTo","strings","delim","quadCurve","x1","y1","drawConnectorPath","line","cornerRadius","fromX","fromY","_toX","toY","toX","dividerX","divider","offsetX","fromPathX","marginX","r0","abs","r1","cmds","ConnectorPath","theme","useTheme","sanity","bg","border","rgba","DEBUG","AssistConnectorsOverlay","setRedraw","top","left","pointerEvents","validateStyleguide","createStyleGuideResolver","styleguideResult","getLanguageParams","select","selection","selectedValue","toFieldLanguagesKeyPrefix","getPreferredToFieldLanguages","fromLanguageId","JSON","parse","setPreferredToFieldLanguages","languageIds","stringify","getDocumentMembersFlat","isDocumentSchemaType","extractPaths","fieldSchema","thisFieldWithPath","arrayValue","itemPath","itemSchema","warn","defaultLanguageOutputs","enclosingType","translateFromLanguageId","translateToLanguageIds","pathEnd","translateToId","outputPath","getFieldLanguageMap","documentSchema","documentMembers","outputLanguageIds","langFn","translationMaps","parentPath","translations","translation","inputLanguageId","inputPath","outputs","FieldTranslationContext","openFieldTranslation","translationLoading","useFieldTranslation","hasValuesToTranslate","fieldLanguageMaps","fromLanguage","FieldTranslationProvider","runTranslate","dialogOpen","setDialogOpen","fieldTranslationParams","setFieldTranslationParams","languages","setLanguages","setFromLanguage","toLanguages","setToLanguages","setFieldLanguageMaps","languageClient","translationOutputs","languages_0","preferred","allToLanguages","l","filteredToLanguages","l_0","fromId","allToIds","docMembers","transMap","toId","selectFromLanguage","toggledLang","toLanguages_0","languages_1","wasSelected","l_2","newToLangs","anyLang","selectedLang","toggleToLanguage","params_0","languageParams","selectLanguageParams","languages_2","fromLanguage_0","out","l_4","onRunTranslation","radioLanguage","checkboxLanguage","l_3","l_1","ToLanguageCheckbox","langId","opacity","tl","FromLanguageRadio","hiddenTypes","inlineTypes","serializeSchema","list","getTypeNames","getSchemaStub","localeCompare","baseSchema","leanFormat","getBaseFields","removeUndef","schemaOptions","imagePromptField","keys","arrayOf","refToTypeNames","serializeFields","annotations","serializeAnnotations","inlineOf","serializeInlineOf","fs","serializeMember","blockSchemaType","childrenType","marksType","arrayType","obj","createFieldRefCache","byType","getRefsForType","cached","createFieldRefs","AiAssistanceConfigProvider","setStatus","useFieldRefGetters","then","s","status_0","getForSchemaType","documentType_0","documentType_1","AssistLayout","setConnectors","ImageContext","ImageContextProvider","assetRef","asset","_ref","assetRefState","setAssetRefState","isSyncing","useSyncState","isShowingOlderRevision","rev","descriptionField_0","imageDescriptionPath","imageInstructionPath","IconInput","icons","items","getIcon","selectedIcon","maxHeight","portal","IconItem","iconKey","iconName","sparkles","useAssistSupported","_path","translateActions","useAction","fieldSchemaType","isDocumentLevel","docTransTypes","documentTypes","addFieldAction","translateAction","fieldTransEnabled","documentTranslationEnabled","isActive","documentValue","docRef","translationApi","languageField","translateDocumentAction","transform","TranslateIcon","onAction","renderAsButton","fieldTranslate","translateFieldsAction","c","expanded","whatwgRNG","rnds8","Uint8Array","crypto","getRandomValues","getByteHexTable","table","toString","substring","randomKey","str","defineAssistFieldAction","action","defineFieldActionDivider","defineAssistFieldActionGroup","group","useCustomFieldActions","fieldActions","schemaId","useWorkspaceSchemaId","pushToast","configActions","useFieldActions","customActions","createSafeNode","onlyGroups","createSafeAction","child","runAction","actionResult","err","generateCaptionsActions","imageContext","generateImagActions","PrivateIcon","assistFieldActions","docValueRef","isHidden","isSelectable","assistSupported","fieldAssist","fieldAssistKey","isSelected","imageCaptionAction","imageGenAction","manageInstructions","onInstructionAction","privateInstructions","sharedInstructions","runInstructionsGroup","instructionItem","isPrivate","getDocumentValue","getConditionalPaths","cm","parentSchemaType","actionType","documentIdForAction","manageInstructionsItem","ControlsIcon","emptyAction","iconRight","createAssistDocumentPresence","AssistDocumentPresence","anyPresence","anyRun","BackToInstructionListLink","goBack","ArrowLeftIcon","SelectedFieldContext","SelectedFieldContextProvider","Provider","EMPTY_FIELDS","AssistDocumentForm","AssistDocumentFormEditable","setParams","targetDocumentType","activeKey","bb1","activePath","bb2","useSelectedSchema","formCallbacks","newCallbacks","bb3","fieldError","fieldError_0","t15","t16","t17","t18","fieldName","currentSchema","FieldsInitializer","__presets","presets","existingField","documentPresets","existingInstructions","ei","missingPresetInstructions","setIfMissing","append","insert","preset","markDefs","FieldRefPreview","HiddenFieldTitle","level","InstructionVisibility","newValue","handleChange","margin","elementProps","FieldRefPathInput","querySelector","fieldSegments","lastArrayItemIndex","findLastIndex","mustStartWith","findFieldMember","findFieldsetMember","fieldsetName","InstructionInput","ObjectMember","NONE","NameField","fieldsetMember","titleId","iconMember","titleMember","placeholder","moddedTitleMember","marginLeft","ShareField","visibilityMember","InstructionOutputField","isArrayOfObjectsSchemaType","EnabledOutputField","onExpand","onCollapse","collapsible","collapsed","InstructionOutputInput","useEmptySelectAllValue","allowedValues","validValues","relativePath","valueLength","validLength","ObjectOutputInput","checked","patchValue","onSelectChange","ArrayOutputInput","ofItems","itemType_0","Selectable","cursor","PteMods","PromptInput","useOnlyInlineBlocks","needsFix","val","InstructionsArrayField","InstructionsArrayInput","originalValue","originalMembers","v_0","HideReferenceChangedBannerInput","closest","parentId","random","innerText","prepend","contextDocumentSchema","defineType","TokenIcon","components","defineField","defineArrayMember","styles","lists","marks","decorators","preview","prepare","words","subtitle","media","DocumentTextIcon","fieldReference","ThListIcon","rule","custom","docId","targetDocType","RegExp","CodeIcon","modal","ComposeIcon","required","rows","promptContext","maxWidth","outputFieldType","outputTypeType","fieldset","initialValue","_params","createdById","fieldInstructions","assistDocumentSchema","instructionTask","documentInstructionStatus","excludeComments","existingRender","newProps","__internal_comments","arrayItemType","instructionForm","schemaTypes","definePlugin","configWithDefaults","temperature","handlesGDR","i18n","bundles","inspectors","prev","docSchema","unstable_fieldActions","unstable_languageFilter","unstable_layout","studio","layout","form","inlineBlock","plugins","fetch","defer","observable","tag","filterResponse","listen","events","includeResult","visibility","isWelcomeEvent","listenQuery","fetchQuery","listenerQuery","fetchOnce$","events$","mergeMap","throwError","share","welcome$","mutationAndReconnect$","partition","isRelevantEvent","transitions","transition","merge","take","switchMap","delay","throttleTime","exhaustMapToWithTrailing","DEFAULT_PARAMS","DEFAULT_OPTIONS","useListeningQuery","data","setData","subscription","distinctUntilChanged","isEqual","documents","NO_DATA","defaultTitle","SchemaTypeTool","saving","setSaving","syncTitle","setSyncTitle","canSave","transaction","createOrReplace","reset","storeTypes","type_1","type_0","SchemaEntry","schemaStub","useUserInput"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","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/assistLayout/AiAssistanceConfigContext.tsx","../src/assistInspector/helpers.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/FadeInContent.tsx","../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/onboarding/onboardingStore.ts","../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/schemas/serialize/schemaUtils.ts","../src/schemas/serialize/serializeSchema.ts","../src/assistLayout/fieldRefCache.tsx","../src/assistLayout/AiAssistanceConfigProvider.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/_lib/randomKey.ts","../src/fieldActions/customFieldActions.tsx","../src/fieldActions/generateCaptionActions.tsx","../src/fieldActions/generateImageActions.tsx","../src/fieldActions/PrivateIcon.tsx","../src/fieldActions/assistFieldActions.tsx","../src/presence/AssistDocumentPresence.tsx","../src/assistDocument/components/instruction/BackToInstructionsLink.tsx","../src/assistDocument/components/SelectedFieldContext.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 type {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 {type HTMLProps, useEffect} from 'react'\n\nimport type {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 type {ConnectorsStore} from './ConnectorsStore'\n\nexport const ConnectorsStoreContext = createContext<ConnectorsStore | null>(null)\n","import {useContext} from 'react'\n\nimport type {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 {type HTMLProps, useEffect, useState} from 'react'\n\nimport {ConnectorRegion} from './ConnectorRegion'\nimport type {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 type {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 {type ReactNode, useEffect, useMemo} from 'react'\n\nimport {type ConnectorsStore, createConnectorsStore} from './ConnectorsStore'\nimport {ConnectorsStoreContext} from './ConnectorsStoreContext'\nimport type {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 type {\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 type {\n PortableTextBlock,\n PortableTextMarkDefinition,\n PortableTextSpan,\n} from '@portabletext/types'\nimport type {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\nconst 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 compatibility */\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 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 {type Path, pathToString} from 'sanity'\n\nimport {documentRootKey, type StudioInstruction} from '../types'\n\nexport function usePathKey(path: Path | string) {\n return useMemo(() => {\n return getPathKey(path)\n }, [path])\n}\n\nfunction 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 type {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 // oxlint-disable-next-line no-unsafe-type-assertion\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 // oxlint-disable-next-line no-unsafe-type-assertion\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 type {ReferenceOptions, SchemaType} from 'sanity'\n\nimport type {AssistOptions} from '../schemas/typeDefExtensions'\nimport {isType} from './typeUtils'\n\nexport function isSchemaAssistEnabled(type: SchemaType) {\n // oxlint-disable-next-line no-unsafe-type-assertion\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 // oxlint-disable-next-line no-unsafe-type-assertion\n !(type?.options as ReferenceOptions)?.aiAssist?.embeddingsIndex) ||\n isType(type, 'crossDatasetReference') ||\n isType(type, 'file')\n )\n}\n","import {createContext, type PropsWithChildren, useMemo} from 'react'\nimport {type FieldMember, type ObjectInputProps, pathToString} from 'sanity'\n\nimport {isAssistSupported} from '../helpers/assistSupported'\n\nconst 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 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 // oxlint-disable-next-line no-unsafe-type-assertion\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 // oxlint-disable-next-line no-map-spread\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 // oxlint-disable-next-line no-map-spread\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 {type ObjectSchemaType, useCurrentUser} from 'sanity'\n\nimport {getInstructionTitle} from '../../helpers/misc'\nimport type {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 // oxlint-disable-next-line no-unsafe-type-assertion\n const documentId = (props.value as any)?._id as string | undefined\n if (!documentId) {\n return props.renderDefault(props)\n }\n\n // oxlint-disable-next-line no-unsafe-type-assertion\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 // oxlint-disable-next-line no-unsafe-type-assertion\n return {\n ...props.schemaType,\n type: {\n ...props.schemaType.type,\n // compatibility 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 {type DocumentInspector, type ObjectSchemaType, PatchEvent} from 'sanity'\n\nimport type {FieldRef} from '../assistInspector/helpers'\nimport type {InstructionTask, StudioAssistDocument} from '../types'\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, useContext} from 'react'\n\nimport type {FieldRef} from '../assistInspector/helpers'\nimport type {AssistPluginConfig} from '../plugin'\nimport type {SerializedSchemaType} from '../types'\nimport type {InstructStatus} 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 serializedTypes: SerializedSchemaType[]\n getFieldRefs: (documentType: string) => FieldRef[]\n getFieldRefsByTypePath: (documentType: string) => Record<string, FieldRef | undefined>\n}\n\n// oxlint-disable-next-line no-unsafe-type-assertion\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 useSerializedTypes() {\n return useAiAssistanceConfig().serializedTypes\n}\n","// oxlint-disable no-accumulating-spread\nimport {\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, 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 {useAiAssistanceConfig} from '../assistLayout/AiAssistanceConfigContext'\nimport {isAssistSupported} from '../helpers/assistSupported'\nimport {isPortableTextArray, isType} from '../helpers/typeUtils'\nimport {type AssistInspectorRouteParams, documentRootKey} 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\nfunction getTypeIcon(schemaType: SchemaType): ComponentType {\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 getDocumentFieldRef(schemaType: ObjectSchemaType): FieldRef {\n return {\n key: documentRootKey,\n icon: schemaType.icon ?? DocumentIcon,\n title: `The entire document`,\n path: [],\n schemaType: schemaType,\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 (\n schemaType.fields\n .filter((f) => !f.name.startsWith('_'))\n // oxlint-disable-next-line no-map-spread\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}\n\nfunction getSyntheticFields(schemaType: ArraySchemaType, parent?: FieldRef, depth = 0) {\n if (depth >= maxDepth) {\n return []\n }\n\n return (\n schemaType.of\n .filter((itemType) => !isType(itemType, 'block'))\n // oxlint-disable-next-line no-map-spread\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}\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 // oxlint-disable-next-line no-unsafe-type-assertion\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 {getFieldRefs} = useAiAssistanceConfig()\n\n const selectableFields = useMemo(\n () =>\n documentSchemaType && isObjectSchemaType(documentSchemaType)\n ? [getDocumentFieldRef(documentSchemaType), ...getFieldRefs(documentSchemaType.name)]\n : [],\n [documentSchemaType, getFieldRefs],\n )\n\n return useMemo(() => {\n return path ? selectableFields?.find((f) => f.key === path) : undefined\n }, [selectableFields, path])\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 type {SanityClient} from '@sanity/client'\nimport {useToast} from '@sanity/ui'\nimport {useCallback, useMemo, useState} from 'react'\nimport {type Path, pathToString, useClient, useCurrentUser} from 'sanity'\n\nimport {useAiAssistanceConfig, useSerializedTypes} from './assistLayout/AiAssistanceConfigContext'\nimport type {ConditionalMemberState} from './helpers/conditionalMembers'\nimport type {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 types = useSerializedTypes()\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 types = useSerializedTypes()\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 types = useSerializedTypes()\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 // oxlint-disable-next-line react-hooks-js/todo\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 types = useSerializedTypes()\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 {\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'\nimport {FormFieldHeaderText} from 'sanity'\n\nimport type {CustomInputResult, GetUserInput} from '../fieldActions/useUserInput'\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'\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\nconst 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\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 void 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 const {instruction, userInputBlocks: _, ...request} = runRequest\n void 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 // oxlint-disable-next-line react-hooks/exhaustive-deps\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\nfunction 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 // oxlint-disable-next-line no-deprecated\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 {type ObjectSchemaType, PatchEvent, type 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 // oxlint-disable-next-line react-hooks-js/set-state-in-effect\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, usePerspective, useSchema} from 'sanity'\nimport {useDocumentPane} from 'sanity/structure'\n\nimport {useAiPaneRouter} from '../../assistInspector/helpers'\nimport {useAiAssistanceConfig} from '../../assistLayout/AiAssistanceConfigContext'\nimport {fieldPathParam, type 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 {getFieldRefs, getFieldRefsByTypePath} = useAiAssistanceConfig()\n const documentSchemaType = useMemo(() => {\n // oxlint-disable-next-line no-unsafe-type-assertion\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 {fieldRefs, fieldRefsByTypePath} = useMemo(() => {\n return {\n fieldRefs: getFieldRefs(documentType),\n fieldRefsByTypePath: getFieldRefsByTypePath(documentType),\n }\n }, [getFieldRefs, getFieldRefsByTypePath, documentType])\n\n const {\n openInspector,\n closeInspector,\n inspector,\n onChange: documentOnChange,\n editState,\n } = useDocumentPane()\n const {selectedReleaseId} = usePerspective()\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 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 fieldRefs,\n fieldRefsByTypePath,\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 // oxlint-disable-next-line react-hooks-js/set-state-in-effect\n setSyntheticTasks([])\n }, [assistableDocumentId])\n\n return {\n syntheticTasks,\n addSyntheticTask,\n removeSyntheticTask,\n }\n}\n","import type {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 type {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 {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","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 // oxlint-disable-next-line no-unsafe-type-assertion\n return {\n [`--ai-avatar-stroke-color`]: purple[400].hex,\n [`--ai-avatar-disc-color`]: purple[600].hex,\n } as CSSProperties\n }\n\n // oxlint-disable-next-line no-unsafe-type-assertion\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","import {Card, Flex, Text, Tooltip} from '@sanity/ui'\nimport type {FormNodePresence} from 'sanity'\n\nimport {FadeInContent} from '../components/FadeInContent'\nimport {AssistAvatar} from './AssistAvatar'\n\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) && statusSegment && 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\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 {useMemo} from 'react'\nimport {type FieldProps, isArraySchemaType} from 'sanity'\n\nimport {assistFormId} from '../_lib/form/constants'\nimport {isAssistSupported} from '../helpers/assistSupported'\nimport {isPortableTextArray, isType} from '../helpers/typeUtils'\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\nfunction AssistField(props: FieldProps) {\n const isPortableText = useMemo(\n () => !!(isArraySchemaType(props.schemaType) && isPortableTextArray(props.schemaType)),\n [props.schemaType],\n )\n\n const presence = useAssistPresence(props.path, isPortableText)\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 </Flex>\n )\n\n return props.renderDefault({\n ...props,\n\n actions: props.actions,\n\n // Render presence in the internal slot (between presence and the field actions)\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 // oxlint-disable-next-line no-unsafe-type-assertion\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 {type 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 type {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 type {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\n// oxlint-disable-next-line no-deprecated\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 // oxlint-disable-next-line react-hooks-js/rule-suppression\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 // oxlint-disable-next-line no-unsafe-type-assertion\n value={formState.value as any}\n hasUpstreamVersion={false}\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","// oxlint-disable no-accumulating-spread\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 // oxlint-disable-next-line no-map-spread\n .map(({conditional: _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, // Use actual form state readOnly value\n hidden: false, // If it's in form state members, it's 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 : // oxlint-disable-next-line no-unsafe-type-assertion\n extractConditionalPaths(member.field as ObjectFormNode, maxDepth)\n return [...acc, conditionalState(member.field), ...innerFields]\n } else if (schemaType.jsonType === 'array') {\n // oxlint-disable-next-line no-unsafe-type-assertion\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 ? // oxlint-disable-next-line no-unsafe-type-assertion\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 // oxlint-disable-next-line no-unsafe-type-assertion\n const conditionalFieldset = !!(node as ObjectFormNode).schemaType?.fieldsets?.some(\n (f) => !f.single && f.name === member.fieldSet.name && typeof f.hidden === 'function',\n )\n // oxlint-disable-next-line no-map-spread\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 {useCallback, useState} from 'react'\n\nexport const inspectorOnboardingKey = 'sanityStudio:assist:inspector:onboarding:dismissed'\n\nfunction 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\nfunction 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 {SearchIcon} from '@sanity/icons'\nimport {Autocomplete, Box, Breadcrumbs, Card, Flex, Text} from '@sanity/ui'\nimport {useCallback, useMemo} from 'react'\nimport type {ObjectSchemaType} from 'sanity'\n\nimport {useAiAssistanceConfig} from '../assistLayout/AiAssistanceConfigContext'\nimport {isType} from '../helpers/typeUtils'\nimport {type FieldRef, getDocumentFieldRef} 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 {getFieldRefs} = useAiAssistanceConfig()\n\n const fieldRefs = useMemo(() => {\n const refs = getFieldRefs(schemaType.name)\n if (includeDocument) {\n return [getDocumentFieldRef(schemaType), ...refs]\n }\n return refs\n }, [schemaType, includeDocument, getFieldRefs])\n\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}>\n <field.icon />\n </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 {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 // oxlint-disable-next-line no-map-spread\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 // oxlint-disable-next-line no-deprecated\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 const TaskIcon = taskType ? taskType.icon : null\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 {TaskIcon && <TaskIcon />}\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 PerspectiveProvider,\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 →\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\nfunction 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 // oxlint-disable-next-line react-hooks-js/refs\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 // oxlint-disable-next-line no-unsafe-type-assertion\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 // oxlint-disable-next-line react-hooks-js/refs\n scrollElement={boundary.current}\n containerElement={boundary}\n >\n <PerspectiveProvider selectedPerspectiveName={undefined}>\n <DocumentPaneProvider\n paneKey={documentPane.paneKey}\n index={documentPane.index}\n itemId=\"ai\"\n pane={paneNode}\n >\n <DocumentForm />\n </DocumentPaneProvider>\n </PerspectiveProvider>\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 {type DocumentInspector, typed} from 'sanity'\n\nimport {pluginTitle} from '../constants'\nimport {type 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 // oxlint-disable-next-line no-unsafe-type-assertion\n params: typed<AssistInspectorRouteParams>({\n ...params,\n [fieldPathParam]: undefined,\n [instructionParam]: undefined,\n }) as typeof params,\n }\n },\n}\n","import type {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 type {ConnectorLine, ConnectorOptions} from '../../_lib/connector'\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","// oxlint-disable no-deprecated\nimport {rgba, useTheme} from '@sanity/ui'\nimport {useMemo} from 'react'\n\nimport {type ConnectorOptions, mapConnectorToLine, type 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 type {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 // oxlint-disable-next-line react-hooks-js/set-state-in-effect\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 type {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-es/get.js'\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","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 if (!value) return []\n try {\n // oxlint-disable-next-line no-unsafe-type-assertion\n return JSON.parse(value) as string[]\n } catch {\n return []\n }\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","// oxlint-disable no-accumulating-spread\nimport {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 === undefined || value === null) {\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 // oxlint-disable-next-line no-unsafe-type-assertion\n if ((arrayValue as any)?.length) {\n // oxlint-disable-next-line no-unsafe-type-assertion\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 // oxlint-disable-next-line no-unsafe-type-assertion\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 = pathEnd[0] && 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\nconst 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\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 void 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 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 {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 type ArraySchemaType,\n type ImageOptions,\n isArraySchemaType,\n type ObjectSchemaType,\n type ReferenceOptions,\n type ReferenceSchemaType,\n type Schema,\n type 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 type SerializedSchemaMember,\n type SerializedSchemaType,\n} from '../../types'\nimport {hiddenTypes} from './schemaUtils'\n\ninterface Options {\n leanFormat?: boolean\n}\n\n// oxlint-disable-next-line prefer-set-has\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 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 // oxlint-disable-next-line no-unsafe-type-assertion\n imagePromptField: (type.options as ImageOptions)?.aiAssist?.imageInstructionField,\n // oxlint-disable-next-line no-unsafe-type-assertion\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: 'to' in type && typeName === 'reference' ? refToTypeNames(type) : 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 {ObjectSchemaType} from 'sanity'\n\nimport {\n asFieldRefsByTypePath,\n type FieldRef,\n getFieldRefs as createFieldRefs,\n} from '../assistInspector/helpers'\n\nexport function createFieldRefCache() {\n const byType: Record<\n string,\n | {\n fieldRefs: FieldRef[]\n fieldRefsByTypePath: Record<string, FieldRef | undefined>\n }\n | undefined\n > = {}\n\n function getRefsForType(schemaType: ObjectSchemaType) {\n const documentType = schemaType.name\n const cached = byType[documentType]\n if (cached) return cached\n\n const fieldRefs = createFieldRefs(schemaType)\n const fieldRefsByTypePath = asFieldRefsByTypePath(fieldRefs)\n const refs = {\n fieldRefs,\n fieldRefsByTypePath,\n }\n byType[documentType] = refs\n return refs\n }\n\n return getRefsForType\n}\n","import {type ReactNode, useCallback, useEffect, useMemo, useState} from 'react'\nimport {type ObjectSchemaType, type Schema, useSchema} from 'sanity'\n\nimport type {AssistPluginConfig} from '../plugin'\nimport {serializeSchema} from '../schemas/serialize/serializeSchema'\nimport {\n type InstructStatus,\n useApiClient,\n useGetInstructStatus,\n useInitInstruct,\n} from '../useApiClient'\nimport {\n AiAssistanceConfigContext,\n type AiAssistanceConfigContextValue,\n} from './AiAssistanceConfigContext'\nimport {createFieldRefCache} from './fieldRefCache'\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 const schema = useSchema()\n const serializedTypes = useMemo(() => serializeSchema(schema, {leanFormat: true}), [schema])\n const {getFieldRefs, getFieldRefsByTypePath} = useFieldRefGetters(schema)\n\n useEffect(() => {\n getInstructStatus()\n .then((s) => setStatus(s))\n .catch((e) => {\n console.error(e)\n // oxlint-disable-next-line no-unsafe-type-assertion\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 // oxlint-disable-next-line no-unsafe-type-assertion\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 serializedTypes,\n getFieldRefs,\n getFieldRefsByTypePath,\n }\n }, [\n config,\n status,\n init,\n statusLoading,\n initLoading,\n error,\n serializedTypes,\n getFieldRefs,\n getFieldRefsByTypePath,\n ])\n\n return (\n <AiAssistanceConfigContext.Provider value={context}>\n {children}\n </AiAssistanceConfigContext.Provider>\n )\n}\n\nfunction useFieldRefGetters(schema: Schema) {\n return useMemo(() => {\n const getForSchemaType = createFieldRefCache()\n\n function getRefsForType(documentType: string) {\n // oxlint-disable-next-line no-unsafe-type-assertion\n const schemaType = schema.get(documentType) as ObjectSchemaType | undefined\n if (!schemaType) {\n throw new Error(`Schema type \"${documentType}\" not found`)\n }\n return getForSchemaType(schemaType)\n }\n\n return {\n getFieldRefs: (documentType: string) => getRefsForType(documentType).fieldRefs,\n getFieldRefsByTypePath: (documentType: string) =>\n getRefsForType(documentType).fieldRefsByTypePath,\n }\n }, [schema])\n}\n","import {ThemeProvider} from '@sanity/ui'\nimport {useState} from 'react'\nimport type {LayoutProps} from 'sanity'\n\nimport {type Connector, ConnectorsProvider} from '../_lib/connector'\nimport {AssistConnectorsOverlay} from '../assistConnectors'\nimport type {AssistPluginConfig} from '../plugin'\nimport {FieldTranslationProvider} from '../translate/FieldTranslationProvider'\nimport type {StudioInstruction} from '../types'\nimport type {RunInstructionRequest} from '../useApiClient'\nimport {AiAssistanceConfigProvider} from './AiAssistanceConfigProvider'\nimport {RunInstructionProvider} from './RunInstructionProvider'\n\nexport interface AIStudioLayoutProps extends LayoutProps {\n config: AssistPluginConfig\n}\n\nexport type RunInstructionArgs = Omit<RunInstructionRequest, 'instructionKey' | 'userTexts'> & {\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, usePerspective, useSyncState} from 'sanity'\nimport {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 // oxlint-disable-next-line no-unsafe-type-assertion\n const assetRef = (value as any)?.asset?._ref\n const {selectedReleaseId} = usePerspective()\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 // oxlint-disable-next-line react-hooks-js/set-state-in-effect\n setAssetRefState(assetRef)\n if (canUseAssist(status)) {\n void 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 {type ElementType, type ReactNode, useCallback, useId, useMemo} from 'react'\nimport {set, type 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 // oxlint-disable-next-line no-redundant-type-constituents\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 type {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","import {TranslateIcon} from '@sanity/icons'\nimport {Box, Spinner} from '@sanity/ui'\nimport {useMemo, useRef} from 'react'\nimport {\n type DocumentFieldAction,\n type DocumentFieldActionGroup,\n type DocumentFieldActionItem,\n type DocumentFieldActionProps,\n type 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 // oxlint-disable-next-line no-unsafe-type-assertion\n const options = fieldSchemaType?.options as AssistOptions | undefined\n const addFieldAction = isDocumentLevel || options?.aiAssist?.translateAction\n\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 const isActive = !!(documentSchemaType && (documentTranslationEnabled || fieldTransEnabled))\n\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 const translateDocumentAction = useMemo(() => {\n if (!isActive || !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 isActive,\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 isActive && 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 isActive,\n openFieldTranslation,\n documentSchemaType,\n documentId,\n fieldTranslate.translationLoading,\n fieldTransEnabled,\n path,\n readOnly,\n maxDepth,\n ],\n )\n\n return useMemo(() => {\n if (!isActive || !status?.initialized) {\n // oxlint-disable-next-line no-unsafe-type-assertion\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 }, [isActive, translateDocumentAction, translateFieldsAction, status])\n },\n}\n","// WHATWG crypto RNG - https://w3c.github.io/webcrypto/Overview.html\nfunction whatwgRNG(length = 16) {\n const rnds8 = new Uint8Array(length)\n crypto.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 type {AgentActionPath} from '@sanity/client/stega'\nimport {type ToastParams, useToast} from '@sanity/ui'\nimport {useMemo} from 'react'\nimport {\n type DocumentFieldActionDivider,\n type DocumentFieldActionGroup,\n type DocumentFieldActionItem,\n type DocumentFieldActionNode,\n type ObjectSchemaType,\n type Path,\n type SanityDocumentLike,\n type SchemaType,\n useWorkspaceSchemaId,\n} from 'sanity'\n\nimport {randomKey} from '../_lib/randomKey'\nimport {useAssistDocumentContext} from '../assistDocument/AssistDocumentContext'\nimport {useAiAssistanceConfig} from '../assistLayout/AiAssistanceConfigContext'\nimport {isDefined} from '../helpers/misc'\nimport {\n documentRootKey,\n fieldPresenceTypeName,\n type InstructionTask,\n instructionTaskTypeName,\n} from '../types'\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 // oxlint-disable-next-line react-hooks-js/hooks\n const configActions = fieldActions?.useFieldActions?.({\n ...props,\n schemaId,\n // oxlint-disable-next-line no-unsafe-type-assertion\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 // oxlint-disable-next-line react-hooks/exhaustive-deps\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 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 void runAction()\n },\n renderAsButton: false,\n selected: false,\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 const {assistableDocumentId} = useAssistDocumentContext()\n\n const isActive = !!imageContext && pathKey === imageContext?.imageDescriptionPath\n\n return useMemo(() => {\n if (!isActive || !imageContext) {\n // works but not supported by types\n // oxlint-disable-next-line no-unsafe-type-assertion\n return undefined as unknown as DocumentFieldActionItem\n }\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 // oxlint-disable-next-line no-unsafe-type-assertion\n [instructionParam]: undefined as any,\n })\n return\n }\n void generateCaption({path: pathKey, documentId: assistableDocumentId})\n },\n renderAsButton: true,\n disabled: loading,\n hidden: !imageContext.assetRef,\n })\n }, [\n isActive,\n imageContext,\n generateCaption,\n pathKey,\n assistableDocumentId,\n loading,\n status,\n openInspector,\n ])\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'\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 const {assistableDocumentId} = useAssistDocumentContext()\n\n const isActive = !!imageContext && pathKey === imageContext?.imageInstructionPath\n\n return useMemo(() => {\n if (!isActive) {\n // works but not supported by types\n // oxlint-disable-next-line no-unsafe-type-assertion\n return undefined as unknown as DocumentFieldActionItem\n }\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 void generateImage({path: pathKey, documentId: assistableDocumentId})\n },\n renderAsButton: true,\n disabled: loading,\n })\n }, [isActive, generateImage, pathKey, assistableDocumentId, loading])\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","import type {AgentActionPath} from '@sanity/client/stega'\nimport {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 {type AgentActionConditionalPath, useCustomFieldActions} from './customFieldActions'\nimport {generateCaptionsActions} from './generateCaptionActions'\nimport {generateImagActions} from './generateImageActions'\nimport {PrivateIcon} from './PrivateIcon'\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 // oxlint-disable-next-line no-unsafe-type-assertion\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 // oxlint-disable-next-line no-map-spread\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 // oxlint-disable-next-line no-unsafe-type-assertion\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 // oxlint-disable-next-line react-hooks-js/todo\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 // oxlint-disable-next-line no-unsafe-type-assertion\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 {createContext} from 'react'\nimport type {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 {Card, Stack, Text} from '@sanity/ui'\nimport {useContext, useEffect, useMemo, useRef} from 'react'\nimport {\n type FieldError,\n FormCallbacksProvider,\n type FormCallbacksValue,\n FormInput,\n insert,\n type KeyedSegment,\n MemberFieldError,\n type ObjectInputProps,\n type ObjectSchemaType,\n PatchEvent,\n type Path,\n type 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 type AssistDocument,\n type AssistField,\n assistFieldTypeName,\n type AssistInspectorRouteParams,\n documentRootKey,\n fieldPathParam,\n instructionParam,\n type StudioInstruction,\n} from '../../types'\nimport {AssistTypeContext} from './AssistTypeContext'\nimport {BackToInstructionListLink} from './instruction/BackToInstructionsLink'\nimport {SelectedFieldContextProvider, type 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 // oxlint-disable-next-line no-unsafe-type-assertion\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 // oxlint-disable-next-line no-unsafe-type-assertion\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 // oxlint-disable-next-line no-unsafe-type-assertion\n typed<AssistInspectorRouteParams>({\n ...params,\n // oxlint-disable-next-line no-unsafe-type-assertion\n [instructionParam]: (path[3] as KeyedSegment)?._key,\n }) as Record<keyof AssistInspectorRouteParams, string | undefined>,\n )\n } else {\n setTimeout(() => onPathOpen(path), 0)\n }\n },\n }),\n [formCallbacks, onPathOpen, params, setParams, instruction],\n )\n\n // When showing the instruction list (no specific instruction selected),\n // tell the form to focus on the field path to close any open modals\n useEffect(() => {\n if (activePath && !instruction) {\n onPathOpen(activePath)\n }\n }, [activePath, instruction, onPathOpen])\n\n const fieldError = useMemo(() => {\n const fieldError = props.members.find(\n (m): m is FieldError => m.kind === 'error' && m.fieldName === 'fields',\n )\n if (fieldError) {\n return <MemberFieldError member={fieldError} />\n }\n return undefined\n }, [props.members])\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 && !fieldError && (\n <FormCallbacksProvider {...newCallbacks}>\n <div style={{lineHeight: '1.25em'}}>\n <FormInput {...props} absolutePath={activePath} />\n </div>\n </FormCallbacksProvider>\n )}\n\n {fieldError}\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 type {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 // oxlint-disable-next-line no-unsafe-type-assertion\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 {/* oxlint-disable-next-line no-unsafe-type-assertion */}\n {actions as any}\n </Flex>\n )\n}\n","import type {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, type 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, type StringInputProps} from 'sanity'\n\nimport {FieldAutocomplete} from '../../../assistInspector/FieldAutocomplete'\nimport type {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 type {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 {type FieldError, type FieldMember, ObjectInputMember, type 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 type ArrayFieldProps,\n type ArraySchemaType,\n isArrayOfObjectsSchemaType,\n isObjectSchemaType,\n type 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 type ArrayOfObjectsInputProps,\n type ArraySchemaType,\n type FormPatch,\n insert,\n isArrayOfObjectsSchemaType,\n isObjectSchemaType,\n type ObjectSchemaType,\n PatchEvent,\n setIfMissing,\n typed,\n unset,\n} from 'sanity'\n\nimport {isAssistSupported} from '../../../helpers/assistSupported'\nimport {isType} from '../../../helpers/typeUtils'\nimport {type OutputFieldItem, outputFieldTypeName, type 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 // oxlint-disable-next-line no-unsafe-type-assertion\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 // oxlint-disable-next-line no-unsafe-type-assertion\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 // oxlint-disable-next-line no-unsafe-type-assertion\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 // oxlint-disable-next-line no-unsafe-type-assertion\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 {PromptBlock, PromptTextBlock} 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 // oxlint-disable-next-line no-unsafe-type-assertion\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],\n })\n })\n\n if (needsFix) {\n props.onChange(set(val))\n }\n // only run this once when loading the field\n // oxlint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n}\n","import type {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 {type ArrayOfObjectsInputProps, useCurrentUser} from 'sanity'\n\nimport type {StudioInstruction} from '../../types'\n\nexport function InstructionsArrayInput(props: ArrayOfObjectsInputProps) {\n const user = useCurrentUser()\n\n // oxlint-disable-next-line no-unsafe-type-assertion\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 // oxlint-disable-next-line no-unsafe-type-assertion\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 type {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 type IconSymbol,\n LockIcon,\n SparklesIcon,\n ThListIcon,\n} from '@sanity/icons'\nimport {Box, Flex, Stack, Text, Tooltip} from '@sanity/ui'\nimport {defineArrayMember, defineField, defineType, type 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 {createFieldRefCache} from '../assistLayout/fieldRefCache'\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 const getForSchemaType = createFieldRefCache()\n return 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 // oxlint-disable-next-line no-unsafe-type-assertion\n const {fieldRefs} = getForSchemaType(schema as ObjectSchemaType)\n const fieldRef = fieldRefs.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 ],\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._id',\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 // oxlint-disable-next-line no-unsafe-type-assertion\n icon: icon ? icons[icon as IconSymbol] : SparklesIcon,\n userId,\n }\n },\n },\n components: {\n input: InstructionInput,\n preview: (props: any) => {\n const Icon = props.icon\n return (\n <Flex gap={3} align=\"center\" padding={2}>\n {Icon && (\n <Box flex=\"none\">\n <Text size={1}>\n <Icon />\n </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 // oxlint-disable-next-line no-unsafe-type-assertion\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 // oxlint-disable-next-line no-unsafe-type-assertion\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","import type {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 // oxlint-disable-next-line no-unsafe-type-assertion\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 type {AssistConfig} from './assistTypes'\nimport {ImageContextProvider} from './components/ImageContext'\nimport {SafeValueInput} from './components/SafeValueInput'\nimport {packageName} from './constants'\nimport {assistFieldActions} from './fieldActions/assistFieldActions'\nimport type {AssistFieldActionNode, AssistFieldActionProps} from './fieldActions/customFieldActions'\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 type {TranslationConfig} from './translate/types'\nimport {assistDocumentTypeName, type AssistPreset} from './types'\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.temperature\\` must 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 // oxlint-disable-next-line no-unsafe-type-assertion\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 {exhaustMapToWithTrailing} from 'rxjs-exhaustmap-with-trailing'\nimport {filter, mergeMap, share, take} from 'rxjs/operators'\nimport type {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 // oxlint-disable-next-line no-unsafe-type-assertion\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 // oxlint-disable-next-line no-deprecated\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 {of} from 'rxjs'\nimport {catchError, distinctUntilChanged} from 'rxjs/operators'\nimport {type 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(true)\n setLoading(false)\n setData(null)\n\n return of(null)\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, type 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 // oxlint-disable-next-line no-await-in-loop, no-unsafe-type-assertion, await-thenable\n await transaction.createOrReplace(type as Required<typeof type>)\n if (i > 0 && i % 50 === 0) {\n // oxlint-disable-next-line no-await-in-loop\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":["hasOverflowScroll","el","overflow","getComputedStyle","includes","useRegionRects","$","_c","ref","useRef","relativeBoundsRect","setRelativeBoundsRect","useState","relativeElementRect","setRelativeElementRect","t0","for","x","y","boundsScroll","setBoundsScroll","t1","scroll","setScroll","boundsScrollXRef","boundsScrollYRef","elementScrollXRef","elementScrollYRef","t2","t3","Symbol","current","scrollParents","parent","parentElement","document","body","push","handleResize","boundsRect","getBoundingClientRect","width","window","innerWidth","height","innerHeight","domRect","w","h","handleScroll","scrollX","scrollY","scrollParent_0","scrollParent","scrollLeft","scrollTop","scrollParent_1","addEventListener","passive","ro","ResizeObserver","observe","scrollParent_2","unobserve","scrollParent_3","removeEventListener","disconnect","useEffect","t4","bounds","t5","element","t6","ConnectorRegion","props","children","onRectsChange","restProps","ConnectorsStoreContext","createContext","useConnectorsStore","store","useContext","Error","ConnectFromRegion","key","zIndex","_key","rects","setRects","from","subscribe","next","createConnectorsStore","configKeys","fieldKeys","channels","Map","to","payloads","observers","notifyObservers","connectors","toRects","get","toPayload","fromRects","fromPayload","payload","observer","set","delete","idx","indexOf","splice","ConnectorsProvider","onConnectorsChange","getConnectorLinePoint","options","rect","centerY","isAbove","arrow","marginY","isBelow","startY","path","endY","outOfBounds","mapConnectorToLine","connector","fromBounds","threshold","fromBottom","toBounds","toBottom","maxStartY","Math","max","min","assistFormId","assistDocumentIdPrefix","assistDocumentStatusIdPrefix","assistSchemaIdPrefix","assistDocumentTypeName","assistFieldTypeName","instructionTypeName","promptTypeName","userInputTypeName","instructionContextTypeName","fieldReferenceTypeName","contextDocumentTypeName","assistTasksStatusTypeName","instructionTaskTypeName","fieldPresenceTypeName","assistSerializedTypeName","assistSerializedFieldTypeName","outputFieldTypeName","outputTypeTypeName","fieldPathParam","instructionParam","documentRootKey","usePathKey","getPathKey","length","Array","isArray","pathToString","getInstructionTitle","instruction","title","isDefined","t","isPortableTextArray","type","of","find","isType","schemaType","typeName","name","isImage","getDescriptionFieldOption","descriptionField","aiAssist","imageDescriptionField","updateOnImageChange","getImageInstructionFieldOption","imageInstructionField","isSchemaAssistEnabled","exclude","isAssistSupported","isDisabled","jsonType","every","fields","field","isUnsupportedType","embeddingsIndex","FirstAssistedPathContext","undefined","FirstAssistedPathProvider","members","firstAssisted","_temp","firstAssistedPath","member","kind","releaseAnnouncementUrl","instructionGuideUrl","giveFeedbackUrl","salesUrl","packageName","pluginTitle","pluginTitleShort","maxHistoryVisibilityMs","minutesToMilliseconds","illegalIdChars","assistDocumentId","documentType","replace","assistTasksStatusId","documentId","isVersionId","getVersionFromId","getPublishedId","useDocumentState","id","docType","state","useEditState","draft","published","useStudioAssistDocument","initDoc","documentTypeName","currentUser","useCurrentUser","assistDocument","assistTasksStatus","apiVersion","client","useClient","createIfNotExists","_id","_type","catch","t7","bb0","t8","tasks","map","assistField","filter","task","instructions","p","userId","asStudioInstruction","typed","task_0","instruction_0","f","i","instructionKey","run","started","Date","getTime","NO_TASKS","useInstructionToaster","documentSchemaType","assistDocLoaded","toast","useToast","previousTasks","prevTaskByKey","Object","fromEntries","startedByUserId","prevTask","ended","_temp2","forEach","task_2","reason","status","description","message","closable","duration","task_1","isAfter","addSeconds","AssistDocumentInputWrapper","value","renderDefault","AssistDocumentInput","AssistInput","useLayer","paneKey","useDocumentPane","pathKey","minWidth","AssistDocumentContext","useAssistDocumentContext","context","AiAssistanceConfigContext","useAiAssistanceConfig","useSerializedTypes","serializedTypes","maxDepth","getTypeIcon","icon","LinkIcon","ImageIcon","BlockContentIcon","OlistIcon","BlockquoteIcon","StringIcon","DocumentIcon","asFieldRefsByTypePath","fieldRefs","reduce","acc","getDocumentFieldRef","getFieldRefs","depth","startsWith","flatMap","fieldRef","patchableKey","join","syntheticFields","getSyntheticFields","itemType","segment","synthetic","getTypePath","doc","pathString","stringToPath","currentPath","valid","syntheticPath","isKeySegment","match","extractWithPath","useTypePath","useSelectedField","isObjectSchemaType","selectableFields","getFieldTitle","useAiPaneRouter","paneRouter","usePaneRouter","params","basePath","API_VERSION_WITH_EXTENDED_TYPES","canUseAssist","enabled","initialized","validToken","useApiClient","customApiClient","useTranslate","apiClient","loading","setLoading","user","types","languagePath","styleguide","translatePath","fieldLanguageMap","conditionalMembers","request","method","url","config","dataset","projectId","userStyleguide","e","finally","setTimeout","translate","useGenerateCaption","generateCaption","useGenerateImage","generateImage","useGetInstructStatus","getInstructStatus","useCallback","useInitInstruct","initInstruct","useRunInstructionApi","assist","assistConfig","timeZone","locale","Intl","DateTimeFormat","resolvedOptions","defaultLocaleSettings","localeSettings","defaultSettings","maxPathDepth","runInstruction","NO_INPUT","RunInstructionContext","getUserInput","instructionLoading","useRunInstruction","isUserInputBlock","block","RunInstructionProvider","__customApiClient","runInstructionRequest","useId","inputs","setInputs","runRequest","setRunRequest","resolveUserInput","setResolveUserInput","inputs_0","userInputBlocks","dialogTitle","Promise","resolve","req","userInputBlocks_0","prompt","userTexts","close","_","request_0","entries","_temp3","userInputs","values","input_0","i_0","userInputBlock","input","result","runWithInput","open","_temp4","runDisabled","PlayIcon","runButton","contextValue","block_0","i_1","t9","value_0","blockKey","userInput","UserInput","autoFocus","textAreaRef","currentTarget","target","onChange","focus","resize","isDocAssistable","liveEdit","useRequestRunInstruction","args","requestRunInstruction","useDraftDelayedTask","documentOnChange","queuedArgs","setQueuedArgs","taskArgs","PatchEvent","unset","useAssistDocumentContextValue","schema","useSchema","getFieldRefsByTypePath","fieldRefsByTypePath","openInspector","closeInspector","inspector","editState","selectedReleaseId","usePerspective","version","getVersionId","getDraftId","assistableDocumentId","documentIsNew","documentIsAssistable","selectedPath","syntheticTasks","addSyntheticTask","removeSyntheticTask","useSyntheticTasks","t10","base","t11","setSyntheticTasks","current_0","AssistDocumentContextProvider","AssistDocumentLayout","fadeIn","keyframes","FadeInDiv","styled","div","withConfig","displayName","componentId","FadeInContent","forwardRef","durationMs","animationDuration","Root","span","dash","Outline","svg","IconDisc","AssistAvatar","scheme","useColorSchemeValue","style","useMemo","purple","hex","color","AiFieldPresence","_props","position","background","NO_PRESENCE","useAssistPresence","showFocusWithin","activePresence","presence","statusPath","pathSegment","statusSegment","aiPresence","_title","sessionId","lastActiveAt","toISOString","AssistFieldWrapper","inputId","AssistField","isArraySchemaType","isPortableText","singlePresence","actions","__internal_slot","WrapPreCard","Card","SafeValueInput","ErrorWrapper","error","setError","catchError","unsetValue","dismiss","catcher","PteValueFixer","AssistFormBlock","useFormCallbacks","patchEvent","prefixAll","localOnChange","InlineBlockValueContext","AssistInlineFormBlock","AssistItem","pre","right","preventDefault","ev","DocumentForm","collapsedFieldSets","collapsedPaths","displayed","formState","onBlur","onFocus","onPathOpen","onSetActiveFieldGroup","onSetCollapsedFieldSet","onSetCollapsedPath","ready","validation","documentStore","useDocumentStore","useDocumentPresence","patchChannel","createPatchChannel","isLocked","transactionSyncLock","sub","pair","documentEvents","pipe","tap","event","publish","prepareMutationEvent","prepareRebaseEvent","unsubscribe","hasRev","Boolean","_rev","patches","snapshot","formRef","focusFirstDescendant","focusPath","changed","focused","groups","readOnly","mutations","mut","patch","fromMutationPatches","origin","remotePatches","remoteMutations","localPatches","localMutations","concat","AssistTypeContext","DEFAULT_MAX_DEPTH","ABSOLUTE_MAX_DEPTH","getConditionalMembers","docState","hidden","conditional","isConditional","extractConditionalPaths","v","_conditional","conditionalState","memberState","node","innerFields","array","arrayPaths","isObjectsArray","some","m","item","arrayMember","conditionalFieldset","fieldsets","single","fieldSet","SparklesIllustration","SparklesIcon","strokeWidth","InspectorOnboarding","onDismiss","textAlign","inspectorOnboardingKey","isFeatureOnboardingDismissed","featureKey","localStorage","getItem","dismissFeatureOnboarding","setItem","useOnboardingFeature","showOnboarding","setShowOnboarding","dismissOnboarding","FieldAutocomplete","fieldPath","onSelect","includeDocument","refs","currentField","autocompleteOptions","renderOption","renderValue","filterOption","_temp5","SearchIcon","query","option_1","lQuery","toLowerCase","option","option_0","field_1","field_0","f_0","FieldTitle","T0","T1","splitTitle","split","Box","Breadcrumbs","display","flexWrap","alignItems","marginTop","slice","_temp6","pt","trim","useInterval","ms","tick","update","useReducer","setInterval","clearInterval","n","TimeAgo","date","formatDistanceToNow","timeSince","rotate","SyncSpinningIcon","SyncIcon","TASK_CONFIG","aborted","CloseCircleIcon","tone","ErrorOutlineIcon","success","CheckmarkCircleIcon","timeout","ClockIcon","InstructionTaskHistoryButton","showTitles","cancelRun","taskKey","statusDocId","commit","console","titledTasks","cancel","sort","a","b","isRunning","r","hasErrors","setOpen","toggleOpen","button","setButton","popover","setPopover","handleClickOutside","useClickOutside","handleEscape","TASK_STATUS_BUTTON_TOOLTIP_PROPS","placement","TaskStatusButton","disabled","onClick","selected","TaskList","onEscape","isTopLayer","useGlobalKeyDown","TaskItem","taskType","TaskIcon","t12","t13","t14","CardWithShadowBelow","CardWithShadowAbove","AssistInspectorWrapper","statusLoading","onClose","initLoading","RetryIcon","init","AssistInspector","boundary","documentPane","docValue","formStateRef","typePath","selectedField","aiDocId","promptValue","isEmptyPrompt","text","paneNode","runCurrentInstruction","Region","flex","assistTypeContext","lineHeight","minHeight","index","whiteSpace","justifySelf","AiInspectorHeader","fieldTitle","CloseIcon","aiInspectorId","assistInspector","useMenuItem","showAsAction","component","arrowPath","dir","size","moveTo","lineTo","strings","delim","quadCurve","x1","y1","drawConnectorPath","line","cornerRadius","fromX","fromY","_toX","toY","toX","dividerX","divider","offsetX","fromPathX","marginX","r0","abs","r1","cmds","ConnectorPath","theme","useTheme","sanity","bg","border","rgba","DEBUG","AssistConnectorsOverlay","setRedraw","top","left","pointerEvents","validateStyleguide","createStyleGuideResolver","styleguideResult","getLanguageParams","select","selection","selectedValue","toFieldLanguagesKeyPrefix","getPreferredToFieldLanguages","fromLanguageId","JSON","parse","setPreferredToFieldLanguages","languageIds","stringify","getDocumentMembersFlat","isDocumentSchemaType","extractPaths","fieldSchema","thisFieldWithPath","arrayValue","itemPath","itemSchema","warn","defaultLanguageOutputs","enclosingType","translateFromLanguageId","translateToLanguageIds","pathEnd","translateToId","outputPath","getFieldLanguageMap","documentSchema","documentMembers","outputLanguageIds","langFn","translationMaps","parentPath","translations","translation","inputLanguageId","inputPath","outputs","FieldTranslationContext","openFieldTranslation","translationLoading","useFieldTranslation","hasValuesToTranslate","fieldLanguageMaps","fromLanguage","FieldTranslationProvider","runTranslate","dialogOpen","setDialogOpen","fieldTranslationParams","setFieldTranslationParams","languages","setLanguages","setFromLanguage","toLanguages","setToLanguages","setFieldLanguageMaps","languageClient","translationOutputs","languages_0","preferred","allToLanguages","l","filteredToLanguages","l_0","fromId","allToIds","docMembers","transMap","toId","selectFromLanguage","toggledLang","toLanguages_0","languages_1","wasSelected","l_2","newToLangs","anyLang","selectedLang","toggleToLanguage","params_0","languageParams","selectLanguageParams","languages_2","fromLanguage_0","out","l_4","onRunTranslation","radioLanguage","checkboxLanguage","l_3","l_1","ToLanguageCheckbox","langId","opacity","tl","FromLanguageRadio","hiddenTypes","inlineTypes","serializeSchema","list","getTypeNames","getSchemaStub","localeCompare","baseSchema","leanFormat","getBaseFields","removeUndef","schemaOptions","imagePromptField","keys","arrayOf","refToTypeNames","serializeFields","annotations","serializeAnnotations","inlineOf","serializeInlineOf","fs","serializeMember","blockSchemaType","childrenType","marksType","arrayType","obj","createFieldRefCache","byType","getRefsForType","cached","createFieldRefs","AiAssistanceConfigProvider","setStatus","useFieldRefGetters","then","s","status_0","getForSchemaType","documentType_0","documentType_1","AssistLayout","setConnectors","ImageContext","ImageContextProvider","assetRef","asset","_ref","assetRefState","setAssetRefState","isSyncing","useSyncState","isShowingOlderRevision","rev","descriptionField_0","imageDescriptionPath","imageInstructionPath","IconInput","icons","items","getIcon","selectedIcon","maxHeight","portal","IconItem","iconKey","iconName","sparkles","useAssistSupported","_path","translateActions","useAction","fieldSchemaType","isDocumentLevel","docTransTypes","documentTypes","addFieldAction","translateAction","fieldTransEnabled","documentTranslationEnabled","isActive","documentValue","docRef","translationApi","languageField","translateDocumentAction","transform","TranslateIcon","onAction","renderAsButton","fieldTranslate","translateFieldsAction","c","expanded","whatwgRNG","rnds8","Uint8Array","crypto","getRandomValues","getByteHexTable","table","toString","substring","randomKey","str","defineAssistFieldAction","action","defineFieldActionDivider","defineAssistFieldActionGroup","group","useCustomFieldActions","fieldActions","schemaId","useWorkspaceSchemaId","pushToast","configActions","useFieldActions","customActions","createSafeNode","onlyGroups","createSafeAction","child","runAction","actionResult","err","generateCaptionsActions","imageContext","generateImagActions","PrivateIcon","assistFieldActions","docValueRef","isHidden","isSelectable","assistSupported","fieldAssist","fieldAssistKey","isSelected","imageCaptionAction","imageGenAction","manageInstructions","onInstructionAction","privateInstructions","sharedInstructions","runInstructionsGroup","instructionItem","isPrivate","getDocumentValue","getConditionalPaths","cm","parentSchemaType","actionType","documentIdForAction","manageInstructionsItem","ControlsIcon","emptyAction","iconRight","createAssistDocumentPresence","AssistDocumentPresence","anyPresence","anyRun","BackToInstructionListLink","goBack","ArrowLeftIcon","SelectedFieldContext","SelectedFieldContextProvider","Provider","EMPTY_FIELDS","AssistDocumentForm","AssistDocumentFormEditable","setParams","targetDocumentType","activeKey","bb1","activePath","bb2","useSelectedSchema","formCallbacks","newCallbacks","bb3","fieldError","fieldError_0","t15","t16","t17","t18","fieldName","currentSchema","FieldsInitializer","__presets","presets","existingField","documentPresets","existingInstructions","ei","missingPresetInstructions","setIfMissing","append","insert","preset","markDefs","FieldRefPreview","HiddenFieldTitle","level","InstructionVisibility","newValue","handleChange","margin","elementProps","FieldRefPathInput","querySelector","fieldSegments","lastArrayItemIndex","findLastIndex","mustStartWith","findFieldMember","findFieldsetMember","fieldsetName","InstructionInput","ObjectMember","NONE","NameField","fieldsetMember","titleId","iconMember","titleMember","placeholder","moddedTitleMember","marginLeft","ShareField","visibilityMember","InstructionOutputField","isArrayOfObjectsSchemaType","EnabledOutputField","onExpand","onCollapse","collapsible","collapsed","InstructionOutputInput","useEmptySelectAllValue","allowedValues","validValues","relativePath","valueLength","validLength","ObjectOutputInput","checked","patchValue","onSelectChange","ArrayOutputInput","ofItems","itemType_0","Selectable","cursor","PteMods","PromptInput","useOnlyInlineBlocks","needsFix","val","InstructionsArrayField","InstructionsArrayInput","originalValue","originalMembers","v_0","HideReferenceChangedBannerInput","closest","createElement","parentId","random","innerText","prepend","contextDocumentSchema","defineType","TokenIcon","components","defineField","defineArrayMember","styles","lists","marks","decorators","preview","prepare","words","subtitle","media","DocumentTextIcon","fieldReference","ThListIcon","rule","custom","docId","targetDocType","RegExp","CodeIcon","modal","ComposeIcon","required","rows","promptContext","maxWidth","outputFieldType","outputTypeType","Icon","fieldset","initialValue","_params","createdById","fieldInstructions","assistDocumentSchema","instructionTask","documentInstructionStatus","excludeComments","existingRender","newProps","__internal_comments","arrayItemType","instructionForm","schemaTypes","definePlugin","configWithDefaults","temperature","handlesGDR","i18n","bundles","inspectors","prev","docSchema","unstable_fieldActions","unstable_languageFilter","unstable_layout","studio","layout","form","inlineBlock","plugins","fetch","defer","observable","tag","filterResponse","listen","events","includeResult","visibility","isWelcomeEvent","listenQuery","fetchQuery","listenerQuery","fetchOnce$","events$","mergeMap","throwError","share","welcome$","mutationAndReconnect$","partition","isRelevantEvent","transitions","transition","merge","take","switchMap","delay","throttleTime","exhaustMapToWithTrailing","DEFAULT_PARAMS","DEFAULT_OPTIONS","useListeningQuery","data","setData","subscription","distinctUntilChanged","isEqual","documents","NO_DATA","defaultTitle","SchemaTypeTool","saving","setSaving","syncTitle","setSyncTitle","canSave","transaction","createOrReplace","reset","storeTypes","type_1","type_0","SchemaEntry","schemaStub","useUserInput"],"mappings":";;;;;;;;;;;;;;;;AAAO,SAASA,kBAAkBC,IAA0B;AAC1D,QAAMC,WAAWC,iBAAiBF,EAAE,EAAEC;AAEtC,SAAOA,SAASE,SAAS,MAAM,KAAKF,SAASE,SAAS,QAAQ,KAAKF,SAASE,SAAS,QAAQ;AAC/F;ACCO,SAAAC,iBAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACLC,MAAYC,OAAuB,IAAI,GAEvC,CAAAC,oBAAAC,qBAAA,IAAoDC,SAAsB,IAAI,GAC9E,CAAAC,qBAAAC,sBAAA,IAAsDF,SAAsB,IAAI;AAAC,MAAAG;AAAAT,IAAA,CAAA,6BAAAU,IAAA,2BAAA,KACxBD,KAAA;AAAA,IAAAE,GAAI;AAAA,IAACC,GAAK;AAAA,EAAA,GAAEZ,OAAAS,MAAAA,KAAAT,EAAA,CAAA;AAArE,QAAA,CAAAa,cAAAC,eAAA,IAAwCR,SAAiBG,EAAY;AAAC,MAAAM;AAAAf,IAAA,CAAA,6BAAAU,IAAA,2BAAA,KACzBK,KAAA;AAAA,IAAAJ,GAAI;AAAA,IAACC,GAAK;AAAA,EAAA,GAAEZ,OAAAe,MAAAA,KAAAf,EAAA,CAAA;AAAzD,QAAA,CAAAgB,QAAAC,SAAA,IAA4BX,SAAiBS,EAAY,GAEzDG,mBAAyBf,OAAO,CAAC,GACjCgB,mBAAyBhB,OAAO,CAAC,GAEjCiB,oBAA0BjB,OAAO,CAAC,GAClCkB,oBAA0BlB,OAAO,CAAC;AAAC,MAAAmB,IAAAC;AAAAvB,IAAA,CAAA,MAAAwB,uBAAAd,IAAA,2BAAA,KAEzBY,KAAAA,MAAA;AACR,UAAA3B,KAAWO,IAAGuB;AAEd,QAAI,CAAC9B;AAAE;AAEP,UAAA+B,gBAAqC,CAAA;AACrC,QAAAC,SAAahC,GAAEiC;AAEf,WAAOD,UAAUA,WAAWE,SAAQC;AAEhCpC,wBAAkBiC,MAAM,KAGxBD,cAAaK,KAAMJ,MAAM,GAG3BA,SAASA,OAAMC;AAGjB,UAAAI,0BAAA;AAGE,YAAAC,aAFqBP,cAAa,CAAA,GAEHQ,2BAAZ;AAAA,QAAAvB,GACd;AAAA,QAACC,GACD;AAAA,QAACuB,OACGC,OAAMC;AAAAA,QAAWC,QAChBF,OAAMG;AAAAA,MAAAA,GAGhBC,UAAgB7C,GAAEuC,sBAAAA;AAElB7B,4BAAsB;AAAA,QAAAM,GACjBsB,WAAUtB,IAAKO,iBAAgBO;AAAAA,QAAQb,GACvCqB,WAAUrB,IAAKO,iBAAgBM;AAAAA,QAAQgB,GACvCR,WAAUE;AAAAA,QAAMO,GAChBT,WAAUK;AAAAA,MAAAA,CACd,GAED9B,uBAAuB;AAAA,QAAAG,GAClB6B,QAAO7B,IAAKS,kBAAiBK;AAAAA,QAAQb,GACrC4B,QAAO5B,IAAKS,kBAAiBI;AAAAA,QAAQgB,GACrCD,QAAOL;AAAAA,QAAMO,GACbF,QAAOF;AAAAA,MAAAA,CACX;AAAA,IAAC,GAGJK,0BAAA;AACE,UAAAC,UAAcR,OAAMQ,SACpBC,UAAcT,OAAMS;AAEpB,iBAAKC,kBAAsBpB;AACzBkB,kBAAAA,UAAWG,eAAYC,YACvBH,UAAAA,UAAWE,eAAYE;AAGzB,YAAAC,iBAAqBxB,cAAa,CAAA;AAElCR,uBAAgBO,UAAWmB,WAAWG,gBAAYC,cAAgBZ,OAAMQ,UAExEzB,iBAAgBM,UAAWoB,WAAWE,gBAAYE,aAAeb,OAAMS,UAEvE/B,gBAAgB;AAAA,QAAAH,GACXO,iBAAgBO;AAAAA,QAAQb,GACxBO,iBAAgBM;AAAAA,MAAAA,CACpB,GAEDL,kBAAiBK,UAAWmB,SAC5BvB,kBAAiBI,UAAWoB,SAE5B5B,UAAU;AAAA,QAAAN,GAAIiC;AAAAA,QAAOhC,GAAKiC;AAAAA,MAAAA,CAAQ;AAAA,IAAC;AAGrCT,WAAMe,iBAAkB,UAAUR,cAAc;AAAA,MAAAS,SAAU;AAAA,IAAA,CAAK;AAE/D,UAAAC,KAAW,IAAIC,eAAetB,YAAY;AAE1CqB,OAAEE,QAAS5D,EAAE;AAEb,eAAK6D,kBAAsB9B;AACzBqB,qBAAYI,iBAAkB,UAAUR,cAAc;AAAA,QAAAS,SAAU;AAAA,MAAA,CAAK,GACrEC,GAAEE,QAASR,cAAY;AAGzBJ,WAAAA,aAAAA,GAEO,MAAA;AACLU,SAAEI,UAAW9D,EAAE;AAEf,iBAAK+D,kBAAsBhC;AACzB2B,WAAEI,UAAWV,cAAY,GACzBA,eAAYY,oBAAqB,UAAUhB,YAAY;AAGzDU,SAAEO,WAAAA,GAEFxB,OAAMuB,oBAAqB,UAAUhB,YAAY;AAAA,IAAC;AAAA,EACnD,GACApB,KAAA,CAAA,GAAEvB,OAAAsB,IAAAtB,OAAAuB,OAAAD,KAAAtB,EAAA,CAAA,GAAAuB,KAAAvB,EAAA,CAAA,IAjGL6D,UAAUvC,IAiGPC,EAAE;AAAC,MAAAuC;AAAA9D,IAAA,CAAA,MAAAa,gBAAAb,SAAAI,sBAIF0D,KAAA1D,sBAAA;AAAA,IAAAO,GACKP,mBAAkBO,IAAKE,aAAYF;AAAAA,IAAEC,GACrCR,mBAAkBQ,IAAKC,aAAYD;AAAAA,IAAE6B,GACrCrC,mBAAkBqC;AAAAA,IAAEC,GACpBtC,mBAAkBsC;AAAAA,EAAAA,GACtB1C,OAAAa,cAAAb,OAAAI,oBAAAJ,OAAA8D,MAAAA,KAAA9D,EAAA,CAAA;AAPL,QAAA+D,SAEID;AAOH,MAAAE;AAAAhE,IAAA,CAAA,MAAAO,uBAAAP,SAAAgB,UAIGgD,KAAAzD,uBAAA;AAAA,IAAAI,GACKJ,oBAAmBI,IAAKK,OAAML;AAAAA,IAAEC,GAChCL,oBAAmBK,IAAKI,OAAMJ;AAAAA,IAAE6B,GAChClC,oBAAmBkC;AAAAA,IAAEC,GACrBnC,oBAAmBmC;AAAAA,EAAAA,GACvB1C,OAAAO,qBAAAP,OAAAgB,QAAAhB,OAAAgE,MAAAA,KAAAhE,EAAA,CAAA;AAPL,QAAAiE,UAEID;AAOH,MAAAE;AAAA,SAAAlE,EAAA,EAAA,MAAA+D,UAAA/D,UAAAiE,WAEMC,KAAA;AAAA,IAAAH;AAAAA,IAAAE;AAAAA,IAAA/D;AAAAA,EAAAA,GAAsBF,QAAA+D,QAAA/D,QAAAiE,SAAAjE,QAAAkE,MAAAA,KAAAlE,EAAA,EAAA,GAAtBkE;AAAsB;ACvIxB,SAAAC,gBAAAC,OAAA;AAAA,QAAApE,IAAAC,EAAA,EAAA;AAAA,MAAAoE,UAAAC,eAAAC;AAAAvE,WAAAoE,SAKL;AAAA,IAAAC;AAAAA,IAAAC;AAAAA,IAAA,GAAAC;AAAAA,EAAAA,IAAgDH,OAAKpE,OAAAoE,OAAApE,OAAAqE,UAAArE,OAAAsE,eAAAtE,OAAAuE,cAAAF,WAAArE,EAAA,CAAA,GAAAsE,gBAAAtE,EAAA,CAAA,GAAAuE,YAAAvE,EAAA,CAAA;AAErD,QAAA;AAAA,IAAA+D;AAAAA,IAAAE;AAAAA,IAAA/D;AAAAA,EAAAA,IAA+BH,eAAAA;AAAgB,MAAAU,IAAAM;AAAAf,IAAA,CAAA,MAAA+D,UAAA/D,SAAAiE,WAAAjE,EAAA,CAAA,MAAAsE,iBAErC7D,KAAAA,MAAA;AACR6D,oBAAgBP,UAAAE,UAAA;AAAA,MAAAF;AAAAA,MAAAE;AAAAA,IAAAA,IAAA,IAA4C;AAAA,EAAC,GAC5DlD,MAACgD,QAAQE,SAASK,aAAa,GAACtE,OAAA+D,QAAA/D,OAAAiE,SAAAjE,OAAAsE,eAAAtE,OAAAS,IAAAT,OAAAe,OAAAN,KAAAT,EAAA,CAAA,GAAAe,KAAAf,EAAA,CAAA,IAFnC6D,UAAUpD,IAEPM,EAAgC;AAAC,MAAAO;AAAA,SAAAtB,EAAA,CAAA,MAAAqE,YAAArE,UAAAE,OAAAF,EAAA,EAAA,MAAAuE,aAGlCjD,yBAAA,OAAA,EAEM,GAFGiD,WAAgBrE,KACtBmE,SAAAA,CACH,GAAMrE,OAAAqE,UAAArE,QAAAE,KAAAF,QAAAuE,WAAAvE,QAAAsB,MAAAA,KAAAtB,EAAA,EAAA,GAFNsB;AAEM;ACjBH,MAAMkD,yBAAyBC,cAAsC,IAAI;ACCzE,SAAAC,qBAAA;AACL,QAAAC,QAAcC,WAAWJ,sBAAsB;AAE/C,MAAI,CAACG;AACH,UAAM,IAAIE,MAAM,kCAAkC;AACnD,SAEMF;AAAK;ACNP,SAAAG,kBAAAV,OAAA;AAAA,QAAApE,IAAAC,EAAA,EAAA;AAAA,MAAAoE,UAAAU,KAAAR,WAAAS;AAAAhF,WAAAoE,SAGL;AAAA,IAAAC;AAAAA,IAAAY,MAAAF;AAAAA,IAAAC;AAAAA,IAAA,GAAAT;AAAAA,EAAAA,IAAoDH,OAAKpE,OAAAoE,OAAApE,OAAAqE,UAAArE,OAAA+E,KAAA/E,OAAAuE,WAAAvE,OAAAgF,WAAAX,WAAArE,EAAA,CAAA,GAAA+E,MAAA/E,EAAA,CAAA,GAAAuE,YAAAvE,EAAA,CAAA,GAAAgF,SAAAhF,EAAA,CAAA;AACzD,QAAA2E,QAAcD,sBACd,CAAAQ,OAAAC,QAAA,IAA0B7E,SAAsC,IAAI;AAAC,MAAAG;AAAAT,IAAA,CAAA,MAAA+E,OAAA/E,EAAA,CAAA,MAAA2E,MAAAS,QAAApF,EAAA,CAAA,MAAAgF,UAE3DvE,KAAAA,MAAMkE,MAAKS,KAAKC,UAAWN,KAAK;AAAA,IAAAC;AAAAA,EAAAA,CAAQ,GAAChF,OAAA+E,KAAA/E,EAAA,CAAA,IAAA2E,MAAAS,MAAApF,OAAAgF,QAAAhF,OAAAS,MAAAA,KAAAT,EAAA,CAAA;AAAA,MAAAe;AAAAf,IAAA,CAAA,MAAA+E,OAAA/E,UAAA2E,SAAA3E,EAAA,EAAA,MAAAgF,UAAEjE,MAACgE,KAAKJ,OAAOK,MAAM,GAAChF,OAAA+E,KAAA/E,QAAA2E,OAAA3E,QAAAgF,QAAAhF,QAAAe,MAAAA,KAAAf,EAAA,EAAA,GAAzE6D,UAAUpD,IAA2CM,EAAoB;AAAC,MAAAO;AAAAtB,IAAA,EAAA,MAAA+E,OAAA/E,EAAA,EAAA,MAAAkF,SAAAlF,EAAA,EAAA,MAAA2E,MAAAS,QAEhE9D,KAAAA,MAAA;AACJ4D,aAAOP,MAAKS,KAAKE,KAAMP,KAAKG,KAAK;AAAA,EAAC,GACvClF,QAAA+E,KAAA/E,QAAAkF,OAAAlF,EAAA,EAAA,IAAA2E,MAAAS,MAAApF,QAAAsB,MAAAA,KAAAtB,EAAA,EAAA;AAAA,MAAAuB;AAAAvB,IAAA,EAAA,MAAA+E,OAAA/E,UAAAkF,SAAAlF,EAAA,EAAA,MAAA2E,SAAEpD,MAACwD,KAAKG,OAAOP,KAAK,GAAC3E,QAAA+E,KAAA/E,QAAAkF,OAAAlF,QAAA2E,OAAA3E,QAAAuB,MAAAA,KAAAvB,EAAA,EAAA,GAFtB6D,UAAUvC,IAEPC,EAAmB;AAAC,MAAAuC;AAAA,SAAA9D,EAAA,EAAA,MAAAqE,YAAArE,UAAAuE,aAGrBT,KAAA,oBAAC,iBAAA,EAAe,GAAKS,WAA0BY,eAAAA,UAC5Cd,SAAAA,CACH,GAAkBrE,QAAAqE,UAAArE,QAAAuE,WAAAvE,QAAA8D,MAAAA,KAAA9D,EAAA,EAAA,GAFlB8D;AAEkB;ACJf,SAASyB,wBAAyC;AACvD,QAAMC,aAAuB,CAAA,GACvBC,YAAsB,CAAA,GAEtBC,WAAW;AAAA,IACfN,0BAAUO,IAAAA;AAAAA,IACVC,wBAAQD,IAAAA;AAAAA,EAAyC,GAG7CE,WAAW;AAAA,IACfT,0BAAUO,IAAAA;AAAAA,IACVC,wBAAQD,IAAAA;AAAAA,EAAiD,GAGrDG,YAAmD,CAAA;AAEzD,WAASC,kBAAkB;AACzB,UAAMC,aAA0B,CAAA;AAEhC,eAAWjB,OAAOS,YAAY;AAC5B,YAAMS,UAAUP,SAASE,GAAGM,IAAInB,GAAG,GAC7BoB,YAAYN,SAAST,KAAKc,IAAInB,GAAG,GAEjCqB,YAAYV,SAASN,KAAKc,IAAInB,GAAG,GACjCsB,cAAcR,SAAST,KAAKc,IAAInB,GAAG;AAErCkB,iBAAWG,aACbJ,WAAWjE,KAAK;AAAA,QACdgD;AAAAA,QACAK,MAAM;AAAA,UAAC,GAAGgB;AAAAA,UAAWE,SAASD;AAAAA,QAAAA;AAAAA,QAC9BT,IAAI;AAAA,UAAC,GAAGK;AAAAA,UAASK,SAASH;AAAAA,QAAAA;AAAAA,MAAS,CACpC;AAAA,IAEL;AAEA,eAAWI,YAAYT;AACrBS,eAASP,UAAU;AAAA,EAEvB;AAEA,SAAO;AAAA,IACLJ,IAAI;AAAA,MACFP,UAAUN,KAAKuB,SAAS;AACtBZ,eAAAA,SAASE,GAAGY,IAAIzB,KAAK,IAAI,GACzBc,SAASD,GAAGY,IAAIzB,KAAKuB,OAAO,GAE5Bd,WAAWzD,KAAKgD,GAAG,GAEZ,MAAM;AACXW,mBAASE,GAAGa,OAAO1B,GAAG,GACtBc,SAASD,GAAGa,OAAO1B,GAAG;AAEtB,gBAAM2B,MAAMlB,WAAWmB,QAAQ5B,GAAG;AAE9B2B,gBAAM,MAAIlB,WAAWoB,OAAOF,KAAK,CAAC,GAEtCX,gBAAAA;AAAAA,QACF;AAAA,MACF;AAAA,MACAT,KAAKP,KAAKG,OAAO;AACfQ,iBAASE,GAAGY,IAAIzB,KAAKG,KAAK,GAEtBO,UAAU3F,SAASiF,GAAG,KAAGgB,gBAAAA;AAAAA,MAC/B;AAAA,IAAA;AAAA,IAGFC,YAAY;AAAA,MACVX,UAAUkB,UAAU;AAClBT,eAAAA,UAAU/D,KAAKwE,QAAQ,GAEhB,MAAM;AACX,gBAAMG,MAAMZ,UAAUa,QAAQJ,QAAQ;AAElCG,gBAAM,MAAIZ,UAAUc,OAAOF,KAAK,CAAC;AAAA,QACvC;AAAA,MACF;AAAA,IAAA;AAAA,IAGFtB,MAAM;AAAA,MACJC,UAAUN,KAAKuB,SAAS;AACtBZ,eAAAA,SAASN,KAAKoB,IAAIzB,KAAK,IAAI,GAC3Bc,SAAST,KAAKoB,IAAIzB,KAAKuB,OAAO,GAE9Bb,UAAU1D,KAAKgD,GAAG,GAEX,MAAM;AACXW,mBAASN,KAAKqB,OAAO1B,GAAG,GACxBc,SAAST,KAAKqB,OAAO1B,GAAG;AAExB,gBAAM2B,MAAMjB,UAAUkB,QAAQ5B,GAAG;AAE7B2B,gBAAM,MAAIjB,UAAUmB,OAAOF,KAAK,CAAC,GAErCX,gBAAAA;AAAAA,QACF;AAAA,MACF;AAAA,MACAT,KAAKP,KAAKG,OAAO;AACfQ,iBAASN,KAAKoB,IAAIzB,KAAKG,KAAK,GAExBM,WAAW1F,SAASiF,GAAG,KAAGgB,gBAAAA;AAAAA,MAChC;AAAA,IAAA;AAAA,EACF;AAEJ;ACnHO,SAAAc,mBAAAzC,OAAA;AAAA,QAAApE,IAAAC,EAAA,CAAA,GAIL;AAAA,IAAAoE;AAAAA,IAAAyC;AAAAA,EAAAA,IAAuC1C;AAAK,MAAA3D;AAAAT,IAAA,CAAA,MAAAwB,uBAAAd,IAAA,2BAAA,KACCD,KAAA8E,sBAAAA,GAAuBvF,OAAAS,MAAAA,KAAAT,EAAA,CAAA;AAApE,QAAA2E,QAA6ClE;AAA4B,MAAAM,IAAAO;AAAAtB,WAAA8G,sBAGvE/F,KAAAA,MAAM+F,sBAAsBnC,MAAKqB,WAAWX,UAAWyB,kBAAkB,GACzExF,KAAA,CAACwF,oBAAoBnC,KAAK,GAAC3E,OAAA8G,oBAAA9G,OAAAe,IAAAf,OAAAsB,OAAAP,KAAAf,EAAA,CAAA,GAAAsB,KAAAtB,EAAA,CAAA,IAF7B6D,UACE9C,IACAO,EACF;AAAC,MAAAC;AAAA,SAAAvB,SAAAqE,YAEM9C,yBAAA,uBAAA,UAAA,EAAwCoD,OAAAA,OAAQN,SAAAA,CAAS,GAAkCrE,OAAAqE,UAAArE,OAAAuB,MAAAA,KAAAvB,EAAA,CAAA,GAA3FuB;AAA2F;ACVpG,SAASwF,sBACPC,UACAC,MACAlD,QACoB;AACpB,QAAMmD,UAAUD,KAAKrG,IAAIqG,KAAKvE,IAAI,GAC5ByE,UAAUF,KAAKrG,IAAIqG,KAAKvE,IAAIqB,OAAOnD,IAAIoG,SAAQI,MAAMC,SACrDC,UAAUL,KAAKrG,IAAImD,OAAOnD,IAAImD,OAAOrB,IAAIsE,SAAQI,MAAMC;AAE7D,SAAO;AAAA,IACLtD;AAAAA,IACApD,GAAGsG,KAAKtG;AAAAA,IACRC,GAAGsG;AAAAA,IACHA;AAAAA,IACAK,QAAQN,KAAKrG,IAAIoG,SAAQQ,KAAKH;AAAAA,IAC9BI,MAAMR,KAAKrG,IAAIqG,KAAKvE,IAAIsE,SAAQQ,KAAKH;AAAAA,IACrCF;AAAAA,IACAG;AAAAA,IACAI,aAAaP,WAAWG;AAAAA,EAAAA;AAE5B;AAEO,SAASK,mBACdX,UACAY,WACe;AACf,QAAMC,aAAmB;AAAA,IACvBjH,GAAGgH,UAAUxC,KAAKrB,OAAOnD,IAAIoG,SAAQI,MAAMU;AAAAA;AAAAA,IAE3CnH,GAAGiH,UAAUxC,KAAKrB,OAAOpD;AAAAA;AAAAA,IAEzB8B,GAAGmF,UAAUxC,KAAKrB,OAAOtB;AAAAA,IACzBC,GAAGkF,UAAUxC,KAAKrB,OAAOrB,IAAIsE,SAAQI,MAAMU,YAAY;AAAA,EAAA,GAGnD1C,OAAO2B,sBAAsBC,UAASY,UAAUxC,KAAKnB,SAAS4D,UAAU;AAC9EzC,OAAKzE,IAAIiH,UAAUxC,KAAKnB,QAAQtD,IAAIiH,UAAUxC,KAAKnB,QAAQxB;AAE3D,QAAMsF,aAAaF,WAAWjH,IAAIiH,WAAWnF,GAEvCsF,WAAiB;AAAA,IACrBpH,GAAGgH,UAAUhC,GAAG7B,OAAOnD,IAAIoG,SAAQI,MAAMU;AAAAA;AAAAA,IAEzCnH,GAAGiH,UAAUhC,GAAG7B,OAAOpD;AAAAA;AAAAA,IAEvB8B,GAAGmF,UAAUhC,GAAG7B,OAAOtB;AAAAA,IACvBC,GAAGkF,UAAUhC,GAAG7B,OAAOrB,IAAIsE,SAAQI,MAAMU,YAAY;AAAA,EAAA,GAGjDG,WAAWD,SAASpH,IAAIoH,SAAStF,GAEjCkD,KAAKmB,sBAAsBC,UAASY,UAAUhC,GAAG3B,SAAS+D,QAAQ,GAElEE,YAAYC,KAAKC,IAAIxC,GAAG2B,QAAQnC,KAAKmC,MAAM;AAGjDnC,SAAAA,KAAKxE,IAAIuH,KAAKE,IAAIH,WAAW9C,KAAKqC,IAAI,GAClCrC,KAAKxE,IAAIoH,SAASpH,IACpBwE,KAAKxE,IAAIuH,KAAKE,IAAIL,SAASpH,GAAGwE,KAAKqC,IAAI,IAC9BrC,KAAKxE,IAAIqH,aAClB7C,KAAKxE,IAAIuH,KAAKC,IAAIH,UAAU7C,KAAKmC,MAAM,IAEzC3B,GAAGhF,IAAIuH,KAAKE,IAAIH,WAAWtC,GAAG6B,IAAI,GAC9B7B,GAAGhF,IAAIiH,WAAWjH,IACpBgF,GAAGhF,IAAIuH,KAAKE,IAAIR,WAAWjH,GAAGgF,GAAG6B,IAAI,IAC5B7B,GAAGhF,IAAImH,eAChBnC,GAAGhF,IAAIuH,KAAKC,IAAIL,YAAYnC,GAAG2B,MAAM,IAIvCnC,KAAKxE,IAAIuH,KAAKE,IAAIF,KAAKC,IAAIhD,KAAKxE,GAAGiH,WAAWjH,CAAC,GAAGmH,UAAU,GAC5DnC,GAAGhF,IAAIuH,KAAKE,IAAIF,KAAKC,IAAIxC,GAAGhF,GAAGoH,SAASpH,CAAC,GAAGqH,QAAQ,GAE7C;AAAA,IAAC7C;AAAAA,IAAMQ;AAAAA,EAAAA;AAChB;AClFO,MAAM0C,eAAe,UCQfC,yBAAyB,6BACzBC,+BAA+B,yBAC/BC,uBAAuB,yBAGvBC,yBAAyB,wCACzBC,sBAAsB,kCACtBC,sBAAsB,6BACtBC,iBAAiB,oCAEjBC,oBAAoB,uCACpBC,6BAA6B,qCAC7BC,yBAAyB,sCAGzBC,0BAA0B,8BAE1BC,4BAA4B,6BAC5BC,0BAA0B,iCAC1BC,wBAAwB,0CAExBC,2BAA2B,iCAC3BC,gCAAgC,kCAEhCC,sBAAsB,8BACtBC,qBAAqB,6BAIrBC,iBAAiB,WACjBC,mBAAmB,eAGnBC,kBAAkB;ACpCxB,SAAAC,WAAApC,MAAA;AAAA,QAAAxH,IAAAC,EAAA,CAAA;AAAA,MAAAQ;AAAA,SAAAT,SAAAwH,QAEI/G,KAAAoJ,WAAWrC,IAAI,GAACxH,OAAAwH,MAAAxH,OAAAS,MAAAA,KAAAT,EAAA,CAAA,GAAvBS;AAAuB;AAI3B,SAASoJ,WAAWrC,MAAqB;AACvC,SAAIA,KAAKsC,SACAC,MAAMC,QAAQxC,IAAI,IAAIyC,aAAazC,IAAI,IAAIA,OAE7CmC;AACT;AAEO,SAASO,oBAAoBC,cAAiC;AACnE,SAAOA,cAAaC,SAAS;AAC/B;AAEO,SAASC,UAAaC,GAAiC;AAC5D,SAA0BA,KAAM;AAClC;ACtBO,SAASC,oBAAoBC,MAAuB;AACzD,SAAOA,KAAKC,GAAGC,KAAMJ,OAAMK,OAAOL,GAAG,OAAO,CAAC;AAC/C;AAQO,SAASK,OAAOC,YAAwBC,UAA2B;AACxE,SAAID,WAAWE,SAASD,WACf,KAEJD,WAAWJ,OAGTG,OAAOC,WAAWJ,MAAMK,QAAQ,IAF9B;AAGX;AAEO,SAASE,QAAQH,YAAwB;AAC9C,SAAOD,OAAOC,YAAY,OAAO;AACnC;AAEO,SAASI,0BACdJ,YAC0D;AAC1D,MAAI,CAACA;AACH;AAGF,QAAMK,mBAAoBL,WAAW5D,SAA0BkE,UAAUC;AACzE,SAAI,OAAOF,oBAAqB,WACvB;AAAA,IACLzD,MAAMyD;AAAAA,IACNG,qBAAqB;AAAA,EAAA,IAEdH,mBACF;AAAA,IACLzD,MAAMyD,iBAAiBzD;AAAAA,IACvB4D,qBAAqBH,iBAAiBG,uBAAuB;AAAA,EAAA,IAG1DJ,0BAA0BJ,WAAWJ,IAAI;AAClD;AAEO,SAASa,+BACdT,YACoB;AACpB,SAAKA,aAI0BA,WAAW5D,SAA0BkE,UAChEI,yBAIGD,+BAA+BT,WAAWJ,IAAI,IARnD;AASJ;ACxDO,SAASe,sBAAsBf,MAAkB;AAEtD,SAAO,CAAEA,KAAKxD,SAAuCkE,UAAUM;AACjE;AAEO,SAASC,kBAAkBjB,MAAkB;AAKlD,SAJI,CAACe,sBAAsBf,IAAI,KAI3BkB,WAAWlB,IAAI,IACV,KAGLA,KAAKmB,aAAa,UAEb,CADkBnB,KAAKC,GAAGmB,MAAOtB,CAAAA,MAAMoB,WAAWpB,CAAC,CAAC,IAIzDE,KAAKmB,aAAa,WAGlB,CAFwBnB,KAAKqB,OAAOD,MAAOE,CAAAA,UAAUJ,WAAWI,MAAMtB,IAAI,CAAC;AAAA,EAI3EG,OAAOH,MAAM,OAAO,IAGjB;AACT;AAEA,SAASkB,WAAWlB,MAAkB;AACpC,SAAO,CAACe,sBAAsBf,IAAI,KAAKuB,kBAAkBvB,IAAI;AAC/D;AAEA,SAASuB,kBAAkBvB,MAAkB;AAC3C,SACEA,KAAKM,SAAS,sBACdN,KAAKM,SAAS,yBACdH,OAAOH,MAAM,yBAAyB,KACrCG,OAAOH,MAAM,WAAW;AAAA,EAEvB,CAAEA,MAAMxD,SAA8BkE,UAAUc,mBAClDrB,OAAOH,MAAM,uBAAuB,KACpCG,OAAOH,MAAM,MAAM;AAEvB;AC7CA,MAAMyB,2BAA2BxH,cAAkCyH,MAAS;AAMrE,SAAAC,0BAAA/H,OAAA;AAAA,QAAApE,IAAAC,EAAA,CAAA,GAGL;AAAA,IAAAmM;AAAAA,EAAAA,IAAkBhI;AAAK,MAAA3D;AAAA,MAAAT,SAAAoM,SAAA;AAGrB,UAAAC,gBAAsBD,QAAO1B,KAC3B4B,OAEF;AACO7L,SAAA4L,eAAaP,MAAYtE,OAAGyC,aAAaoC,eAAaP,MAAYtE,IAAY,IAA9E0E,QAA+ElM,OAAAoM,SAAApM,OAAAS;AAAAA,EAAA;AAAAA,SAAAT,EAAA,CAAA;AALxF,QAAAuM,oBAKE9L;AACW,MAAAM;AAAA,SAAAf,SAAAuM,qBAAAvM,EAAA,CAAA,MAAAoE,MAAAC,YAGXtD,KAAA,oBAAA,yBAAA,UAAA,EAA0CwL,OAAAA,mBACvCnI,UAAAA,MAAKC,SAAAA,CACR,GAAoCrE,OAAAuM,mBAAAvM,EAAA,CAAA,IAAAoE,MAAAC,UAAArE,OAAAe,MAAAA,KAAAf,EAAA,CAAA,GAFpCe;AAEoC;AAhBjC,SAAAuL,QAAAE,QAAA;AAAA,SAQCA,OAAMC,SAAU,WAAWhB,kBAAkBe,OAAMV,MAAMlB,UAAW;AAAC;ACjBtE,MAAM8B,yBACX,0JAEWC,sBACX,sKAEWC,kBAAkB,uCAElBC,WACX,qIAEWC,cAAc,kBAEdC,cAAc,oBAEdC,mBAAmB,aAEnBC,yBAAyBC,sBAAsB,EAAE,GCfxDC,iBAAiB;AAEhB,SAASC,iBAAiBC,cAAsB;AACrD,SAAO,GAAG9E,sBAAsB,GAAG8E,YAAY,GAAGC,QAAQH,gBAAgB,GAAG;AAC/E;AAEO,SAASI,oBAAoBC,YAAoB;AACtD,SAAIC,YAAYD,UAAU,IAEjB,GAAGhF,4BAA4B,GAAGkF,iBAAiBF,UAAU,CAAC,IAAIG,eAAeH,UAAU,CAAC,KAI9F,GAAGhF,4BAA4B,GAAGmF,eAAeH,UAAU,CAAC;AACrE;AChBO,SAAAI,iBAAAC,IAAAC,SAAA;AACL,QAAAC,QAAcC,aAAaH,IAAIC,OAAO;AAAC,SAE/BC,MAAKE,SAAUF,MAAKG;AAAU;ACiBjC,SAAAC,wBAAA1N,IAAA;AAAA,QAAAT,IAAAC,EAAA,EAAA,GAAiC;AAAA,IAAAuN;AAAAA,IAAA5C;AAAAA,IAAAwD;AAAAA,EAAAA,IAAA3N,IAKtC4N,mBAAyBzD,WAAUE,MACnCwD,cAAoBC,eAAAA;AAAgB,MAAAxN;AAAAf,WAAAqO,oBAGlCtN,KAAAqM,iBAAiBiB,gBAAgB,GAACrO,OAAAqO,kBAAArO,OAAAe,MAAAA,KAAAf,EAAA,CAAA;AADpC,QAAAwO,iBAAuBZ,iBACrB7M,IACA2H,sBACF,GAEsBpH,KAAAkM,cAAA;AAAgB,MAAAjM;AAAAvB,WAAAsB,MAApCC,KAAAgM,oBAAoBjM,EAAgB,GAACtB,OAAAsB,IAAAtB,OAAAuB,MAAAA,KAAAvB,EAAA,CAAA;AADvC,QAAAyO,oBAA0Bb,iBACxBrM,IACA2H,yBACF;AAAC,MAAApF;AAAA9D,IAAA,CAAA,6BAAAU,IAAA,2BAAA,KAEwBoD,KAAA;AAAA,IAAA4K,YAAa;AAAA,EAAA,GAAa1O,OAAA8D,MAAAA,KAAA9D,EAAA,CAAA;AAAnD,QAAA2O,SAAeC,UAAU9K,EAA0B;AAAC,MAAAE,IAAAE;AAAAlE,IAAA,CAAA,MAAAwO,kBAAAxO,EAAA,CAAA,MAAA2O,UAAA3O,EAAA,CAAA,MAAAqO,oBAAArO,SAAAoO,WAE1CpK,KAAAA,MAAA;AACJ,KAACwK,kBAADJ,WACFO,OAAME,kBACe;AAAA,MAAAC,KACZ1B,iBAAiBiB,gBAAgB;AAAA,MAACU,OAChCrG;AAAAA,IAAAA,CACR,EAACsG,MACK1C,OAEN;AAAA,EACJ,GACApI,KAAA,CAACyK,QAAQH,gBAAgBH,kBAAkBD,OAAO,GAACpO,OAAAwO,gBAAAxO,OAAA2O,QAAA3O,OAAAqO,kBAAArO,OAAAoO,SAAApO,OAAAgE,IAAAhE,QAAAkE,OAAAF,KAAAhE,EAAA,CAAA,GAAAkE,KAAAlE,EAAA,EAAA,IAXtD6D,UAAUG,IAWPE,EAAmD;AAAC,MAAA+K;AAAAC,OAAA;AAGrD,QAAI,CAACV,gBAAc;AACjBS,WAAO/C;AAAP,YAAAgD;AAAAA,IAAgB;AACjB,QAAAC;AAAA,QAAAnP,EAAA,EAAA,MAAAwO,kBAAAxO,EAAA,EAAA,MAAAyO,mBAAAW,SAAApP,EAAA,EAAA,MAAAsO,aAAAT,IAAA;AACD,YAAAuB,QAAcX,mBAAiBW,SAAjB,CAAA,GAEdvD,UAAgB2C,gBAAc3C,UAAd,CAAA,GAA4BwD,IAAMC,CAAAA,iBACzC;AAAA,QAAA,GACFA;AAAAA,QAAWF,OACPA,MAAKG,OAAQC,UAAUA,KAAIhI,SAAU8H,YAAW9H,IAAK;AAAA,QAACiI,cAC/CH,YAAWG,cACfF,OAACG,CAAAA,MAAO,CAACA,EAACC,UAAWD,EAACC,WAAYrB,aAAWT,EAClD,EAACwB,IAAClF,kBAAiByF,oBAAoBzF,cAAaiF,KAAK,CAAC;AAAA,MAAA,EAElE;AACMD,WAAAU,MAA4B;AAAA,QAAA,GAC9BrB;AAAAA,QAAcY,OAEVA,OAAKC,IAAMS,CAAAA,WAAA;AAChB,gBAAAC,gBAAoBlE,OAAMnB,KAClBsF,CAAAA,MAAOA,EAACxI,SAAUgI,OAAIhI,IACf,GAACiI,cAAM/E,KAACuF,CAAAA,MAAOA,EAAChL,SAAUuK,OAAIU,cAAe;AAAC,iBACtD;AAAA,YAAA,GACFV;AAAAA,YAAIrF,aACPA;AAAAA,UAAAA;AAAAA,QACD,CACF;AAAA,QAAC0B;AAAAA,MAAAA,CAEH,GAAC7L,QAAAwO,gBAAAxO,EAAA,EAAA,IAAAyO,mBAAAW,OAAApP,EAAA,EAAA,IAAAsO,aAAAT,IAAA7N,QAAAmP;AAAAA,IAAA;AAAAA,WAAAnP,EAAA,EAAA;AAbFiP,SAAOE;AAAAA,EAaL;AAAA,SA5BGF;AA6B6C;AA7D/C,SAAA3C,UAAA;AAAA;AAgEP,SAASsD,oBACPzF,cACAgG,KACmB;AACnB,SAAO;AAAA,IACL,GAAGhG;AAAAA,IACHiF,OAAOe,IACJZ,OAAQC,CAAAA,SAASA,KAAKU,mBAAmB/F,aAAYlF,IAAI,EACzDsK,OACEC,CAAAA,SACCA,KAAKY,YACL,oBAAIC,KAAAA,GAAOC,QAAAA,IAAY,IAAID,KAAKb,KAAKY,OAAO,EAAEE,QAAAA,IAAYrD,sBAC9D;AAAA,EAAA;AAEN;AC3FA,MAAMsD,WAA8B,CAAA;AAE7B,SAAAC,sBAAAhD,YAAAiD,oBAAA;AAAA,QAAAzQ,IAAAC,EAAA,EAAA;AAAA,MAAAQ;AAAAT,IAAA,CAAA,MAAAwN,cAAAxN,SAAAyQ,sBAC0ChQ,KAAA;AAAA,IAAA+M;AAAAA,IAAA5C,YAAyB6F;AAAAA,EAAAA,GAAmBzQ,OAAAwN,YAAAxN,OAAAyQ,oBAAAzQ,OAAAS,MAAAA,KAAAT,EAAA,CAAA;AAA3F,QAAAwO,iBAAuBL,wBAAwB1N,EAA4C,GAE3FiQ,kBAAwB,CAAC,CAAClC,gBAC1BF,cAAoBC,kBACpBoC,QAAcC,YACdxB,QAAcZ,gBAAcY,OAC5ByB,gBAAsB1Q,OAAkD,SAAS;AAAC,MAAAY;AAAAf,IAAA,CAAA,MAAA0Q,mBAAA1Q,SAAAsO,aAAAT,MAAA7N,EAAA,CAAA,MAAAoP,SAAApP,SAAA2Q,SAExE5P,KAAAA,MAAA;AACR,QAAK2P,iBAIL;AAAA,UAAIG,cAAapP,YAAa,WAAS;AACrC,cAAAqP,gBAAsBC,OAAMC,aACzBH,cAAapP,WAAb8O,UAAiClB,IAAM/C,OAAwB,CAClE;AACmB8C,eAAKG,OACbC,CAAAA,SAAUA,KAAIyB,oBAAqB3C,aAAWT,EACjD,EAAC0B,OAACO,CAAAA,WAAA;AACN,gBAAAoB,WAAiBJ,cAActB,OAAIvK,IAAK;AAAC,iBACjC,CAACiM,YAAY1B,OAAI2B,SAAY,CAACD,UAAQC,SAAW3B,OAAI2B;AAAAA,QAAO,CAGhE,EAAC5B,OAAC6B,QAAiF,GAEjFC,QAAUC,CAAAA,WAAA;AAClB,gBAAAlH,QAAcoF,OAAIpF,SAAUF,oBAAoBsF,OAAIrF,WAAY;AAC5DqF,iBAAI+B,WAAY,UAClBZ,MAAK5O,KAAM;AAAA,YAAAqI,OACF,WAAWA,KAAK;AAAA,YAAEoH,QACjB;AAAA,YAAOC,aACF,uBAAuBjC,OAAIkC,WAAJ,EAAkB;AAAA,YAAEC,UAC9C;AAAA,YAAIC,UACJ;AAAA,UAAA,CACX,IACQpC,OAAI+B,WAAY,YACzBZ,MAAK5O,KAAM;AAAA,YAAAqI,OACF,YAAYA,KAAK;AAAA,YAAEoH,QAClB;AAAA,YAAOC,aACF;AAAA,YAAwBE,UAC3B;AAAA,UAAA,CACX,IACQnC,OAAI+B,WAAY,YACzBZ,MAAK5O,KAAM;AAAA,YAAAqI,OACF,YAAYA,KAAK;AAAA,YAAEoH,QAClB;AAAA,YAASC,aACJ;AAAA,YAAwBE,UAC3B;AAAA,UAAA,CACX,IACQnC,OAAI+B,WAAY,aACzBZ,MAAK5O,KAAM;AAAA,YAAAqI,OACF,aAAaA,KAAK;AAAA,YAAEoH,QACnB;AAAA,YAASC,aACJ;AAAA,YAAuBE,UAC1B;AAAA,UAAA,CACX;AAAA,QACF,CACF;AAAA,MAAC;AAEJd,oBAAapP,UAAW2N;AAAAA,IAAAA;AAAAA,EAAH,GACtBpP,OAAA0Q,iBAAA1Q,EAAA,CAAA,IAAAsO,aAAAT,IAAA7N,OAAAoP,OAAApP,OAAA2Q,OAAA3Q,OAAAe,MAAAA,KAAAf,EAAA,CAAA;AAAA,MAAAsB;AAAAtB,IAAA,CAAA,MAAA0Q,mBAAA1Q,EAAA,CAAA,MAAAsO,eAAAtO,EAAA,EAAA,MAAAoP,SAAApP,UAAA2Q,SAAErP,KAAA,CAAC8N,OAAOyB,eAAeF,OAAOrC,aAAaoC,eAAe,GAAC1Q,OAAA0Q,iBAAA1Q,OAAAsO,aAAAtO,QAAAoP,OAAApP,QAAA2Q,OAAA3Q,QAAAsB,MAAAA,KAAAtB,EAAA,EAAA,GArD9D6D,UAAU9C,IAqDPO,EAA2D;AAAC;AA9D1D,SAAA8P,SAAAS,QAAA;AAAA,SAyBmBrC,OAAI2B,SAAUW,QAAQC,WAAW,IAAI1B,KAAKb,OAAI2B,KAAM,GAAG,EAAE,GAAG,oBAAId,MAAM;AAAC;AAzB1F,SAAA/D,QAAA6D,KAAA;AAAA,SAgBkD,CAACA,IAAGlL,MAAOkL,GAAG;AAAC;ACdjE,SAAA6B,2BAAA5N,OAAA;AAAA,QAAApE,IAAAC,EAAA,CAAA;AACL,MAAI,CAAC0K,OAAOvG,MAAKwG,YAAa,UAAU,KAAKxG,MAAKyJ,OAAQ,UAAUzJ,MAAKyJ,OAAQvF,cAAY;AAAA,QAAA7H;AAAA,WAAAT,SAAAoE,SACpF3D,MAAA,oBAAC,aAAA,EAAW,GAAK2D,OAAK,GAAIpE,OAAAoE,OAAApE,OAAAS,OAAAA,MAAAT,EAAA,CAAA,GAA1BS;AAAAA,EAA0B;AAInC,QAAA+M,aAAoBpJ,MAAK6N,OAAMnD;AAC/B,MAAI,CAACtB,YAAU;AAAA,QAAA/M;AAAA,WAAAT,SAAAoE,SACN3D,MAAA2D,MAAK8N,cAAe9N,KAAK,GAACpE,OAAAoE,OAAApE,OAAAS,OAAAA,MAAAT,EAAA,CAAA,GAA1BS;AAAAA,EAA0B;AAIF,QAAAA,KAAA2D;AAAyB,MAAArD;AAAA,SAAAf,EAAA,CAAA,MAAAwN,cAAAxN,SAAAS,MAAnDM,KAAA,oBAAC,qBAAA,EAAmB,GAAMN,IAAwC+M,WAAAA,CAAU,GAAIxN,OAAAwN,YAAAxN,OAAAS,IAAAT,OAAAe,MAAAA,KAAAf,EAAA,CAAA,GAAhFe;AAAgF;AAGzF,SAAAoR,oBAAA1R,IAAA;AAAA,QAAAT,IAAAC,EAAA,EAAA;AAAA,MAAAuN,YAAApJ;AAAApE,WAAAS,MAA6B;AAAA,IAAA+M;AAAAA,IAAA,GAAApJ;AAAAA,EAAAA,IAAA3D,IAA+DT,OAAAS,IAAAT,OAAAwN,YAAAxN,OAAAoE,UAAAoJ,aAAAxN,EAAA,CAAA,GAAAoE,QAAApE,EAAA,CAAA,IAC1FwQ,sBAAsBhD,YAAYpJ,MAAKwG,UAAW;AAAC,MAAA7J;AAAAmO,OAAA;AAGjD,QAAI9K,MAAKwG,WAAWE,SAAUpC,wBAAsB;AAClD3H,WAAOqD,MAAKwG;AAAZ,YAAAsE;AAAAA,IAAuB;AACxB,QAAA5N;AAAAtB,MAAA,CAAA,MAAAoE,MAAAwG,WAAAJ,QAIOlJ,MAAA;AAAA,MAAA,GACD8C,MAAKwG,WAAWJ;AAAAA,MAAKM,MAElB;AAAA,IAAA,GACP9K,EAAA,CAAA,IAAAoE,MAAAwG,WAAAJ,MAAAxK,OAAAsB,OAAAA,MAAAtB,EAAA,CAAA;AAAA,QAAAuB;AAAAvB,aAAAoE,MAAAwG,cAAA5K,SAAAsB,OANIC,MAAA;AAAA,MAAA,GACF6C,MAAKwG;AAAAA,MAAWJ,MACblJ;AAAAA,IAAAA,GAKPtB,EAAA,CAAA,IAAAoE,MAAAwG,YAAA5K,OAAAsB,KAAAtB,OAAAuB,OAAAA,MAAAvB,EAAA,CAAA,GAPDe,KAAOQ;AAAAA,EAOc;AAZvB,QAAAqJ,aAAmB7J,IAgBmBO,KAAA8C,MAAKgI;AAAQ,MAAA7K;AAAAvB,IAAA,CAAA,MAAAoE,SAAApE,SAAA4K,cAC9CrJ,KAAA6C,MAAK8N,cAAe;AAAA,IAAA,GAAI9N;AAAAA,IAAKwG;AAAAA,EAAAA,CAAa,GAAC5K,OAAAoE,OAAApE,OAAA4K,YAAA5K,QAAAuB,MAAAA,KAAAvB,EAAA,EAAA;AAAA,MAAA8D;AAAA,SAAA9D,UAAAoE,MAAAgI,WAAApM,UAAAuB,MAD9CuC,KAAA,oBAAC,2BAAA,EAAmC,SAAAxC,IACjCC,UAAAA,GAAAA,CACH,GAA4BvB,EAAA,EAAA,IAAAoE,MAAAgI,SAAApM,QAAAuB,IAAAvB,QAAA8D,MAAAA,KAAA9D,EAAA,EAAA,GAF5B8D;AAE4B;AAIhC,SAAAsO,YAAAhO,OAAA;AAAA,QAAApE,IAAAC,EAAA,CAAA,GACE;AAAA,IAAA+E;AAAAA,EAAAA,IAAiBqN,YACjB;AAAA,IAAAC;AAAAA,EAAAA,IAAkBC,gBAAAA,GAClBC,UAAgB5I,WAAWxF,MAAKoD,IAAK,GAGV/G,KAAA,GAAG6R,OAAO,IAAIE,OAAO;AAAE,MAAAzR;AAAAf,IAAA,CAAA,6BAAAU,IAAA,2BAAA,KAAyBK,KAAA;AAAA,IAAA0R,UAAW;AAAA,EAAA,GAAEzS,OAAAe,MAAAA,KAAAf,EAAA,CAAA;AAAA,MAAAsB;AAAAtB,WAAAoE,SACnF9C,KAAA8C,MAAK8N,cAAe9N,KAAK,GAACpE,OAAAoE,OAAApE,OAAAsB,MAAAA,KAAAtB,EAAA,CAAA;AAAA,MAAAuB;AAAA,SAAAvB,EAAA,CAAA,MAAAS,MAAAT,SAAAsB,MAAAtB,EAAA,CAAA,MAAAgF,UAD7BzD,KAAA,oBAAC,qBAAwB,MAAAd,IAAiCuE,QAAe,OAAAjE,IACtEO,UAAAA,IACH,GAAoBtB,OAAAS,IAAAT,OAAAsB,IAAAtB,OAAAgF,QAAAhF,OAAAuB,MAAAA,KAAAvB,EAAA,CAAA,GAFpBuB;AAEoB;ACrBjB,MAAMmR,wBAAwBjO,cACnCyH,MACF;AAEO,SAAAyG,2BAAA;AACL,QAAAC,UAAgBhO,WAAW8N,qBAAqB;AAChD,MAAI,CAACE;AACH,UAAM,IAAI/N,MAAM,wCAAwC;AACzD,SACM+N;AAAO;AC7BT,MAAMC,4BAA4BpO,cAA8C,EAAS;AAEzF,SAAAqO,wBAAA;AACL,QAAAF,UAAgBhO,WAAWiO,yBAAyB;AACpD,MAAI,CAACD;AACH,UAAM,IAAI/N,MAAM,mCAAmC;AACpD,SACM+N;AAAO;AAGT,SAAAG,qBAAA;AAAA,SACED,wBAAuBE;AAAgB;ACQhD,MAAMC,WAAW;AAEjB,SAASC,YAAYtI,YAAuC;AAC1D,MAAIN,IAA4BM;AAEhC,SAAON,KAAG;AACR,QAAIA,EAAE6I,KAAM,QAAO7I,EAAE6I;AACrB7I,QAAIA,EAAEE;AAAAA,EACR;AAEA,SAAIG,OAAOC,YAAY,MAAM,IAAUwI,WACnCzI,OAAOC,YAAY,OAAO,IAAUyI,YACpCzI,WAAWe,aAAa,WAAWpB,oBAAoBK,UAAU,IAAU0I,mBAE3E1I,WAAWe,aAAa,UAAgB4H,YACxC3I,WAAWe,aAAa,WAAiB6H,iBACzC5I,WAAWe,aAAa,WAAiB8H,aAEtCC;AACT;AAEO,SAASC,sBAAsBC,WAA6D;AAKjG,SAJqDA,UAAUC,OAC7D,CAACC,KAAK5T,SAAS;AAAA,IAAC,GAAG4T;AAAAA,IAAK,CAAC5T,IAAI6E,GAAG,GAAG7E;AAAAA,EAAAA,IACnC,CAAA,CACF;AAEF;AAEO,SAAS6T,oBAAoBnJ,YAAwC;AAC1E,SAAO;AAAA,IACL7F,KAAK4E;AAAAA,IACLwJ,MAAMvI,WAAWuI,QAAQO;AAAAA,IACzBtJ,OAAO;AAAA,IACP5C,MAAM,CAAA;AAAA,IACNoD;AAAAA,EAAAA;AAEJ;AAEO,SAASoJ,aACdpJ,YACAjJ,QACAsS,QAAQ,GACI;AACZ,SAAIA,SAAShB,WACJ,CAAA,IAGPrI,WAAWiB,OACR0D,OAAQS,CAAAA,MAAM,CAACA,EAAElF,KAAKoJ,WAAW,GAAG,CAAC,EAErCC,QAASrI,CAAAA,UAAU;AAClB,UAAMtE,OAAa7F,SAAS,CAAC,GAAGA,OAAO6F,MAAMsE,MAAMhB,IAAI,IAAI,CAACgB,MAAMhB,IAAI,GAChEV,QAAQ0B,MAAMtB,KAAKJ,SAAS0B,MAAMhB,MAClCsJ,WAAqB;AAAA,MACzBrP,KAAKsP,aAAapK,aAAazC,IAAI,CAAC;AAAA,MACpCA;AAAAA,MACA4C,OAAOzI,SAAS,CAACA,OAAOyI,OAAOA,KAAK,EAAEkK,KAAK,KAAK,IAAIlK;AAAAA,MACpDQ,YAAYkB,MAAMtB;AAAAA,MAClB2I,MAAMD,YAAYpH,MAAMtB,IAAI;AAAA,IAAA,GAExBqB,SACJC,MAAMtB,KAAKmB,aAAa,WAAWqI,aAAalI,MAAMtB,MAAM4J,UAAUH,QAAQ,CAAC,IAAI,IAE/EM,kBACJzI,MAAMtB,KAAKmB,aAAa,UAAU6I,mBAAmB1I,MAAMtB,MAAM4J,UAAUH,QAAQ,CAAC,IAAI,CAAA;AAC1F,WAAKxI,kBAAkBK,MAAMtB,IAAI,IAG1B,CAAC4J,UAAU,GAAGvI,QAAQ,GAAG0I,eAAe,IAFtC,CAAC,GAAG1I,QAAQ,GAAG0I,eAAe;AAAA,EAGzC,CAAC;AAEP;AAEA,SAASC,mBAAmB5J,YAA6BjJ,QAAmBsS,QAAQ,GAAG;AACrF,SAAIA,SAAShB,WACJ,CAAA,IAIPrI,WAAWH,GACR8E,OAAQkF,CAAAA,aAAa,CAAC9J,OAAO8J,UAAU,OAAO,CAAC,EAE/CN,QAASM,CAAAA,aAAa;AACrB,UAAMC,UAAU;AAAA,MAACzP,MAAMwP,SAAS3J;AAAAA,IAAAA,GAC1BV,QAAQqK,SAASrK,SAASqK,SAAS3J,MACnCtD,OAAa7F,SAAS,CAAC,GAAGA,OAAO6F,MAAMkN,OAAO,IAAI,CAACA,OAAO,GAC1DN,WAAqB;AAAA,MACzBrP,KAAKsP,aAAapK,aAAazC,IAAI,CAAC;AAAA,MACpCA;AAAAA,MACA4C,OAAOzI,SAAS,CAACA,OAAOyI,OAAOA,KAAK,EAAEkK,KAAK,KAAK,IAAIlK;AAAAA,MACpDQ,YAAY6J;AAAAA,MACZtB,MAAMD,YAAYuB,QAAQ;AAAA,MAC1BE,WAAW;AAAA,IAAA,GAEP9I,SACJ4I,SAAS9I,aAAa,WAAWqI,aAAaS,UAAUL,UAAUH,QAAQ,CAAC,IAAI,CAAA;AAEjF,WAAKxI,kBAAkBgJ,QAAQ,IAGxB,CAACL,UAAU,GAAGvI,MAAM,IAFlBA;AAAAA,EAGX,CAAC;AAEP;AAEO,SAAS+I,YAAYC,KAAyBC,YAAoB;AACvE,MAAI,CAACA;AACH;AAGF,QAAMtN,OAAOuN,aAAaD,UAAU,GAC9BE,cAAoB,CAAA;AAC1B,MAAIC,QAAQ;AACZ,QAAMC,gBAAgB1N,KAAK6H,IAAKqF,CAAAA,YAAY;AAG1C,QAFAM,YAAYjT,KAAK2S,OAAO,GAEpBS,aAAaT,OAAO,GAAG;AACzB,YAAMU,QAAQC,gBAAgBpL,aAAa+K,WAAW,GAAGH,GAAG,EAAE,CAAC,GACzD5C,QAAQmD,OAAOnD;AACrB,UAAImD,SAASnD,SAAS,OAAOA,SAAU,YAAY,WAAWA;AAE5D,eAAO;AAAA,UAAChN,MAAMgN,MAAMlD;AAAAA,QAAAA;AAEtBkG,cAAQ;AAAA,IACV;AACA,WAAOP;AAAAA,EACT,CAAC;AAED,SAAOO,QAAQZ,aAAapK,aAAaiL,aAAa,CAAC,IAAIhJ;AAC7D;AAMA,SAASmI,aAAa7B,SAAiB;AACrC,SAAOA,QAAQlF,QAAQ,SAAS,GAAG,EAAEA,QAAQ,UAAU,GAAG,EAAEA,QAAQ,MAAM,EAAE;AAC9E;AAEO,SAAAgI,YAAAT,KAAAC,YAAA;AAAA,QAAA9U,IAAAC,EAAA,CAAA;AAAA,MAAAQ;AAAA,SAAAT,EAAA,CAAA,MAAA6U,OAAA7U,SAAA8U,cACgBrU,KAAAmU,YAAYC,KAAKC,UAAU,GAAC9U,OAAA6U,KAAA7U,OAAA8U,YAAA9U,OAAAS,MAAAA,KAAAT,EAAA,CAAA,GAA5BS;AAA4B;AAG5C,SAAA8U,iBAAA9E,oBAAAjJ,MAAA;AAAA,QAAAxH,IAAAC,EAAA,CAAA,GAIL;AAAA,IAAA+T,cAAAA;AAAAA,EAAAA,IAAuBlB,sBAAAA;AAAuB,MAAArS;AAAAT,IAAA,CAAA,MAAAyQ,sBAAAzQ,SAAAgU,iBAI1CvT,KAAAgQ,sBAAsB+E,mBAAmB/E,kBAAkB,IAA3D,CACKsD,oBAAoBtD,kBAAkB,GAAC,GAAKuD,cAAavD,mBAAkB3F,IAAK,CAAC,IADtF,CAAA,GAEM9K,OAAAyQ,oBAAAzQ,OAAAgU,eAAAhU,OAAAS,MAAAA,KAAAT,EAAA,CAAA;AAJV,QAAAyV,mBAEIhV;AAIH,MAAAM;AAAA,SAAAf,EAAA,CAAA,MAAAwH,QAAAxH,SAAAyV,oBAGQ1U,KAAAyG,OAAOiO,kBAAgB/K,KAAOsF,CAAAA,MAAOA,EAACjL,QAASyC,IAAgB,IAA/D0E,QAAgElM,OAAAwH,MAAAxH,OAAAyV,kBAAAzV,OAAAe,MAAAA,KAAAf,EAAA,CAAA,GAAvEe;AAAuE;AAIpE,SAAS2U,cAAc5J,OAAkB;AAC9C,QAAMlB,aAAakB,OAAOlB;AAC1B,SAAOkB,OAAO1B,SAASQ,YAAYR,SAASQ,YAAYE,QAAQ;AAClE;AAOO,SAAA6K,kBAAA;AAAA,QAAA3V,IAAAC,EAAA,CAAA,GACL2V,aAAmBC,cAAAA;AAAe,MAAApV;AAAAT,IAAA,CAAA,MAAA4V,WAAAE,UAGDrV,KAAAmV,WAAUE,UAAV,CAAA,GAAuB9V,EAAA,CAAA,IAAA4V,WAAAE,QAAA9V,OAAAS,MAAAA,KAAAT,EAAA,CAAA;AAAA,MAAAe;AAAA,SAAAf,EAAA,CAAA,MAAA4V,cAAA5V,SAAAS,MAA/CM,KAAA;AAAA,IAAA,GAAI6U;AAAAA,IAAUE,QAAUrV;AAAAA,EAAAA,GAAwBT,OAAA4V,YAAA5V,OAAAS,IAAAT,OAAAe,MAAAA,KAAAf,EAAA,CAAA,GAAhDe;AAAgD;AC/K3D,MAAMgV,WAAW,6BACJC,kCAAkC;AAExC,SAASC,aAAazE,QAAoC;AAC/D,SAAOA,QAAQ0E,WAAW1E,OAAO2E,eAAe3E,OAAO4E;AACzD;AAEO,SAAAC,aAAAC,iBAAA;AAAA,QAAAtW,IAAAC,EAAA,CAAA;AAAA,MAAAQ;AAAAT,IAAA,CAAA,6BAAAU,IAAA,2BAAA,KACoBD,KAAA;AAAA,IAAAiO,YAAasH;AAAAA,EAAAA,GAAgChW,OAAAS,MAAAA,KAAAT,EAAA,CAAA;AAAtE,QAAA2O,SAAeC,UAAUnO,EAA6C;AAAC,MAAAM;AAAA,SAAAf,EAAA,CAAA,MAAA2O,UAAA3O,SAAAsW,mBAE9DvV,KAAAuV,kBAAkBA,gBAAgB3H,MAAe,IAAjDA,QAAkD3O,OAAA2O,QAAA3O,OAAAsW,iBAAAtW,OAAAe,MAAAA,KAAAf,EAAA,CAAA,GAAlDe;AAAkD;AAKtD,SAAAwV,aAAAC,WAAA;AAAA,QAAAxW,IAAAC,EAAA,CAAA,GACL,CAAAwW,SAAAC,UAAA,IAA8BpW,SAAS,EAAK,GAC5CqW,OAAapI,kBACbqI,QAAc7D,mBAAAA,GACdpC,QAAcC,SAAAA;AAAU,MAAAnQ;AAAAT,IAAA,CAAA,MAAAwW,aAAAxW,SAAA2Q,SAAA3Q,EAAA,CAAA,MAAA4W,SAAA5W,EAAA,CAAA,MAAA2W,MAAA9I,MAGtBpN,KAAAM,CAAAA,QAAA;AAAC,UAAA;AAAA,MAAAyM;AAAAA,MAAAqJ;AAAAA,MAAAC;AAAAA,MAAAC;AAAAA,MAAAC;AAAAA,MAAAC;AAAAA,IAAAA,IAAAlW;AAQC2V,WAAAA,WAAW,EAAI,qBAEf;AAAA,aACSF,UAASU,QAAS;AAAA,QAAAC,QACf;AAAA,QAAMC,KACT,2BAA2BZ,UAASa,OAAAA,EAASC,OAAQ,cACxDd,UAASa,OAAAA,EAASE,SAAU;AAAA,QAC5BzV,MACI;AAAA,UAAA0L;AAAAA,UAAAoJ;AAAAA,UAAAC;AAAAA,UAAAW,gBAIY,MAAMV,WAAAA;AAAAA,UAAYE;AAAAA,UAAAC;AAAAA,UAAAF,eAIhCA,cAAajN,WAAY,IAAzBH,kBAA+CM,aAAa8M,aAAa;AAAA,UAACpH,QACpEgH,MAAI9I;AAAAA,QAAAA;AAAAA,MACd,CACD;AAAA,IAAC,GAAA,EAGQmB,MACHyI,CAAAA,MAAA;AACL9G,YAAAA,MAAK5O,KAAM;AAAA,QAAAyP,QACD;AAAA,QAAOpH,OACR;AAAA,QAAkBqH,aACZgG,EAAC/F;AAAAA,MAAAA,CACf,GACDgF,WAAW,EAAK,GACVe;AAAAA,IAAC,CACR,EAACC,QACO,MAAA;AAGPC,iBAAW,MAAA;AACTjB,mBAAW,EAAK;AAAA,MAAC,GAChB,GAAI;AAAA,IAAC,CACT;AAAA,EAAC,GACL1W,OAAAwW,WAAAxW,OAAA2Q,OAAA3Q,OAAA4W,OAAA5W,EAAA,CAAA,IAAA2W,MAAA9I,IAAA7N,OAAAS,MAAAA,KAAAT,EAAA,CAAA;AAhDH,QAAA4X,YAAkBnX;AAkDjB,MAAAM;AAAA,SAAAf,EAAA,CAAA,MAAAyW,WAAAzW,SAAA4X,aAGQ7W,KAAA;AAAA,IAAA6W;AAAAA,IAAAnB;AAAAA,EAAAA,GAGNzW,OAAAyW,SAAAzW,OAAA4X,WAAA5X,OAAAe,MAAAA,KAAAf,EAAA,CAAA,GAHMe;AAGN;AAKE,SAAA8W,mBAAArB,WAAA;AAAA,QAAAxW,IAAAC,EAAA,CAAA,GACL,CAAAwW,SAAAC,UAAA,IAA8BpW,SAAS,EAAK,GAC5CqW,OAAapI,kBACbqI,QAAc7D,mBAAAA,GACdpC,QAAcC,SAAAA;AAAU,MAAAnQ;AAAAT,IAAA,CAAA,MAAAwW,aAAAxW,SAAA2Q,SAAA3Q,EAAA,CAAA,MAAA4W,SAAA5W,EAAA,CAAA,MAAA2W,MAAA9I,MAGtBpN,KAAAM,CAAAA,QAAA;AAAC,UAAA;AAAA,MAAAyG;AAAAA,MAAAgG;AAAAA,IAAAA,IAAAzM;AACC2V,WAAAA,WAAW,EAAI,GAERF,UAASU,QACL;AAAA,MAAAC,QACC;AAAA,MAAMC,KACT,kCAAkCZ,UAASa,OAAAA,EAASC,OAAQ,cAC/Dd,UAASa,OAAAA,EAASE,SAAU;AAAA,MAC5BzV,MACI;AAAA,QAAA0F;AAAAA,QAAAgG;AAAAA,QAAAoJ;AAAAA,QAAAjH,QAIIgH,MAAI9I;AAAAA,MAAAA;AAAAA,IACd,CACD,EAACmB,MACKyI,CAAAA,MAAA;AACL9G,YAAAA,MAAK5O,KAAM;AAAA,QAAAyP,QACD;AAAA,QAAOpH,OACR;AAAA,QAAmCqH,aAC7BgG,EAAC/F;AAAAA,MAAAA,CACf,GACDgF,WAAW,EAAK,GACVe;AAAAA,IAAC,CACR,EAACC,QACO,MAAA;AAGPC,iBAAW,MAAA;AACTjB,mBAAW,EAAK;AAAA,MAAC,GAChB,GAAI;AAAA,IAAC,CACT;AAAA,EAAC,GACL1W,OAAAwW,WAAAxW,OAAA2Q,OAAA3Q,OAAA4W,OAAA5W,EAAA,CAAA,IAAA2W,MAAA9I,IAAA7N,OAAAS,MAAAA,KAAAT,EAAA,CAAA;AAjCH,QAAA8X,kBAAwBrX;AAmCvB,MAAAM;AAAA,SAAAf,EAAA,CAAA,MAAA8X,mBAAA9X,SAAAyW,WAGQ1V,KAAA;AAAA,IAAA+W;AAAAA,IAAArB;AAAAA,EAAAA,GAGNzW,OAAA8X,iBAAA9X,OAAAyW,SAAAzW,OAAAe,MAAAA,KAAAf,EAAA,CAAA,GAHMe;AAGN;AAKE,SAAAgX,iBAAAvB,WAAA;AAAA,QAAAxW,IAAAC,EAAA,CAAA,GACL,CAAAwW,SAAAC,UAAA,IAA8BpW,SAAS,EAAK,GAC5CqW,OAAapI,kBACbqI,QAAc7D,mBAAAA,GACdpC,QAAcC,SAAAA;AAAU,MAAAnQ;AAAAT,IAAA,CAAA,MAAAwW,aAAAxW,SAAA2Q,SAAA3Q,EAAA,CAAA,MAAA4W,SAAA5W,EAAA,CAAA,MAAA2W,MAAA9I,MAGtBpN,KAAAM,CAAAA,QAAA;AAAC,UAAA;AAAA,MAAAyG;AAAAA,MAAAgG;AAAAA,IAAAA,IAAAzM;AACC2V,WAAAA,WAAW,EAAI,GAERF,UAASU,QACL;AAAA,MAAAC,QACC;AAAA,MAAMC,KACT,gCAAgCZ,UAASa,OAAAA,EAASC,OAAQ,cAC7Dd,UAASa,OAAAA,EAASE,SAAU;AAAA,MAC5BzV,MACI;AAAA,QAAA0F;AAAAA,QAAAgG;AAAAA,QAAAoJ;AAAAA,QAAAjH,QAIIgH,MAAI9I;AAAAA,MAAAA;AAAAA,IACd,CACD,EAACmB,MACKyI,CAAAA,MAAA;AACL9G,YAAAA,MAAK5O,KAAM;AAAA,QAAAyP,QACD;AAAA,QAAOpH,OACR;AAAA,QAAmCqH,aAC7BgG,EAAC/F;AAAAA,MAAAA,CACf,GACDgF,WAAW,EAAK,GACVe;AAAAA,IAAC,CACR,EAACC,QACO,MAAA;AAGPC,iBAAW,MAAA;AACTjB,mBAAW,EAAK;AAAA,MAAC,GAChB,GAAI;AAAA,IAAC,CACT;AAAA,EAAC,GACL1W,OAAAwW,WAAAxW,OAAA2Q,OAAA3Q,OAAA4W,OAAA5W,EAAA,CAAA,IAAA2W,MAAA9I,IAAA7N,OAAAS,MAAAA,KAAAT,EAAA,CAAA;AAjCH,QAAAgY,gBAAsBvX;AAmCrB,MAAAM;AAAA,SAAAf,EAAA,CAAA,MAAAgY,iBAAAhY,SAAAyW,WAGQ1V,KAAA;AAAA,IAAAiX;AAAAA,IAAAvB;AAAAA,EAAAA,GAGNzW,OAAAgY,eAAAhY,OAAAyW,SAAAzW,OAAAe,MAAAA,KAAAf,EAAA,CAAA,GAHMe;AAGN;AAKE,SAASkX,qBAAqBzB,WAAyB;AAC5D,QAAM,CAACC,SAASC,UAAU,IAAIpW,SAAS,EAAI,GAErC4X,oBAAoBC,YAAY,YAAY;AAChDzB,eAAW,EAAI;AAEf,UAAMa,YAAYf,UAAUa,OAAAA,EAASE;AAErC,QAAI;AAMF,aALe,MAAMf,UAAUU,QAAwB;AAAA,QACrDC,QAAQ;AAAA,QACRC,KAAK,GAAGrB,QAAQ,IAAIS,UAAUa,SAASC,OAAO,qBAAqBC,SAAS;AAAA,MAAA,CAC7E;AAAA,IAGH,UAAA;AACEb,iBAAW,EAAK;AAAA,IAClB;AAAA,EACF,GAAG,CAACA,YAAYF,SAAS,CAAC;AAE1B,SAAO;AAAA,IACLC;AAAAA,IACAyB;AAAAA,EAAAA;AAEJ;AAEO,SAAAE,gBAAA5B,WAAA;AAAA,QAAAxW,IAAAC,EAAA,CAAA,GACL,CAAAwW,SAAAC,UAAA,IAA8BpW,SAAS,EAAK;AAAC,MAAAG;AAAAT,WAAAwW,aACZ/V,KAAAA,OAC/BiW,WAAW,EAAI,GACRF,UAASU,QACL;AAAA,IAAAC,QACC;AAAA,IAAKC,KACR,GAAGrB,QAAQ,IAAIS,UAASa,SAASC,OAAQ,mBAC5Cd,UAASa,OAAAA,EAASE,SAAU;AAAA,EAAA,CAE/B,EAACG,QACO,MAAA;AACPhB,eAAW,EAAK;AAAA,EAAC,CAClB,IACJ1W,OAAAwW,WAAAxW,OAAAS,MAAAA,KAAAT,EAAA,CAAA;AAZD,QAAAqY,eAAqB5X;AAYM,MAAAM;AAAA,SAAAf,EAAA,CAAA,MAAAqY,gBAAArY,SAAAyW,WAEpB1V,KAAA;AAAA,IAAA0V;AAAAA,IAAA4B;AAAAA,EAAAA,GAGNrY,OAAAqY,cAAArY,OAAAyW,SAAAzW,OAAAe,MAAAA,KAAAf,EAAA,CAAA,GAHMe;AAGN;AAGI,SAAAuX,qBAAA9B,WAAA;AAAA,QAAAxW,IAAAC,EAAA,CAAA,GACL0Q,QAAcC,SAAAA,GACd,CAAA6F,SAAAC,UAAA,IAA8BpW,SAAS,EAAK,GAC5CqW,OAAapI,kBACbqI,QAAc7D,sBAEd;AAAA,IAAAsE,QAAA5W;AAAAA,EAAAA,IAEIqS,yBADM;AAAA,IAAAyF,QAAAC;AAAAA,EAAAA,IAAA/X;AAAsB,MAAAM;AAAAf,IAAA,CAAA,MAAAwW,aAAAxW,EAAA,CAAA,MAAAwY,gBAAAxY,EAAA,CAAA,MAAA2Q,SAAA3Q,EAAA,CAAA,MAAA4W,SAAA5W,SAAA2W,QAI9B5V,KAAAmW,CAAAA,YAAA;AACE,QAAI,CAACP,MAAI;AACPhG,YAAK5O,KAAM;AAAA,QAAAyP,QACD;AAAA,QAAOpH,OACR;AAAA,MAAA,CACR;AAAC;AAAA,IAAA;AAGJsM,eAAW,EAAI;AAEf,UAAA;AAAA,MAAA+B;AAAAA,MAAAC;AAAAA,IAAAA,IAA2BC,KAAIC,eAAAA,EAAiBC,gBAAAA,GAChDC,wBAA8B;AAAA,MAAAL;AAAAA,MAAAC;AAAAA,IAAAA,GAC9BK,iBACEP,cAAYO,iBAAmB;AAAA,MAAApC;AAAAA,MAAAqC,iBAAwBF;AAAAA,IAAAA,CACnC,KADpBA;AACqB,WAEhBtC,UAASU,QACL;AAAA,MAAAC,QACC;AAAA,MAAMC,KACT,GAAGrB,QAAQ,IAAIS,UAASa,OAAAA,EAASC,OAAQ,cAC5Cd,UAASa,OAAAA,EAASE,SAAU;AAAA,MAC5BzV,MACI;AAAA,QAAA,GACDoV;AAAAA,QAAON;AAAAA,QAAAjH,QAEFgH,MAAI9I;AAAAA,QAAIkL;AAAAA,QAAAE,cAEFT,cAAYS;AAAAA,MAAAA;AAAAA,IAC5B,CACD,EAACjK,MACKyI,CAAAA,MAAA;AACL9G,YAAAA,MAAK5O,KAAM;AAAA,QAAAyP,QACD;AAAA,QAAOpH,OACR;AAAA,QAAoBqH,aACdgG,EAAC/F;AAAAA,MAAAA,CACf,GACK+F;AAAAA,IAAC,CACR,EAACC,QACO,MAAA;AACPhB,iBAAW,EAAK;AAAA,IAAC,CAClB;AAAA,EAAC,GACL1W,OAAAwW,WAAAxW,OAAAwY,cAAAxY,OAAA2Q,OAAA3Q,OAAA4W,OAAA5W,OAAA2W,MAAA3W,OAAAe,MAAAA,KAAAf,EAAA,CAAA;AA1CH,QAAAkZ,iBAAuBnY;AA4CtB,MAAAO;AAAA,SAAAtB,EAAA,CAAA,MAAAyW,WAAAzW,SAAAkZ,kBAGQ5X,KAAA;AAAA,IAAA4X;AAAAA,IAAAzC;AAAAA,EAAAA,GAGNzW,OAAAyW,SAAAzW,OAAAkZ,gBAAAlZ,OAAAsB,MAAAA,KAAAtB,EAAA,CAAA,GAHMsB;AAGN;ACrTL,MAAM6X,WAAwB,CAAA,GAQxBC,wBAAwB3U,cAA0C;AAAA,EACtEyU,gBAAgBA,MAAM;AAAA,EAAC;AAAA,EACvBG,cAAc,YAAA;AAAA,EAAA;AAAA,EACdC,oBAAoB;AACtB,CAAC;AAEM,SAAAC,oBAAA;AAAA,SACE3U,WAAWwU,qBAAqB;AAAC;AAG1C,SAASI,iBAAiBC,OAAiD;AACzE,SAAOA,MAAM1K,UAAUjG;AACzB;AAEO,SAAA4Q,uBAAAtV,OAAA;AAAA,QAAApE,IAAAC,EAAA,EAAA,GACL;AAAA,IAAAoX;AAAAA,EAAAA,IAAiBvE,sBAAAA,GACjB0D,YAAkBH,aAAagB,QAAMsC,iBAAmB,GACxD;AAAA,IAAAT,gBAAAU;AAAAA,IAAAnD;AAAAA,EAAAA,IAAyD6B,qBAAqB9B,SAAS,GAEvF3I,KAAWgM,SAEX,CAAAC,QAAAC,SAAA,IAA4BzZ,SAAS6Y,QAAQ,GAC7C,CAAAa,YAAAC,aAAA,IAAoC3Z,SAAAA,GAMpC,CAAA4Z,kBAAAC,mBAAA,IACE7Z,SAAAA;AAIG,MAAAG;AAAAT,IAAA,CAAA,MAAAwB,uBAAAd,IAAA,2BAAA,KAE0CD,YAAAM,QAAA;AAAO,UAAA;AAAA,MAAAqJ;AAAAA,MAAA0P,QAAAM;AAAAA,IAAAA,IAAArZ,KACpDsZ,kBAA0CP,SAAMzK,IAAK/C,OAKnD;AAEF,QAAK+N,gBAAevQ;AAGpBmQ,aAAAA,cAAc;AAAA,QAAAK,aAAclQ;AAAAA,QAAKiQ;AAAAA,MAAAA,CAAkB,GAC5C,IAAIE,QAAyCC,CAAAA,YAAA;AAClDL,4BAAoB,MAAMK,OAAO;AAAA,MAAC,CACnC;AAAA,EAAC,GACHxa,OAAAS,MAAAA,KAAAT,EAAA,CAAA;AAfD,QAAAqZ,eAAmC5Y;AAe7B,MAAAM;AAAAf,IAAA,CAAA,MAAAyW,WAAAzW,SAAA4Z,yBAGJ7Y,KAAA0Z,CAAAA,QAAA;AACE,QAAIhE;AAAO;AAGX,UAAA;AAAA,MAAAtM,aAAAA;AAAAA,MAAA,GAAA+M;AAAAA,IAAAA,IAAkCuD,KAClCvK,iBAAuB/F,aAAWlF,MAClCyV,oBAAwBvQ,cAAWwQ,QACxBxG,QAAC/C,QAGJ,EAAC7B,OAACiK,gBAAgB;AAE1B,QAAI,CAACa,mBAAevQ,QAAQ;AACrB8P,4BAAsB;AAAA,QAAA,GACtB1C;AAAAA,QAAOhH;AAAAA,QAAA0K,WAEC1O;AAAAA,MAAAA,CACZ;AAAC;AAAA,IAAA;AAIJ+N,kBAAc;AAAA,MAAA,GACTQ;AAAAA,MAAGJ,iBACNA;AAAAA,IAAAA,CACD;AAAA,EAAC,GACHra,OAAAyW,SAAAzW,OAAA4Z,uBAAA5Z,OAAAe,MAAAA,KAAAf,EAAA,CAAA;AA1BH,QAAAkZ,iBAAuBnY;AA4BtB,MAAAO;AAAAtB,WAAAka,oBAEyB5Y,KAAAA,MAAA;AACxB2Y,kBAAc/N,MAAS,GACvB6N,UAAUZ,QAAQ,GACde,oBACFA,iBAAiBhO,MAAS,GAE5BiO,oBAAoBjO,MAAS;AAAA,EAAC,GAC/BlM,OAAAka,kBAAAla,OAAAsB,MAAAA,KAAAtB,EAAA,CAAA;AAPD,QAAA6a,QAAcvZ;AAOQ,MAAAC;AAAAvB,IAAA,CAAA,MAAA6a,SAAA7a,EAAA,CAAA,MAAA8Z,UAAA9Z,EAAA,CAAA,MAAAka,oBAAAla,EAAA,CAAA,MAAA4Z,yBAAA5Z,UAAAga,cAEWzY,KAAAA,MAAA;AAC/B,QAAIyY;AACF,UAAI,iBAAiBA,YAAU;AAC7B,cAAA;AAAA,UAAA7P,aAAA4F;AAAAA,UAAAsK,iBAAAS;AAAAA,UAAA,GAAAC;AAAAA,QAAAA,IAAsDf;AACjDJ,8BAAsB;AAAA,UAAA,GACtB1C;AAAAA,UAAOhH,gBACM/F,cAAWlF;AAAAA,UAAK2V,WACrB7J,OAAMiK,QAASlB,MAAM,EAACzK,IAAK4L,QAGpC;AAAA,QAAA,CACH;AAAA,MAAC,OAAA;AAEF,cAAAC,aAAmBnK,OAAMoK,OAAQrB,MAAM,EAACzK,IAAK,CAAA+L,SAAAC,QAAA;AAC3C,gBAAAC,iBAAuBtB,WAAUK,gBAAiBpK,GAAC;AAAE,iBAC9C;AAAA,YAAAsL,OACE;AAAA,cAAA1N,IACDyN,eAAcrW;AAAAA,cAAKmF,OAChBkR,eAAc5J,WAAd;AAAA,cAA4BD,aACtB6J,eAAc7J;AAAAA,YAAAA;AAAAA,YAC5B+J,QACOD;AAAAA,UAAAA;AAAAA,QACT,CACF;AACDrB,2BAAmBgB,UAAU,GAC7Bf,oBAAoBjO,MAAS;AAAA,MAAC;AAGlC2O,UAAAA;AAAAA,EAAO,GACR7a,OAAA6a,OAAA7a,OAAA8Z,QAAA9Z,OAAAka,kBAAAla,OAAA4Z,uBAAA5Z,QAAAga,YAAAha,QAAAuB,MAAAA,KAAAvB,EAAA,EAAA;AA7BD,QAAAyb,eAAqBla,IA+BrBma,OAAa,CAAC,CAAC1B;AAMe,MAAAlW;AAAA9D,YAAA8Z,UAD1BhW,KAAAiN,OAAMiK,QAASlB,MAAM,EAACvK,OAAQoM,QAAsB,GAAC3b,QAAA8Z,QAAA9Z,QAAA8D,MAAAA,KAAA9D,EAAA,EAAA;AAHzD,QAAA4b,eAEK5B,YAAUK,iBAAyBvQ,UAAnC,KACDhG,GAAqDgG;AAExD,MAAA9F;AAAAhE,IAAA,EAAA,6BAAAU,IAAA,2BAAA,KAQUsD,KAAA;AAAA,IAAA7B,OAAQ;AAAA,EAAA,GAAOnC,QAAAgE,MAAAA,KAAAhE,EAAA,EAAA;AAAA,MAAAkE;AAAAlE,IAAA,EAAA,MAAA4b,eAAA5b,UAAAyb,gBALxBvX,KAAA,oBAAC,UACM,MAAA,mBACIuX,SAAAA,cACJ,MAAA,WACCI,MAAAA,UACC,OAAA7X,IACG4X,UAAAA,YAAAA,CAAW,GACrB5b,QAAA4b,aAAA5b,QAAAyb,cAAAzb,QAAAkE,MAAAA,KAAAlE,EAAA,EAAA;AARJ,QAAA8b,YACE5X;AAQD,MAAA+K;AAAAjP,IAAA,EAAA,MAAAyW,WAAAzW,UAAAkZ,kBAGQjK,KAAA;AAAA,IAAAiK;AAAAA,IAAAG;AAAAA,IAAAC,oBAAmD7C;AAAAA,EAAAA,GAAQzW,QAAAyW,SAAAzW,QAAAkZ,gBAAAlZ,QAAAiP,MAAAA,KAAAjP,EAAA,EAAA;AADpE,QAAA+b,eACS9M;AAGR,MAAAE;AAAAnP,IAAA,EAAA,MAAA6a,SAAA7a,EAAA,EAAA,MAAA6N,MAAA7N,EAAA,EAAA,MAAA8Z,UAAA9Z,UAAA0b,QAAA1b,EAAA,EAAA,MAAA8b,aAAA9b,EAAA,EAAA,MAAA4b,eAAA5b,EAAA,EAAA,MAAAga,cAII7K,KAAAuM,OACC,oBAAC,UACK7N,IACE6N,MACGb,SAAAA,OACF,OAAA,GAEL,QAAA,iBAAiBb,aACbA,WAAUM,cACVpQ,oBAAoB8P,YAAU7P,WAAa,GAG/C,QAAA,oBAAC,QAAa,SAAA,iBAAyB,SAAA,GAAS,MAAA,GAC7CyR,UAAAA,cACC,oBAAC,WAEG,6BAAC,MAAA,EAAc,SAAA,GACb,UAAA,oBAAC,MAAA,EAAK,UAAA,4DAAwD,EAAA,CAChE,GAEQ,WAAA,OAEV,UAAA,oBAAC,MAAA,EAAW,MAAA,GAAIE,UAAAA,WAAU,EAAA,CAC5B,IAVDA,UAAAA,CAcH,GAGF,UAAA,oBAAC,OAAA,EAAe,YAAU,OAAA,GACvB9B,sBAAUK,iBAAsBhL,IAAC,CAAA2M,SAAAC,QAChC,oBAAC,WAAA,EAEQxC,OAAAA,SACI,WAAAxJ,QAAM,GACT6J,QACGC,aAJNN,QAAKxU,IAIU,CAEvB,GACH,GACF,IAzCD,MA0COjF,QAAA6a,OAAA7a,QAAA6N,IAAA7N,QAAA8Z,QAAA9Z,QAAA0b,MAAA1b,QAAA8b,WAAA9b,QAAA4b,aAAA5b,QAAAga,YAAAha,QAAAmP,MAAAA,KAAAnP,EAAA,EAAA;AAAA,MAAAkc;AAAA,SAAAlc,EAAA,EAAA,MAAA+b,gBAAA/b,EAAA,EAAA,MAAAoE,MAAAC,YAAArE,EAAA,EAAA,MAAAmP,MA3CV+M,KAAA,qBAAA,sBAAA,UAAA,EAAuCH,OAAAA,cACpC5M,UAAAA;AAAAA,IAAAA;AAAAA,IA2CA/K,MAAKC;AAAAA,EAAAA,GACR,GAAiCrE,QAAA+b,cAAA/b,EAAA,EAAA,IAAAoE,MAAAC,UAAArE,QAAAmP,IAAAnP,QAAAkc,MAAAA,KAAAlc,EAAA,EAAA,GA7CjCkc;AA6CiC;AApL9B,SAAAP,SAAAlb,IAAA;AAiH8B,QAAA,CAAA,EAAA0b,OAAA,IAAA1b;AAAS,SAAK,CAAC,CAACwR;AAAK;AAjHnD,SAAAgJ,SAAAxa,IAAA;AAoF0C,QAAA,CAAAsE,KAAAkN,KAAA,IAAAxR;AAAY,SAAM;AAAA,IAAA2b,UAC7CrX;AAAAA,IAAGsX,WACFpK;AAAAA,EAAAA;AACZ;AAvFJ,SAAAb,SAAAqI,OAAA;AAAA,SA+CGA,MAAK1K,UAAW,UAAU0K,MAAKpV,SAASkL,OAAQiK,gBAA0B,IAA1E,CAAqEC,KAAK;AAAC;AA/C9E,SAAAnN,QAAAiP,OAAAtL,GAAA;AAAA,SAsBiE;AAAA,IAAAlB,OAC3DjG;AAAAA,IAAiB7D,MAClBsW,MAAK1N,MAAL,GAAeoC,CAAC;AAAA,IAAEyB,SACf6J,MAAKnR;AAAAA,IAAMqH,aACP8J,MAAK9J;AAAAA,EAAAA;AACnB;AA6JL,SAAA6K,UAAAlY,OAAA;AAAA,QAAApE,IAAAC,EAAA,EAAA,GAME;AAAA,IAAAwZ;AAAAA,IAAA8C;AAAAA,IAAAxC;AAAAA,IAAAD;AAAAA,EAAAA,IAA8C1V,OAC9CW,MAAY0U,MAAKxU,MACjBuX,cAAoBrc,OAA4B,IAAI;AAAC,MAAAM;AAAAT,IAAA,CAAA,MAAA+E,OAAA/E,SAAA+Z,aAInDtZ,KAAAgX,CAAAA,MAAA;AACEsC,cAAUtY,CAAAA,aAAc;AAAA,MAAA,GACnBA;AAAAA,MAAO,CACTsD,GAAG,IAAI0S,EAACgF,iBAAkBhF,EAACiF,QAAOzK;AAAAA,IAAAA,EACnC;AAAA,EAAC,GACJjS,OAAA+E,KAAA/E,OAAA+Z,WAAA/Z,OAAAS,MAAAA,KAAAT,EAAA,CAAA;AAPH,QAAA2c,WAAiBlc,IAWjBwR,QAA4B6H,OAAO/U,GAAG;AAAiB,MAAAhE,IAAAO;AAAAtB,WAAAuc,aAE7Cxb,KAAAA,MAAA;AACHwb,iBAGL5E,WAAW,MAAM6E,YAAW/a,SAAemb,MAAAA,GAAI,CAAC;AAAA,EAAC,GAChDtb,KAAA,CAACib,SAAS,GAACvc,OAAAuc,WAAAvc,OAAAe,IAAAf,OAAAsB,OAAAP,KAAAf,EAAA,CAAA,GAAAsB,KAAAtB,EAAA,CAAA,IALd6D,UAAU9C,IAKPO,EAAW;AAKD,QAAAC,KAAAkY,OAAK/H,WAAL;AAAwC,MAAA5N;AAAA9D,WAAAyZ,MAAAhI,eAAAzR,SAAAuB,MADjDuC,yBAAC,qBAAA,EACQ,OAAAvC,IACM,aAAAkY,MAAKhI,YAAAA,CAAY,GAC9BzR,EAAA,CAAA,IAAAyZ,MAAAhI,aAAAzR,OAAAuB,IAAAvB,OAAA8D,MAAAA,KAAA9D,EAAA,CAAA;AAAA,MAAAgE;AAAAhE,IAAA,CAAA,6BAAAU,IAAA,2BAAA,KAMOsD,KAAA;AAAA,IAAA6Y,QAAS;AAAA,EAAA,GAAW7c,OAAAgE,MAAAA,KAAAhE,EAAA,CAAA;AAAA,MAAAkE;AAAAlE,IAAA,EAAA,MAAA2c,YAAA3c,UAAAiS,SAL7B/N,yBAAC,UAAA,EACMsY,KAAAA,aACC,MAAA,GACCvK,OACG0K,UACH,OAAA3Y,GAAAA,CAAoB,GAC3BhE,QAAA2c,UAAA3c,QAAAiS,OAAAjS,QAAAkE,MAAAA,KAAAlE,EAAA,EAAA;AAAA,MAAAiP;AAAA,SAAAjP,EAAA,EAAA,MAAA8D,MAAA9D,UAAAkE,MAXJ+K,0BAAC,OAAA,EAAe,SAAA,GAAU,UACxBnL,UAAAA;AAAAA,IAAAA;AAAAA,IAIAI;AAAAA,EAAAA,EAAAA,CAOF,GAAQlE,QAAA8D,IAAA9D,QAAAkE,IAAAlE,QAAAiP,MAAAA,KAAAjP,EAAA,EAAA,GAZRiP;AAYQ;ACvQL,SAAS6N,gBACdrM,oBACAvC,WACAD,OACA;AACA,SAAO,CAAC,EAAEwC,mBAAmBsM,WAAW7O,YAAYD;AACtD;AAEO,SAAA+O,yBAAAC,MAAA;AAAA,QAAAjd,IAAAC,EAAA,CAAA,GAKL;AAAA,IAAAiZ;AAAAA,IAAAI;AAAAA,EAAAA,IAA6CC,kBAAAA;AAAmB,MAAA9Y;AAAAT,IAAA,CAAA,MAAAid,QAAAjd,SAAAkZ,kBACdzY,KAAA;AAAA,IAAA,GAC7Cwc;AAAAA,IAAIzN,MACD0J;AAAAA,EAAAA,GACPlZ,OAAAid,MAAAjd,OAAAkZ,gBAAAlZ,OAAAS,MAAAA,KAAAT,EAAA,CAAA;AAHD,QAAAkd,wBAA8BC,oBAAoB1c,EAGjD;AAAC,MAAAM;AAAA,SAAAf,EAAA,CAAA,MAAAsZ,sBAAAtZ,SAAAkd,yBAEKnc,KAAA;AAAA,IAAAuY;AAAAA,IAAA4D;AAAAA,EAAAA,GAGNld,OAAAsZ,oBAAAtZ,OAAAkd,uBAAAld,OAAAe,MAAAA,KAAAf,EAAA,CAAA,GAHMe;AAGN;AAMI,SAAAoc,oBAAAF,MAAA;AAAA,QAAAjd,IAAAC,EAAA,CAAA,GACL;AAAA,IAAAmd;AAAAA,IAAAN,iBAAAA;AAAAA,IAAAtN;AAAAA,EAAAA,IAAkDyN,MAElD,CAAAI,YAAAC,aAAA,IAAoChd,SAAwB4L,MAAS;AAAC,MAAAzL,IAAAM;AAAAf,IAAA,CAAA,MAAA8c,oBAAA9c,SAAAqd,cAAArd,EAAA,CAAA,MAAAwP,QAE5D/O,KAAAA,MAAA;AACJ4c,kBAAAP,qBACFtN,KAAK6N,UAAU,GAEfC,cAAcpR,MAAS;AAAA,EACxB,GACAnL,MAACsc,YAAYP,kBAAiBtN,IAAI,GAACxP,OAAA8c,kBAAA9c,OAAAqd,YAAArd,OAAAwP,MAAAxP,OAAAS,IAAAT,OAAAe,OAAAN,KAAAT,EAAA,CAAA,GAAAe,KAAAf,EAAA,CAAA,IANtC6D,UAAUpD,IAMPM,EAAmC;AAAC,MAAAO;AAAA,SAAAtB,SAAAod,oBAGrC9b,KAAAic,CAAAA,aAAA;AAEEH,qBAAiBI,WAAUpY,KAAM,CAACqY,MAAM,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,GACvEH,cAAcC,QAAQ;AAAA,EAAC,GACxBvd,OAAAod,kBAAApd,OAAAsB,MAAAA,KAAAtB,EAAA,CAAA,GALIsB;AAON;ACjDI,SAAAoc,8BAAAlQ,YAAAH,cAAA;AAAA,QAAArN,IAAAC,EAAA,EAAA,GACL0d,SAAeC,aAEf;AAAA,IAAA5J,cAAAA;AAAAA,IAAA6J;AAAAA,EAAAA,IAA+C/K,sBAAAA;AAAuB,MAAArS,IAAAM;AAAAf,IAAA,CAAA,MAAAqN,gBAAArN,SAAA2d,UAGjD5c,KAAA4c,OAAMzX,IAAKmH,YAAY,GAACrN,OAAAqN,cAAArN,OAAA2d,QAAA3d,OAAAe,MAAAA,KAAAf,EAAA,CAAA;AAA3C,QAAA4K,aAAmB7J;AACnB,MAAI,CAAC6J;AACH,UAAM,IAAI/F,MAAM,gBAAgBwI,YAAY,aAAa;AAE3D5M,OAAOmK;AANT,QAAA6F,qBAA2BhQ;AAOD,MAAAa;AAAAtB,IAAA,CAAA,MAAAqN,gBAAArN,SAAAgU,iBAIX1S,KAAA0S,cAAa3G,YAAY,GAACrN,OAAAqN,cAAArN,OAAAgU,eAAAhU,OAAAsB,MAAAA,KAAAtB,EAAA,CAAA;AAAA,MAAAuB;AAAAvB,IAAA,CAAA,MAAAqN,gBAAArN,SAAA6d,0BAChBtc,KAAAsc,uBAAuBxQ,YAAY,GAACrN,OAAAqN,cAAArN,OAAA6d,wBAAA7d,OAAAuB,MAAAA,KAAAvB,EAAA,CAAA;AAAA,MAAA8D;AAAA9D,IAAA,CAAA,MAAAsB,MAAAtB,UAAAuB,MAFpDuC,KAAA;AAAA,IAAA8P,WACMtS;AAAAA,IAA0Bwc,qBAChBvc;AAAAA,EAAAA,GACtBvB,OAAAsB,IAAAtB,QAAAuB,IAAAvB,QAAA8D,MAAAA,KAAA9D,EAAA,EAAA;AAJH,QAAA;AAAA,IAAA4T;AAAAA,IAAAkK;AAAAA,EAAAA,IACEha,IAMF;AAAA,IAAAia;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,IAAAtB,UAAAS;AAAAA,IAAAc;AAAAA,EAAAA,IAMI3L,mBACJ;AAAA,IAAA4L;AAAAA,EAAAA,IAA4BC,eAAAA;AAAgB,MAAApa;AAAAhE,YAAAke,aACRla,KAAAka,aAAA,CAAA,GAAele,QAAAke,WAAAle,QAAAgE,MAAAA,KAAAhE,EAAA,EAAA;AAAnD,QAAA;AAAA,IAAAiO;AAAAA,IAAAC;AAAAA,IAAAmQ;AAAAA,EAAAA,IAAoCra;AAAe,MAAAE;AAAAlE,IAAA,EAAA,MAAAwN,cAAAxN,UAAAyQ,sBAAAzQ,EAAA,EAAA,MAAAme,qBAEtBja,KAAAia,oBACzBG,aAAa9Q,YAAY2Q,iBAGF,IAFvB1N,mBAAkBsM,WAAlBvP,aAEE+Q,WAAW/Q,UAAU,GAACxN,QAAAwN,YAAAxN,QAAAyQ,oBAAAzQ,QAAAme,mBAAAne,QAAAkE,MAAAA,KAAAlE,EAAA,EAAA;AAJ5B,QAAAwe,uBAA6Bta,IAM7Bua,gBAAsBN,oBAAA,CAAqBE,SAAOvP,MAAQ,CAACb,OAAKa,OAAN,CAAgBZ,WAASY;AAAK,MAAAG;AAAAjP,IAAA,EAAA,MAAAyQ,sBAAAzQ,EAAA,EAAA,MAAAiO,SAAAjO,EAAA,EAAA,MAAAkO,aAAAlO,EAAA,EAAA,MAAAme,qBAAAne,UAAAqe,WAC3DpP,KAAAkP,oBAAA,CACxB,CAACE,UACFvB,gBAAgBrM,oBAAoBvC,WAAWD,KAAK,GAACjO,QAAAyQ,oBAAAzQ,QAAAiO,OAAAjO,QAAAkO,WAAAlO,QAAAme,mBAAAne,QAAAqe,SAAAre,QAAAiP,MAAAA,KAAAjP,EAAA,EAAA;AAFzD,QAAA0e,uBAA6BzP,IAI7B;AAAA,IAAA6G;AAAAA,EAAAA,IAAiBH,gBAAAA,GACjBgJ,eAAqB7I,OAAOrM,cAAc;AAAC,MAAA0F;AAAAnP,IAAA,EAAA,MAAAwe,wBAAAxe,UAAAyQ,sBAEItB,KAAA;AAAA,IAAA3B,YACjCgR;AAAAA,IAAoB5T,YACpB6F;AAAAA,EAAAA,GACbzQ,QAAAwe,sBAAAxe,QAAAyQ,oBAAAzQ,QAAAmP,MAAAA,KAAAnP,EAAA,EAAA;AAHD,QAAAwO,iBAAuBL,wBAAwBgB,EAG9C,GACD;AAAA,IAAAyP;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,EAAAA,IACEC,kBAAkBP,oBAAoB;AAAC,MAAAtC;AAAAhN,OAAA;AAAA,QAAA8P;AAAAhf,MAAA,EAAA,MAAA6e,oBAAA7e,UAAAwe,wBAAAxe,EAAA,EAAA,MAAAge,kBAAAhe,EAAA,EAAA,MAAA0e,wBAAA1e,EAAA,EAAA,MAAAye,iBAAAze,EAAA,EAAA,MAAAod,oBAAApd,EAAA,EAAA,MAAAyQ,sBAAAzQ,EAAA,EAAA,MAAA4T,aAAA5T,EAAA,EAAA,MAAA8d,uBAAA9d,EAAA,EAAA,MAAAie,aAAAje,UAAA+d,iBAAA/d,EAAA,EAAA,MAAA8e,uBAAA9e,EAAA,EAAA,MAAA2e,gBAAA3e,EAAA,EAAA,MAAA4e,kBAG1BI,MAAA;AAAA,MAAAR;AAAAA,MAAA/N;AAAAA,MAAAgO;AAAAA,MAAAC;AAAAA,MAAAX;AAAAA,MAAAC;AAAAA,MAAAC;AAAAA,MAAAb;AAAAA,MAAAuB;AAAAA,MAAAC;AAAAA,MAAAC;AAAAA,MAAAC;AAAAA,MAAAlL;AAAAA,MAAAkK;AAAAA,IAAAA,GAeZ9d,QAAA6e,kBAAA7e,QAAAwe,sBAAAxe,QAAAge,gBAAAhe,QAAA0e,sBAAA1e,QAAAye,eAAAze,QAAAod,kBAAApd,QAAAyQ,oBAAAzQ,QAAA4T,WAAA5T,QAAA8d,qBAAA9d,QAAAie,WAAAje,QAAA+d,eAAA/d,QAAA8e,qBAAA9e,QAAA2e,cAAA3e,QAAA4e,gBAAA5e,QAAAgf,OAAAA,MAAAhf,EAAA,EAAA;AAfD,UAAAif,OAAaD;AAgBb,QAAI,CAACxQ,gBAAc;AAAA,UAAA0Q;AAAAlf,gBAAAif,QACVC,OAAA;AAAA,QAAA,GAAID;AAAAA,QAAIxI,SAAW;AAAA,QAAIjI,gBAAkBtC;AAAAA,MAAAA,GAAUlM,QAAAif,MAAAjf,QAAAkf,QAAAA,OAAAlf,EAAA,EAAA,GAA1Dkc,KAAOgD;AAAP,YAAAhQ;AAAAA,IAA0D;AAC3D,QAAAgQ;AAAAlf,MAAA,EAAA,MAAAwO,kBAAAxO,UAAAif,QACMC,MAAA;AAAA,MAAA,GACFD;AAAAA,MAAIxI,SACE;AAAA,MAAKjI;AAAAA,IAAAA,GAEfxO,QAAAwO,gBAAAxO,QAAAif,MAAAjf,QAAAkf,OAAAA,MAAAlf,EAAA,EAAA,GAJDkc,KAAOgD;AAAAA,EAIN;AAiBD,SAzCwChD;AA2C9B;AAGd,SAAA6C,kBAAAP,sBAAA;AAAA,QAAAxe,IAAAC,EAAA,CAAA,GACE,CAAA2e,gBAAAO,iBAAA,IAA4C7e,SAA4BgM,OAAQ;AAAC,MAAA7L;AAAAT,IAAA,CAAA,MAAAwB,uBAAAd,IAAA,2BAAA,KAC5CD,KAAA+O,CAAAA,SAAA;AACnC2P,sBAAkB1d,CAAAA,YAAa,CAAA,GAAIA,SAAS+N,IAAI,CAAC;AAAA,EAAC,GACnDxP,OAAAS,MAAAA,KAAAT,EAAA,CAAA;AAFD,QAAA6e,mBAAyBpe;AAEnB,MAAAM;AAAAf,IAAA,CAAA,MAAAwB,uBAAAd,IAAA,2BAAA,KACkCK,KAAA+O,CAAAA,WAAA;AACtCqP,sBAAkBC,CAAAA,cAAa3d,UAAO8N,OAAQjF,CAAAA,MAAOkF,OAAIvK,SAAUqF,EAACrF,IAAK,CAAC;AAAA,EAAC,GAC5EjF,OAAAe,MAAAA,KAAAf,EAAA,CAAA;AAFD,QAAA8e,sBAA4B/d;AAEtB,MAAAO;AAAAtB,IAAA,CAAA,MAAAwB,uBAAAd,IAAA,2BAAA,KAEIY,KAAAA,MAAA;AAER6d,sBAAkB,CAAA,CAAE;AAAA,EAAC,GACtBnf,OAAAsB,MAAAA,KAAAtB,EAAA,CAAA;AAAA,MAAAuB;AAAAvB,WAAAwe,wBAAEjd,KAAA,CAACid,oBAAoB,GAACxe,OAAAwe,sBAAAxe,OAAAuB,MAAAA,KAAAvB,EAAA,CAAA,GAHzB6D,UAAUvC,IAGPC,EAAsB;AAAC,MAAAuC;AAAA,SAAA9D,SAAA4e,kBAEnB9a,KAAA;AAAA,IAAA8a;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,EAAAA,GAIN9e,OAAA4e,gBAAA5e,OAAA8D,MAAAA,KAAA9D,EAAA,CAAA,GAJM8D;AAIN;AAlBH,SAAAwI,UAAA;AAAA,SACgF,CAAA;AAAE;ACnG3E,SAAA+S,8BAAAjb,OAAA;AAAA,QAAApE,IAAAC,EAAA,CAAA,GACL;AAAA,IAAAuN;AAAAA,IAAAH;AAAAA,EAAAA,IAAmCjJ,OACnC6N,QAAcyL,8BAA8BlQ,YAAYH,YAAY;AAAC,MAAA5M;AAAA,SAAAT,SAAAoE,MAAAC,YAAArE,SAAAiS,SAEnExR,KAAA,oBAAA,sBAAA,UAAA,EAAuCwR,OAAQ7N,UAAAA,MAAKC,SAAAA,CAAU,GAAiCrE,EAAA,CAAA,IAAAoE,MAAAC,UAAArE,OAAAiS,OAAAjS,OAAAS,MAAAA,KAAAT,EAAA,CAAA,GAA/FS;AAA+F;ACV5F,SAAA6e,qBAAAlb,OAAA;AAAA,QAAApE,IAAAC,EAAA,CAAA,GACL;AAAA,IAAAuN;AAAAA,IAAAH;AAAAA,EAAAA,IAAmCjJ;AAAK,MAAA3D;AAAAT,WAAAoE,SAGnC3D,KAAA2D,MAAK8N,cAAe9N,KAAK,GAACpE,OAAAoE,OAAApE,OAAAS,MAAAA,KAAAT,EAAA,CAAA;AAAA,MAAAe;AAAA,SAAAf,EAAA,CAAA,MAAAwN,cAAAxN,SAAAqN,gBAAArN,EAAA,CAAA,MAAAS,MAD7BM,yBAAC,+BAAA,EAA4CsM,cAA0BG,YACpE/M,UAAAA,GAAAA,CACH,GAAgCT,OAAAwN,YAAAxN,OAAAqN,cAAArN,OAAAS,IAAAT,OAAAe,MAAAA,KAAAf,EAAA,CAAA,GAFhCe;AAEgC;ACNpC,MAAMwe,SAASC;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,GAeTC,YAAYC,OAAOC,IAAGC,WAAA;AAAA,EAAAC,aAAA;AAAA,EAAAC,aAAA;AAAA,CAAA,mBACRP,MAAM,2CAIbQ,gBAAgBC,WAAW,SAAAvf,IAAAP,KAAA;AAAA,QAAAF,IAAAC,EAAA,CAAA,GACtC;AAAA,IAAAoE;AAAAA,IAAA4b,YAAAlf;AAAAA,EAAAA,IAAAN,IAWkDa,KAAA,GAThDP,OAAAmL,SAAA,MAAAnL,EAS6D;AAAI,MAAAQ;AAAAvB,WAAAsB,MAArCC,KAAA;AAAA,IAAA2e,mBAAoB5e;AAAAA,EAAAA,GAAkBtB,OAAAsB,IAAAtB,OAAAuB,MAAAA,KAAAvB,EAAA,CAAA;AAAA,MAAA8D;AAAA,SAAA9D,EAAA,CAAA,MAAAqE,YAAArE,SAAAE,OAAAF,EAAA,CAAA,MAAAuB,MAAlEuC,yBAAC,WAAA,EAAe5D,KAAY,OAAAqB,cAE5B,GAAYvB,OAAAqE,UAAArE,OAAAE,KAAAF,OAAAuB,IAAAvB,OAAA8D,MAAAA,KAAA9D,EAAA,CAAA,GAFZ8D;AAEY,CAEf,GChCKqc,OAAOT,OAAOU,KAAIR,WAAA;AAAA,EAAAC,aAAA;AAAA,EAAAC,aAAA;AAAA,CAAA,4DAOlBO,OAAOb;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,GASPc,UAAUZ,OAAOa,IAAGX,WAAA;AAAA,EAAAC,aAAA;AAAA,EAAAC,aAAA;AAAA,CAAA,2KAWTO,IAAI,gKAWfG,WAAWd,OAAOU,KAAIR,WAAA;AAAA,EAAAC,aAAA;AAAA,EAAAC,aAAA;AAAA,CAAA;AAcrB,SAASW,aAAarc,OAAuC;AAClE,QAAM;AAAA,IAAC2J,QAAQ;AAAA,EAAA,IAAa3J,OACtBsc,SAASC,oBAAAA,GAETC,QAAQC,QAAQ,MAChBH,WAAW,SAEN;AAAA,IACJ,4BAA6BI,OAAO,GAAG,EAAEC;AAAAA,IACzC,0BAA2BD,OAAO,GAAG,EAAEC;AAAAA,EAAAA,IAKrC;AAAA,IACJ,4BAA6BD,OAAO,GAAG,EAAEC;AAAAA,IACzC,0BAA2BD,OAAO,GAAG,EAAEC;AAAAA,EAAAA,GAEzC,CAACL,MAAM,CAAC;AAEX,SACE,qBAAC,MAAA,EAAK,cAAY3S,OAAO,OACvB,UAAA;AAAA,IAAA,oBAAC,WACC,OAAM,MACN,QAAO,MACP,SAAQ,aACR,MAAK,QACL,OAAM,8BAEN,UAAA,oBAAC,YAAO,IAAG,QAAO,IAAG,QAAO,GAAE,SAAO,EAAA,CACvC;AAAA,IACA,oBAAC,YACC,UAAA,oBAAC,MAAA,EAAK,IAAG,QAAO,MAAM,GAAG,OAAO;AAAA,MAACiT,OAAO;AAAA,IAAA,GACtC,UAAA,oBAAC,cAAA,EAAa,OAAO;AAAA,MAACA,OAAO;AAAA,IAAA,EAAS,CAAE,GAC1C,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;AC3FO,SAAAC,gBAAAC,QAAA;AAAA,QAAAlhB,IAAAC,EAAA,CAAA;AAAA,MAAAQ;AAAAT,IAAA,CAAA,6BAAAU,IAAA,2BAAA,KAEUD,KAAA;AAAA,IAAA0gB,UAAW;AAAA,IAAUC,YAAc;AAAA,EAAA,GAAcphB,OAAAS,MAAAA,KAAAT,EAAA,CAAA;AAAA,MAAAe;AAAAf,IAAA,CAAA,MAAAwB,uBAAAd,IAAA,2BAAA,KAIxDK,KAAA,oBAAC,MAAA,EAAc,SAAA,GAAG,YAChB,UAAA,oBAAC,MAAA,EAAW,OAAA,UACV,UAAA,oBAAC,MAAA,EAAW,SAAG,oCAAsB,EAAA,CACvC,EAAA,CACF,GAAOf,OAAAe,MAAAA,KAAAf,EAAA,CAAA;AAAA,MAAAsB;AAAA,SAAAtB,EAAA,CAAA,MAAAwB,uBAAAd,IAAA,2BAAA,KARbY,KAAA,oBAAC,MAAA,EAAY,OAAAb,IAAoE,qBAC/E,UAAA,oBAAC,SAAA,EACW,WAAA,QAER,SAAAM,IAOF,UAAA,oBAAC,iBAA0B,YAAA,KACzB,8BAAC,cAAA,EAAmB,OAAA,UAAQ,EAAA,CAC9B,GACF,EAAA,CACF,GAAOf,OAAAsB,MAAAA,KAAAtB,EAAA,CAAA,GAfPsB;AAeO;AChBX,MAAM+f,cAAkC,CAAA;AAEjC,SAAAC,kBAAA9Z,MAAA+Z,iBAAA;AAAA,QAAAvhB,IAAAC,EAAA,CAAA,GACL2S,UAAgBD,yBAAAA,GAEhBvD,SADuBwD,WAAW,oBAAoBA,UAAUA,QAAOpE,iBAAhDtC,SACKkD;AAAO,MAAA3O;AAAA,MAAAT,EAAA,CAAA,MAAAwH,QAAAxH,SAAAuhB,mBAAAvhB,EAAA,CAAA,MAAAoP,OAAA;AAAAF,SAAA;AAGjC,YAAAsS,iBAAuBpS,OAAKG,OACjBjD,OACD,GAAC6H,QAAC/C,QACH,GAAC7B,OACN0L,QAII,EAAC1L,OAACkS,CAAAA,aAAA;AACN,YAAI,CAACA,SAAQja,QAAT,CAAmBA,KAAIsC;AAAO,iBACzB;AAET,cAAA4X,aAAmB3M,aAAa0M,SAAQja,IAAK;AAE7C,eAAI,CAAC+Z,mBAAmBG,WAAU5X,WAAYtC,KAAIsC,SACzC,KAGFtC,KAAIoE,MAAO,CAAA+V,aAAA1R,MAAA;AAChB,gBAAA2R,gBAAsBF,WAAWzR,CAAC;AAClC,iBAAI,OAAO0R,eAAgB,WAClBA,gBAAgBC,gBAErBzM,aAAawM,WAA4B,KAAzCC,iBAA8CzM,aAAayM,aAAa,IACnED,YAAW1c,SAAU2c,cAAa3c,OAEpC;AAAA,QAAK,CACb;AAAA,MAAC,CACH;AACH,UAAI,CAACuc,gBAAc1X,QAAQ;AACzBrJ,aAAO4gB;AAAP,cAAAnS;AAAAA,MAAkB;AACnB,UAAAnO;AAAAf,eAAAwH,QAEyBzG,KAAAyQ,YAAYqQ,WAAWrQ,QAAQhK,IAAI,GAACxH,OAAAwH,MAAAxH,OAAAe,MAAAA,KAAAf,EAAA,CAAA,GAA9DS,KAAO+gB,eAAcnS,IAAKtO,EAAoC;AAAA,IAAC;AAAAf,WAAAwH,MAAAxH,OAAAuhB,iBAAAvhB,OAAAoP,OAAApP,OAAAS;AAAAA,EAAA;AAAAA,SAAAT,EAAA,CAAA;AAAA,SAlC1DS;AAmC2B;AAxC7B,SAAAwa,SAAAvL,GAAA;AAAA,SAWGA,EAACU,YACD,oBAAIC,KAAAA,GAAMC,QAAAA,IAAa,IAAID,KAAKX,EAACU,OAAQ,EAACE,YAAarD;AAAsB;AAZhF,SAAAmE,SAAAtB,QAAA;AAAA,SAQmBN,OAAIiS,YAAJ,CAAA;AAAmB;AARtC,SAAAnV,QAAAkD,MAAA;AAAA,SAOkB,CAACA,KAAI2B;AAAM;AAoC7B,SAAS0Q,WAAWJ,UAAsBja,MAAYsa,QAAmC;AAC9F,SAAO;AAAA,IACLnL,MAAM;AAAA,MACJ9I,IAAI,oBAAoB4T,SAASxc,IAAI;AAAA,MACrC4a,aAAa9S;AAAAA,IAAAA;AAAAA,IAEfvF;AAAAA,IACAua,WAAW;AAAA,IACXC,cAAcP,UAAUrR,YAAW,oBAAIC,KAAAA,GAAO4R,YAAAA;AAAAA,EAAY;AAE9D;ACnDO,SAAAC,mBAAA9d,OAAA;AAAA,QAAApE,IAAAC,EAAA,CAAA,GACL;AAAA,IAAA2K;AAAAA,EAAAA,IAAqBxG;AAIrB,MACE,CAHgCqH,kBAAkBb,UAAU,KAI5DA,WAAUE,KAAKoJ,WAAY,SAAS,KACpCtJ,WAAUE,SAAU7B,yBAAuB;AAAA,QAAAxI;AAAA,WAAAT,SAAAoE,SAEpC3D,MAAA2D,MAAK8N,cAAe9N,KAAK,GAACpE,OAAAoE,OAAApE,OAAAS,OAAAA,MAAAT,EAAA,CAAA,GAA1BS;AAAAA,EAA0B;AAEnC,MACE,CAACkK,OAAOvG,MAAKwG,YAAa,UAAU,KACpCxG,MAAK+d,YAAa,UAClB/d,MAAK+d,YAAa7Z,cAAY;AAAA,QAAA7H;AAAA,WAAAT,SAAAoE,SAEvB3D,MAAA,oBAAC,aAAA,EAAW,GAAK2D,OAAQA,UAAAA,MAAKC,UAAU,GAAcrE,OAAAoE,OAAApE,OAAAS,OAAAA,MAAAT,EAAA,CAAA,GAAtDS;AAAAA,EAAsD;AAC9D,MAAAA;AAAA,SAAAT,SAAAoE,SAEM3D,KAAA2D,MAAK8N,cAAe9N,KAAK,GAACpE,OAAAoE,OAAApE,OAAAS,MAAAA,KAAAT,EAAA,CAAA,GAA1BS;AAA0B;AAGnC,SAAA2hB,YAAAhe,OAAA;AAAA,QAAApE,IAAAC,EAAA,CAAA;AAAA,MAAAQ;AAAAT,IAAA,CAAA,MAAAoE,MAAAwG,cAEanK,KAAA4hB,kBAAkBje,MAAKwG,UAAoD,KAApCL,oBAAoBnG,MAAKwG,UAAW,GAAC5K,EAAA,CAAA,IAAAoE,MAAAwG,YAAA5K,OAAAS,MAAAA,KAAAT,EAAA,CAAA;AADvF,QAAAsiB,iBACQ,CAAC,CAAE7hB,IAKX8hB,iBADiBjB,kBAAkBld,MAAKoD,MAAO8a,cAAc,EAC9B,CAAA;AAAG,MAAAvhB;AAAAf,WAAAuiB,kBAI7BxhB,KAAAwhB,kBACC,oBAAC,KAAA,EACC,UAAA,oBAAC,iBAAA,EAA0BA,UAAAA,eAAAA,CAAc,GAC3C,GACDviB,OAAAuiB,gBAAAviB,OAAAe,MAAAA,KAAAf,EAAA,CAAA;AAAA,MAAAsB;AAAAtB,WAAAe,MALHO,yBAAC,MAAA,EAAU,KAAA,GAAS,OAAA,UAAiB,SAAA,iBAClCP,UAAAA,GAAAA,CAKH,GAAOf,OAAAe,IAAAf,OAAAsB,MAAAA,KAAAtB,EAAA,CAAA;AAPT,QAAAwiB,UACElhB;AAOD,MAAAC;AAAA,SAAAvB,EAAA,CAAA,MAAAwiB,WAAAxiB,SAAAoE,SAEM7C,KAAA6C,MAAK8N,cAAe;AAAA,IAAA,GACtB9N;AAAAA,IAAKoe,SAECpe,MAAKoe;AAAAA,IAAQC,iBAGLD;AAAAA,EAAAA,CAClB,GAACxiB,OAAAwiB,SAAAxiB,OAAAoE,OAAApE,OAAAuB,MAAAA,KAAAvB,EAAA,CAAA,GAPKuB;AAOL;ACrDJ,MAAMmhB,cAAchD,OAAOiD,IAAI,EAAC/C,WAAA;AAAA,EAAAC,aAAA;AAAA,EAAAC,aAAA;AAAA,CAAA;AAMzB,SAAA8C,eAAAxe,OAAA;AAAA,QAAApE,IAAAC,EAAA,CAAA;AAAA,MAAAQ;AAAAT,WAAAoE,SAGD3D,KAAA,oBAAC,eAAA,EAAa,GAAK2D,OAAK,GAAIpE,OAAAoE,OAAApE,OAAAS,MAAAA,KAAAT,EAAA,CAAA;AAAA,MAAAe;AAAA,SAAAf,SAAAoE,MAAAuY,YAAA3c,SAAAS,MAD9BM,yBAAC,cAAA,EAAuB,UAAAqD,MAAKuY,UAC3Blc,UAAAA,GAAAA,CACF,GAAeT,EAAA,CAAA,IAAAoE,MAAAuY,UAAA3c,OAAAS,IAAAT,OAAAe,MAAAA,KAAAf,EAAA,CAAA,GAFfe;AAEe;AAIZ,SAAA8hB,aAAAze,OAAA;AAAA,QAAApE,IAAAC,EAAA,EAAA,GAGL;AAAA,IAAA0c;AAAAA,EAAAA,IAAmBvY,OACnB,CAAA0e,OAAAC,QAAA,IAA0BziB,SAAAA;AAA6B,MAAAG;AAAAT,IAAA,CAAA,MAAAwB,uBAAAd,IAAA,2BAAA,KAExBD,KAAAqV,CAAAA,WAAA;AAC7BiN,aAASjN,OAAMgN,KAAM;AAAA,EAAC,GACvB9iB,OAAAS,MAAAA,KAAAT,EAAA,CAAA;AAFD,QAAAgjB,cAAmBviB;AAEb,MAAAM;AAAAf,WAAA2c,YAEyB5b,KAAAA,MAAA;AAC7B4b,aAASa,WAAUpY,KAAMqY,MAAAA,CAAO,CAAC,GACjCsF,SAAS7W,MAAS;AAAA,EAAC,GACpBlM,OAAA2c,UAAA3c,OAAAe,MAAAA,KAAAf,EAAA,CAAA;AAHD,QAAAijB,aAAmBliB;AAGL,MAAAO;AAAAtB,IAAA,CAAA,6BAAAU,IAAA,2BAAA,KACcY,KAAAA,MAAMyhB,SAAS7W,MAAS,GAAClM,OAAAsB,MAAAA,KAAAtB,EAAA,CAAA;AAArD,QAAAkjB,UAAgB5hB;AAA0C,MAAAC;AAAAvB,IAAA,CAAA,MAAAoE,MAAAC,YAC1C9C,KAAA,oBAAC,eAAA,EAAuByhB,SAAAA,aAAa5e,UAAAA,MAAKC,SAAAA,CAAU,GAAgBrE,EAAA,CAAA,IAAAoE,MAAAC,UAAArE,OAAAuB,MAAAA,KAAAvB,EAAA,CAAA;AAApF,QAAAmjB,UAAgB5hB;AAAoE,MAAAuC;AAAA,SAAA9D,EAAA,CAAA,MAAAmjB,WAAAnjB,SAAA8iB,SAAA9iB,EAAA,CAAA,MAAAijB,cAE7Enf,KAAAgf,QACL,oBAAC,MAAA,EAAK,QAAA,IAAY,MAAA,YAAoB,SAAA,GAAoB,qBACxD,UAAA,qBAAC,OAAA,EAAa,OAAA,GACZ,UAAA;AAAA,IAAA,oBAAC,MAAA,EAAK,OAAA,IAAa,QAAA,YAAW,UAAA,sBAE9B;AAAA,IAEA,oBAAC,aAAA,EAAkB,MAAA,GAAY,SAAA,GAAQ,MAAA,YAAW,QAAA,IAC/CK,UAAAA,QAAAA,CACH;AAAA,yBAEC,MAAA,EAAW,OAAA,QAAa,MAAA,GAAQ,KAAA,GAC/B,UAAA;AAAA,MAAA,oBAAC,KAAA,EAAU,MAAA,GACT,UAAA,oBAAC,QAAA,EAAY,MAAA,WAAmBD,SAAAA,SAAc,MAAA,UAAA,CAAS,GACzD;AAAA,0BACC,QAAA,EAAY,MAAA,eAAuBD,SAAAA,YAAiB,MAAA,WAAA,CAAU;AAAA,IAAA,EAAA,CACjE;AAAA,EAAA,GACF,EAAA,CACF,IAlBKE,SAqBNnjB,OAAAmjB,SAAAnjB,OAAA8iB,OAAA9iB,OAAAijB,YAAAjjB,OAAA8D,MAAAA,KAAA9D,EAAA,CAAA,GArBM8D;AAqBN;AAGH,SAAAsf,cAAAhf,OAAA;AAAA,QAAApE,IAAAC,EAAA,CAAA,GACEqiB,iBACQD,kBAAkBje,MAAKwG,UAAoD,KAApCL,oBAAoBnG,MAAKwG,UAAW,GAGnFqH,QAAc7N,MAAK6N;AAEnB,MAAIqQ,kBAAArQ,SAAA,CAA6BA,MAAKnI,QAAiB;AAAA,QAAArJ;AAAA,WAAAT,SAAAoE,SAC9C3D,MAAA2D,MAAK8N,cAAe;AAAA,MAAA,GAAI9N;AAAAA,MAAK6N,OAAS/F;AAAAA,IAAAA,CAAU,GAAClM,OAAAoE,OAAApE,OAAAS,OAAAA,MAAAT,EAAA,CAAA,GAAjDS;AAAAA,EAAiD;AACzD,MAAAA;AAAA,SAAAT,SAAAoE,SAEM3D,KAAA2D,MAAK8N,cAAe9N,KAAK,GAACpE,OAAAoE,OAAApE,OAAAS,MAAAA,KAAAT,EAAA,CAAA,GAA1BS;AAA0B;ACjE5B,SAAA4iB,gBAAAjf,OAAA;AAAA,QAAApE,IAAAC,EAAA,EAAA,GACLwhB,WAAiBH,kBAAkBld,MAAKoD,MAAO,EAAI,GACnD;AAAA,IAAAmV;AAAAA,EAAAA,IAAmB2G,iBAAAA,GACnBve,MAAYX,MAAK6N,MAAMhN;AAAK,MAAAxE;AAAAT,IAAA,CAAA,MAAA+E,OAAA/E,SAAA2c,YAE1Blc,KAAA8iB,CAAAA,eAAA;AACOxe,WAGL4X,SAASa,WAAUpY,KAAMme,UAAU,EAACC,UAAW;AAAA,MAAAve,MAAOF;AAAAA,IAAAA,CAAI,CAAC;AAAA,EAAC,GAC7D/E,OAAA+E,KAAA/E,OAAA2c,UAAA3c,OAAAS,MAAAA,KAAAT,EAAA,CAAA;AANH,QAAAyjB,gBAAsBhjB,IAStB8hB,iBAAuBd,SAAQ,CAAA;AAAG,MAAA1gB;AAAAf,WAAAoE,SAIbrD,KAAAqD,MAAK8N,cAAe9N,KAAK,GAACpE,OAAAoE,OAAApE,OAAAe,MAAAA,KAAAf,EAAA,CAAA;AAAA,MAAAsB;AAAAtB,WAAAe,MAAzCO,KAAA,oBAAC,KAAA,EAAU,MAAA,GAAIP,UAAAA,IAA2B,GAAMf,OAAAe,IAAAf,OAAAsB,MAAAA,KAAAtB,EAAA,CAAA;AAAA,MAAAuB;AAAAvB,WAAAuiB,kBAC/ChhB,KAAAghB,kBAAkB,oBAAC,mBAA0BA,UAAAA,eAAAA,CAAc,GAAIviB,OAAAuiB,gBAAAviB,OAAAuB,MAAAA,KAAAvB,EAAA,CAAA;AAAA,MAAA8D;AAAA9D,IAAA,CAAA,MAAAsB,MAAAtB,UAAAuB,MAFlEuC,0BAAC,MAAA,EAAW,OAAA,UAAiB,SAAA,iBAC3BxC,UAAAA;AAAAA,IAAAA;AAAAA,IACCC;AAAAA,EAAAA,EAAAA,CACH,GAAOvB,OAAAsB,IAAAtB,QAAAuB,IAAAvB,QAAA8D,MAAAA,KAAA9D,EAAA,EAAA;AAAA,MAAAgE;AAAA,SAAAhE,EAAA,EAAA,MAAAyjB,iBAAAzjB,UAAA8D,MAJTE,KAAA,oBAAC,cAAA,EAAuByf,UAAAA,eACtB3f,UAAAA,GAAAA,CAIF,GAAe9D,QAAAyjB,eAAAzjB,QAAA8D,IAAA9D,QAAAgE,MAAAA,KAAAhE,EAAA,EAAA,GALfgE;AAKe;ACxBZ,MAAM0f,0BAA0Bjf,cAAuByH,MAAS;AAEhE,SAAAyX,sBAAAvf,OAAA;AAAA,QAAApE,IAAAC,EAAA,CAAA,GAEsCQ,KAAA2D,MAAK6N;AAAM,MAAAlR;AAAAf,WAAAoE,SAC/CrD,KAAAqD,MAAK8N,cAAe9N,KAAK,GAACpE,OAAAoE,OAAApE,OAAAe,MAAAA,KAAAf,EAAA,CAAA;AAAA,MAAAsB;AAAAtB,WAAAe,MAA7BO,KAAA,oBAAA,UAAA,EAAGP,cAA0B,GAAIf,OAAAe,IAAAf,OAAAsB,MAAAA,KAAAtB,EAAA,CAAA;AAAA,MAAAuB;AAAA,SAAAvB,SAAAoE,MAAA6N,SAAAjS,SAAAsB,MADnCC,KAAA,oBAAA,wBAAA,UAAA,EAAyC,OAAAd,IACvCa,UAAAA,GAAAA,CACF,GAAmCtB,EAAA,CAAA,IAAAoE,MAAA6N,OAAAjS,OAAAsB,IAAAtB,OAAAuB,MAAAA,KAAAvB,EAAA,CAAA,GAFnCuB;AAEmC;ACJhC,SAAAqiB,WAAAxf,OAAA;AAAA,QAAApE,IAAAC,EAAA,EAAA,GACL;AAAA,IAAAuH;AAAAA,EAAAA,IAAepD,OACfqd,WAAiBH,kBAAkB9Z,MAAM,EAAI;AAAC,MAAA/G;AAAAT,IAAA,CAAA,6BAAAU,IAAA,2BAAA,KAGHD,KAAA;AAAA,IAAA0gB,UAAW;AAAA,EAAA,GAAWnhB,OAAAS,MAAAA,KAAAT,EAAA,CAAA;AAAA,MAAAe;AAAAf,WAAAoE,SAC9CrD,KAAAqD,MAAK8N,cAAe;AAAA,IAAA,GAAI9N;AAAAA,EAAAA,CAAM,GAACpE,OAAAoE,OAAApE,OAAAe,MAAAA,KAAAf,EAAA,CAAA;AAAA,MAAAsB;AAAAtB,WAAAe,MAA9CO,KAAA,oBAAC,KAAA,EAAU,MAAA,GAAIP,UAAAA,IAAgC,GAAMf,OAAAe,IAAAf,OAAAsB,MAAAA,KAAAtB,EAAA,CAAA;AAAA,MAAAuB;AAAAvB,WAAAyhB,YACpDlgB,KAAAkgB,SAAQpS,IAAK/C,OAIb,GAACtM,OAAAyhB,UAAAzhB,OAAAuB,MAAAA,KAAAvB,EAAA,CAAA;AAAA,MAAA8D;AAAA,SAAA9D,EAAA,CAAA,MAAAsB,MAAAtB,SAAAuB,MANJuC,KAAA,qBAAC,QAAW,OAAA,UAAe,OAAA,QAAc,OAAArD,IACvCa,UAAAA;AAAAA,IAAAA;AAAAA,IACCC;AAAAA,EAAAA,EAAAA,CAKH,GAAOvB,OAAAsB,IAAAtB,OAAAuB,IAAAvB,OAAA8D,MAAAA,KAAA9D,EAAA,CAAA,GAPP8D;AAOO;AAZJ,SAAAwI,QAAAuX,KAAA;AAAA,SAQC,oBAAC,OAA6B,OAAA;AAAA,IAAA1C,UAAW;AAAA,IAAU2C,OAAS;AAAA,EAAA,GAC1D,8BAAC,iBAAA,EAA0BD,UAAAA,KAAG,KADtBA,IAAGlN,KAAK9I,EAElB;AAAM;ACGd,MAAMkW,iBAAkBC,CAAAA,OAAwBA,GAAGD,eAAAA;AAE5C,SAASE,aACd7f,OACA;AACA,QAAM;AAAA,IACJ8f;AAAAA,IACAC;AAAAA,IACAC,WAAWnS;AAAAA,IACXzE;AAAAA,IACAH;AAAAA,IACA6Q;AAAAA,IACAmG;AAAAA,IACAC;AAAAA,IACA3H;AAAAA,IACA4H;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,EAAAA,IACEtS,mBAEEuS,gBAAgBC,oBAChBtD,WAAWuD,oBAAoBxX,UAAU,GAMzCyX,eAAepE,QAAQ,MAAMqE,sBAAsB,CAAA,CAAE,GAErDC,WAAWjH,WAAWkH,qBAAqBlP;AAEjDrS,YAAU,MAAM;AACd,UAAMwhB,MAAMP,cAAcQ,KACvBC,eAAe/X,YAAYH,YAAY,EACvCmY,KACCC,IAAKC,CAAAA,UAAU;AACTA,YAAMlb,SAAS,cACjBya,aAAaU,QAAQC,qBAAqBF,KAAK,CAAC,GAG9CA,MAAMlb,SAAS,YACjBya,aAAaU,QAAQE,mBAAmBH,KAAK,CAAC;AAAA,IAElD,CAAC,CACH,EACCrgB,UAAAA;AAEH,WAAO,MAAM;AACXggB,UAAIS,YAAAA;AAAAA,IACN;AAAA,EACF,GAAG,CAACtY,YAAYsX,eAAezX,cAAc4X,YAAY,CAAC;AAE1D,QAAMc,SAASC,EAAQ/T,OAAOgU;AAC9BpiB,YAAU,MAAM;AACVkiB,cAKFd,aAAaU,QAAQ;AAAA,MACnBnb,MAAM;AAAA,MACN0b,SAAS,CAAA;AAAA,MACTC,UAAUlU;AAAAA,IAAAA,CACX;AAAA,EAKL,GAAG,CAAC8T,MAAM,CAAC;AAEX,QAAMK,UAAUjmB,OAA8B,IAAI;AAMlD,SAJA0D,UAAU,MAAM;AACdwiB,yBAAqBD,QAAQ3kB,OAAQ;AAAA,EACvC,GAAG,CAAA,CAAE,GAED0jB,WAEA,oBAAC,KAAA,EAAI,IAAG,QAAO,GAAI/gB,OAAO,KAAKgiB,SAC7B,8BAAC,MAAA,EACC,OAAM,UACN,WAAU,UACV,QAAO,QACP,SAAQ,UACR,SAAS,GACT,QAAO,UAEP,UAAA,oBAAC,MAAA,EAAK,MAAM,GAAE,kLAGd,EAAA,CACF,GACF,IAKF,oBAAC,KAAA,EAAI,IAAG,WAAWhiB,OAAO,UAAU2f,gBAAgB,KAAKqC,SACtDxB,UAAAA,QACCP,cAAc,OACZ,oBAAC,QACC,OAAM,UACN,WAAU,UACV,QAAO,QACP,SAAQ,UACR,SAAS,GACT,QAAO,UAEP,UAAA,oBAAC,MAAA,EAAK,MAAM,GAAG,UAAA,sBAAA,CAAmB,GACpC,IAEA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,yBAAyBY;AAAAA,MACzB;AAAA,MACA;AAAA,MACA,WAAWZ,UAAUiC;AAAAA,MACrB,SAASjC,UAAUkC;AAAAA,MACnB,SAASlC,UAAUmC;AAAAA,MACnB,QAAQnC,UAAUoC;AAAAA,MAClB,IAAIne;AAAAA,MACJ,SAAS+b,UAAUjY;AAAAA,MACnB;AAAA,MACA,oBAAoBqY;AAAAA,MACpB,YAAYH;AAAAA,MACZ,aAAaC;AAAAA,MACb;AAAA,MACA,wBAAwBG;AAAAA,MACxB,oBAAoBC;AAAAA,MACpB;AAAA,MACA,UAAUN,UAAUqC;AAAAA,MACpB,YAAYrC,UAAUzZ;AAAAA,MACtB;AAAA,MAEA,OAAOyZ,UAAUpS;AAAAA,MACjB,oBAAoB;AAAA,IAAA;AAAA,EAAA,IAIxB,qBAAC,MAAA,EACC,OAAM,UACN,WAAU,UACV,QAAO,QACP,SAAQ,UACR,SAAS,GACT,QAAO,UAEP,UAAA;AAAA,IAAA,oBAAC,SAAA,EAAQ,OAAK,GAAA,CAAA;AAAA,IAEd,oBAAC,KAAA,EAAI,WAAW,GACd,UAAA,oBAAC,MAAA,EAAK,OAAM,UAAS,OAAK,IAAC,MAAM,GAAE,8BAEnC,EAAA,CACF;AAAA,EAAA,EAAA,CACF,EAAA,CAEJ;AAEJ;AAEA,SAAS2T,qBAAqBF,OAAwC;AACpE,QAAMQ,UAAUR,MAAMiB,UAAUtX,IAAKuX,SAAQA,IAAIC,KAAK,EAAEtX,OAAOyW,OAAO;AAEtE,SAAO;AAAA,IACLxb,MAAM;AAAA,IACN2b,UAAUT,MAAM7jB;AAAAA,IAChBqkB,SAASY,oBAAoBpB,MAAMqB,QAAQb,OAAO;AAAA,EAAA;AAEtD;AAEA,SAASL,mBAAmBH,OAAsC;AAChE,QAAMsB,gBAAgBtB,MAAMuB,gBAAgB5X,IAAKuX,SAAQA,IAAIC,KAAK,EAAEtX,OAAOyW,OAAO,GAC5EkB,eAAexB,MAAMyB,eAAe9X,IAAKuX,CAAAA,QAAQA,IAAIC,KAAK,EAAEtX,OAAOyW,OAAO;AAEhF,SAAO;AAAA,IACLxb,MAAM;AAAA,IACN2b,UAAUT,MAAM7jB;AAAAA,IAChBqkB,SAASY,oBAAoB,UAAUE,aAAa,EAAEI,OACpDN,oBAAoB,SAASI,YAAY,CAC3C;AAAA,EAAA;AAEJ;ACrMO,MAAMG,oBAAoB5iB,cAAsC,EAAE,GCQnE6iB,sBAAoB,GACpBC,uBAAqB;AAyBpB,SAASC,sBACdC,UACAxU,YAAWqU,qBACe;AAO1B,SACE,CAPuC;AAAA,IACvC9f,MAAM;AAAA,IACNkgB,QAAQ;AAAA,IACRhB,UAAU,CAAC,CAACe,SAASf;AAAAA,IACrBiB,aAAaC,cAAcH,SAAS7c,UAAU;AAAA,EAAA,GAGxC,GAAGid,wBAAwBJ,UAAUtf,KAAKE,IAAI4K,WAAUsU,oBAAkB,CAAC,CAAC,EAC/EhY,OAAQuY,CAAAA,MAAMA,EAAEH,WAAW,EAE3BtY,IAAI,CAAC;AAAA,IAACsY,aAAaI;AAAAA,IAAc,GAAGha;AAAAA,EAAAA,OAAY;AAAA,IAAC,GAAGA;AAAAA,EAAAA,EAAO;AAElE;AAEA,SAAS6Z,cAAchd,YAAwB;AAC7C,SAAO,OAAOA,WAAW8c,UAAW,cAAc,OAAO9c,WAAW8b,YAAa;AACnF;AAEA,SAASsB,iBAAiBC,aAIM;AAC9B,SAAO;AAAA,IACLzgB,MAAMyC,aAAage,YAAYzgB,IAAI;AAAA,IACnCkf,UAAU,CAAC,CAACuB,YAAYvB;AAAAA;AAAAA,IACxBgB,QAAQ;AAAA;AAAA,IACRC,aAAaC,cAAcK,YAAYrd,UAAU;AAAA,EAAA;AAErD;AAEA,SAASid,wBACPK,MACAjV,WAC+B;AAC/B,SAAIiV,KAAK1gB,KAAKsC,UAAUmJ,YACf,CAAA,IAGFiV,KAAK9b,QAAQyH,OAAsC,CAACC,KAAKtH,WAAW;AACzE,QAAIA,OAAOC,SAAS;AAClB,aAAOqH;AAET,QAAItH,OAAOC,SAAS,SAAS;AAC3B,YAAM7B,aAAa4B,OAAOV,MAAMlB;AAChC,UAAIA,WAAWe,aAAa,UAAU;AACpC,cAAMwc,cAAc3b,OAAOV,MAAM4a,WAC7B,CAAA;AAAA;AAAA,UAEAmB,wBAAwBrb,OAAOV,OAAyBmH,SAAQ;AAAA;AACpE,eAAO,CAAC,GAAGa,KAAKkU,iBAAiBxb,OAAOV,KAAK,GAAG,GAAGqc,WAAW;AAAA,MAChE,WAAWvd,WAAWe,aAAa,SAAS;AAE1C,cAAMyc,QAAQ5b,OAAOV;AAErB,YAAIuc,aAA4C,CAAA;AAChD,cAAMC,iBAAiBF,MAAMhc,QAAQmc,KAClCC,CAAAA,MAAMA,EAAE/b,SAAS,UAAU+I,mBAAmBgT,EAAEC,KAAK7d,UAAU,CAClE;AACA,YAAI,CAACwd,MAAM1B;AACT,qBAAWgC,eAAeN,MAAMhc,SAAS;AACvC,gBAAIsc,YAAYjc,SAAS;AACvB;AAGF,kBAAM0b,cACJG,kBAAkB,CAACI,YAAYD,KAAK/B;AAAAA;AAAAA,cAEhCmB,wBAAyBa,YAAyCD,MAAMxV,SAAQ;AAAA,gBAChF,CAAA;AAENoV,yBAAa,CAAC,GAAGA,YAAYL,iBAAiBU,YAAYD,IAAI,GAAG,GAAGN,WAAW;AAAA,UACjF;AAEF,eAAO,CAAC,GAAGrU,KAAKkU,iBAAiBI,KAAK,GAAG,GAAGC,UAAU;AAAA,MACxD;AAEA,aAAO,CAAC,GAAGvU,KAAKkU,iBAAiBxb,OAAOV,KAAK,CAAC;AAAA,IAChD,WAAWU,OAAOC,SAAS,YAAY;AAErC,YAAMkc,sBAAsB,CAAC,CAAET,KAAwBtd,YAAYge,WAAWL,KAC3EvY,CAAAA,MAAM,CAACA,EAAE6Y,UAAU7Y,EAAElF,SAAS0B,OAAOsc,SAAShe,QAAQ,OAAOkF,EAAE0X,UAAW,UAC7E,GAEMS,cAAcN,wBAAwBrb,OAAOsc,UAAU7V,SAAQ,EAAE5D,IAAKW,CAAAA,OAAO;AAAA,QACjF,GAAGA;AAAAA;AAAAA,QAEH2X,aAAagB,uBAAuB3Y,EAAE2X;AAAAA,MAAAA,EACtC;AACF,aAAO,CAAC,GAAG7T,KAAK,GAAGqU,WAAW;AAAA,IAChC;AAEA,WAAOrU;AAAAA,EACT,GAAG,CAAA,CAAE;AACP;ACpIA,MAAMiV,uBAAuBrJ,uBAAOsJ,YAAY,EAACpJ,WAAA;AAAA,EAAAC,aAAA;AAAA,EAAAC,aAAA;AAAA,CAAA,EAAC;AAAA,EAChD,UAAY;AAAA,EACZ,UAAU;AAAA,IACRmJ,aAAa;AAAA,EAAA;AAEjB,CAAC;AAEM,SAAAC,oBAAA9kB,OAAA;AAAA,QAAApE,IAAAC,EAAA,CAAA,GACL;AAAA,IAAAkpB;AAAAA,EAAAA,IAAoB/kB;AAAK,MAAA3D,IAAAM;AAAAf,IAAA,CAAA,MAAAwB,uBAAAd,IAAA,2BAAA,KAKjBD,KAAA,oBAAA,OAAA,EAAY,OAAA;AAAA,IAAA2oB,WAAY;AAAA,EAAA,GACtB,UAAA,oBAAC,sBAAA,CAAA,CAAoB,EAAA,CACvB,GACAroB,KAAA,oBAAC,MAAA,EAAW,OAAA,UAAe,MAAA,GAAG,UAAA,8FAAA,CAG9B,GAAOf,OAAAS,IAAAT,OAAAe,OAAAN,KAAAT,EAAA,CAAA,GAAAe,KAAAf,EAAA,CAAA;AAAA,MAAAsB;AAAA,SAAAtB,SAAAmpB,aATb7nB,yBAAC,KAAA,EAAa,SAAA,GACZ,UAAA,oBAAC,aAAiB,OAAA,GAChB,UAAA,qBAAC,OAAA,EAAa,OAAA,GACZb,UAAAA;AAAAA,IAAAA;AAAAA,IAGAM;AAAAA,yBAKC,MAAA,EAAW,OAAA,UAAc,KAAA,GAAW,SAAA,UACnC,UAAA;AAAA,MAAA,oBAAC,QAAA,EACI,IAAA,KACG2L,MAAAA,wBACF,KAAA,cACG,QAAA,UACG,UAAA,GACL,MAAA,WACIyc,SAAAA,WACA,SAAA,GACJ,MAAA,cACA,MAAA,UAAA,CAAS;AAAA,MAEhB,oBAAC,QAAA,EAAiB,UAAA,GAAQ,MAAA,SAAiBA,SAAAA,WAAoB,SAAA,GAAQ,MAAA,UAAA,CAAS;AAAA,IAAA,EAAA,CAClF;AAAA,EAAA,EAAA,CACF,EAAA,CACF,EAAA,CACF,GAAMnpB,OAAAmpB,WAAAnpB,OAAAsB,MAAAA,KAAAtB,EAAA,CAAA,GA5BNsB;AA4BM;AC1CH,MAAM+nB,yBAAyB;AAEtC,SAASC,6BAA6BC,YAA6B;AACjE,SAAI,OAAOC,eAAiB,MACnB,KAGKA,aAAaC,QAAQF,UAAU,MAC5B;AACnB;AAEA,SAASG,yBAAyBH,YAAoB;AAChD,SAAOC,eAAiB,OAI5BA,aAAaG,QAAQJ,YAAY,MAAM;AACzC;AAEO,SAAAK,qBAAAL,YAAA;AAAA,QAAAvpB,IAAAC,EAAA,CAAA;AAAA,MAAAQ;AAAAT,WAAAupB,cAEH9oB,KAAAA,MAAM,CAAC6oB,6BAA6BC,UAAU,GAACvpB,OAAAupB,YAAAvpB,OAAAS,MAAAA,KAAAT,EAAA,CAAA;AADjD,QAAA,CAAA6pB,gBAAAC,iBAAA,IAA4CxpB,SAC1CG,EACF;AAAC,MAAAM;AAAAf,WAAAupB,cACqCxoB,KAAAA,MAAA;AACpC+oB,sBAAkB,EAAK,GACvBJ,yBAAyBH,UAAU;AAAA,EAAC,GACrCvpB,OAAAupB,YAAAvpB,OAAAe,MAAAA,KAAAf,EAAA,CAAA;AAHD,QAAA+pB,oBAA0BhpB;AAGS,MAAAO;AAAA,SAAAtB,EAAA,CAAA,MAAA+pB,qBAAA/pB,SAAA6pB,kBAE5BvoB,KAAA;AAAA,IAAAuoB;AAAAA,IAAAE;AAAAA,EAAAA,GAAmC/pB,OAAA+pB,mBAAA/pB,OAAA6pB,gBAAA7pB,OAAAsB,MAAAA,KAAAtB,EAAA,CAAA,GAAnCsB;AAAmC;ACZrC,SAAA0oB,kBAAA5lB,OAAA;AAAA,QAAApE,IAAAC,EAAA,EAAA,GACL;AAAA,IAAA4N;AAAAA,IAAAjD;AAAAA,IAAAqf;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,IAAA5a,QAAAA;AAAAA,EAAAA,IAAuEnL,OAEvE;AAAA,IAAA4P,cAAAA;AAAAA,EAAAA,IAAuBlB,sBAAAA;AAAuB,MAAArS;AAAA,MAAAT,EAAA,CAAA,MAAAgU,iBAAAhU,SAAAmqB,mBAAAnqB,EAAA,CAAA,MAAA4K,YAAA;AAAAsE,SAAA;AAG5C,YAAAkb,OAAapW,cAAapJ,WAAUE,IAAK;AACzC,UAAIqf,iBAAe;AAAA,YAAAppB;AAAAf,iBAAA4K,cACT7J,MAAAgT,oBAAoBnJ,UAAU,GAAC5K,OAAA4K,YAAA5K,OAAAe,OAAAA,MAAAf,EAAA,CAAA,GAAvCS,KAAO,CAACM,KAA+B,GAAKqpB,IAAI;AAAhD,cAAAlb;AAAAA,MAAiD;AAEnDzO,WAAO2pB;AAAAA,IAAI;AAAApqB,WAAAgU,eAAAhU,OAAAmqB,iBAAAnqB,OAAA4K,YAAA5K,OAAAS;AAAAA,EAAA;AAAAA,SAAAT,EAAA,CAAA;AALb,QAAA4T,YAAkBnT;AAM6B,MAAAM;AAAA,MAAAf,EAAA,CAAA,MAAAiqB,aAAAjqB,SAAA4T,WAAA;AAAA,QAAAtS;AAAAtB,aAAAiqB,aAGxB3oB,MAAA0O,OAAOA,EAACjL,QAASklB,WAASjqB,OAAAiqB,WAAAjqB,QAAAsB,OAAAA,MAAAtB,EAAA,EAAA,GAAzCe,KAAA6S,UAASlJ,KAAMpJ,GAA0B,GAACtB,OAAAiqB,WAAAjqB,OAAA4T,WAAA5T,OAAAe;AAAAA,EAAA;AAAAA,SAAAf,EAAA,CAAA;AADlD,QAAAqqB,eACQtpB;AAEP,MAAAO;AAAA,MAAAtB,EAAA,EAAA,MAAA4T,aAAA5T,UAAAuP,SAAA;AAAA,QAAAhO;AAAAvB,cAAAuP,WAKahO,MAAAuK,CAAAA,UAAYyD,UAASA,QAAOzD,KAAY,IAA5B,IAA8B9L,QAAAuP,SAAAvP,QAAAuB,OAAAA,MAAAvB,EAAA,EAAA,GADpDsB,KAAAsS,UAASrE,OACChO,GAA0C,EAACgO,OAC3CjD,OAAyC,EAAC+C,IAC7C+B,QAAsC,GAACpR,QAAA4T,WAAA5T,QAAAuP,SAAAvP,QAAAsB;AAAAA,EAAA;AAAAA,SAAAtB,EAAA,EAAA;AALlD,QAAAsqB,sBAEIhpB,IAOJipB,eAAqBtP,UAoCrBuP,cAAoB7O,UAIpB8O,eAAqBC,QAWXnpB,KAAA8oB,eAAeA,aAAYlX,OAA3BwX,YASC7mB,KAAAumB,cAAYtlB;AAAK,MAAAf;AAAA,SAAAhE,EAAA,EAAA,MAAAsqB,uBAAAtqB,EAAA,EAAA,MAAA6N,MAAA7N,EAAA,EAAA,MAAAkqB,YAAAlqB,EAAA,EAAA,MAAAuB,MAAAvB,UAAA8D,MAX1BE,KAAA,oBAAC,gBACW,UAAA,GACJ,MAAAzC,IACI2oB,UAAAA,UACV,YAAA,IACIrc,IACKyc,SAAAA,qBACG,aAAA,sBACJ,QAAA,GACMC,cACDC,aACN,OAAA1mB,IACO2mB,aAAAA,CAAY,GAC1BzqB,QAAAsqB,qBAAAtqB,QAAA6N,IAAA7N,QAAAkqB,UAAAlqB,QAAAuB,IAAAvB,QAAA8D,IAAA9D,QAAAgE,MAAAA,KAAAhE,EAAA,EAAA,GAbFgE;AAaE;AAzFC,SAAA0mB,OAAAE,OAAAC,UAAA;AAoEH,QAAAC,SAAeF,MAAKG,YAAAA;AAAc,SAEhCC,UAAM/Y,OAAoB8Y,YAAAA,EAAWjrB,SAACgrB,MACa,KAAnDE,UAAMlf,OAAc1B,OAAa2gB,YAAAA,EAAWjrB,SAACgrB,MAAM;AAAC;AAvEnD,SAAAnP,SAAAQ,SAAA8O,UAAA;AAAA,SAgEID,UAAMlf,MAAa1B,SAAnB+R;AAA4B;AAhEhC,SAAAlB,SAAA+P,QAAA;AA4BH,QAAA;AAAA,IAAA/Y;AAAAA,IAAAnG,OAAAof;AAAAA,EAAAA,IAAuBF;AAEvB,SAAK/Y,QAUDtH,OAAOmB,QAAKlB,YAAa,UAAU,IAEnC,oBAAC,MAAA,EAAQ,IAAA,UAAkB,SAAA,GAAW,WACpC,8BAAC,MAAA,EAAW,MAAA,GAAU,QAAA,YAAW,UAAA,uBAEjC,EAAA,CACF,wBAKD,MAAA,EAAQ,IAAA,UAAkB,SAAA,GAAW,WACpC,UAAA,qBAAC,MAAA,EAAU,KAAA,GACT,UAAA;AAAA,IAAA,oBAAC,QAAW,MAAA,GACV,iDACF;AAAA,IAEA,oBAAC,YAAA,EAAkBkB,gBAAK;AAAA,EAAA,EAAA,CAC1B,GACF,IA3BE,oBAAC,QAAQ,IAAA,UAAkB,SAAA,GAAW,QAAA,GACpC,UAAA,oBAAC,QAAK,YAAa,SAChBkf,UAAAA,OAAM/Y,OACT,EAAA,CACF;AAuBK;AA3DN,SAAAb,SAAA+Z,SAAA;AAAA,SAuBkB;AAAA,IAAAlZ,OAAQnG,QAAK/G;AAAAA,IAAI+G,OAAEA;AAAAA,EAAAA;AAAM;AAvB3C,SAAAQ,QAAA8e,KAAA;AAAA,SAsBgB,CAACzgB,OAAOqF,IAACpF,YAAa,WAAW;AAAC;AAuElD,SAAAygB,WAAAjnB,OAAA;AAAA,QAAApE,IAAAC,EAAA,EAAA;AAAA,MAAAqrB,IAAAC,IAAAC,YAAA/qB,IAAAM,IAAAO,IAAAC,IAAAuC;AAAA9D,IAAA,CAAA,MAAAoE,MAAA0H,MAAA1B,SACLohB,aAAmBpnB,MAAK0H,MAAM1B,MAAMqhB,MAAO,GAAG,GAE3CF,KAAAG,KAAS5nB,KAAA,QACPwnB,KAAAK,aAAW3rB,EAAA,CAAA,MAAAwB,uBAAAd,IAAA,2BAAA,KACHD,KAAA;AAAA,IAAAmrB,SACI;AAAA,IAAMC,UACL;AAAA,IAAMC,YACJ;AAAA,IAAQC,WACT;AAAA,EAAA,GACZ/rB,OAAAS,MAAAA,KAAAT,EAAA,CAAA,GAAAA,EAAA,EAAA,MAAAwB,uBAAAd,IAAA,2BAAA,KAECK,KAAA,oBAAC,KAAA,EAAe,cACd,UAAA,oBAAC,MAAA,EAAK,WAAY,MAAA,GAAG,UAAA,IAAA,CAErB,GACF,GAAMf,QAAAe,MAAAA,KAAAf,EAAA,EAAA,GAEDsB,KAAA,GAENC,KAAAiqB,WAAUQ,MAAO,GAAGR,WAAU1hB,SAAU,CAAC,EAACuF,IAAK4c,MAO/C,GAACjsB,EAAA,CAAA,IAAAoE,MAAA0H,MAAA1B,OAAApK,OAAAsrB,IAAAtrB,OAAAurB,IAAAvrB,OAAAwrB,YAAAxrB,OAAAS,IAAAT,OAAAe,IAAAf,OAAAsB,IAAAtB,OAAAuB,IAAAvB,OAAA8D,OAAAwnB,KAAAtrB,EAAA,CAAA,GAAAurB,KAAAvrB,EAAA,CAAA,GAAAwrB,aAAAxrB,EAAA,CAAA,GAAAS,KAAAT,EAAA,CAAA,GAAAe,KAAAf,EAAA,CAAA,GAAAsB,KAAAtB,EAAA,CAAA,GAAAuB,KAAAvB,EAAA,CAAA,GAAA8D,KAAA9D,EAAA,CAAA;AAGG,QAAAgE,KAAAwnB,WAAWA,WAAU1hB,SAAU,CAAC;AAAC,MAAA5F;AAAAlE,YAAAgE,MAFtCE,KAAA,oBAAC,KAAA,EAAe,WAAA,GACd,UAAA,oBAAC,MAAA,EAAW,MAAA,GAAU,QAAA,UACnBF,UAAAA,GAAAA,CACH,EAAA,CACF,GAAMhE,QAAAgE,IAAAhE,QAAAkE,MAAAA,KAAAlE,EAAA,EAAA;AAAA,MAAAiP;AAAAjP,YAAAsrB,MAAAtrB,EAAA,EAAA,MAAAS,MAAAT,EAAA,EAAA,MAAAe,MAAAf,EAAA,EAAA,MAAAsB,MAAAtB,UAAAuB,MAAAvB,EAAA,EAAA,MAAAkE,MA5BR+K,KAAA,qBAAC,IAAA,EACQ,OAAAxO,IAOL,WAAAM,IAMK,OAAAO,IAENC,UAAAA;AAAAA,IAAAA;AAAAA,IAQD2C;AAAAA,EAAAA,EAAAA,CAKF,GAAclE,QAAAsrB,IAAAtrB,QAAAS,IAAAT,QAAAe,IAAAf,QAAAsB,IAAAtB,QAAAuB,IAAAvB,QAAAkE,IAAAlE,QAAAiP,MAAAA,KAAAjP,EAAA,EAAA;AAAA,MAAAmP;AAAA,SAAAnP,EAAA,EAAA,MAAAurB,MAAAvrB,UAAA8D,MAAA9D,EAAA,EAAA,MAAAiP,MA9BhBE,yBAAC,IAAA,EAAS,MAAArL,IACRmL,UAAAA,GAAAA,CA8BF,GAAMjP,QAAAurB,IAAAvrB,QAAA8D,IAAA9D,QAAAiP,IAAAjP,QAAAmP,MAAAA,KAAAnP,EAAA,EAAA,GA/BNmP;AA+BM;AAlCH,SAAA8c,OAAAC,IAAAjc,GAAA;AAAA,SAsBG,oBAAC,KAAA,EAAuB,WAAA,GACtB,8BAAC,MAAA,EAAK,OAAA,IAAY,MAAA,GACfic,UAAAA,GAAEC,OAAM,CACX,KAHQlc,CAIV;AAAM;ACtIhB,SAAAmc,YAAAC,IAAA;AAAA,QAAArsB,IAAAC,EAAA,CAAA,GACE,CAAAqsB,MAAAC,MAAA,IAAuBC,WAAWlgB,SAAc,CAAC;AAAC,MAAA7L,IAAAM;AAAA,SAAAf,SAAAqsB,MAExC5rB,KAAAA,MAAA;AACR,UAAAwP,IAAUwc,YAAYF,QAAQF,EAAE;AAAC,WAC1B,MAAMK,cAAczc,CAAC;AAAA,EAAC,GAC5BlP,KAAA,CAACsrB,EAAE,GAACrsB,OAAAqsB,IAAArsB,OAAAS,IAAAT,OAAAe,OAAAN,KAAAT,EAAA,CAAA,GAAAe,KAAAf,EAAA,CAAA,IAHP6D,UAAUpD,IAGPM,EAAI,GACAurB;AAAI;AAPb,SAAAhgB,QAAAqgB,GAAA;AAAA,SAC2CA,IAAI;AAAC;AASzC,SAAAC,QAAAnsB,IAAA;AAAA,QAAAT,IAAAC,EAAA,CAAA,GAAiB;AAAA,IAAA4sB;AAAAA,EAAAA,IAAApsB;AACtB2rB,cAAY,GAAI;AAAC,MAAArrB;AAAAf,WAAA6sB,QACC9rB,KAAA+rB,oBAAoBD,OAAA,IAAWxc,KAAKwc,IAAiB,IAAjC,oBAA4Bxc,MAAM,GAACrQ,OAAA6sB,MAAA7sB,OAAAe,MAAAA,KAAAf,EAAA,CAAA;AAAzE,QAAA+sB,YAAkBhsB;AAAuD,MAAAO;AAAA,SAAAtB,SAAA+sB,aAClEzrB,KAAA,qBAAA,QAAA,EAAayrB,OAAAA,WAAYA,UAAAA;AAAAA,IAAAA;AAAAA,IAAU;AAAA,EAAA,EAAA,CAAI,GAAO/sB,OAAA+sB,WAAA/sB,OAAAsB,MAAAA,KAAAtB,EAAA,CAAA,GAA9CsB;AAA8C;AC0BvD,MAAM0rB,SAASxN;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,GASTyN,mBAAmBvN,OAAOwN,QAAQ,EAACtN,WAAA;AAAA,EAAAC,aAAA;AAAA,EAAAC,aAAA;AAAA,CAAA,cAC1BkN,MAAM,wBAGfG,cAAc;AAAA,EAClBC,SAAS;AAAA,IACPhjB,OAAO;AAAA,IACP+I,MAAMka;AAAAA,IACNC,MAAM;AAAA,EAAA;AAAA,EAERxK,OAAO;AAAA,IACL1Y,OAAO;AAAA,IACP+I,MAAMoa;AAAAA,IACND,MAAM;AAAA,EAAA;AAAA,EAERE,SAAS;AAAA,IACPpjB,OAAO;AAAA,IACP+I,MAAMsa;AAAAA,IACNH,MAAM;AAAA,EAAA;AAAA,EAERI,SAAS;AAAA,IACPtjB,OAAO;AAAA,IACP+I,MAAMwa;AAAAA,IACNL,MAAM;AAAA,EAAA;AAEV;AAEO,SAASM,6BAA6BxpB,OAA0C;AACrF,QAAM;AAAA,IAACgL;AAAAA,IAAOK;AAAAA,IAAcjC;AAAAA,IAAYqgB;AAAAA,EAAAA,IAAczpB,OAEhDuK,SAASC,UAAU;AAAA,IAACF,YAAY;AAAA,EAAA,CAAa,GAC7Cof,YAAY3V,YACf4V,CAAAA,YAAoB;AACnB,QAAI,CAACvgB;AACH;AAEF,UAAMwgB,cAAczgB,oBAAoBC,UAAU,GAC5CuI,YAAW,GAAGlG,MAA+B,OAAO,CAAC,WAAWke,OAAO;AAC7Epf,WACGkY,MAAMmH,WAAW,EACjBxnB,IAAI;AAAA,MACH,CAAC,GAAGuP,SAAQ,IAAIlG,MAA6B,OAAO,CAAC,EAAE,IAAG,oBAAIQ,KAAAA,GAAO4R,YAAAA;AAAAA,MACrE,CAAC,GAAGlM,SAAQ,IAAIlG,MAA6B,QAAQ,CAAC,EAAE,GACtDA,MAAuB,SAAS;AAAA,IAAA,CACnC,EACAoe,OAAAA,EACAjf,MAAMkf,QAAQpL,KAAK;AAAA,EACxB,GACA,CAACnU,QAAQnB,UAAU,CACrB,GAEM2gB,cAActN,QAAQ,MAAM;AAChC,UAAMvW,IACJ8E,OACIG,OACCC,CAAAA,SACCA,KAAKY,YACL,oBAAIC,QAAOC,QAAAA,IAAY,IAAID,KAAKb,KAAKY,OAAO,EAAEE,YAAYrD,sBAC9D,EAECoC,IAAKG,CAAAA,WAAoC;AACxC,YAAMrF,eAAcsF,cAAc/E,KAAMuF,OAAMA,EAAEhL,SAASuK,OAAKU,cAAc;AAC5E,aAAO;AAAA,QACL,GAAGV;AAAAA,QACHpF,OAAOyjB,aAAcre,OAAKpF,SAASF,oBAAoBC,YAAW,IAAK+B;AAAAA,QACvEkiB,QAAQA,MAAMN,UAAUte,OAAKvK,IAAI;AAAA,MAAA;AAAA,IAErC,CAAC,KAAK,CAAA;AACVqF,WAAAA,EAAE+jB,KAAK,CAACC,GAAGC,MAAM,IAAIle,KAAKke,EAAEne,WAAW,EAAE,EAAEE,YAAY,IAAID,KAAKie,EAAEle,WAAW,EAAE,EAAEE,QAAAA,CAAS,GACnFhG;AAAAA,EACT,GAAG,CAAC8E,OAAOK,cAAcqe,WAAWD,UAAU,CAAC,GAIzCW,YAAY3N,QAAQ,MAAMsN,YAAY5F,KAAMkG,CAAAA,MAAM,CAACA,EAAEtd,KAAK,GAAG,CAACgd,WAAW,CAAC,GAC1EO,YAAY7N,QAChB,MAAMsN,YAAY5F,KAAMkG,CAAAA,QAAMA,IAAEld,WAAW,WAAWkd,IAAEld,WAAW,SAAS,GAC5E,CAAC4c,WAAW,CACd,GAEM,CAACzS,MAAMiT,OAAO,IAAIruB,SAAS,EAAK,GAEhCsuB,aAAazW,YAAY,MAAMwW,QAAS7G,CAAAA,MAAM,CAACA,CAAC,GAAG,EAAE,GAErD,CAAC+G,QAAQC,SAAS,IAAIxuB,SAAmC,IAAI,GAC7D,CAACyuB,SAASC,UAAU,IAAI1uB,SAAgC,IAAI,GAE5D2uB,qBAAqB9W,YAAY,MAAM;AAC3CwW,YAAQ,EAAK;AAAA,EACf,GAAG,CAAA,CAAE;AAGLO,kBAAgBD,oBAAoB,CAACJ,QAAQE,OAAO,CAAC;AAErD,QAAMI,eAAehX,YAAY,MAAM;AACrCwW,YAAQ,EAAK,GACbE,QAAQjS,MAAAA;AAAAA,EACV,GAAG,CAACiS,MAAM,CAAC;AAEX,6BACG,SAAA,EACC,eAAa,IACb,SAAS,oBAAC,YAAS,UAAUM,cAAc,OAAOhB,YAAAA,CAAY,GAC9D,MAAMzS,QAAQ,CAAC,CAACyS,aAAarkB,QAC7B,WAAU,OACV,QAAM,IACN,KAAKklB,YACL,OAAO,GAEP,UAAA,oBAAC,kBAAA,EACC,UAAU,CAACb,aAAarkB,QACxB,WACA,WACA,SAAS8kB,YACT,KAAKE,WACL,UAAUpT,MAAK,GAEnB;AAEJ;AAEA,MAAM0T,mCAAsE;AAAA,EAC1EC,WAAW;AACb,GAEMC,mBAAmBtP,WAAW,SAAA5b,OAAAlE,KAAA;AAAA,QAAAF,IAAAC,EAAA,CAAA,GAUlC;AAAA,IAAAsvB;AAAAA,IAAAb;AAAAA,IAAAF;AAAAA,IAAAgB;AAAAA,IAAAC;AAAAA,EAAAA,IAA4DrrB,OAMlD3D,KAAA+tB,YAAAvB,mBAA+ByB,YAAAnB,mBAAAE,qBAG/B1sB,KAAA2tB,YAAA,aAAAxiB;AAAkC,MAAA5K;AAAA,SAAAtB,SAAAuvB,YAAAvvB,EAAA,CAAA,MAAAwvB,WAAAxvB,EAAA,CAAA,MAAAE,OAAAF,EAAA,CAAA,MAAAyvB,YAAAzvB,SAAAS,MAAAT,EAAA,CAAA,MAAAe,MAN1CO,yBAAC,cAAA,EACQ,OAAA,GAAGyL,WAAW,WACT,cAAA,GAAGA,WAAW,WACpB,MAAAtM,IACD,MAAA,SACI+uB,SACH,MAAAzuB,IACIwuB,UACLrvB,KACKuvB,UACIL,cAAAA,kCAAgC,GAC9CpvB,OAAAuvB,UAAAvvB,OAAAwvB,SAAAxvB,OAAAE,KAAAF,OAAAyvB,UAAAzvB,OAAAS,IAAAT,OAAAe,IAAAf,OAAAsB,MAAAA,KAAAtB,EAAA,CAAA,GAXFsB;AAWE,CAEL;AAED,SAAAouB,SAAAtrB,OAAA;AAAA,QAAApE,IAAAC,EAAA,CAAA,GACE;AAAA,IAAA0vB;AAAAA,IAAAvgB;AAAAA,EAAAA,IAA0BhL,OAE1B;AAAA,IAAAwrB;AAAAA,EAAAA,IAAqBvd,SAAAA;AAAU,MAAA5R;AAAAT,IAAA,CAAA,MAAA4vB,cAAA5vB,SAAA2vB,YAI3BlvB,KAAAilB,CAAAA,UAAA;AACMkK,kBAAclK,MAAK3gB,QAAS,YAC9B4qB,SAAAA;AAAAA,EACD,GACF3vB,OAAA4vB,YAAA5vB,OAAA2vB,UAAA3vB,OAAAS,MAAAA,KAAAT,EAAA,CAAA,GANL6vB,iBACEpvB,EAQF;AAAC,MAAAM;AAAAf,WAAAoP,SAIIrO,KAAAqO,MAAKC,IAAK/C,OAEV,GAACtM,OAAAoP,OAAApP,OAAAe,MAAAA,KAAAf,EAAA,CAAA;AAAA,MAAAsB;AAAA,SAAAtB,SAAAe,MAHJO,yBAAC,OAAA,EAAe,YAAU,OAAA,GACvBP,UAAAA,GAAAA,CAGH,GAAQf,OAAAe,IAAAf,OAAAsB,MAAAA,KAAAtB,EAAA,CAAA,GAJRsB;AAIQ;AArBZ,SAAAgL,QAAAkD,MAAA;AAAA,SAmBQ,oBAAC,UAAA,EAA+BA,KAAAA,GAAjBA,KAAIvK,IAAiB;AAAI;AAMhD,SAAA6qB,SAAA1rB,OAAA;AAAA,QAAApE,IAAAC,EAAA,EAAA,GACE;AAAA,IAAAuP;AAAAA,EAAAA,IAAepL,OAEf2rB,WAAiBvgB,KAAI+B,UAAW4b,YAAY3d,KAAI+B,MAAO,GACvDye,WAAiBD,WAAWA,SAAQ5c,OAAnB,MAEQ1S,KAAAsvB,YAAYA,UAAQzC;AAAM,MAAAvsB;AAAAf,WAAAgwB,YAKtCjvB,KAAAivB,gCAAa,UAAA,EAAQ,GAAGhwB,OAAAgwB,UAAAhwB,OAAAe,MAAAA,KAAAf,EAAA,CAAA;AAAA,MAAAsB;AAAAtB,IAAA,CAAA,MAAAwP,KAAA+B,UACxBjQ,MAACkO,KAAI+B,UAAW,oBAAC,SAAA,CAAA,CAAO,GAAGvR,EAAA,CAAA,IAAAwP,KAAA+B,QAAAvR,OAAAsB,MAAAA,KAAAtB,EAAA,CAAA;AAAA,MAAAuB;AAAAvB,IAAA,CAAA,MAAAe,MAAAf,SAAAsB,MAHhCC,KAAA,oBAAC,OAAS,MAAA,QACR,UAAA,qBAAC,MAAA,EAAW,SACTR,UAAAA;AAAAA,IAAAA;AAAAA,IACAO;AAAAA,EAAAA,EAAAA,CACH,GACF,GAAMtB,OAAAe,IAAAf,OAAAsB,IAAAtB,OAAAuB,MAAAA,KAAAvB,EAAA,CAAA;AAGD,QAAA8D,KAAAisB,WAAWA,SAAQ3lB,QAAnB;AAAqC,MAAApG;AAAAhE,IAAA,CAAA,MAAAwP,KAAApF,SACrCpG,KAAAwL,KAAIpF,SAAJ,qBAAA,UAAA,EAAgB,UAAA;AAAA,IAAA;AAAA,IAAGoF,KAAIpF;AAAAA,EAAAA,EAAAA,CAAM,GAAIpK,EAAA,CAAA,IAAAwP,KAAApF,OAAApK,OAAAgE,MAAAA,KAAAhE,EAAA,CAAA;AAAA,MAAAkE;AAAAlE,IAAA,CAAA,MAAA8D,MAAA9D,UAAAgE,MAFpCE,0BAAC,MAAA,EAAW,MAAA,GAAU,QAAA,UACnBJ,UAAAA;AAAAA,IAAAA;AAAAA,IACAE;AAAAA,EAAAA,EAAAA,CACH,GAAOhE,OAAA8D,IAAA9D,QAAAgE,IAAAhE,QAAAkE,MAAAA,KAAAlE,EAAA,EAAA;AAAA,MAAAiP;AAAAjP,IAAA,EAAA,MAAAwP,KAAAkC,WACNzC,KAAAO,KAAIkC,UAAW,oBAAC,MAAA,EAAW,SAAIlC,UAAAA,KAAIkC,QAAAA,CAAS,IAA5C,MAA0D1R,EAAA,EAAA,IAAAwP,KAAAkC,SAAA1R,QAAAiP,MAAAA,KAAAjP,EAAA,EAAA;AAE1C,QAAAmP,KAAAK,KAAI2B,SAAU3B,KAAIY;AAAQ,MAAA8L;AAAAlc,YAAAmP,MAD3C+M,KAAA,oBAAC,MAAA,EAAK,OAAA,IAAY,MAAA,GAChB,UAAA,oBAAC,SAAA,EAAc,MAAA/M,GAAAA,CAA0B,EAAA,CAC3C,GAAOnP,QAAAmP,IAAAnP,QAAAkc,MAAAA,KAAAlc,EAAA,EAAA;AAAA,MAAAgf;AAAAhf,IAAA,EAAA,MAAAkE,MAAAlE,UAAAiP,MAAAjP,EAAA,EAAA,MAAAkc,MART8C,MAAA,qBAAC,SAAY,MAAA,GAAU,OAAA,GACrB9a,UAAAA;AAAAA,IAAAA;AAAAA,IAIC+K;AAAAA,IACDiN;AAAAA,EAAAA,GAGF,GAAQlc,QAAAkE,IAAAlE,QAAAiP,IAAAjP,QAAAkc,IAAAlc,QAAAgf,OAAAA,MAAAhf,EAAA,EAAA;AAAA,MAAAkf;AAAAlf,IAAA,EAAA,MAAAgf,OAAAhf,UAAAuB,MAhBV2d,MAAA,qBAAC,MAAA,EAAW,OAAA,cAAmB,MAAA,GAAQ,KAAA,GAAY,SAAA,GACjD3d,UAAAA;AAAAA,IAAAA;AAAAA,IAMAyd;AAAAA,EAAAA,EAAAA,CAUF,GAAOhf,QAAAgf,KAAAhf,QAAAuB,IAAAvB,QAAAkf,OAAAA,MAAAlf,EAAA,EAAA;AAAA,MAAAiwB;AAAAjwB,IAAA,EAAA,MAAAwP,KAAA4e,UAAApuB,EAAA,EAAA,MAAAwP,KAAA2B,SAEN8e,OAACzgB,KAAI2B,6BACH,KAAA,EAAS,MAAA,QAAgB,YACxB,UAAA,oBAAC,QAAA,EAAiB,UAAA,GAAQ,MAAA,SAAiB,SAAA3B,KAAI4e,QAAc,MAAA,UAAQ,EAAA,CACvE,GACDpuB,EAAA,EAAA,IAAAwP,KAAA4e,QAAApuB,EAAA,EAAA,IAAAwP,KAAA2B,OAAAnR,QAAAiwB,OAAAA,MAAAjwB,EAAA,EAAA;AAAA,MAAAkwB;AAAAlwB,IAAA,EAAA,MAAAkf,OAAAlf,UAAAiwB,OAxBHC,2BAAC,MAAA,EAAW,OAAA,UAAc,QACxBhR,UAAAA;AAAAA,IAAAA;AAAAA,IAmBC+Q;AAAAA,EAAAA,EAAAA,CAKH,GAAOjwB,QAAAkf,KAAAlf,QAAAiwB,KAAAjwB,QAAAkwB,OAAAA,MAAAlwB,EAAA,EAAA;AAAA,MAAAmwB;AAAA,SAAAnwB,EAAA,EAAA,MAAAS,MAAAT,UAAAkwB,OA1BTC,0BAAC,MAAA,EAAa,QAAA,GAAS,MAAA1vB,IACrByvB,UAAAA,IAAAA,CA0BF,GAAOlwB,QAAAS,IAAAT,QAAAkwB,KAAAlwB,QAAAmwB,OAAAA,MAAAnwB,EAAA,EAAA,GA3BPmwB;AA2BO;AC/NX,MAAMC,sBAAsB1Q,OAAOiD,IAAI,EAAC/C,WAAA;AAAA,EAAAC,aAAA;AAAA,EAAAC,aAAA;AAAA,CAAA,+KAgBlCuQ,sBAAsB3Q,OAAOiD,IAAI,EAAC/C,WAAA;AAAA,EAAAC,aAAA;AAAA,EAAAC,aAAA;AAAA,CAAA;AAgBjC,SAAAwQ,uBAAAlsB,OAAA;AAAA,QAAApE,IAAAC,EAAA,EAAA,GACL2S,UAAgBE,sBAAAA;AAEhB,MAAIF,QAAO2d,eAAc;AAAA,QAAA9vB;AAAA,WAAAT,EAAA,CAAA,MAAAwB,uBAAAd,IAAA,2BAAA,KAErBD,MAAA,oBAAC,MAAA,EAAW,OAAA,UAAgB,QAAA,QAAe,SAAA,UAAkB,SAAA,GAAU,QAAA,UACrE,UAAA,qBAAC,OAAA,EAAa,OAAA,GAAU,OAAA;AAAA,MAAA2oB,WAAY;AAAA,IAAA,GAClC,UAAA;AAAA,MAAA,oBAAC,SAAA,EAAQ,OAAA,GAAA,CAAK;AAAA,MACd,qBAAC,MAAA,EAAK,OAAA,IAAY,MAAA,GAAG,UAAA;AAAA,QAAA;AAAA;QACE;AAAA,MAAA,EAAA,CACvB;AAAA,IAAA,GACF,EAAA,CACF,GAAOppB,OAAAS,OAAAA,MAAAT,EAAA,CAAA,GAPPS;AAAAA,EAOO;AAIX,QAAA+Q,SAAeoB,QAAOpB;AAEtB,MAAI,CAACA,QAAM0E,SAAS;AAAA,QAAAzV;AAAAT,MAAA,CAAA,MAAAoE,MAAAosB,WAGd/vB,0BAAC,yBAAA,EACkB,kBAAA,SACR,SAAA2D,MAAKosB,SACPzjB,OAAAA,YAAAA,CAAW,GAClB/M,EAAA,CAAA,IAAAoE,MAAAosB,SAAAxwB,OAAAS,OAAAA,MAAAT,EAAA,CAAA;AAAA,QAAAe;AAAAf,MAAA,CAAA,MAAAwB,uBAAAd,IAAA,2BAAA,KAGAK,KAAA,qBAAC,QAAQ,IAAA,KAAU,MAAA,GAAU,QAAA,YAC1BgM,UAAAA;AAAAA,MAAAA;AAAAA,MAAY;AAAA,IAAA,EAAA,CACf,GAAO/M,OAAAe,MAAAA,KAAAf,EAAA,CAAA;AAAA,QAAAsB;AAAAtB,MAAA,CAAA,MAAAwB,uBAAAd,IAAA,2BAAA,KAILY,gCAASuL,MAAAA,UAAiB,QAAA,UAAa,KAAA,cAAa,UAAA,yBAAA,CAEpD,GAAI7M,OAAAsB,MAAAA,KAAAtB,EAAA,CAAA;AAAA,QAAAuB;AAAAvB,MAAA,CAAA,MAAAwB,uBAAAd,IAAA,2BAAA,KATRa,0BAAC,OAAA,EAAY,SAAY,UAAA,QAAgB,SAAA,GAAU,OAAA,GACjDR,UAAAA;AAAAA,MAAAA;AAAAA,2BAIC,MAAA,EAAQ,IAAA,KAAI,OAAA,IAAY,MAAA,GAAG,UAAA;AAAA,QAAA;AAAA,QAC2B;AAAA,QACrDO;AAAAA,QAEK;AAAA,QAAI;AAAA,QACYyL;AAAAA,QAAY;AAAA;QACjC,oBAAA,OAASL,MAAAA,wBAA+B,QAAA,UAAa,KAAA,cAAa,UAAA,oBAAA,CAElE;AAAA,MAAA,EAAA,CACF;AAAA,IAAA,EAAA,CACF,GAAQ1M,OAAAuB,MAAAA,KAAAvB,EAAA,CAAA;AAAA,QAAA8D;AAAA,WAAA9D,SAAAS,OAtBVqD,0BAAC,MAAA,EAAe,WAAA,UAAgB,QAAA,QAC9BrD,UAAAA;AAAAA,MAAAA;AAAAA,MAMAc;AAAAA,IAAAA,EAAAA,CAgBF,GAAOvB,OAAAS,KAAAT,OAAA8D,MAAAA,KAAA9D,EAAA,CAAA,GAvBP8D;AAAAA,EAuBO;AAIX,MAAI,CAAC0N,QAAM2E,eAAP,CAAyB3E,OAAM4E,YAAW;AAAA,QAAA3V;AAAAT,MAAA,CAAA,MAAAoE,MAAAosB,WAGxC/vB,0BAAC,yBAAA,EACkB,kBAAA,SACR,SAAA2D,MAAKosB,SACPzjB,OAAAA,YAAAA,CAAW,GAClB/M,EAAA,CAAA,IAAAoE,MAAAosB,SAAAxwB,OAAAS,OAAAA,MAAAT,EAAA,CAAA;AAAA,QAAAe;AAAAf,MAAA,EAAA,MAAA4S,QAAAkQ,SAGC/hB,KAAA6R,QAAOkQ,QACN,qBAAC,MAAA,EAAW,MAAA,GAAU,QAAA,YAAW,UAAA;AAAA,MAAA;AAAA,MACd/V;AAAAA,IAAAA,EAAAA,CACnB,IAHD,MAIO/M,EAAA,EAAA,IAAA4S,QAAAkQ,OAAA9iB,QAAAe,MAAAA,KAAAf,EAAA,EAAA;AAAA,QAAAsB;AAAAtB,MAAA,EAAA,MAAA4S,QAAAkQ,SAAA9iB,EAAA,EAAA,MAAAwR,QAAA2E,eAEP7U,KAAA,CAACsR,QAAOkQ,SAAR,CAAmBtR,QAAM2E,mCACvB,MAAA,EAAW,MAAA,GAAU,QAAA,YACnBpJ,UAAAA;AAAAA,MAAAA;AAAAA,MAAY;AAAA,IAAA,EAAA,CACf,IAHD,MAIO/M,EAAA,EAAA,IAAA4S,QAAAkQ,OAAA9iB,EAAA,EAAA,IAAAwR,QAAA2E,aAAAnW,QAAAsB,MAAAA,KAAAtB,EAAA,EAAA;AAAA,QAAAuB;AAAAvB,cAAA4S,QAAAkQ,SAAA9iB,UAAAwR,UAEPjQ,KAAA,CAACqR,QAAOkQ,SAAUtR,QAAM2E,eAAxB,CAA0C3E,OAAM4E,aAAhD,qBAAA,UAAA,EAEG,UAAA;AAAA,MAAA,oBAAC,MAAA,EAAW,MAAA,GAAU,QAAA,YAAW,UAAA,iBAEjC;AAAA,0BACC,MAAA,EAAK,OAAA,IAAY,SAAG,UAAA,6EAAA,CAErB;AAAA,IAAA,EAAA,CAAO,IAPV,MASOpW,EAAA,EAAA,IAAA4S,QAAAkQ,OAAA9iB,QAAAwR,QAAAxR,QAAAuB,MAAAA,KAAAvB,EAAA,EAAA;AAAA,QAAA8D;AAAA9D,MAAA,EAAA,MAAA4S,QAAAkQ,SAEPhf,KAAA8O,QAAOkQ,SACN,oBAAC,MAAA,EAAK,WAAY,MAAA,GAAG,UAAA,iDAAA,CAErB,GACD9iB,EAAA,EAAA,IAAA4S,QAAAkQ,OAAA9iB,QAAA8D,MAAAA,KAAA9D,EAAA,EAAA;AAAA,QAAAgE;AAAAhE,MAAA,EAAA,MAAA4S,QAAAkQ,SAAA9iB,EAAA,EAAA,MAAAwR,QAAA2E,eAEAnS,KAAA,CAAC4O,QAAOkQ,SAAR,CAAmBtR,QAAM2E,oCACvB,MAAA,EAAW,MAAA,GAAG,OAAA,IAAM,UAAA;AAAA,MAAA;AAAA,MACJpJ;AAAAA,MAAY;AAAA,IAAA,EAAA,CAC7B,GACD/M,EAAA,EAAA,IAAA4S,QAAAkQ,OAAA9iB,EAAA,EAAA,IAAAwR,QAAA2E,aAAAnW,QAAAgE,MAAAA,KAAAhE,EAAA,EAAA;AAAA,QAAAkE;AAAAlE,MAAA,EAAA,MAAA4S,QAAAkQ,SAAA9iB,EAAA,EAAA,MAAA4S,QAAA6d,eAKGvsB,KAAA0O,QAAO6d,cACL,oBAAC,OAAe,WAAA,GACd,8BAAC,SAAA,CAAA,CAAO,EAAA,CACV,IACE7d,QAAOkQ,QAAP4N,YAAAxkB,QAESlM,EAAA,EAAA,IAAA4S,QAAAkQ,OAAA9iB,EAAA,EAAA,IAAA4S,QAAA6d,aAAAzwB,QAAAkE,MAAAA,KAAAlE,EAAA,EAAA;AAGb,UAAAiP,KAAA2D,QAAOkQ,QAAP,UAEItR,QAAM2E,eAAN,CAAwB3E,OAAM4E,aAA9B,WACarJ,WAAW,KADxB,UAEYA,WAAW;AAAM,QAAAoC;AAAAnP,MAAA,EAAA,MAAA4S,QAAA+d,QAAA3wB,EAAA,EAAA,MAAA4S,QAAA6d,eAAAzwB,EAAA,EAAA,MAAAkE,MAAAlE,UAAAiP,MAhBrCE,yBAAC,QAAA,EACW,aAER,MAAAjL,IASA,MAAA+K,IAMG,MAAA,WACI,SAAA2D,QAAO+d,MACN,UAAA/d,QAAO6d,YAAAA,CAAY,GAC7BzwB,EAAA,EAAA,IAAA4S,QAAA+d,MAAA3wB,EAAA,EAAA,IAAA4S,QAAA6d,aAAAzwB,QAAAkE,IAAAlE,QAAAiP,IAAAjP,QAAAmP,MAAAA,KAAAnP,EAAA,EAAA;AAAA,QAAAkc;AAAAlc,cAAAe,MAAAf,EAAA,EAAA,MAAAsB,MAAAtB,EAAA,EAAA,MAAAuB,MAAAvB,EAAA,EAAA,MAAA8D,MAAA9D,UAAAgE,MAAAhE,EAAA,EAAA,MAAAmP,MAzDJ+M,KAAA,qBAAC,OAAA,EAAe,SAAA,GAAU,OAAA,GACvBnb,UAAAA;AAAAA,MAAAA;AAAAA,MAMAO;AAAAA,MAMAC;AAAAA,MAWAuC;AAAAA,MAMAE;AAAAA,MAMDmL;AAAAA,IAAAA,EAAAA,CAsBF,GAAQnP,QAAAe,IAAAf,QAAAsB,IAAAtB,QAAAuB,IAAAvB,QAAA8D,IAAA9D,QAAAgE,IAAAhE,QAAAmP,IAAAnP,QAAAkc,MAAAA,KAAAlc,EAAA,EAAA;AAAA,QAAAgf;AAAA,WAAAhf,EAAA,EAAA,MAAAS,OAAAT,UAAAkc,MAjEV8C,2BAAC,MAAA,EAAe,WAAA,UAAgB,QAAA,QAC9Bve,UAAAA;AAAAA,MAAAA;AAAAA,MAMAyb;AAAAA,IAAAA,EAAAA,CA2DF,GAAOlc,QAAAS,KAAAT,QAAAkc,IAAAlc,QAAAgf,OAAAA,MAAAhf,EAAA,EAAA,GAlEPgf;AAAAA,EAkEO;AAEV,MAAAve;AAAA,SAAAT,UAAAoE,SAEM3D,KAAA,oBAAC,iBAAA,EAAe,GAAK2D,OAAK,GAAIpE,QAAAoE,OAAApE,QAAAS,MAAAA,KAAAT,EAAA,EAAA,GAA9BS;AAA8B;AAGvC,SAASmwB,gBAAgBxsB,OAA+B;AACtD,QAAM;AAAA,IAAC0R;AAAAA,EAAAA,IAAUH,gBAAAA,GAEXkb,WAAW1wB,OAA8B,IAAI,GAC7CqS,UAAUsD,SAASrM,cAAc,GACjCyG,iBAAiB4F,SAASpM,gBAAgB,GAC1ConB,eAAeve,mBACf;AAAA,IACJ/E;AAAAA,IACAH;AAAAA,IACA4E,OAAO8e;AAAAA,IACPnmB;AAAAA,IACA+R,UAAUS;AAAAA,IACViH;AAAAA,EAAAA,IACEyM,cAEE;AAAA,IAACtS;AAAAA,IAAsBE;AAAAA,EAAAA,IAAwB/L,yBAAAA,GAE/Cqe,eAAe7wB,OAAOkkB,SAAS;AAErC2M,eAAavvB,UAAU4iB;AAEvB,QAAM;AAAA,IAAC/K;AAAAA,IAAoB4D;AAAAA,EAAAA,IAAyBF,yBAAyB;AAAA,IAC3EI;AAAAA,IACAN,iBAAiB4B;AAAAA,EAAAA,CAClB,GAEKuS,WAAW3b,YAAYyb,UAAUve,WAAW,EAAE,GAC9C0e,gBAAgB3b,iBAAiB3K,YAAYqmB,QAAQ,GAErDE,UAAU/jB,iBAAiBC,YAAY,GAEvCmB,iBAAiBL,wBAAwB;AAAA,IAACX;AAAAA,IAAY5C;AAAAA,IAAYwD,SAAS;AAAA,EAAA,CAAK,GAEhFjE,eADcqE,gBAAgB3C,QAAQnB,KAAMsF,CAAAA,MAAMA,EAAExI,SAASypB,QAAQ,GAC1CxhB,cAAc/E,KAAMuF,CAAAA,MAAMA,EAAEhL,SAASiL,cAAc,GAC9Ed,QAAQyR,QACZ,MACErS,gBAAgBY,OAAOG,OAAQU,CAAAA,QAAM,CAACC,kBAAkBD,IAAEC,mBAAmBA,cAAc,GAC7F,CAAC1B,gBAAgBY,OAAOc,cAAc,CACxC,GACMT,eAAeoR,QACnB,MAAMrS,gBAAgB3C,QAAQsI,QAASnE,CAAAA,QAAMA,IAAEP,gBAAgB,CAAA,CAAE,GACjE,CAACjB,gBAAgB3C,MAAM,CACzB,GAEMulB,cAAcjnB,cAAawQ,QAC3B0W,gBAAgBxQ,QAAQ,MAAM;AAClC,QAAI,CAACuQ,aAAatnB;AAChB,aAAO;AAIT,UAAMzF,WADa+sB,YAAY,CAAC,GACH/sB;AAE7B,WAAO+sB,YAAYtnB,UAAU,KAAKzF,UAAUyF,WAAW,KAAK,CAACzF,WAAW,CAAC,GAAGitB,MAAMxnB;AAAAA,EACpF,GAAG,CAACsnB,WAAW,CAAC,GAEVG,WAA6B1Q,QACjC,OAAO;AAAA,IACLrW,MAAM;AAAA,IACNqD,IAAIsjB;AAAAA,IACJ/mB,OAAO2C;AAAAA,IACP/F,SAAS;AAAA,MACP6G,IAAIsjB;AAAAA,MACJ3mB,MAAM9B;AAAAA,IAAAA;AAAAA,EACR,IAEF,CAACyoB,OAAO,CACV,GAEMK,wBAAwBrZ,YAC5B,MACEhO,gBACAqI,WACAye,YACA/T,sBAAsB;AAAA,IACpB1P,YAAYgR;AAAAA,IACZhX,MAAMgL;AAAAA,IACNye;AAAAA,IACA7jB,kBAAkBA,iBAAiBC,YAAY;AAAA,IAC/ClD,aAAAA;AAAAA,IACA8M,oBAAoB+Z,aAAavvB,UAAU+lB,sBAAsBwJ,aAAavvB,OAAO,IAAI,CAAA;AAAA,EAAA,CAC1F,GACH,CAAC+Q,SAASrI,cAAa8mB,UAAU5jB,cAAcmR,sBAAsBtB,qBAAqB,CAC5F,GAEMuU,SAAStZ,YAAa+I,CAAAA,+BASlB,OAAA,EAAI,GAAIA,QAAQ,OAAO;AAAA,IAAC5e,QAAQ;AAAA,IAAQovB,MAAM;AAAA,IAAG9xB,UAAU;AAAA,EAAA,GAAQ,GAC1E,CAAA,CAAE,GAEC+xB,oBAAoB9Q,QAAQ,OAAO;AAAA,IAACoQ;AAAAA,IAAU5jB;AAAAA,EAAAA,IAAgB,CAAC4jB,UAAU5jB,YAAY,CAAC;AAE5F,SAAI,CAACG,cAAc,CAAC5C,cAAcA,WAAWe,aAAa,WAEtD,oBAAC,MAAA,EAAK,MAAM,GAAG,SAAS,GACtB,UAAA,oBAAC,MAAA,EAAK,UAAA,0BAAA,CAAuB,EAAA,CAC/B,IAKF,qBAAC,MAAA,EACC,KAAKklB,UACL,WAAU,UACV,QAAO,QACP,UAAS,UACT,QAAO,UACP,OAAO;AAAA,IAACe,YAAY;AAAA,EAAA,GAEpB,UAAA;AAAA,IAAA,oBAAC,mBAAA,EACC,SAASxtB,MAAMosB,SACf,OAAOU,eACP,YAAYxb,cAAcwb,aAAa,EAAA,CAAE;AAAA,IAG3C,oBAAC,MAAA,EAAK,IAAIO,QAAQ,MAAM,GAAG,UAAS,QAClC,UAAA,qBAAC,MAAA,EAAK,WAAU,UAAS,OAAO;AAAA,MAACI,WAAW;AAAA,IAAA,GAC1C,UAAA;AAAA,MAAA,oBAAC,KAAA,EAAI,MAAM,GACT,UAAA,oBAAC,mBACC,UAAA,oBAAC,KAAA,EAAI,SAAS,GACXX,2BACC,oBAAC,kBAAkB,UAAlB,EAA2B,OAAOS,mBACjC,UAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,eAAed,SAASpvB;AAAAA,UACxB,kBAAkBovB;AAAAA,UAElB,8BAAC,qBAAA,EAAoB,yBAAyB3kB,QAC5C,UAAA,oBAAC,sBAAA,EACC,SAAS4kB,aAAaxe,SACtB,OAAOwe,aAAagB,OACpB,QAAO,MACP,MAAMP,UAEN,UAAA,oBAAC,cAAA,CAAA,CAAY,GACf,EAAA,CACF;AAAA,QAAA;AAAA,MAAA,GAEJ,EAAA,CAEJ,EAAA,CACF,GACF;AAAA,MAEA,oBAAC,KAAA,EAAI,MAAK,QAAO,SAAS,GACxB,UAAA,qBAAC,MAAA,EAAK,OAAK,IAAC,MAAM,GAAE,UAAA;AAAA,QAAA;AAAA,QACuB;AAAA,QACzC,qBAAC,OACC,MAAM3kB,iBACN,QAAO,UACP,KAAI,cACJ,OAAO;AAAA,UAACmlB,YAAY;AAAA,QAAA,GAAU,UAAA;AAAA,UAAA;AAAA,8BAEjB,gBAAA,CAAA,CAAc;AAAA,QAAA,EAAA,CAC7B;AAAA,MAAA,EAAA,CACF,EAAA,CACF;AAAA,IAAA,EAAA,CACF,EAAA,CACF;AAAA,IACA,oBAAC,uBAAoB,MAAK,QAAO,UAAU,GAAG,UAAU,GAAG,OAAO;AAAA,MAACC,aAAa;AAAA,IAAA,GAC9E,+BAAC,MAAA,EAAK,KAAK,GAAG,MAAM,GAAG,SAAQ,YAC5BpnB,UAAAA;AAAAA,MAAAA,YAAYE,QAAQ0H,WAAWtC,kBAC9B,oBAAC,SAAM,MAAM,GACX,8BAAC,QAAA,EACC,MAAK,SACL,UAAUmhB,iBAAiB/X,oBAC3B,UAAU,GACV,MAAMA,qBAAqB,oBAAC,WAAQ,OAAO;AAAA,QAACyS,WAAW;AAAA,MAAA,OAASlQ,UAChE,SAAS2V,uBACT,SAAS,GACT,MAAM,kBAAA,CAAkB,GAE5B;AAAA,MAGF,oBAAC,gCACC,YAAYhT,sBACZ,OACA,cACA,YAAY,CAACtO,eAAAA,CAAe;AAAA,IAAA,EAAA,CAEhC,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;AAEA,SAAA+hB,kBAAA7tB,OAAA;AAAA,QAAApE,IAAAC,EAAA,EAAA,GACE;AAAA,IAAAuwB;AAAAA,IAAA1kB;AAAAA,IAAAomB;AAAAA,EAAAA,IAAqC9tB,OACrC;AAAA,IAAAylB;AAAAA,IAAAE;AAAAA,EAAAA,IAA4CH,qBAAqBP,sBAAsB;AAAC,MAAA5oB;AAAAT,IAAA,CAAA,6BAAAU,IAAA,2BAAA,KAMhCD,KAAA;AAAA,IAAAsrB,WAAY;AAAA,EAAA,GAAO/rB,OAAAS,MAAAA,KAAAT,EAAA,CAAA;AAAA,MAAAe;AAAAf,IAAA,CAAA,MAAAwB,uBAAAd,IAAA,2BAAA,KACjEK,KAAA,oBAAC,KAAA,EAAe,cACd,UAAA,oBAAC,MAAA,EAAW,SAAU,QAAA,YAAW,UAAA,sBAAA,CAEjC,EAAA,CACF,GAAMf,OAAAe,MAAAA,KAAAf,EAAA,CAAA;AAAA,MAAAsB;AAAAtB,IAAA,CAAA,MAAA8L,SAAA9L,SAAAkyB,cANV5wB,KAAA,oBAAC,MAAA,EAAW,MAAA,GAAY,SAAA,GAAQ,KAAA,GAAS,OAAA,UACvC,UAAA,qBAAC,MAAA,EAAU,QAAS,OAAA,UAAc,MAAA,QAAc,OAAAb,IAC9CM,UAAAA;AAAAA,IAAAA;AAAAA,IAKA,oBAAC,QAAa,QAAA,GAAG,QAAA,IAAgB,SAAA,GAAc,WAAA,GAC5C+K,UAAAA,4BACE,YAAA,EAAkBA,MAAAA,CAAK,IAExB,oBAAC,MAAA,EAAW,MAAA,GAAU,QAAA,YACnBomB,UAAAA,WAAAA,CACH,EAAA,CAEJ;AAAA,EAAA,EAAA,CACF,GACF,GAAOlyB,OAAA8L,OAAA9L,OAAAkyB,YAAAlyB,OAAAsB,MAAAA,KAAAtB,EAAA,CAAA;AAAA,MAAAuB;AAAAvB,WAAAwwB,WACPjvB,KAAA,oBAAC,KAAA,EAAS,MAAA,QACR,UAAA,oBAAC,QAAA,EAAiB,aAAS4wB,MAAAA,WAAgB,MAAA,SAAiB3B,SAAAA,QAAAA,CAAO,EAAA,CACrE,GAAMxwB,OAAAwwB,SAAAxwB,OAAAuB,MAAAA,KAAAvB,EAAA,CAAA;AAAA,MAAA8D;AAAA9D,IAAA,CAAA,MAAAsB,MAAAtB,SAAAuB,MArBRuC,0BAAC,MAAA,EAAW,MAAA,GAAS,OAAA,UACnBxC,UAAAA;AAAAA,IAAAA;AAAAA,IAkBAC;AAAAA,EAAAA,EAAAA,CAGF,GAAOvB,OAAAsB,IAAAtB,OAAAuB,IAAAvB,OAAA8D,MAAAA,KAAA9D,EAAA,CAAA;AAAA,MAAAgE;AAAAhE,IAAA,EAAA,MAAA+pB,qBAAA/pB,UAAA6pB,kBAEN7lB,KAAA6lB,kBAAkB,oBAAC,qBAAA,EAA+BE,WAAAA,kBAAAA,CAAiB,GAAI/pB,QAAA+pB,mBAAA/pB,QAAA6pB,gBAAA7pB,QAAAgE,MAAAA,KAAAhE,EAAA,EAAA;AAAA,MAAAkE;AAAA,SAAAlE,EAAA,EAAA,MAAA8D,MAAA9D,UAAAgE,MAzB1EE,0BAAC,qBAAA,EAAyB,MAAA,QAAgB,YACxCJ,UAAAA;AAAAA,IAAAA;AAAAA,IAwBCE;AAAAA,EAAAA,EAAAA,CACH,GAAsBhE,QAAA8D,IAAA9D,QAAAgE,IAAAhE,QAAAkE,MAAAA,KAAAlE,EAAA,EAAA,GA1BtBkE;AA0BsB;ACnanB,MAAMkuB,gBAAgB,iBCQhBC,kBAAqC;AAAA,EAChDvnB,MAAMsnB;AAAAA,EACNE,aAAaA,OAAO;AAAA,IAClBnf,MAAM6V;AAAAA,IACN5e,OAAO2C;AAAAA,IACP2a,QAAQ;AAAA,IACR6K,cAAc;AAAA,EAAA;AAAA,EAEhBC,WAAWlC;AAAAA,EACXE,QAAQ;AAAA,IAAC1a;AAAAA,EAAAA,GAAS;AAChB,WAAO;AAAA;AAAA,MAELA,QAAQjG,MAAkC;AAAA,QACxC,GAAGiG;AAAAA,QACH,CAACrM,cAAc,GAAGyC;AAAAA,QAClB,CAACxC,gBAAgB,GAAGwC;AAAAA,MAAAA,CACrB;AAAA,IAAA;AAAA,EAEL;AACF;ACzBO,SAASumB,UAAUzrB,UAA2BrG,GAAWC,GAAW8xB,KAAqB;AAC9F,SAAO,CACL,KAAK/xB,IAAIqG,SAAQI,MAAMurB,IAAI,IAAI/xB,IAAIoG,SAAQI,MAAMurB,OAAOD,GAAG,KAC3D,KAAK/xB,CAAC,IAAIC,CAAC,IACX,KAAKD,IAAIqG,SAAQI,MAAMurB,IAAI,IAAI/xB,IAAIoG,SAAQI,MAAMurB,OAAOD,GAAG,EAAE,EAC7Dpe,KAAK,EAAE;AACX;ACNA,SAASse,OAAOjyB,GAAWC,GAAW;AACpC,SAAO,IAAID,CAAC,IAAIC,CAAC;AACnB;AAEA,SAASiyB,OAAOlyB,GAAWC,GAAW;AACpC,SAAO,IAAID,CAAC,IAAIC,CAAC;AACnB;AAEA,SAAS0T,KAAKwe,SAAmBC,QAAQ,IAAI;AAC3C,SAAOD,QAAQxe,KAAKye,KAAK;AAC3B;AAEA,SAASC,UAAUC,IAAYC,IAAYvyB,GAAWC,GAAW;AAC/D,SAAO,IAAIqyB,EAAE,IAAIC,EAAE,IAAIvyB,CAAC,IAAIC,CAAC;AAC/B;AAEO,SAASuyB,kBAAkBnsB,UAA2BosB,MAA6B;AACxF,QAAM;AAAA,IAACC;AAAAA,EAAAA,IAAgBrsB,SAAQQ,MACzB;AAAA,IAACpC;AAAAA,IAAMQ;AAAAA,EAAAA,IAAMwtB,MACb;AAAA,IAACzyB,GAAG2yB;AAAAA,IAAO1yB,GAAG2yB;AAAAA,EAAAA,IAASnuB,MACvB;AAAA,IAACzE,GAAG6yB;AAAAA,IAAM5yB,GAAG6yB;AAAAA,EAAAA,IAAO7tB,IAEpB8tB,MAAMF,OAAO,GAGbG,WAAW/tB,GAAG7B,OAAOpD,IAAIqG,SAAQ4sB,QAAQC,SAGzCC,YAAY1uB,KAAK+B,WAAW/B,KAAKkC,UAAUgsB,QAAQtsB,SAAQI,MAAM2sB,UAAUT,OAG3EU,KAAK7rB,KAAKE,IAAIgrB,cAAclrB,KAAK8rB,IAAIH,YAAYH,QAAQ,IAAI,CAAC,GAC9DO,KAAK/rB,KAAKE,IAAIgrB,cAAclrB,KAAK8rB,IAAIV,QAAQE,GAAG,IAAI,CAAC,GAErDU,OAAiB,CAAA;AAGvB,SAAI/uB,KAAK+B,UACPgtB,KAAKpyB,KACH6wB,OACEU,QAAQtsB,SAAQI,MAAM2sB,SACtBR,QAAQvsB,SAAQI,MAAMU,YAAYd,SAAQI,MAAMC,OAClD,GACAwrB,OAAOS,QAAQtsB,SAAQI,MAAM2sB,SAASR,QAAQS,EAAE,GAChDhB,UAAUM,QAAQtsB,SAAQI,MAAM2sB,SAASR,OAAOD,QAAQtsB,SAAQI,MAAM2sB,UAAUC,IAAIT,KAAK,CAC3F,IACSnuB,KAAKkC,UACd6sB,KAAKpyB,KACH6wB,OACEU,QAAQtsB,SAAQI,MAAM2sB,SACtBR,QAAQvsB,SAAQI,MAAMU,YAAYd,SAAQI,MAAMC,OAClD,GACAwrB,OAAOS,QAAQtsB,SAAQI,MAAM2sB,SAASR,QAAQS,EAAE,GAChDhB,UAAUM,QAAQtsB,SAAQI,MAAM2sB,SAASR,OAAOD,QAAQtsB,SAAQI,MAAM2sB,UAAUC,IAAIT,KAAK,CAC3F,IAEAY,KAAKpyB,KAAK6wB,OAAOU,OAAOC,KAAK,CAAC,GAI5B3tB,GAAGuB,UACDosB,QAAQ3tB,GAAG7B,OAAOnD,IACpBuzB,KAAKpyB,KACH8wB,OAAOc,WAAWO,IAAIX,KAAK,GAC3BP,UAAUW,UAAUJ,OAAOI,UAAUJ,QAAQW,EAAE,GAC/CrB,OAAOc,UAAUF,MAAMS,EAAE,GACzBlB,UAAUW,UAAUF,KAAKE,WAAWO,IAAIT,GAAG,GAC3CZ,OAAOc,WAAWN,cAAcI,GAAG,GACnCT,UAAUW,UAAUF,KAAKE,UAAUF,MAAMJ,YAAY,GACrDR,OAAOc,UAAUF,MAAMzsB,SAAQI,MAAMU,YAAYd,SAAQI,MAAMC,OAAO,CACxE,IAEA8sB,KAAKpyB,KACH8wB,OAAOc,WAAWN,cAAcE,KAAK,GACrCP,UAAUW,UAAUJ,OAAOI,UAAUJ,QAAQF,YAAY,GACzDR,OAAOc,UAAUF,MAAMzsB,SAAQI,MAAMU,YAAYd,SAAQI,MAAMC,OAAO,CACxE,IAEOzB,GAAG0B,UACRisB,QAAQ3tB,GAAG7B,OAAOnD,IAAIgF,GAAG7B,OAAOrB,IAElCyxB,KAAKpyB,KACH8wB,OAAOc,WAAW3sB,SAAQI,MAAM2sB,UAAUG,IAAIX,KAAK,GACnDP,UACEW,WAAW3sB,SAAQI,MAAM2sB,SACzBR,OACAI,WAAW3sB,SAAQI,MAAM2sB,SACzBR,QAAQW,EACV,GACArB,OAAOc,WAAW3sB,SAAQI,MAAM2sB,SAASN,MAAMS,EAAE,GACjDlB,UACEW,WAAW3sB,SAAQI,MAAM2sB,SACzBN,KACAE,WAAW3sB,SAAQI,MAAM2sB,UAAUG,IACnCT,GACF,GACAZ,OAAOc,WAAWN,cAAcI,GAAG,GACnCT,UAAUW,UAAUF,KAAKE,UAAUF,MAAMJ,YAAY,GACrDR,OAAOc,UAAUF,MAAMzsB,SAAQI,MAAMU,YAAYd,SAAQI,MAAMC,OAAO,CACxE,IAEA8sB,KAAKpyB,KACH8wB,OAAOc,WAAWN,cAAcE,KAAK,GACrCP,UAAUW,UAAUJ,OAAOI,UAAUJ,QAAQF,YAAY,GACzDR,OAAOc,UAAUF,MAAMzsB,SAAQI,MAAMU,YAAYd,SAAQI,MAAMC,OAAO,CACxE,IAEOksB,QAAQE,MACjBU,KAAKpyB,KACH8wB,OAAOc,WAAWK,IAAIT,KAAK,GAC3BP,UAAUW,UAAUJ,OAAOI,UAAUJ,QAAQW,EAAE,GAC/CrB,OAAOc,UAAUF,MAAMS,EAAE,GACzBlB,UAAUW,UAAUF,KAAKE,WAAWO,IAAIT,GAAG,GAC3CZ,OAAOa,KAAKD,GAAG,CACjB,IAEAU,KAAKpyB,KACH8wB,OAAOc,WAAWxrB,KAAKE,IAAI2rB,IAAIE,EAAE,GAAGX,KAAK,GACzCP,UAAUW,UAAUJ,OAAOI,UAAUJ,QAAQprB,KAAKE,IAAI2rB,IAAIE,EAAE,CAAC,GAC7DrB,OAAOc,UAAUF,MAAMS,EAAE,GACzBlB,UAAUW,UAAUF,KAAKE,WAAWO,IAAIT,GAAG,GAC3CZ,OAAOa,KAAKD,GAAG,CACjB,GAGKnf,KAAK6f,IAAI;AAClB;ACxHO,SAAAC,cAAAhwB,OAAA;AAAA,QAAApE,IAAAC,EAAA,EAAA,GAKL;AAAA,IAAAmF;AAAAA,IAAA4B,SAAAA;AAAAA,IAAApB;AAAAA,EAAAA,IAA4BxB,OAC5B;AAAA,IAAA6kB;AAAAA,EAAAA,IAAsBjiB,SAAOQ,MAC7B6sB,QAAcC,SAAAA;AAAU,MAAA7zB;AAAAT,IAAA,CAAA,MAAAoF,QAAApF,SAAAgH,YAAAhH,EAAA,CAAA,MAAA4F,MAEGnF,KAAAkH,mBAAmBX,UAAS;AAAA,IAAA5B;AAAAA,IAAAQ;AAAAA,EAAAA,CAAU,GAAC5F,OAAAoF,MAAApF,OAAAgH,UAAAhH,OAAA4F,IAAA5F,OAAAS,MAAAA,KAAAT,EAAA,CAAA;AAAlE,QAAAozB,OAA2B3yB;AAA6D,MAAAM;AAAAf,IAAA,CAAA,MAAAozB,QAAApzB,SAAAgH,YAK/EjG,KAAAoyB,kBAAkBnsB,UAASosB,IAAI,GAACpzB,OAAAozB,MAAApzB,OAAAgH,UAAAhH,OAAAe,MAAAA,KAAAf,EAAA,CAAA;AAEtB,QAAAsB,KAAA2nB,cAAc;AAAC,MAAA1nB;AAAAvB,IAAA,CAAA,MAAAe,MAAAf,EAAA,CAAA,MAAAsB,MAAAtB,EAAA,CAAA,MAAAq0B,MAAAE,OAAAvT,MAAA/B,KAAAuV,MAH9BjzB,KAAA,oBAAA,QAAA,EACK,GAAAR,IACK,QAAAszB,MAAKE,OAAOvT,MAAM/B,KAAKuV,IAClB,aAAAlzB,IAAe,GAC5BtB,OAAAe,IAAAf,OAAAsB,IAAAtB,EAAA,CAAA,IAAAq0B,MAAAE,OAAAvT,MAAA/B,KAAAuV,IAAAx0B,QAAAuB,MAAAA,KAAAvB,EAAA,EAAA;AAAA,MAAA8D;AAAA9D,IAAA,EAAA,MAAAozB,QAAApzB,UAAAgH,YAGGlD,KAAAqvB,kBAAkBnsB,UAASosB,IAAI,GAACpzB,QAAAozB,MAAApzB,QAAAgH,UAAAhH,QAAA8D,MAAAA,KAAA9D,EAAA,EAAA;AAAA,MAAAgE;AAAAhE,IAAA,EAAA,MAAAq0B,MAAAE,OAAAvT,MAAA/B,KAAAwV,UAC3BzwB,KAAA0wB,KAAKL,MAAKE,OAAOvT,MAAM/B,KAAKwV,QAAS,GAAG,GAACz0B,EAAA,EAAA,IAAAq0B,MAAAE,OAAAvT,MAAA/B,KAAAwV,QAAAz0B,QAAAgE,MAAAA,KAAAhE,EAAA,EAAA;AAAA,MAAAkE;AAAAlE,IAAA,EAAA,MAAAipB,eAAAjpB,UAAA8D,MAAA9D,EAAA,EAAA,MAAAgE,MAFnDE,mCACK,GAAAJ,IACK,QAAAE,IACKilB,YAAAA,CAAW,GACxBjpB,QAAAipB,aAAAjpB,QAAA8D,IAAA9D,QAAAgE,IAAAhE,QAAAkE,MAAAA,KAAAlE,EAAA,EAAA;AAAA,MAAAiP;AAAAjP,IAAA,EAAA,MAAAozB,KAAAhuB,KAAArB,UAAA/D,UAAAozB,KAAAhuB,KAAA+B,WAAAnH,EAAA,EAAA,MAAAozB,KAAAhuB,KAAAzE,KAAAX,EAAA,EAAA,MAAAgH,YAAAhH,UAAAipB,eAAAjpB,EAAA,EAAA,MAAAq0B,MAAAE,OAAAvT,MAAA/B,KAAAwV,UAEDxlB,KAAAmkB,KAAIhuB,KAAK+B,WACR,oBAAA,QAAA,EACK,GAAAsrB,UACDzrB,UACAosB,KAAIhuB,KAAKzE,IAAKqG,SAAOI,MAAM2sB,SAC3BX,KAAIhuB,KAAKrB,OAAOnD,IAAKoG,SAAOI,MAAMU,YAAad,SAAOI,MAAMC,SAC5D,EACF,GACQ,QAAAgtB,MAAKE,OAAOvT,MAAM/B,KAAKwV,QAClBxL,aAAW,GAE3BjpB,EAAA,EAAA,IAAAozB,KAAAhuB,KAAArB,QAAA/D,EAAA,EAAA,IAAAozB,KAAAhuB,KAAA+B,SAAAnH,EAAA,EAAA,IAAAozB,KAAAhuB,KAAAzE,GAAAX,QAAAgH,UAAAhH,QAAAipB,aAAAjpB,EAAA,EAAA,IAAAq0B,MAAAE,OAAAvT,MAAA/B,KAAAwV,QAAAz0B,QAAAiP,MAAAA,KAAAjP,EAAA,EAAA;AAAA,MAAAmP;AAAAnP,IAAA,EAAA,MAAAozB,KAAAhuB,KAAArB,UAAA/D,UAAAozB,KAAAhuB,KAAAkC,WAAAtH,EAAA,EAAA,MAAAozB,KAAAhuB,KAAAzE,KAAAX,EAAA,EAAA,MAAAgH,YAAAhH,UAAAipB,eAAAjpB,EAAA,EAAA,MAAAq0B,MAAAE,OAAAvT,MAAA/B,KAAAwV,UAEAtlB,KAAAikB,KAAIhuB,KAAKkC,WACR,oBAAA,QAAA,EACK,GAAAmrB,UACDzrB,UACAosB,KAAIhuB,KAAKzE,IAAKqG,SAAOI,MAAM2sB,SAC3BX,KAAIhuB,KAAKrB,OAAOnD,IACdwyB,KAAIhuB,KAAKrB,OAAOrB,IAChBsE,SAAOI,MAAMU,YACbd,SAAOI,MAAMC,SACf,CACF,GACQ,QAAAgtB,MAAKE,OAAOvT,MAAM/B,KAAKwV,QAClBxL,aAAW,GAE3BjpB,EAAA,EAAA,IAAAozB,KAAAhuB,KAAArB,QAAA/D,EAAA,EAAA,IAAAozB,KAAAhuB,KAAAkC,SAAAtH,EAAA,EAAA,IAAAozB,KAAAhuB,KAAAzE,GAAAX,QAAAgH,UAAAhH,QAAAipB,aAAAjpB,EAAA,EAAA,IAAAq0B,MAAAE,OAAAvT,MAAA/B,KAAAwV,QAAAz0B,QAAAmP,MAAAA,KAAAnP,EAAA,EAAA;AAAA,MAAAkc;AAAA,SAAAlc,EAAA,EAAA,MAAAuB,MAAAvB,EAAA,EAAA,MAAAkE,MAAAlE,EAAA,EAAA,MAAAiP,MAAAjP,UAAAmP,MAxCH+M,KAAA,qBAAA,UAAA,EACE3a,UAAAA;AAAAA,IAAAA;AAAAA,IAMA2C;AAAAA,IAMC+K;AAAAA,IAaAE;AAAAA,EAAAA,EAAAA,CAcA,GACAnP,QAAAuB,IAAAvB,QAAAkE,IAAAlE,QAAAiP,IAAAjP,QAAAmP,IAAAnP,QAAAkc,MAAAA,KAAAlc,EAAA,EAAA,GAzCHkc;AAyCG;ACxDP,MAAMyY,QAAQ,IAER3tB,UAA4B;AAAA,EAChCI,OAAO;AAAA,IACL2sB,SAAS;AAAA,IACT1sB,SAAS;AAAA,IACTsrB,MAAM;AAAA,IACN7qB,WAAW;AAAA,EAAA;AAAA,EAEb8rB,SAAS;AAAA,IACPC,SAAS;AAAA,EAAA;AAAA,EAEXrsB,MAAM;AAAA,IACJ6rB,cAAc;AAAA,IACdhsB,SAAS;AAAA,IACT4hB,aAAa;AAAA,EAAA;AAEjB;AAEO,SAAA2L,wBAAAxwB,OAAA;AAAA,QAAApE,IAAAC,EAAA,EAAA,GACL;AAAA,IAAA+F;AAAAA,EAAAA,IAAqB5B,OAUrB,CAAA,EAAAywB,SAAA,IAAsBv0B,SAAS,EAAK;AAAC,MAAAG;AAAAT,WAAA60B,aAC3Bp0B,KAAAA,MAAA;AAIRo0B,cAAU,EAAI;AAAA,EAAC,GAChB70B,OAAA60B,WAAA70B,OAAAS,MAAAA,KAAAT,EAAA,CAAA;AAAA,MAAAe;AAAAf,IAAA,CAAA,MAAAwB,uBAAAd,IAAA,2BAAA,KAAEK,KAAA,IAAEf,OAAAe,MAAAA,KAAAf,EAAA,CAAA,GALL6D,UAAUpD,IAKPM,EAAE;AAAC,MAAAO;AAAAtB,IAAA,CAAA,6BAAAU,IAAA,2BAAA,KAUOY,KAAA;AAAA,IAAA6f,UACK;AAAA,IAAU2T,KACf;AAAA,IAACC,MACA;AAAA,IAAC5yB,OACA;AAAA,IAAMG,QACL;AAAA,IAAM0yB,eACC;AAAA,IAAMhwB,QACb;AAAA,EAAA,GAEThF,OAAAsB,MAAAA,KAAAtB,EAAA,CAAA;AAAA,MAAAuB;AAAAvB,WAAAgG,cAEAzE,KAAAyE,WAAUqJ,IAAK/C,OAOf,GAACtM,OAAAgG,YAAAhG,OAAAuB,MAAAA,KAAAvB,EAAA,CAAA;AAAA,MAAA8D;AAAA9D,WAAAuB,MAtBJuC,KAAA,oBAAA,OAAA,EACO,MAAA,QACE,OAAA1B,OAAMC,YACL,QAAAD,OAAMG,aACP,OAAAjB,IAWNC,UAAAA,GAAAA,CAQH,GAAMvB,OAAAuB,IAAAvB,OAAA8D,MAAAA,KAAA9D,EAAA,CAAA;AAAA,MAAAgE;AAAAhE,WAAAgG,cACLhC,KAAA2wB,OA2DG30B,OAAAgG,YAAAhG,OAAAgE,MAAAA,KAAAhE,EAAA,CAAA;AAAA,MAAAkE;AAAA,SAAAlE,EAAA,EAAA,MAAA8D,MAAA9D,UAAAgE,MApFNE,sCACEJ,UAAAA;AAAAA,IAAAA;AAAAA,IAwBCE;AAAAA,EAAAA,EAAAA,CA2DG,GACHhE,QAAA8D,IAAA9D,QAAAgE,IAAAhE,QAAAkE,MAAAA,KAAAlE,EAAA,EAAA,GArFHkE;AAqFG;AA3GA,SAAAoI,QAAA1E,WAAA;AAAA,SAuCG,oBAAC,eAAA,EACO,MAAAA,UAASxC,MAEN4B,SACL,IAAAY,UAAShC,MAFRgC,UAAS7C,GAEE;AAChB;ACjEL,SAASkwB,mBAAmBne,YAAgC;AACjE,MAAIA,cAAcA,WAAWhN,SAAS;AACpC,UAAM,IAAIjF,MACR,IAAIiI,WAAW,8FAA8FgK,WAAWhN,MAAM,aAChI;AAEF,SAAOgN;AACT;AAEO,SAASoe,yBACdpe,YACAlE,SACA;AACA,SAAO,YAAY;AACjB,QAAI,OAAOkE,cAAe;AACxB,aAAOA;AAET,UAAMqe,mBAAmB,MAAMre,WAAWlE,OAAO;AACjD,WAAOqiB,mBAAmBE,gBAAgB;AAAA,EAC5C;AACF;ACpBO,MAAMC,oBAAoBA,CAC/BC,QACAxzB,cAC4B;AAC5B,MAAI,CAACwzB,UAAU,CAACxzB;AACd,WAAO,CAAA;AAGT,QAAMyzB,YAAoCD,UAAU,CAAA,GAC9CE,gBAAyC,CAAA;AAC/C,aAAW,CAACxwB,KAAKyC,IAAI,KAAKuJ,OAAOiK,QAAQsa,SAAS,GAAG;AACnD,QAAIrjB,QAAQ/L,IAAIrE,WAAU2F,IAAI;AAC1BuC,UAAMC,QAAQiI,KAAK,MAErBA,QAAQA,MAAM1C,OAAQkZ,UACpB,OAAOA,QAAS,WAAWA,MAAM1Z,UAAU,eAAe,UAAU0Z,OAAO,EAC7E,IAEF8M,cAAcxwB,GAAG,IAAIkN;AAAAA,EACvB;AAEA,SAAOsjB;AACT,GCzBMC,4BAA4B;AAE3B,SAASC,6BAA6BC,gBAAkC;AAC7E,MAAI,OAAOlM,eAAiB;AAC1B,WAAO,CAAA;AAGT,QAAMvX,QAAQuX,aAAaC,QAAQ,GAAG+L,yBAAyB,GAAGE,cAAc,EAAE;AAClF,MAAI,CAACzjB,MAAO,QAAO,CAAA;AACnB,MAAI;AAEF,WAAO0jB,KAAKC,MAAM3jB,KAAK;AAAA,EACzB,QAAQ;AACN,WAAO,CAAA;AAAA,EACT;AACF;AAEO,SAAS4jB,6BAA6BH,gBAAwBI,aAAuB;AACtF,SAAOtM,eAAiB,OAI5BA,aAAaG,QAAQ,GAAG6L,yBAAyB,GAAGE,cAAc,IAAIC,KAAKI,UAAUD,WAAW,CAAC;AACnG;ACJA,MAAMxO,oBAAoB,GACpBC,qBAAqB;AAEpB,SAASyO,uBACdnhB,KACAjK,YACAqI,YAAWqU,mBACX;AACA,SAAK2O,qBAAqBrrB,UAAU,IAK7BsrB,aAAarhB,KAAKjK,YAAY,CAAA,GAAIzC,KAAKE,IAAI4K,WAAUsU,kBAAkB,CAAC,KAJ7E2G,QAAQpL,MAAM,+BAA+B,GACtC;AAIX;AAEA,SAASoT,aACPrhB,KACAjK,YACApD,MACAyL,WACkB;AAClB,SAAIzL,KAAKsC,UAAUmJ,YACV,CAAA,IAGFrI,WAAWiB,OAAOgI,OAAyB,CAACC,KAAKhI,UAAU;AAChE,UAAMme,YAAY,CAAC,GAAGziB,MAAMsE,MAAMhB,IAAI,GAChCqrB,cAAcrqB,MAAMtB,MACpB;AAAA,MAACyH;AAAAA,IAAAA,IAASoD,gBAAgBpL,aAAaggB,SAAS,GAAGpV,GAAG,EAAE,CAAC,KAAK,CAAA;AACpE,QAA2B5C,SAAU;AACnC,aAAO6B;AAGT,UAAMsiB,oBAAoC;AAAA,MACxC5uB,MAAMyiB;AAAAA,MACNnf,MAAMgB,MAAMhB;AAAAA,MACZF,YAAYurB;AAAAA,MACZlkB;AAAAA,IAAAA;AAGF,QAAIkkB,YAAYxqB,aAAa,UAAU;AACrC,YAAMwc,cAAc+N,aAAarhB,KAAKshB,aAAalM,WAAWhX,SAAQ;AAEtE,aAAO,CAAC,GAAGa,KAAKsiB,mBAAmB,GAAGjO,WAAW;AAAA,IACnD,WACEgO,YAAYxqB,aAAa,WACzBwqB,YAAY1rB,GAAGX,UACfqsB,YAAY1rB,GAAG8d,KAAME,CAAAA,SAAS,YAAYA,IAAI;AAAA,IAE9CjhB,KAAKsC,SAAS,IAAImJ,WAClB;AACA,YAAM;AAAA,QAAChB,OAAOokB;AAAAA,MAAAA,IAAchhB,gBAAgBpL,aAAaggB,SAAS,GAAGpV,GAAG,EAAE,CAAC,KAAK,CAAA;AAEhF,UAAIwT,aAA+B,CAAA;AAEnC,UAAKgO,YAAoBvsB;AAEvB,mBAAW2e,QAAQ4N,YAAqB;AACtC,gBAAMC,WAAW,CAAC,GAAGrM,WAAW;AAAA,YAAChlB,MAAMwjB,KAAKxjB;AAAAA,UAAAA,CAAK;AACjD,cAAIsxB,aAAaJ,YAAY1rB,GAAGC,KAAMJ,OAAMA,EAAEQ,SAAS2d,KAAK1Z,KAAK;AAYjE,cAXK0Z,KAAK1Z,UACRwnB,aAAaJ,YAAY1rB,GAAG,CAAC,GAC7ByjB,QAAQsI,KACN,qFACA;AAAA,YACEF;AAAAA,YACA7N;AAAAA,YACA8N;AAAAA,UAAAA,CAEJ,IAEE9N,KAAKxjB,QAAQsxB,YAAY;AAC3B,kBAAMpO,cAAc+N;AAAAA,cAClBrhB;AAAAA;AAAAA,cAEA0hB;AAAAA,cACAD;AAAAA,cACArjB;AAAAA,YAAAA,GAEIyV,cAAc;AAAA,cAClBlhB,MAAM8uB;AAAAA,cACNxrB,MAAM2d,KAAKxjB;AAAAA,cACX2F,YAAY2rB;AAAAA,cACZtkB,OAAOwW;AAAAA,YAAAA;AAETJ,yBAAa,CAAC,GAAGA,YAAYK,aAAa,GAAGP,WAAW;AAAA,UAC1D;AAAA,QACF;AAGF,aAAO,CAAC,GAAGrU,KAAKsiB,mBAAmB,GAAG/N,UAAU;AAAA,IAClD;AAEA,WAAO,CAAC,GAAGvU,KAAKsiB,iBAAiB;AAAA,EACnC,GAAG,CAAA,CAAE;AACP;AAOO,MAAMK,yBAAqD,SAChEjqB,QACAkqB,eACAC,yBACAC,wBACA;AACA,MACEpqB,OAAO5B,WAAWe,aAAa,YAC/Ba,OAAO5B,WAAWE,KAAKoJ,WAAW,wBAAwB,GAC1D;AACA,UAAM2iB,UAAUrqB,OAAOhF,KAAKwkB,MAAM,EAAE;AAGpC,YADiB6K,QAAQ,CAAC,KAAK1hB,aAAa0hB,QAAQ,CAAC,CAAC,IAAIA,QAAQ,CAAC,EAAE5xB,OAAO,UACxD0xB,0BAChBC,uBAAuBvnB,IAAKynB,CAAAA,mBAAmB;AAAA,MAC7CjpB,IAAIipB;AAAAA,MACJC,YAAY,CAAC,GAAGvqB,OAAOhF,KAAKwkB,MAAM,GAAG,EAAE,GAAG;AAAA,QAAC/mB,MAAM6xB;AAAAA,MAAAA,CAAc;AAAA,IAAA,EAC/D,IACF5qB;AAAAA,EACN;AAEA,MAAIwqB,cAAc/qB,aAAa,YAAY+qB,cAAc5rB,KAAKoJ,WAAW,QAAQ;AAC/E,WAAOyiB,4BAA4BnqB,OAAO1B,OACtC8rB,uBAAuBvnB,IAAKynB,CAAAA,mBAAmB;AAAA,MAC7CjpB,IAAIipB;AAAAA,MACJC,YAAY,CAAC,GAAGvqB,OAAOhF,KAAKwkB,MAAM,GAAG,EAAE,GAAG8K,aAAa;AAAA,IAAA,EACvD,IACF5qB;AAIR;AAEO,SAAS8qB,oBACdC,gBACAC,iBACAP,yBACAQ,mBACAC,QACoB;AACpB,QAAMC,kBAAsC,CAAA;AAC5C,aAAW7qB,UAAU0qB,iBAAiB;AACpC,UAAMI,aAAa9qB,OAAOhF,KAAKwkB,MAAM,GAAG,EAAE,GACpC0K,gBACJQ,gBAAgBxsB,KAAM8d,CAAAA,MAAMve,aAAaue,EAAEhhB,IAAI,MAAMyC,aAAaqtB,UAAU,CAAC,GAAG1sB,cAChFqsB,gBAEIM,eAAeH,OACnB5qB,QACAkqB,eACAC,yBACAQ,iBACF,GAAG5nB,OAAQioB,CAAAA,gBAAgBA,YAAY3pB,OAAO8oB,uBAAuB;AAEjEY,oBACFF,gBAAgBt1B,KAAK;AAAA,MACnB01B,iBAAiBd;AAAAA,MACjBe,WAAWlrB,OAAOhF;AAAAA,MAClBmwB,SAASJ;AAAAA,IAAAA,CACV;AAAA,EAEL;AAEA,SAAOF;AACT;AC7IA,MAAMO,0BAA0BnzB,cAA4C;AAAA,EAC1EozB,sBAAsBA,MAAM;AAAA,EAAC;AAAA,EAC7BC,oBAAoB;AACtB,CAAC;AAEM,SAAAC,sBAAA;AAAA,SACEnzB,WAAWgzB,uBAAuB;AAAC;AAG5C,SAASI,qBACPC,mBACAC,cACAniB,WACA;AACA,SAAOkiB,mBAAmB1P,KACvBlZ,CAAAA,QACCA,IAAIooB,oBAAoBS,cAAcrqB,MACtCwB,IAAIqoB,aACJztB,aAAaoF,IAAIqoB,SAAS,EAAExjB,WAAWjK,aAAa8L,SAAQ,CAAC,CACjE;AACF;AAEO,SAAAoiB,yBAAA/zB,OAAA;AAAA,QAAApE,IAAAC,EAAA,EAAA,GACL;AAAA,IAAAoX,QAAAmB;AAAAA,EAAAA,IAA+B1F,sBAAAA,GAE/B0D,YAAkBH,aAAamC,aAAYmB,iBAAkB,GAC7D7C,aAAmB0B,aAAYZ,WAAsBd,YACrDO,SAAemB,aAAYZ,WAAiB9L,OAC5C;AAAA,IAAA8L,WAAAwgB;AAAAA,EAAAA,IAAkC7hB,aAAaC,SAAS,GAExD,CAAA6hB,YAAAC,aAAA,IAAoCh4B,SAAS,EAAK,GAElD,CAAAi4B,wBAAAC,yBAAA,IAA4Dl4B,SAAAA,GAG5D,CAAAm4B,WAAAC,YAAA,IAAkCp4B,SAAAA,GAClC,CAAA43B,cAAAS,eAAA,IAAwCr4B,SAA+B4L,MAAS,GAChF,CAAA0sB,aAAAC,cAAA,IAAsCv4B,SAAiC4L,MAAS,GAChF,CAAA+rB,mBAAAa,oBAAA,IAAkDx4B,SAAAA;AAA0C,MAAAG;AAAAT,IAAA,CAAA,MAAAwB,uBAAAd,IAAA,2BAAA,KAElED,KAAAA,MAAA;AACxB63B,kBAAc,EAAK,GACnBI,aAAaxsB,MAAS,GACtBssB,0BAA0BtsB,MAAS;AAAA,EAAC,GACrClM,OAAAS,MAAAA,KAAAT,EAAA,CAAA;AAJD,QAAA6a,QAAcpa,IAMAM,KAAAsW,QAAM3I,cAANsH;AAAqD,MAAA1U;AAAAtB,WAAAe,MADlCO,KAAA;AAAA,IAAAoN,YACnB3N;AAAAA,EAAAA,GACbf,OAAAe,IAAAf,OAAAsB,MAAAA,KAAAtB,EAAA,CAAA;AAFD,QAAA+4B,iBAAuBnqB,UAAUtN,EAEhC,GACDkM,aAAmB+qB,wBAAsB12B,UAAeiN,KACxDjB,KAAWgM,MAAAA;AAAO,MAAAtY;AAAAvB,IAAA,CAAA,MAAAqX,QAAA4B,gBAAAjZ,EAAA,CAAA,MAAAqX,QAAA2hB,sBAGhBz3B,KAAAA,CAAA6D,MAAA6zB,aAAAnjB,WAAA;AAKE,UAAA;AAAA,MAAAjU,UAAAA;AAAAA,MAAAo1B;AAAAA,IAAAA,IAAmCnhB,UAAA,CAAA;AAEnC,QADA6iB,gBAAgBvzB,IAAI,GAChB,CAACvD,aAAD,CAAco1B,kBAAd,CAAiCnhB,UAAjC,CAA4C2iB,aAAS;AACvDK,2BAAqB5sB,MAAS;AAAC;AAAA,IAAA;AAIjC,UAAAgtB,YAAkBzD,6BAA6BrwB,KAAIyI,EAAG,GACtDsrB,iBAAuBV,YAASlpB,OAAQ6pB,CAAAA,MAAOA,EAACvrB,OAAQzI,MAAIyI,EAAI,GAChEwrB,sBAA4BF,eAAc5pB,OACxC+pB,CAAAA,QAAO,CAACJ,UAASpvB,UAAWovB,UAASp5B,SAAUs5B,IAACvrB,EAAG,CACrD;AAEAgrB,mBAAeQ,mBAAmB;AAClC,UAAAE,SAAen0B,MAAIyI,IACnB2rB,WAAiBL,gBAAc9pB,IAAM/C,OAAiB,KAArC,CAAA,GACjBmtB,aAAmBzD,uBAAuBn0B,WAAUo1B,gBAAgB5f,QAAM4B,YAAc;AACxF,QAAIsgB,UAAUC,UAAQ1vB,QAAQ;AAC5B,YAAA4vB,WAAiB1C,oBACfC,gBACAwC,YACAF,QACAC,SAAQjqB,OAAQoqB,CAAAA,SAAUJ,WAAWI,IAAI,GACzCtiB,QAAM2hB,sBAANvC,sBACF;AACAqC,2BAAqBY,QAAQ;AAAA,IAAC;AAE9BZ,2BAAqB5sB,MAAS;AAAA,EAC/B,GACFlM,EAAA,CAAA,IAAAqX,QAAA4B,cAAAjZ,EAAA,CAAA,IAAAqX,QAAA2hB,oBAAAh5B,OAAAuB,MAAAA,KAAAvB,EAAA,CAAA;AAnCH,QAAA45B,qBAA2Br4B;AAqC1B,MAAAuC;AAAA9D,WAAAk4B,gBAGCp0B,KAAAA,CAAA+1B,aAAAC,eAAAC,gBAAA;AAKE,QAAI,CAACtB,eAAD,CAAeP;AAAY;AAG/B,UAAA8B,cAAoB,CAAC,CAACpB,eAAWluB,KAAOuvB,CAAAA,QAAOb,IAACvrB,OAAQgsB,YAAWhsB,EAAG,GACtEqsB,aAAmBzB,YAASlpB,OAC1B4qB,aACE,CAAC,CAACvB,eAAWluB,KACX0vB,CAAAA,iBAAkBP,YAAWhsB,OAAQusB,aAAYvsB,MAAOusB,aAAYvsB,OAAQssB,QAAOtsB,EACrF,KACCgsB,YAAWhsB,OAAQssB,QAAOtsB,MAA1B,CAAkCmsB,WACvC;AACAnB,mBAAeqB,UAAU,GACzBrE,6BACEqC,aAAYrqB,IACZqsB,WAAU7qB,IAAK+B,QAAW,CAC5B;AAAA,EAAC,GACFpR,OAAAk4B,cAAAl4B,OAAA8D,MAAAA,KAAA9D,EAAA,CAAA;AAtBH,QAAAq6B,mBAAyBv2B;AAwBxB,MAAAE;AAAAhE,IAAA,CAAA,MAAAqX,UAAArX,SAAA+4B,kBAAA/4B,EAAA,EAAA,MAAA45B,sBAGC51B,YAAAs2B,aAAA;AACEhC,kBAAc,EAAI;AAClB,UAAAiC,iBAAuBnF,kBAAkB/d,QAAMmjB,sBAAwB1kB,SAAMjU,QAAS,GACtF44B,cAA0C,OAAO,OAAOpjB,QAAMohB,aAAgB,aAC1EphB,QAAMohB,UAAYM,gBAAgBwB,cACD,IAAjChgB,QAAOC,QAASnD,QAAMohB,SAAW;AACrCC,iBAAaD,WAAS,GACtBD,0BAA0B1iB,QAAM;AAChC,UAAA4kB,iBAAqBjC,cAAS,CAAA;AAC1BP,qBACF0B,mBAAmB1B,gBAAcO,aAAW3iB,QAAM,IAElDoY,QAAOpL,MAAO,uDAAuDyX,cAAc;AAAA,EACpF,GACFv6B,OAAAqX,QAAArX,OAAA+4B,gBAAA/4B,QAAA45B,oBAAA55B,QAAAgE,MAAAA,KAAAhE,EAAA,EAAA;AAfH,QAAA63B,uBAA6B7zB;AAiB5B,MAAAE;AAAAlE,YAAA63B,wBAGQ3zB,KAAA;AAAA,IAAA2zB;AAAAA,IAAAC,oBAEe;AAAA,EAAA,GACrB93B,QAAA63B,sBAAA73B,QAAAkE,MAAAA,KAAAlE,EAAA,EAAA;AAJH,QAAA+b,eACE7X;AAIwB,MAAA+K;AAAAjP,YAAAwN,cAAAxN,EAAA,EAAA,MAAAi4B,qBAAAj4B,EAAA,EAAA,MAAAu4B,0BAAAv4B,UAAAk4B,gBAAAl4B,EAAA,EAAA,MAAA44B,aAAA9uB,UAGxBmF,KAAA,CAACipB,gBAAD,CACCU,aAAW9uB,UADZ,CAECmuB,mBAAiBnuB,UAFlB,CAGC0D,cAHD,CAICwqB,qBAAqBC,mBAAmBC,cAAcK,uBAAsBxhB,aAAc,GAAC/W,QAAAwN,YAAAxN,QAAAi4B,mBAAAj4B,QAAAu4B,wBAAAv4B,QAAAk4B,cAAAl4B,EAAA,EAAA,IAAA44B,aAAA9uB,QAAA9J,QAAAiP,MAAAA,KAAAjP,EAAA,EAAA;AAL9F,QAAA4b,cACE3M;AAI4F,MAAAE;AAAAnP,IAAA,EAAA,MAAAwN,cAAAxN,EAAA,EAAA,MAAAi4B,qBAAAj4B,EAAA,EAAA,MAAAu4B,wBAAAthB,sBAAAjX,EAAA,EAAA,MAAAu4B,wBAAAtB,kBAAAj3B,EAAA,EAAA,MAAAu4B,wBAAAxhB,iBAAA/W,EAAA,EAAA,MAAA+4B,kBAAA/4B,EAAA,EAAA,MAAAo4B,gBAAAp4B,EAAA,EAAA,MAAA8W,cAAA9W,UAAA44B,eAEzDzpB,KAAAA,MAAA;AACnC,UAAA4H,gBAAsBwhB,wBAAsBxhB;AACxCkhB,yBAAAzqB,cAAAuJ,iBACGqhB,aAAa;AAAA,MAAA5qB;AAAAA,MAAAuJ;AAAAA,MAAAD,YAGJoe,yBAAyBpe,YAAY;AAAA,QAAAnI,QACvCoqB;AAAAA,QAAcvrB;AAAAA,QAAA5C,YAEV2tB,wBAAsBtB;AAAAA,QAAgBlgB;AAAAA,MAAAA,CAEnD;AAAA,MAACC,kBACgBihB,kBAAiB5oB,IAAKA,CAAAA,SAAU;AAAA,QAAA,GAC7CA;AAAAA,QAAGsoB,SACGtoB,IAAGsoB,QAAQpoB,OAAQorB,SAAS,CAAC,CAAC/B,aAAWluB,KAAOkwB,CAAAA,QAAOxB,IAACvrB,OAAQ8sB,IAAG9sB,EAAG,CAAC;AAAA,MAAA,EAChF;AAAA,MAACoJ,oBACiBshB,wBAAsBthB;AAAAA,IAAAA,CAC3C,GAEH4D,MAAAA;AAAAA,EAAO,GACR7a,QAAAwN,YAAAxN,QAAAi4B,mBAAAj4B,EAAA,EAAA,IAAAu4B,wBAAAthB,oBAAAjX,EAAA,EAAA,IAAAu4B,wBAAAtB,gBAAAj3B,EAAA,EAAA,IAAAu4B,wBAAAxhB,eAAA/W,QAAA+4B,gBAAA/4B,QAAAo4B,cAAAp4B,QAAA8W,YAAA9W,QAAA44B,aAAA54B,QAAAmP,MAAAA,KAAAnP,EAAA,EAAA;AApBD,QAAA66B,mBAAyB1rB;AA+BvB,MAAA+M;AAAAlc,IAAA,EAAA,6BAAAU,IAAA,2BAAA,KAOSwb,KAAA;AAAA,IAAA/Z,OAAQ;AAAA,EAAA,GAAOnC,QAAAkc,MAAAA,KAAAlc,EAAA,EAAA;AAAA,MAAAgf;AAAAhf,IAAA,EAAA,MAAA66B,oBAAA76B,UAAA4b,eAJxBoD,MAAA,oBAAC,UACO,MAAA,aACD,MAAA,WACCnD,MAAAA,UACC,OAAAK,IACGN,UAAAA,aACDif,SAAAA,iBAAAA,CAAgB,GACzB76B,QAAA66B,kBAAA76B,QAAA4b,aAAA5b,QAAAgf,OAAAA,MAAAhf,EAAA,EAAA;AARJ,QAAA8b,YACEkD;AAQD,MAAAE;AAAAlf,IAAA,EAAA,MAAAq4B,cAAAr4B,UAAAu4B,0BAAAv4B,EAAA,EAAA,MAAAk4B,gBAAAl4B,UAAA6N,MAAA7N,EAAA,EAAA,MAAAy4B,aAAAz4B,UAAA8b,aAAA9b,EAAA,EAAA,MAAA4b,eAAA5b,EAAA,EAAA,MAAA45B,sBAAA55B,EAAA,EAAA,MAAA44B,eAAA54B,UAAAq6B,oBAIInb,MAAAmZ,aACC,oBAAC,QAAA,EACKxqB,IACG,UACDwqB,MAAAA,YACGxd,SAAAA,OACF,QAAA,oBAEL,4BAAC,MAAA,EAAa,SAAA,iBAAyB,SAAA,GAAS,MAAA,GAC7Ce,UAAAA,kCACE,SAAA,EAEG,6BAAC,MAAA,EAAc,SAAA,GACb,UAAA,oBAAC,MAAA,EAAK,UAAA,+DAAA,CAA4D,GACpE,GAEQ,WAAA,OAEV,UAAA,oBAAC,MAAA,EAAW,MAAA,GAAIE,UAAAA,UAAAA,CAAU,GAC5B,IAVDA,UAAAA,CAcH,GAGD2c,UAAAA,YACC,qBAAC,QAAc,SAAA,GAAQ,QAAS,OAAA,cAAqB,SAAA,UACnD,UAAA;AAAA,IAAA,qBAAC,OAAA,EAAa,OAAA,GACZ,UAAA;AAAA,MAAA,oBAAC,KAAA,EAAkB,cAAA,GACjB,UAAA,oBAAC,QAAY,QAAA,YAAW,kBAAI,EAAA,CAC9B;AAAA,MACCA,WAASppB,IAAMyrB,CAAAA,kBACd,oBAAC,mBAAA,EAEKA,eAAA5C,cAAA0B,oBAAAnB,WAAAF,uBAAAA,GADCuC,cAAajtB,EAOjB,CAEJ;AAAA,IAAA,GACH;AAAA,IAEA,qBAAC,OAAA,EAAa,OAAA,GACZ,UAAA;AAAA,MAAA,oBAAC,KAAA,EAAkB,cAAA,GACjB,UAAA,oBAAC,QAAY,QAAA,YAAW,gBAAE,EAAA,CAC5B;AAAA,MACC4qB,UAASppB,IAAK0rB,CAAAA,qBACb,oBAAC,oBAAA,EAEKA,kBAAA7C,cAAAU,aAAAyB,kBAAA5B,UAAAA,GADCsC,iBAAgBltB,EACyD,CAEjF;AAAA,IAAA,EAAA,CACH;AAAA,EAAA,EAAA,CACF,IAEA,qBAAC,MAAA,EAAc,SAAA,GAAQ,KAAA,GAAS,OAAA,cAAqB,SAAA,UACnD,UAAA;AAAA,IAAA,oBAAC,KAAA,EACC,UAAA,oBAAC,SAAA,CAAA,IACH;AAAA,IACA,oBAAC,QAAK,UAAA,uBAAA,CAAoB;AAAA,EAAA,GAC5B,EAAA,CAEJ,IAlED,MAmEO7N,QAAAq4B,YAAAr4B,QAAAu4B,wBAAAv4B,QAAAk4B,cAAAl4B,QAAA6N,IAAA7N,QAAAy4B,WAAAz4B,QAAA8b,WAAA9b,QAAA4b,aAAA5b,QAAA45B,oBAAA55B,QAAA44B,aAAA54B,QAAAq6B,kBAAAr6B,QAAAkf,OAAAA,MAAAlf,EAAA,EAAA;AAAA,MAAAiwB;AAAA,SAAAjwB,EAAA,EAAA,MAAA+b,gBAAA/b,EAAA,EAAA,MAAAoE,MAAAC,YAAArE,EAAA,EAAA,MAAAkf,OApEV+Q,MAAA,qBAAA,wBAAA,UAAA,EAAyClU,OAAAA,cACtCmD,UAAAA;AAAAA,IAAAA;AAAAA,IAoEA9a,MAAKC;AAAAA,EAAAA,GACR,GAAmCrE,QAAA+b,cAAA/b,EAAA,EAAA,IAAAoE,MAAAC,UAAArE,QAAAkf,KAAAlf,QAAAiwB,OAAAA,MAAAjwB,EAAA,EAAA,GAtEnCiwB;AAsEmC;AAlPhC,SAAA7e,SAAA4pB,KAAA;AAAA,SAwFuB5B,IAACvrB;AAAG;AAxF3B,SAAAvB,QAAA2uB,KAAA;AAAA,SAkD2C7B,IAACvrB;AAAG;AAoMtD,SAAAqtB,mBAAA92B,OAAA;AAAA,QAAApE,IAAAC,EAAA,EAAA,GAWE;AAAA,IAAA86B;AAAAA,IAAA7C;AAAAA,IAAAU;AAAAA,IAAAyB;AAAAA,IAAA5B;AAAAA,EAAAA,IAAmFr0B,OACnF+2B,SAAeJ,iBAAgBltB;AAAG,MAAApN;AAAAT,IAAA,CAAA,MAAA+6B,oBAAA/6B,EAAA,CAAA,MAAAy4B,aAAAz4B,EAAA,CAAA,MAAA44B,eAAA54B,SAAAq6B,oBAEhC55B,KAAAA,MAAM45B,iBAAiBU,kBAAkBnC,aAAaH,SAAS,GAACz4B,OAAA+6B,kBAAA/6B,OAAAy4B,WAAAz4B,OAAA44B,aAAA54B,OAAAq6B,kBAAAr6B,OAAAS,MAAAA,KAAAT,EAAA,CAAA;AADlE,QAAA2c,WAAiBlc;AAGhB,MAAAM;AAAAf,WAAAk4B,cAAArqB,MAAA7N,SAAAm7B,UAOUp6B,KAAAo6B,WAAWjD,cAAYrqB,KAAvB;AAAA,IAAAutB,SAAwC;AAAA,EAAA,IAAxClvB,QAAwDlM,EAAA,CAAA,IAAAk4B,cAAArqB,IAAA7N,OAAAm7B,QAAAn7B,OAAAe,MAAAA,KAAAf,EAAA,CAAA;AAAA,MAAAsB;AAAAtB,IAAA,CAAA,MAAAk4B,cAAArqB,MAAA7N,EAAA,CAAA,MAAAm7B,UAAAn7B,EAAA,EAAA,MAAA44B,eAKpDt3B,KAAA65B,WAAWjD,cAAYrqB,MAAvB,CAAgC,CAAC+qB,aAAWluB,KAAO2wB,CAAAA,OAAQA,GAAExtB,OAAQstB,MAAM,GAACn7B,EAAA,CAAA,IAAAk4B,cAAArqB,IAAA7N,OAAAm7B,QAAAn7B,QAAA44B,aAAA54B,QAAAsB,MAAAA,KAAAtB,EAAA,EAAA;AAE3E,QAAAuB,KAAA45B,WAAWjD,cAAYrqB;AAAI,MAAA/J;AAAA9D,IAAA,EAAA,MAAAm7B,UAAAn7B,EAAA,EAAA,MAAA2c,YAAA3c,EAAA,EAAA,MAAAsB,MAAAtB,UAAAuB,MALvCuC,KAAA,oBAAC,YACM,MAAA,UACEq3B,OAAAA,QACE,SAAA75B,IACCqb,UACA,UAAApb,GAAAA,CAA2B,GACrCvB,QAAAm7B,QAAAn7B,QAAA2c,UAAA3c,QAAAsB,IAAAtB,QAAAuB,IAAAvB,QAAA8D,MAAAA,KAAA9D,EAAA,EAAA;AACW,QAAAgE,KAAAm3B,WAAWjD,cAAYrqB,IAAO3J,KAAA62B,iBAAgB3wB,SAAhB+wB;AAAgC,MAAAlsB;AAAAjP,IAAA,EAAA,MAAAgE,MAAAhE,UAAAkE,MAA3E+K,KAAA,oBAAC,MAAA,EAAY,OAAAjL,IAA8BE,UAAAA,IAAiC,GAAOlE,QAAAgE,IAAAhE,QAAAkE,IAAAlE,QAAAiP,MAAAA,KAAAjP,EAAA,EAAA;AAAA,MAAAmP;AAAA,SAAAnP,EAAA,EAAA,MAAAm7B,UAAAn7B,EAAA,EAAA,MAAAe,MAAAf,EAAA,EAAA,MAAA8D,MAAA9D,UAAAiP,MAdrFE,KAAA,qBAAC,MAAA,EAEM,KAAA,GACC,OAAA,UACF,IAAA,SACG,OAAApO,IAEP+C,UAAAA;AAAAA,IAAAA;AAAAA,IAOAmL;AAAAA,EAAAA,EAAAA,GAbKksB,MAcP,GAAOn7B,QAAAm7B,QAAAn7B,QAAAe,IAAAf,QAAA8D,IAAA9D,QAAAiP,IAAAjP,QAAAmP,MAAAA,KAAAnP,EAAA,EAAA,GAfPmP;AAeO;AAIX,SAAAmsB,kBAAAl3B,OAAA;AAAA,QAAApE,IAAAC,EAAA,EAAA,GAWE;AAAA,IAAAw4B;AAAAA,IAAAqC;AAAAA,IAAAlB;AAAAA,IAAA1B;AAAAA,IAAAK;AAAAA,EAAAA,IAA6Fn0B,OAC7F+2B,SAAeL,cAAajtB;AAAG,MAAApN;AAAAT,IAAA,CAAA,MAAAu4B,0BAAAv4B,EAAA,CAAA,MAAAy4B,aAAAz4B,EAAA,CAAA,MAAA86B,iBAAA96B,SAAA45B,sBAG7Bn5B,KAAAA,MAAMm5B,mBAAmBkB,eAAerC,WAAWF,sBAAsB,GAACv4B,OAAAu4B,wBAAAv4B,OAAAy4B,WAAAz4B,OAAA86B,eAAA96B,OAAA45B,oBAAA55B,OAAAS,MAAAA,KAAAT,EAAA,CAAA;AAD5E,QAAA2c,WAAiBlc,IASFM,KAAAo6B,WAAWjD,cAAYrqB;AAAI,MAAAvM;AAAAtB,IAAA,CAAA,MAAAm7B,UAAAn7B,SAAA2c,YAAA3c,EAAA,CAAA,MAAAe,MAHtCO,KAAA,oBAAC,SACM,MAAA,YACE65B,OAAAA,QACE,SAAAp6B,IACC4b,SAAAA,CAAQ,GAClB3c,OAAAm7B,QAAAn7B,OAAA2c,UAAA3c,OAAAe,IAAAf,OAAAsB,MAAAA,KAAAtB,EAAA,CAAA;AACK,QAAAuB,KAAAu5B,cAAa1wB,SAAU0wB,cAAajtB;AAAG,MAAA/J;AAAA9D,WAAAuB,MAA9CuC,KAAA,oBAAC,QAAMvC,UAAAA,GAAAA,CAAwC,GAAOvB,OAAAuB,IAAAvB,QAAA8D,MAAAA,KAAA9D,EAAA,EAAA;AAAA,MAAAgE;AAAA,SAAAhE,EAAA,EAAA,MAAAm7B,UAAAn7B,UAAAsB,MAAAtB,EAAA,EAAA,MAAA8D,MAPxDE,0BAAC,MAAA,EAAuB,KAAA,GAAS,OAAA,UAAa,IAAA,SAC5C1C,UAAAA;AAAAA,IAAAA;AAAAA,IAMAwC;AAAAA,EAAAA,KAPSq3B,MAQX,GAAOn7B,QAAAm7B,QAAAn7B,QAAAsB,IAAAtB,QAAA8D,IAAA9D,QAAAgE,MAAAA,KAAAhE,EAAA,EAAA,GARPgE;AAQO;ACvXJ,MAAMu3B,cAAc,CACzB,OACA,SACA,SACA,WACA,yBACA,QACA,YACA,YACA,SACA,QACA,2BACA,SACA,UACA,UACA,aACA,QACA,UACA,QACA,OACA,QACA,YACA,0BACA,qBACA,oBACA,oBACA,uBACA,wBACA,0BACA,uBACA,6BAEAlyB,0BACAC,+BACA,2BAA2B,GCRvBkyB,cAAc,CAAC,YAAY,UAAU,SAAS,MAAM;AAEnD,SAASC,gBAAgB9d,QAAgB3W,UAA2C;AACzF,QAAM00B,OAAO/d,OACVge,aAAAA,EACApsB,OAAQjF,CAAAA,MAAM,EAAEixB,YAAYz7B,SAASwK,CAAC,KAAKA,EAAE4J,WAAW,SAAS,EAAE,EACnE7E,IAAK/E,CAAAA,MAAMqT,OAAOzX,IAAIoE,CAAC,CAAC,EACxBiF,OAAQjF,CAAAA,MAAuB,CAAC,CAACA,CAAC,EAGlC+E,IAAK/E,CAAAA,MAAMsxB,cAActxB,GAAGqT,QAAQ3W,QAAO,CAAC,EAC5CuI,OAAQjF,CAAAA,MACH,EAAA,QAAQA,KAAKA,EAAE1E,MAAM,CAAC0E,EAAE1E,GAAGkE,UAG3B,QAAQQ,KAAKA,EAAEG,MAAM,CAACH,EAAEG,GAAGX,UAG3B,YAAYQ,KAAKA,EAAEuB,UAAU,CAACvB,EAAEuB,OAAO/B,OAI5C;AACH4xB,SAAAA,KAAKrN,KAAK,CAACC,GAAGC,OAAOD,GAAGxjB,QAAQ,IAAI+wB,cAActN,GAAGzjB,QAAQ,EAAE,CAAC,GACzD4wB;AACT;AAEA,SAASE,cACPhxB,YACA+S,QACA3W,UACsB;AACtB,MAAI,CAAC4D,WAAWJ,MAAMM;AACpBojB,UAAAA,QAAQpL,MAAM,qBAAqBlY,WAAWJ,IAAI,GAC5C,IAAI3F,MAAM,uBAAuB;AAEzC,QAAMi3B,aAAmC;AAAA;AAAA,IAEvC,GAAI90B,UAAS+0B,aACT,KACA;AAAA,MAACjtB,KAAK,GAAGrG,oBAAoB,GAAGmC,WAAWE,IAAI;AAAA,MAAIiE,OAAO1F;AAAAA,IAAAA;AAAAA,IAC9DyB,MAAMF,WAAWE;AAAAA,IACjBV,OAAOQ,WAAWR;AAAAA,IAClBI,MAAMI,WAAWJ,KAAKM;AAAAA,IACtB,GAAGkxB,cAAcre,QAAQ/S,YAAYA,WAAWJ,KAAKM,MAAM9D,QAAO;AAAA,EAAA;AAGpE,SAAOi1B,YAAYH,UAAU;AAC/B;AAEA,SAASE,cACPre,QACAnT,MACAK,UACA7D,UACA;AACA,QAAMk1B,gBAAiDD,YAAY;AAAA;AAAA,IAEjEE,kBAAmB3xB,KAAKxD,SAA0BkE,UAAUI;AAAAA;AAAAA,IAE5DU,iBAAkBxB,KAAKxD,SAA8BkE,UAAUc;AAAAA,EAAAA,CAChE;AACD,SAAOiwB,YAAY;AAAA,IACjBj1B,SAAS+J,OAAOqrB,KAAKF,aAAa,EAAEpyB,SAASoyB,gBAAgBhwB;AAAAA,IAC7DiP,QAAQpR,MAAMC,QAAQQ,MAAMxD,SAAS00B,IAAI,IACrClxB,MAAMxD,SAAS00B,KAAKrsB,IAAKyY,CAAAA,MACvB,OAAOA,KAAM,WAAWA,IAAKA,EAAE7V,SAAS6V,EAAE1d,KAC5C,IACA8B;AAAAA,IACJzB,IAAI,QAAQD,QAAQK,aAAa,UAAUwxB,QAAQ7xB,MAAMmT,QAAQ3W,QAAO,IAAIkF;AAAAA,IAC5EtG,IAAI,QAAQ4E,QAAQK,aAAa,cAAcyxB,eAAe9xB,IAAI,IAAI0B;AAAAA,IACtEL,QACE,YAAYrB,QAAQgxB,YAAY17B,SAAS+K,QAAQ,IAC7C0xB,gBAAgB5e,QAAQnT,MAAMxD,QAAO,IACrCkF;AAAAA,IACNswB,aACE3xB,aAAa,WAAW,YAAYL,OAChCiyB,qBAAqBjyB,MAAMmT,QAAQ3W,QAAO,IAC1CkF;AAAAA,IACNwwB,UACE7xB,aAAa,WAAW,YAAYL,OAChCmyB,kBAAkBnyB,MAAMmT,QAAQ3W,QAAO,IACvCkF;AAAAA,IACNwb,QACE,OAAOld,KAAKkd,UAAW,aAAc,aAAuBld,KAAKkd,SAAS,KAAOxb;AAAAA,IACnFwa,UACE,OAAOlc,KAAKkc,YAAa,aACpB,aACDlc,KAAKkc,WACH,KACAxa;AAAAA,EAAAA,CACT;AACH;AAEA,SAASqwB,gBACP5e,QACA/S,YACA5D,UACA;AAmBA,UAlBe4D,WAAWge,YACtBhe,WAAWge,UAAUzU,QAASyoB,CAAAA,OAC5BA,GAAG/T,SACC+T,GAAG9wB,QACH8wB,GAAG/wB,OAAOwD,IAAKW,CAAAA,OAAO;AAAA,IACpB,GAAGA;AAAAA,IACHxF,MAAM;AAAA,MACJ,GAAGwF,EAAExF;AAAAA;AAAAA;AAAAA;AAAAA,MAILkd,QACE,OAAOkV,GAAGlV,UAAW,aAAakV,GAAGlV,SAASkV,GAAGlV,SAAS,KAAO1X,EAAExF,KAAKkd;AAAAA,IAAAA;AAAAA,EAC5E,EACA,CACR,IACA9c,WAAWiB,QAGZ0D,OAAQS,CAAAA,MAAM,CAAC,CAAC,uBAAuB,kBAAkB,EAAElQ,SAASkQ,EAAExF,MAAMM,QAAQ,EAAE,CAAC,EACvFyE,OAAQS,CAAAA,MAAMvE,kBAAkBuE,EAAExF,IAAI,CAAC,EACvC6E,IAAKvD,CAAAA,UAAU+wB,gBAAgBlf,QAAQ7R,MAAMtB,MAAMsB,MAAMhB,MAAM9D,QAAO,CAAC;AAC5E;AAEA,SAAS61B,gBACPlf,QACAnT,MACAM,MACA9D,UACwB;AAExB,QAAM6D,WADmB8S,OAAOzX,IAAIsE,MAAMM,IAAI,IACZN,KAAKM,OAAQN,KAAKA,MAAMM,QAAQ;AAClE,SAAOmxB,YAAY;AAAA,IACjB,GAAIj1B,UAAS+0B,aAAa,KAAK;AAAA,MAAChtB,OAAOzF;AAAAA,IAAAA;AAAAA,IACvCwB;AAAAA,IACAN,MAAMK;AAAAA,IACNT,OAAOI,KAAKJ;AAAAA,IACZ,GAAG4xB,cAAcre,QAAQnT,MAAMK,UAAU7D,QAAO;AAAA,EAAA,CACjD;AACH;AAEA,SAAS21B,kBACPG,iBACAnf,QACA3W,UACsC;AAEtC,QAAM+1B,eADgBD,gBAAgBjxB,OAAOnB,KAAMsF,OAAMA,EAAElF,SAAS,UAAU,GAC1CN;AACpC,MAAI,EAAA,CAACuyB,gBAAgB,CAAC1a,kBAAkB0a,YAAY;AAGpD,WAAOV,QACL;AAAA,MAEE5xB,IAAIsyB,aAAatyB,GAAG8E,OAAQjF,OAAM,CAACK,OAAOL,GAAG,MAAM,CAAC;AAAA,IAAA,GAEtDqT,QACA3W,QACF;AACF;AAEA,SAASy1B,qBACPK,iBACAnf,QACA3W,UACsC;AAEtC,QAAMg2B,YADWF,gBAAgBjxB,OAAOnB,KAAMsF,OAAMA,EAAElF,SAAS,UAAU,GAC7CN;AAC5B,MAAI,EAAA,CAACwyB,aAAa,CAAC3a,kBAAkB2a,SAAS;AAG9C,WAAOX,QAAQW,WAAWrf,QAAQ3W,QAAO;AAC3C;AAEA,SAASq1B,QACPY,WACAtf,QACA3W,UAC0B;AAC1B,SAAOi2B,UAAUxyB,GACd8E,OAAQ/E,CAAAA,SAASiB,kBAAkBjB,IAAI,CAAC,EACxC6E,IAAK/E,CAAAA,MACGuyB,gBAAgBlf,QAAQrT,GAAGA,EAAEQ,MAAM9D,QAAO,CAClD;AACL;AAEA,SAASs1B,eAAe9xB,MAA2B;AACjD,SAAOA,KAAK5E,GAAGyJ,IAAK/E,CAAAA,OAAO;AAAA,IACzBE,MAAMqF,MAAcvF,EAAEQ,IAAI;AAAA,EAAA,EAC1B;AACJ;AAEA,SAASmxB,YAA2CiB,KAAW;AAC7DnsB,SAAAA,OAAOqrB,KAAKc,GAAG,EAAE7rB,QAAStM,SAASm4B,IAAIn4B,GAAG,MAAMmH,SAAY,OAAOgxB,IAAIn4B,GAAG,IAAI,CAAA,CAAG,GAC1Em4B;AACT;ACtNO,SAASC,sBAAsB;AACpC,QAAMC,SAOF,CAAA;AAEJ,WAASC,eAAezyB,YAA8B;AACpD,UAAMyC,eAAezC,WAAWE,MAC1BwyB,SAASF,OAAO/vB,YAAY;AAClC,QAAIiwB,OAAQ,QAAOA;AAEnB,UAAM1pB,YAAY2pB,aAAgB3yB,UAAU,GACtCkT,sBAAsBnK,sBAAsBC,SAAS,GACrDwW,OAAO;AAAA,MACXxW;AAAAA,MACAkK;AAAAA,IAAAA;AAEFsf,WAAAA,OAAO/vB,YAAY,IAAI+c,MAChBA;AAAAA,EACT;AAEA,SAAOiT;AACT;ACjBO,SAAAG,2BAAAp5B,OAAA;AAAA,QAAApE,IAAAC,EAAA,EAAA,GAIL,CAAAuR,QAAAisB,SAAA,IAA4Bn9B,YAC5B,CAAAwiB,OAAAC,QAAA,IAA0BziB,SAAAA,GAE1BkW,YAAkBH,aAAajS,MAAKiT,QAA0BsC,iBAAA,GAC9D;AAAA,IAAAzB;AAAAA,IAAAzB,SAAA8Z;AAAAA,EAAAA,IAAoDtY,qBAAqBzB,SAAS,GAClF;AAAA,IAAA6B;AAAAA,IAAA5B,SAAAga;AAAAA,EAAAA,IAA6CrY,gBAAgB5B,SAAS,GAEtEmH,SAAeC,UAAAA;AAAW,MAAAnd;AAAAT,WAAA2d,UACYld,KAAAg7B,gBAAgB9d,QAAQ;AAAA,IAAAoe,YAAa;AAAA,EAAA,CAAK,GAAC/7B,OAAA2d,QAAA3d,OAAAS,MAAAA,KAAAT,EAAA,CAAA;AAAjF,QAAAgT,kBAAsCvS,IACtC;AAAA,IAAAuT,cAAAA;AAAAA,IAAA6J;AAAAA,EAAAA,IAA+C6f,mBAAmB/f,MAAM;AAAC,MAAA5c,IAAAO;AAAAtB,WAAAkY,qBAE/DnX,KAAAA,MAAA;AACRmX,sBAAAA,EAAmBylB,KACXC,CAAAA,MAAOH,UAAUG,CAAC,CAAC,EAAC5uB,MACnByI,CAAAA,MAAA;AACLyW,cAAOpL,MAAOrL,CAAC,GAEfsL,SAAStL,CAAU;AAAA,IAAC,CACrB;AAAA,EAAC,GACHnW,KAAA,CAAC4W,iBAAiB,GAAClY,OAAAkY,mBAAAlY,OAAAe,IAAAf,OAAAsB,OAAAP,KAAAf,EAAA,CAAA,GAAAsB,KAAAtB,EAAA,CAAA,IARtB6D,UAAU9C,IAQPO,EAAmB;AAAC,MAAAC;AAAAvB,IAAA,CAAA,MAAAkY,qBAAAlY,SAAAqY,gBAEE9W,iBAAA;AACvBwhB,aAAS7W,MAAS;AAClB,QAAA;AACE,YAAMmM,aAAAA;AACN,YAAAwlB,WAAe,MAAM3lB,kBAAAA;AACrBulB,gBAAUjsB,QAAM;AAAA,IAAC,SAAA1N,KAAA;AACV2T,YAAAA,MAAAA;AACPyW,cAAOpL,MAAO,gCAAgCrL,GAAC,GAE/CsL,SAAStL,GAAU;AAAA,IAAC;AAAA,EACrB,GACFzX,OAAAkY,mBAAAlY,OAAAqY,cAAArY,OAAAuB,MAAAA,KAAAvB,EAAA,CAAA;AAXD,QAAA2wB,OAAapvB,IAab;AAAA,IAAA8V;AAAAA,IAAAhT;AAAAA,EAAAA,IAA2BD;AAAK,MAAAN;AAAA9D,IAAA,CAAA,MAAAqX,UAAArX,EAAA,CAAA,MAAA8iB,SAAA9iB,UAAAgU,iBAAAhU,EAAA,EAAA,MAAA6d,0BAAA7d,EAAA,EAAA,MAAA2wB,QAAA3wB,EAAA,EAAA,MAAAywB,eAAAzwB,EAAA,EAAA,MAAAgT,mBAAAhT,EAAA,EAAA,MAAAwR,UAAAxR,UAAAuwB,iBAEvBzsB,KAAA;AAAA,IAAAuT;AAAAA,IAAA7F;AAAAA,IAAA+e;AAAAA,IAAAI;AAAAA,IAAAF;AAAAA,IAAA3N;AAAAA,IAAA9P;AAAAA,IAAAgB,cAAAA;AAAAA,IAAA6J;AAAAA,EAAAA,GAUN7d,OAAAqX,QAAArX,OAAA8iB,OAAA9iB,QAAAgU,eAAAhU,QAAA6d,wBAAA7d,QAAA2wB,MAAA3wB,QAAAywB,aAAAzwB,QAAAgT,iBAAAhT,QAAAwR,QAAAxR,QAAAuwB,eAAAvwB,QAAA8D,MAAAA,KAAA9D,EAAA,EAAA;AAXH,QAAA4S,UACE9O;AAqBA,MAAAE;AAAA,SAAAhE,EAAA,EAAA,MAAAqE,YAAArE,UAAA4S,WAGA5O,KAAA,oBAAA,0BAAA,UAAA,EAA2C4O,OAAAA,SACxCvO,SAAAA,CACH,GAAqCrE,QAAAqE,UAAArE,QAAA4S,SAAA5S,QAAAgE,MAAAA,KAAAhE,EAAA,EAAA,GAFrCgE;AAEqC;AAIzC,SAAA05B,mBAAA/f,QAAA;AAAA,QAAA3d,IAAAC,EAAA,CAAA;AAAA,MAAAQ;AAAAT,IAAA,CAAA,MAAAwB,uBAAAd,IAAA,2BAAA,KAE6BD,KAAA08B,oBAAAA,GAAqBn9B,OAAAS,MAAAA,KAAAT,EAAA,CAAA;AAA9C,QAAA89B,mBAAyBr9B;AAAqB,MAAAM;AAAAf,WAAA2d,UAE9C5c,KAAA,SAAAsM,cAAA;AAEE,UAAAzC,aAAmB+S,OAAMzX,IAAKmH,YAAY;AAC1C,QAAI,CAACzC;AACH,YAAM,IAAI/F,MAAM,gBAAgBwI,YAAY,aAAa;AAC1D,WACMywB,iBAAiBlzB,UAAU;AAAA,EAAC,GACpC5K,OAAA2d,QAAA3d,OAAAe,MAAAA,KAAAf,EAAA,CAAA;AAPD,QAAAq9B,iBAAAt8B;AAOC,MAAAO;AAAA,SAAAtB,SAAAq9B,kBAEM/7B,KAAA;AAAA,IAAA0S,cACS+pB,CAAAA,mBAA0BV,eAAehwB,cAAY,EAACuG;AAAAA,IAAUiK,wBACtDmgB,CAAAA,mBACtBX,eAAehwB,cAAY,EAACyQ;AAAAA,EAAAA,GAC/B9d,OAAAq9B,gBAAAr9B,OAAAsB,MAAAA,KAAAtB,EAAA,CAAA,GAJDsB;AAIC;ACnFE,SAAA28B,aAAA75B,OAAA;AAAA,QAAApE,IAAAC,EAAA,EAAA;AAAA,MAAAQ;AAAAT,IAAA,CAAA,MAAAwB,uBAAAd,IAAA,2BAAA,KACqDD,KAAA,CAAA,GAAET,OAAAS,MAAAA,KAAAT,EAAA,CAAA;AAA5D,QAAA,CAAAgG,YAAAk4B,aAAA,IAAoC59B,SAAsBG,EAAE,GAGtBM,KAAAqD,MAAKiT;AAAO,MAAA/V;AAAAtB,WAAAoE,SAIvC9C,KAAA8C,MAAK8N,cAAe9N,KAAK,GAACpE,OAAAoE,OAAApE,OAAAsB,MAAAA,KAAAtB,EAAA,CAAA;AAAA,MAAAuB;AAAAvB,WAAAgG,cAC3BzE,yBAAC,eAAA,EAAmB,MAAA,WAClB,UAAA,oBAAC,yBAAA,EAAoCyE,WAAAA,CAAU,GACjD,GAAgBhG,OAAAgG,YAAAhG,OAAAuB,MAAAA,KAAAvB,EAAA,CAAA;AAAA,MAAA8D;AAAA9D,IAAA,CAAA,MAAAsB,MAAAtB,SAAAuB,MANtBuC,KAAA,oBAAC,0BACC,UAAA,oBAAC,0BAAA,EACC,UAAA,qBAAC,oBAAA,EAAuCo6B,oBAAAA,eACrC58B,UAAAA;AAAAA,IAAAA;AAAAA,IACDC;AAAAA,EAAAA,EAAAA,CAGF,GACF,GACF,GAAyBvB,OAAAsB,IAAAtB,OAAAuB,IAAAvB,OAAA8D,MAAAA,KAAA9D,EAAA,CAAA;AAAA,MAAAgE;AAAA,SAAAhE,SAAAoE,MAAAiT,UAAArX,SAAA8D,MAV3BE,KAAA,oBAAC,4BAAA,EAAmC,QAAAjD,IAClC+C,UAAAA,GAAAA,CAUF,GAA6B9D,EAAA,CAAA,IAAAoE,MAAAiT,QAAArX,OAAA8D,IAAA9D,QAAAgE,MAAAA,KAAAhE,EAAA,EAAA,GAX7BgE;AAW6B;ACrB1B,MAAMm6B,eAAe15B,cAAiC,EAAE;AAExD,SAAA25B,qBAAAh6B,OAAA;AAAA,QAAApE,IAAAC,EAAA,EAAA,GACL;AAAA,IAAA2K;AAAAA,IAAApD;AAAAA,IAAAyK;AAAAA,IAAAyU;AAAAA,EAAAA,IAA4CtiB,OAE5Ci6B,WAAkBpsB,OAAKqsB,OAAqBC,MAC5C;AAAA,IAAApgB;AAAAA,EAAAA,IAA4BC,kBAC5B,CAAAogB,eAAAC,gBAAA,IAA0Cn+B,SAA6B+9B,QAAQ,GAE/E;AAAA,IAAA7f;AAAAA,IAAA/N;AAAAA,EAAAA,IAAmDkC,4BACnD;AAAA,IAAA0E;AAAAA,IAAA7F;AAAAA,EAAAA,IAAyBsB,sBAAAA,GACzB0D,YAAkBH,aAAagB,QAAMsC,iBAAmB,GACxD;AAAA,IAAA7B;AAAAA,EAAAA,IAA0BD,mBAAmBrB,SAAS;AAAC,MAAA/V;AAAAT,WAAAwe,wBAGrD/d,KAAAkN,eAAe6Q,oBAAoB,GAACxe,OAAAwe,sBAAAxe,OAAAS,MAAAA,KAAAT,EAAA,CAAA;AADtC,QAAA;AAAA,IAAA0+B;AAAAA,EAAAA,IAAoBC,aAClBl+B,IACAgQ,mBAAkB3F,MAClBqT,iBACF,GAGAygB,yBAA+B,CAAC,CADjB/oB,cAAAA,EACwBC,QAAgB+oB;AAAA,MAAA99B,IAAAO;AAAAtB,IAAA,CAAA,MAAAq+B,YAAAr+B,SAAAw+B,iBAAAx+B,EAAA,CAAA,MAAAwe,wBAAAxe,SAAA8X,mBAAA9X,EAAA,CAAA,MAAA4+B,0BAAA5+B,SAAA0+B,aAAA1+B,EAAA,CAAA,MAAAwH,QAAAxH,EAAA,CAAA,MAAA0mB,YAAA1mB,EAAA,EAAA,MAAA4K,cAAA5K,UAAAwR,UAE7CzQ,KAAAA,MAAA;AACR,UAAAkK,mBAAyBD,0BAA0BJ,UAAU;AAE3DyzB,gBAAA7f,wBAEAvT,kBAAgBG,uBAChBizB,aAAaG,iBAHb,CAICE,aAJD,CAKCE,0BALD,CAMClY,aAGD+X,iBAAiBJ,QAAQ,GACrBpoB,aAAazE,MAAM,KAChBsG,gBAAgB;AAAA,MAAAtQ,MACbyC,aAAa,CAAA,GAAIzC,MAAMyD,iBAAgBzD,IAAK,CAAC;AAAA,MAACgG,YACxCgR;AAAAA,IAAAA,CACb;AAAA,EAEJ,GACAld,KAAA,CACDsJ,YACApD,MACA62B,UACAG,eACAhgB,sBACA1G,iBACA4mB,WACAltB,QACAkV,UACAkY,sBAAsB,GACvB5+B,OAAAq+B,UAAAr+B,OAAAw+B,eAAAx+B,OAAAwe,sBAAAxe,OAAA8X,iBAAA9X,OAAA4+B,wBAAA5+B,OAAA0+B,WAAA1+B,OAAAwH,MAAAxH,OAAA0mB,UAAA1mB,QAAA4K,YAAA5K,QAAAwR,QAAAxR,QAAAe,IAAAf,QAAAsB,OAAAP,KAAAf,EAAA,EAAA,GAAAsB,KAAAtB,EAAA,EAAA,IA/BD6D,UAAU9C,IAoBPO,EAWF;AAAC,MAAAC,IAAAuC;AAAA,MAAA9D,EAAA,EAAA,MAAAwH,QAAAxH,UAAA4K,YAAA;AAGA,UAAAk0B,qBAAyB9zB,0BAA0BJ,UAAU,GAC7DU,wBAA8BD,+BAA+BT,UAAU;AAE/CrJ,SAAA0J,oBAAgBzD,OAClCyC,aAAa,CAAA,GAAIzC,MAAMyD,mBAAgBzD,IAAK,CACpC,IAFU0E,QAGApI,KAAAwH,wBAClBrB,aAAa,CAAA,GAAIzC,MAAM8D,qBAAqB,CACpC,IAFUY,QAETlM,QAAAwH,MAAAxH,QAAA4K,YAAA5K,QAAAuB,IAAAvB,QAAA8D;AAAAA,EAAA;AAAAvC,SAAAvB,EAAA,EAAA,GAAA8D,KAAA9D,EAAA,EAAA;AAAA,MAAAgE;AAAAhE,IAAA,EAAA,MAAAq+B,YAAAr+B,UAAAuB,MAAAvB,EAAA,EAAA,MAAA8D,MANRE,KAAA;AAAA,IAAA+6B,sBACiBx9B;AAAAA,IAETy9B,sBACSl7B;AAAAA,IAETu6B;AAAAA,EAAAA,GAEdr+B,QAAAq+B,UAAAr+B,QAAAuB,IAAAvB,QAAA8D,IAAA9D,QAAAgE,MAAAA,KAAAhE,EAAA,EAAA;AAXH,QAAA4S,UAGE5O;AAS8B,MAAAE;AAAAlE,YAAAoE,SAEeF,KAAAE,MAAK8N,cAAe9N,KAAK,GAACpE,QAAAoE,OAAApE,QAAAkE,MAAAA,KAAAlE,EAAA,EAAA;AAAA,MAAAiP;AAAA,SAAAjP,EAAA,EAAA,MAAA4S,WAAA5S,UAAAkE,MAAlE+K,KAAA,oBAAA,aAAA,UAAA,EAA8B2D,OAAAA,SAAU1O,UAAAA,GAAAA,CAA2B,GAAwBlE,QAAA4S,SAAA5S,QAAAkE,IAAAlE,QAAAiP,MAAAA,KAAAjP,EAAA,EAAA,GAA3FiP;AAA2F;AChF7F,SAAAgwB,UAAA76B,OAAA;AAAA,QAAApE,IAAAC,EAAA,EAAA,GACL;AAAA,IAAAgS;AAAAA,IAAA0K;AAAAA,EAAAA,IAA0BvY,OAC1ByJ,KAAWgM,MAAAA;AAAO,MAAApZ;AAAAT,IAAA,CAAA,6BAAAU,IAAA,2BAAA,KAGdD,KAAAsQ,OAAMiK,QAASkkB,KAAK,GAACl/B,OAAAS,MAAAA,KAAAT,EAAA,CAAA;AAAA,MAAAe;AAAAf,WAAA2c,YAArB5b,KAAAN,GAAqB4O,IAAK/N,CAAAA,QAAA;AAAC,UAAA,CAAAyD,KAAAoO,IAAA,IAAA7R;AAAW,+BACnC,UAAA,EAA4ByD,SAAAA,KAAWoO,MAAgBwJ,YAAzC5X,GAAiD;AAAA,EAAI,CACrE,GAAC/E,OAAA2c,UAAA3c,OAAAe,MAAAA,KAAAf,EAAA,CAAA;AAJN,QAAAm/B,QAEIp+B;AAIH,MAAAO;AAAAtB,WAAAiS,SAEkC3Q,KAAA89B,QAAQntB,KAAK,GAACjS,OAAAiS,OAAAjS,OAAAsB,MAAAA,KAAAtB,EAAA,CAAA;AAAjD,QAAAq/B,eAAmC/9B;AAAwB,MAAAC;AAAAvB,WAAAq/B,gBAKrD99B,KAAA,oBAAC,QAAA,EAAa89B,MAAAA,cAAoB,OAAA,eAAuB,SAAA,GAAQ,MAAA,SAAgB,QAAA,EAAA,CAAC,GAAIr/B,OAAAq/B,cAAAr/B,OAAAuB,MAAAA,KAAAvB,EAAA,CAAA;AAAA,MAAA8D;AAAA9D,IAAA,CAAA,6BAAAU,IAAA,2BAAA,KAGrEoD,KAAA;AAAA,IAAAw7B,WAAY;AAAA,EAAA,GAAIt/B,OAAA8D,MAAAA,KAAA9D,EAAA,CAAA;AAAA,MAAAgE;AAAAhE,WAAAm/B,SAA7Bn7B,KAAA,oBAAC,MAAA,EAAY,OAAAF,IAAmBq7B,UAAAA,OAAM,GAAOn/B,OAAAm/B,OAAAn/B,OAAAgE,MAAAA,KAAAhE,EAAA,CAAA;AAAA,MAAAkE;AAAAlE,IAAA,EAAA,6BAAAU,IAAA,2BAAA,KAC1CwD,KAAA;AAAA,IAAAq7B,QAAS;AAAA,EAAA,GAAKv/B,QAAAkE,MAAAA,KAAAlE,EAAA,EAAA;AAAA,MAAAiP;AAAA,SAAAjP,EAAA,EAAA,MAAA6N,MAAA7N,UAAAuB,MAAAvB,EAAA,EAAA,MAAAgE,MANzBiL,KAAA,oBAAC,YAAA,EAEG,QAAA1N,IAEEsM,IACE,MAAA7J,IACG,SAAAE,IAAc,GACvBlE,QAAA6N,IAAA7N,QAAAuB,IAAAvB,QAAAgE,IAAAhE,QAAAiP,MAAAA,KAAAjP,EAAA,EAAA,GAPFiP;AAOE;AAIN,SAAAuwB,SAAA/+B,IAAA;AAAA,QAAAT,IAAAC,EAAA,CAAA,GAAkB;AAAA,IAAAkT;AAAAA,IAAAssB,SAAA16B;AAAAA,IAAA4X;AAAAA,EAAAA,IAAAlc;AASjB,MAAAM;AAAAf,IAAA,CAAA,MAAA+E,OAAA/E,SAAA2c,YAC6B5b,KAAAA,MAAM4b,SAASnW,IAAIzB,GAAG,CAAC,GAAC/E,OAAA+E,KAAA/E,OAAA2c,UAAA3c,OAAAe,MAAAA,KAAAf,EAAA,CAAA;AAApD,QAAAwvB,UAAgBzuB;AAAsD,MAAAO;AAAA,SAAAtB,EAAA,CAAA,MAAAmT,QAAAnT,SAAA+E,OAAA/E,EAAA,CAAA,MAAAwvB,WAC/DluB,KAAA,oBAAC,YAAe6R,MAAapO,OAAAA,KAAWA,MAAAA,KAAcyqB,QAAAA,CAAO,GAAIxvB,OAAAmT,MAAAnT,OAAA+E,KAAA/E,OAAAwvB,SAAAxvB,OAAAsB,MAAAA,KAAAtB,EAAA,CAAA,GAAjEsB;AAAiE;AAGnE,SAAS89B,QAAQM,UAAmB;AACzC,SAAO3uB,OAAOiK,QAAQkkB,KAAK,EAAEx0B,KAAK,CAAC,CAAC3F,GAAG,MAAMA,QAAQ26B,QAAQ,IAAI,CAAC,KAAKR,MAAMS;AAC/E;ACzCO,SAAAC,mBAAAC,OAAAj1B,YAAA;AAAA,QAAA5K,IAAAC,EAAA,CAAA;AAAA,MAAAQ;AAAA,SAAAT,SAAA4K,cACgBnK,KAAAgL,kBAAkBb,UAAU,GAAC5K,OAAA4K,YAAA5K,OAAAS,MAAAA,KAAAT,EAAA,CAAA,GAA7BS;AAA6B;ACwB7C,MAAMq/B,mBAAwC;AAAA,EACnDh1B,MAAM;AAAA,EACNi1B,UAAU37B,OAAuB;AAC/B,UAAM;AAAA,MAACiT;AAAAA,MAAQ7F;AAAAA,IAAAA,IAAUsB,yBACnB0D,YAAYH,aAAagB,QAAQsC,iBAAiB,GAClDhL,SAASC,UAAU;AAAA,MAACF,YAAYsH;AAAAA,IAAAA,CAAgC,GAChE;AAAA,MACJpL,YAAYo1B;AAAAA,MACZx4B;AAAAA,MACAgG;AAAAA,MACAiD;AAAAA,MACAiO;AAAAA,IAAAA,IACEta,OACE67B,kBAAkBz4B,KAAKsC,WAAW,GAClC4c,WAAWsZ,gBAAgBtZ,aAAa,IAExCwZ,gBAAgB7oB,OAAOO,WAAW/V,UAAUs+B,eAE5Cn5B,WAAUg5B,iBAAiBh5B,SAC3Bo5B,iBAAiBH,mBAAmBj5B,UAASkE,UAAUm1B,iBAEvDC,oBACJF,kBACA3vB,sBACA4G,OAAOO,WAAW9L,OAAOq0B,eAAergC,SAAS2Q,mBAAmB3F,IAAI,GACpEy1B,6BACJH,kBACA3vB,uBACE,CAACyvB,iBAAiBz0B,kBAAkBu0B,eAAe,KACnDE,eAAepgC,SAAS2Q,mBAAmB3F,IAAI,IAE7C01B,WAAW,CAAC,EAAE/vB,uBAAuB8vB,8BAA8BD,qBAEnE;AAAA,MAACruB,OAAOwuB;AAAAA,MAAe9jB,UAAUS;AAAAA,MAAkBiH;AAAAA,IAAAA,IAAa9R,gBAAAA,GAChEmuB,SAASvgC,OAAOsgC,aAAa;AACnCC,WAAOj/B,UAAUg/B;AACjB,UAAMzP,eAAe7wB,OAAOkkB,SAAS;AACrC2M,iBAAavvB,UAAU4iB;AAEvB,UAAMsc,iBAAiBpqB,aAAaC,SAAS,GACvCoB,YAAYuF,oBAAoB;AAAA,MACpCC;AAAAA,MACAN,iBAAiB4B,wBAAwB;AAAA,MACzClP,MAAMmxB,eAAe/oB;AAAAA,IAAAA,CACtB,GAEKd,aAAaO,OAAOO,WAAWd,YAC/BD,eAAeQ,OAAOO,WAAW/V,UAAU++B,eAE3CC,0BAA0BhgB,QAAQ,MAAM;AAC5C,UAAI,CAAC2f,YAAY,CAAC3pB,gBAAgB,CAAC0pB;AACjC;AAEF,YAAMn2B,QAAQ5C,KAAKsC,SAAS,cAAc;AAC1C,aAAY;AAAA,QACVU,MAAM;AAAA,QACN2I,MAAMwtB,eAAelqB,UACjB,MACE,oBAAC,OAAI,OAAO;AAAA,UAACnU,QAAQ;AAAA,QAAA,GACnB,UAAA,oBAAC,SAAA,EAAQ,OAAO;AAAA,UAACw+B,WAAW;AAAA,QAAA,EAAiB,CAAE,GACjD,IAEFC;AAAAA,QACJ32B;AAAAA,QACA42B,UAAUA,MAAM;AACVL,yBAAelqB,WAAW,CAACI,gBAAgB,CAACrJ,cAGhDoK,UAAU;AAAA,YACRf;AAAAA,YACAE,eAAevP;AAAAA,YACfsP,YAAYoe,yBAAyBpe,YAAY;AAAA,cAC/CnI;AAAAA,cACAnB;AAAAA,cACA5C,YAAY6F;AAAAA,YAAAA,CACb;AAAA,YACDjD,YAAYA,cAAc;AAAA,YAC1ByJ,oBAAoB+Z,aAAavvB,UAC7B+lB,sBAAsBwJ,aAAavvB,OAAO,IAC1C,CAAA;AAAA,UAAA,CACL;AAAA,QACH;AAAA,QACAw/B,gBAAgB;AAAA,QAChB1R,UAAUoR,eAAelqB,WAAWiQ;AAAAA,MAAAA;AAAAA,IAExC,GAAG,CACD8Z,UACA3pB,cACAe,WACAd,YACAtJ,YACAmzB,eAAelqB,SACf8pB,4BACA/4B,MACAkf,UACA/X,QACA8B,kBAAkB,CACnB,GACKywB,iBAAiBnJ,oBAAAA,GACjBF,uBAAuB1a,oBAAoB;AAAA,MAC/CC;AAAAA,MACAN,iBAAiB4B,wBAAwB;AAAA,MACzClP,MAAM0xB,eAAerJ;AAAAA,IAAAA,CACtB,GAEK5kB,YAAWoE,OAAOO,WAAW9L,OAAOmN,cACpCkoB,wBAAwBtgB,QAC5B,MACE2f,YAAYF,oBACH;AAAA,MACH91B,MAAM;AAAA,MACN2I,MAAM+tB,eAAepJ,qBACjB,MACE,oBAAC,OAAI,OAAO;AAAA,QAACx1B,QAAQ;AAAA,MAAA,GACnB,UAAA,oBAAC,SAAA,EAAQ,OAAO;AAAA,QAACw+B,WAAW;AAAA,MAAA,EAAiB,CAAE,GACjD,IAEFC;AAAAA,MACJ32B,OAAO;AAAA,MACP42B,UAAUA,MAAM;AACVE,uBAAepJ,sBAAsB,CAACtqB,eAGtCwjB,aAAavvB,WACf+lB,sBAAsBwJ,aAAavvB,OAAO,GAE5Co2B,qBAAqB;AAAA,UACnBh2B,UAAU;AAAA,YACR,GAAG6+B,OAAOj/B;AAAAA,YACVqN,KAAKtB;AAAAA,UAAAA;AAAAA,UAEPypB,gBAAgBxmB;AAAAA,UAChBsG,eAAevP;AAAAA,UACfyP,oBAAoB+Z,aAAavvB,UAC7B+lB,sBAAsBwJ,aAAavvB,SAASwR,SAAQ,IACpD,CAAA;AAAA,QAAA,CACL;AAAA,MACH;AAAA,MACAguB,gBAAgB;AAAA,MAChB1R,UAAU2R,eAAepJ,sBAAsBpR;AAAAA,IAAAA,IAEjDxa,QACN,CACEs0B,UACA3I,sBACApnB,oBACAjD,YACA0zB,eAAepJ,oBACfwI,mBACA94B,MACAkf,UACAzT,SAAQ,CAEZ;AAEA,WAAO4N,QAAQ,MAAM;AACnB,UAAI,EAAA,CAAC2f,YAAY,CAAChvB,QAAQ2E;AAI1B,eAAY;AAAA,UACV3L,MAAM;AAAA,UACN2I,MAAMA,MAAM;AAAA,UACZ/I,OAAO;AAAA,UACP/F,UAAU,CAACw8B,yBAAyBM,qBAAqB,EAAE5xB,OACxD6xB,CAAAA,OAAoC,CAAC,CAACA,EACzC;AAAA,UACAC,UAAU;AAAA,QAAA;AAAA,IAEd,GAAG,CAACb,UAAUK,yBAAyBM,uBAAuB3vB,MAAM,CAAC;AAAA,EACvE;AACF;ACxMA,SAAS8vB,UAAUx3B,SAAS,IAAI;AAC9B,QAAMy3B,QAAQ,IAAIC,WAAW13B,MAAM;AACnC23B,SAAAA,OAAOC,gBAAgBH,KAAK,GACrBA;AACT;AAEA,MAAMI,kBAAmB,uBAAM;AAC7B,MAAIC;AACJ,SAAO,MAAM;AACX,QAAIA;AACF,aAAOA;AAETA,YAAQ,CAAA;AACR,aAAS3xB,IAAI,GAAGA,IAAI,KAAK,EAAEA;AACzB2xB,YAAM3xB,CAAC,KAAKA,IAAI,KAAO4xB,SAAS,EAAE,EAAEC,UAAU,CAAC;AAEjD,WAAOF;AAAAA,EACT;AACF,GAAA;AAEO,SAASG,UAAUj4B,QAAiB;AACzC,QAAM83B,QAAQD,gBAAAA;AACd,SAAOL,UAAUx3B,MAAM,EACpB+J,OAAO,CAACmuB,KAAKrV,MAAMqV,MAAMJ,MAAMjV,CAAC,GAAG,EAAE,EACrCX,MAAM,GAAGliB,MAAM;AACpB;AC+JO,SAASm4B,wBACdC,QACuB;AACvB,SAAO;AAAA,IACL,GAAGA;AAAAA,IACH13B,MAAM;AAAA,EAAA;AAEV;AAEO,SAAS23B,2BAAuD;AACrE,SAAO;AAAA,IACL33B,MAAM;AAAA,EAAA;AAEV;AAEO,SAAS43B,6BACdC,OACwB;AACxB,SAAO;AAAA,IACL,GAAGA;AAAAA,IACH73B,MAAM;AAAA,EAAA;AAEV;AAEO,SAAS83B,sBACdl+B,OACA;AACA,QAAM;AAAA,IACJiT,QAAQ;AAAA,MAACkrB;AAAAA,IAAAA;AAAAA,EAAY,IACnBzvB,yBACE;AAAA,IAAC+L;AAAAA,IAAkBC;AAAAA,EAAAA,IAAuBnM,yBAAAA,GAE1C6vB,WAAWC,wBACX;AAAA,IAAC1gC,MAAM2gC;AAAAA,EAAAA,IAAa9xB,SAAAA,GAEpB+xB,gBAAgBJ,cAAcK,kBAAkB;AAAA,IACpD,GAAGx+B;AAAAA,IACHo+B;AAAAA;AAAAA,IAEAh7B,MAAMpD,MAAMoD;AAAAA,EAAAA,CACb;AAED,SAAOqZ,QAAQ,MAAM;AACnB,UAAMzW,QAAQm4B,cAAcn4B,OACtBy4B,gBAAgBF,eAClBpzB,OAAOlF,SAAS,EACjBgF,IAAK6Y,CAAAA,SACG4a,eAAe;AAAA,MACpB5a;AAAAA,MACAwa;AAAAA,MACA7jB;AAAAA,MACAC;AAAAA,IAAAA,CACD,CACF,EACAvP,OAAOlF,SAAS,GACb04B,aACJF,eAAe/4B,UAAU+4B,eAAej3B,MAAOsc,CAAAA,WAASA,OAAK1d,SAAS,OAAO;AAa/E,YAZeq4B,eAAe/4B,SAC1Bi5B,aACEF,gBACA,CACE;AAAA,MACEr4B,MAAM;AAAA,MACNJ,OAAOA,SAAS;AAAA,MAChB/F,UAAUw+B;AAAAA,MACVxB,UAAU;AAAA,IAAA,CACX,IAEL,CAAA,MACa,CAAA;AAAA,EAEnB,GAAG,CAACsB,eAAeJ,cAAcG,SAAS,CAAC;AAC7C;AAEA,SAASI,eAAe7lB,MAKgB;AACtC,QAAM;AAAA,IAACiL;AAAAA,EAAAA,IAAQjL;AACf,UAAQiL,KAAK1d,MAAAA;AAAAA,IACX,KAAK;AACH,aAAOw4B,iBAAiB;AAAA,QAAC,GAAG/lB;AAAAA,QAAMilB,QAAQha;AAAAA,MAAAA,CAAK;AAAA,IACjD,KAAK;AACH,YAAM7jB,WAAW6jB,KAAK7jB,UAClBkL,OAAOlF,SAAS,EACjBgF,IAAK4zB,WAAUH,eAAe;AAAA,QAAC,GAAG7lB;AAAAA,QAAMiL,MAAM+a;AAAAA,MAAAA,CAAM,CAAC,EACrD1zB,OAAOlF,SAAS;AACnB,aAAKhG,UAAUyF,SAGR;AAAA,QACL,GAAGoe;AAAAA,QACH+Y,gBAAgB;AAAA,QAChBI,UAAU;AAAA,QACVh9B;AAAAA,MAAAA,IANA;AAAA,IASJ;AACE,aAAO6jB;AAAAA,EAAAA;AAEb;AAEA,SAAS8a,iBAAiB/lB,MAKvB;AACD,QAAM;AAAA,IAACilB;AAAAA,IAAQQ;AAAAA,IAAW7jB;AAAAA,IAAkBC;AAAAA,EAAAA,IAAuB7B;AACnE,SAAO;AAAA,IACL,GAAGilB;AAAAA,IACHlB,UAAUA,MAAM;AACd,qBAAekC,YAAY;AACzB,cAAM1zB,OAAwB;AAAA,UAC5BT,OAAO5F;AAAAA,UACPlE,MAAM88B,UAAU,EAAE;AAAA,UAClB3xB,UAAS,oBAAIC,KAAAA,GAAO4R,YAAAA;AAAAA,UACpBR,UAAU,CACR;AAAA,YACE1S,OAAO3F;AAAAA,YACPnE,MAAM88B,UAAU,EAAE;AAAA,YAClBv6B,MAAMmC;AAAAA,YACNyG,UAAS,oBAAIC,KAAAA,GAAO4R,YAAAA;AAAAA,UAAY,CACjC;AAAA,QAAA;AAGL,YAAI;AACFpD,2BAAiBrP,IAAI;AACrB,gBAAM2zB,eAAejB,OAAOlB,WAAAA;AACxBmC,kCAAwB5oB,WAC1B,MAAM4oB;AAAAA,QAEV,SAASC,KAAU;AACjBlV,kBAAQpL,MAAM,4BAA4Bof,QAAQkB,GAAG,GACrDV,UAAU;AAAA,YACRt4B,OAAO;AAAA,YACPqH,aAAa2xB,KAAK1xB;AAAAA,YAClBF,QAAQ;AAAA,UAAA,CACT;AAAA,QACH,UAAA;AACEsN,8BAAoBtP,IAAI;AAAA,QAC1B;AAAA,MACF;AACK0zB,gBAAAA;AAAAA,IACP;AAAA,IACAjC,gBAAgB;AAAA,IAChBxR,UAAU;AAAA,EAAA;AAEd;AC7TO,MAAM4T,0BAA+C;AAAA,EAC1Dv4B,MAAM;AAAA,EACNi1B,UAAU37B,OAAO;AACf,UAAMoO,UAAU5I,WAAWxF,MAAMoD,IAAI,GAC/B;AAAA,MAACuW;AAAAA,IAAAA,IAAiBxL,mBAElB;AAAA,MAAC8E;AAAAA,MAAQ7F;AAAAA,IAAAA,IAAUsB,sBAAAA,GACnB0D,YAAYH,aAAagB,QAAQsC,iBAAiB,GAClD;AAAA,MAAC7B;AAAAA,MAAiBrB;AAAAA,IAAAA,IAAWoB,mBAAmBrB,SAAS,GACzD8sB,eAAe1+B,WAAWu5B,YAAY,GACtC;AAAA,MAAC3f;AAAAA,IAAAA,IAAwB7L,4BAEzB6tB,WAAW,CAAC,CAAC8C,gBAAgB9wB,YAAY8wB,cAAcvE;AAE7D,WAAOle,QAAQ,MAAM;AACnB,UAAI,EAAA,CAAC2f,YAAY,CAAC8C;AAKlB,eAAY;AAAA,UACV94B,MAAM;AAAA,UACN2I,MAAMsD,UACF,MACE,oBAAC,OAAI,OAAO;AAAA,YAACnU,QAAQ;AAAA,UAAA,GACnB,UAAA,oBAAC,SAAA,EAAQ,OAAO;AAAA,YAACw+B,WAAW;AAAA,UAAA,EAAiB,CAAE,GACjD,IAEFztB;AAAAA,UACJjJ,OAAO;AAAA,UACP42B,UAAUA,MAAM;AACd,gBAAIvqB,CAAAA,SAGJ;AAAA,kBAAI,CAACR,aAAazE,MAAM,GAAG;AACzBuM,8BAAcqU,eAAe;AAAA,kBAC3B,CAAC3oB,cAAc,GAAG+I;AAAAA;AAAAA,kBAElB,CAAC9I,gBAAgB,GAAGwC;AAAAA,gBAAAA,CACrB;AACD;AAAA,cACF;AACK4L,8BAAgB;AAAA,gBAACtQ,MAAMgL;AAAAA,gBAAShF,YAAYgR;AAAAA,cAAAA,CAAqB;AAAA,YAAA;AAAA,UACxE;AAAA,UACAyiB,gBAAgB;AAAA,UAChB1R,UAAU9Y;AAAAA,UACViR,QAAQ,CAAC4b,aAAajF;AAAAA,QAAAA;AAAAA,IAE1B,GAAG,CACDmC,UACA8C,cACAxrB,iBACAtF,SACAgM,sBACA/H,SACAjF,QACAuM,aAAa,CACd;AAAA,EACH;AACF,GC9DawlB,sBAA2C;AAAA,EACtDz4B,MAAM;AAAA,EACNi1B,UAAU37B,OAAO;AACf,UAAMoO,UAAU5I,WAAWxF,MAAMoD,IAAI,GAE/B;AAAA,MAAC6P;AAAAA,IAAAA,IAAUvE,sBAAAA,GACX0D,YAAYH,aAAagB,QAAQsC,iBAAiB,GAClD;AAAA,MAAC3B;AAAAA,MAAevB;AAAAA,IAAAA,IAAWsB,iBAAiBvB,SAAS,GAErD8sB,eAAe1+B,WAAWu5B,YAAY,GACtC;AAAA,MAAC3f;AAAAA,IAAAA,IAAwB7L,4BAEzB6tB,WAAW,CAAC,CAAC8C,gBAAgB9wB,YAAY8wB,cAActE;AAE7D,WAAOne,QAAQ,MAAM;AACnB,UAAK2f;AAKL,eAAY;AAAA,UACVh2B,MAAM;AAAA,UACN2I,MAAMsD,UACF,MACE,oBAAC,OAAI,OAAO;AAAA,YAACnU,QAAQ;AAAA,UAAA,GACnB,UAAA,oBAAC,SAAA,EAAQ,OAAO;AAAA,YAACw+B,WAAW;AAAA,UAAA,EAAiB,CAAE,GACjD,IAEFztB;AAAAA,UACJjJ,OAAO;AAAA,UACP42B,UAAUA,MAAM;AACVvqB,uBAGCuB,cAAc;AAAA,cAACxQ,MAAMgL;AAAAA,cAAShF,YAAYgR;AAAAA,YAAAA,CAAqB;AAAA,UACtE;AAAA,UACAyiB,gBAAgB;AAAA,UAChB1R,UAAU9Y;AAAAA,QAAAA;AAAAA,IAEd,GAAG,CAAC+pB,UAAUxoB,eAAexF,SAASgM,sBAAsB/H,OAAO,CAAC;AAAA,EACtE;AACF;ACrDO,SAAA+sB,cAAA;AAAA,QAAAxjC,IAAAC,EAAA,CAAA;AAAA,MAAAQ,IAAAM;AAAAf,IAAA,CAAA,MAAAwB,uBAAAd,IAAA,2BAAA,KAICD,KAAA,oBAAC,MAAA,EAAW,MAAA,GAAU,OAAA;AAAA,IAAAsxB,YAAa;AAAA,EAAA,GAAW,iCAE9C,GAEkBhxB,KAAA,CAAC,QAAQ,GAACf,OAAAS,IAAAT,OAAAe,OAAAN,KAAAT,EAAA,CAAA,GAAAe,KAAAf,EAAA,CAAA;AAAA,MAAAsB;AAAA,SAAAtB,EAAA,CAAA,MAAAwB,uBAAAd,IAAA,2BAAA,KANhCY,KAAA,oBAAC,SAAA,EAEG,SAAAb,IAIkB,oBAAAM,IACX,SAAA,GACC,WAAA,OACV,QAAA,IAEA,UAAA,oBAAC,YAAQ,EAAA,CACX,GAAUf,OAAAsB,MAAAA,KAAAtB,EAAA,CAAA,GAZVsB;AAYU;ACkBP,MAAMmiC,qBAA0C;AAAA,EACrD34B,MAAM;AAAA,EACNi1B,UAAU37B,OAAO;AACf,UAAM;AAAA,MAACwG;AAAAA,IAAAA,IAAcxG,OAEf;AAAA,MACJoK;AAAAA,MACAiQ;AAAAA,MACAC;AAAAA,MACAX;AAAAA,MACAC;AAAAA,MACAC;AAAAA,MACAb;AAAAA,MACA3M;AAAAA,MACAkO;AAAAA,MACAH;AAAAA,MACAV;AAAAA,IAAAA,IACEnL,4BAEE;AAAA,MAACV,OAAO8e;AAAAA,MAAU1M;AAAAA,IAAAA,IAAa9R,mBAC/BmxB,cAAcvjC,OAAO4wB,QAAQ,GAC7BC,eAAe7wB,OAAOkkB,SAAS;AACrC2M,iBAAavvB,UAAU4iB;AAEvB,UAAM/V,cAAcC,kBACdo1B,WAAW,CAACn1B,gBACZgE,UAAU5I,WAAWxF,MAAMoD,IAAI,GAC/BypB,WAAW3b,YAAYyb,UAAUve,OAAO,GACxCpF,oBAAmBoB,gBAAgBM,KAEnC;AAAA,MAACoO;AAAAA,IAAAA,IAAyBF,yBAAyB;AAAA,MACvDI;AAAAA,MACAN,iBAAiB4B,wBAAwB;AAAA,IAAA,CAC1C,GAEKklB,eAAe,CAAC,CAACruB,iBAAiB9E,oBAAoBwgB,QAAQ,GAC9D4S,kBACJjE,mBAAmBx7B,MAAMoD,MAAMoD,UAAU,KACzCg5B,gBACAr4B,sBAAsBkF,kBAAkB,KACxC7F,WAAW8b,aAAa,IAEpBod,cAAcjjB,QAClB,OACGrS,gBAAgB3C,UAAU,CAAA,GAAInB,KAC5BsF,CAAAA,MAAMA,EAAExI,SAASypB,YAAaze,YAAY7I,mBAAmBqG,EAAExI,SAASgL,OAC3E,GACF,CAAChE,gBAAgB3C,QAAQ2G,SAASye,QAAQ,CAC5C,GAEM8S,iBAAiBD,aAAa7+B,MAG9B++B,aAFkB/lB,WAAWnT,SAASsnB,iBACrB5f,YAAYmM,cAG7BslB,qBAAqBZ,wBAAwBtD,UAAU37B,KAAK,GAC5D8/B,iBAAiBX,oBAAoBxD,UAAU37B,KAAK,GACpDi8B,kBAAkBP,iBAAiBC,UACvClwB,MAAsB;AAAA,MACpB,GAAGzL;AAAAA,MACHoJ,YAAYgR;AAAAA,MACZE;AAAAA,MACAjO;AAAAA,IAAAA,CACD,CACH,GACM0zB,qBAAqBhsB,YACzB,MACE6rB,aACIhmB,eAAeoU,aAAa,IAC5BrU,cAAcqU,eAAe;AAAA,MAC3B,CAAC3oB,cAAc,GAAG+I;AAAAA;AAAAA,MAElB,CAAC9I,gBAAgB,GAAGwC;AAAAA,IAAAA,CACrB,GACP,CAAC6R,eAAeC,gBAAgBgmB,YAAYxxB,OAAO,CACrD,GAEM4xB,sBAAsBjsB,YACzBhO,CAAAA,iBAAmC;AAC9B,OAACqI,WAAW,CAACuxB,kBAAkB,CAAC32B,qBAAoB,CAACoR,wBAGzDtB,sBAAsB;AAAA,QACpB1P,YAAYgR;AAAAA,QACZpR,kBAAAA;AAAAA,QACA5F,MAAMgL;AAAAA,QACNye;AAAAA,QACA9mB,aAAAA;AAAAA,QACA8M,oBAAoB+Z,aAAavvB,UAC7B+lB,sBAAsBwJ,aAAavvB,OAAO,IAC1C,CAAA;AAAA,MAAA,CACL;AAAA,IACH,GACA,CACEyb,uBACAsB,sBACAhM,SACAye,UACA7jB,mBACA22B,cAAc,CAElB,GAEMM,sBAAsBxjB,QAC1B,MACEijB,aAAar0B,cAAcF,OAAQU,CAAAA,MAAMA,EAAEN,UAAUM,EAAEN,WAAWrB,aAAaT,EAAE,KAAK,CAAA,GACxF,CAACi2B,aAAar0B,cAAcnB,WAAW,CACzC,GAEMg2B,qBAAqBzjB,QACzB,MAAMijB,aAAar0B,cAAcF,OAAQU,CAAAA,MAAM,CAACA,EAAEN,MAAM,KAAK,CAAA,GAC7D,CAACm0B,aAAar0B,YAAY,CAC5B,GAEMA,eAAeoR,QACnB,MAAM,CAAC,GAAGwjB,qBAAqB,GAAGC,kBAAkB,GACpD,CAACD,qBAAqBC,kBAAkB,CAC1C,GAEMC,uBAAuB1jB,QAAQ,MAC5BpR,cAAc3F,UAAUm6B,sBAAsB5D,mBAAmB6D,iBAC/D;AAAA,MACH15B,MAAM;AAAA,MACN2I,MAAMA,MAAM;AAAA,MACZ/I,OAAO;AAAA,MACP/F,UAAU,CACR,GAAIoL,cAAcJ,IAAKlF,kBACrBq6B,gBAAgB;AAAA,QACdr6B,aAAAA;AAAAA,QACAs6B,WAAWze,CAAAA,EAAQ7b,aAAYwF,UAAUxF,aAAYwF,WAAWrB,aAAaT;AAAAA,QAC7Eu2B;AAAAA,QACA1c,QAAQic;AAAAA,QAERE;AAAAA,MAAAA,CACD,CACH,KAAK,IACLI,oBACAC,cAAc,EACd30B,OAAQ+e,CAAAA,MAAoC,CAAC,CAACA,CAAC;AAAA,MACjD+S,UAAU;AAAA,IAAA,IAEZn1B,QACH,CACDuD,cACAnB,aAAaT,IACbu2B,qBACAT,UACAllB,eACAolB,iBACAI,oBACA5D,iBACA6D,cAAc,CACf,GAEKQ,mBAAmBvsB,YAAY,MAC5BurB,YAAYjiC,SAClB,CAAA,CAAE,GAECkjC,sBAA0DxsB,YAAY,OAElE6Y,aAAavvB,UAAU+lB,sBAAsBwJ,aAAavvB,OAAO,IAAI,CAAA,GAAI0S,QAC9EywB,CAAAA,OAAO;AACN,YAAMp9B,OAAOuN,aAAa6vB,GAAGp9B,IAAI;AACjC,aAAIA,KAAK+gB,KAAMqV,CAAAA,MAAM,OAAOA,KAAM,QAAQ,IAEjC,KAEF;AAAA,QACL,GAAGgH;AAAAA;AAAAA,QAEHp9B;AAAAA,MAAAA;AAAAA,IAEJ,CACF,GACC,CAAA,CAAE,GAECq9B,mBAAmBhkB,QAAQ,MAAM;AACrC,UAAKzc,MAAMoD,KAAKsC;AAET,YAAI1F,MAAMoD,KAAKsC,WAAW;AAC/B,iBAAO2G;AAAAA,YAFP;AAIF,YAAM6mB,aAAalzB,MAAMoD,KAAKwkB,MAAM,GAAG,EAAE,GACnCiF,YAAWrc,YAAY8uB,YAAYjiC,SAASwI,aAAaqtB,UAAU,CAAC;AAC1E,aAAOrG,YAAWnT,oBAAoBmT,SAAQ,GAAGrmB,aAAasB;AAAAA,IAChE,GAAG,CAAC4R,qBAAqB1Z,MAAMoD,MAAMiJ,kBAAkB,CAAC,GAElDoyB,gBAAgBP,sBAAsB;AAAA,MAC1CwC,YAAY1gC,MAAMoD,KAAKsC,SAAS,UAAU;AAAA,MAC1Ci7B,qBAAqBvmB;AAAAA,MACrB5T;AAAAA,MACA6F;AAAAA,MACAjJ,MAAMpD,MAAMoD;AAAAA,MACZk9B;AAAAA,MACAC;AAAAA,MACAE;AAAAA,IAAAA,CACD,GAEKG,yBAAyBnkB,QAC7B,OACO;AAAA,MACHrW,MAAM;AAAA,MACN2I,MAAM8xB;AAAAA,MACN76B,OAAO;AAAA,MACP42B,UAAUmD;AAAAA,MACV1U,UAAUuU;AAAAA,IAAAA,IAEd,CAACG,oBAAoBH,UAAU,CACjC,GAEM3B,QAAQxhB,QACZ,OACO;AAAA,MACHrW,MAAM;AAAA,MACN2I,MAAM6V;AAAAA,MACN5e,OAAO4C;AAAAA,MACP3I,UAAU,CACRkgC,sBACAlE,iBACA,GAAGwC,eACHgB,mBAAmBmB,sBAAsB,EAExCz1B,OAAQ6xB,CAAAA,OAA+D,CAAC,CAACA,EAAC,EAC1E7xB,OAAQ6xB,CAAAA,OAAOA,GAAE52B,SAAS,UAAU42B,GAAE/8B,SAASyF,SAAS,EAAK;AAAA,MAChEu3B,UAAU;AAAA,MACVJ,gBAAgB;AAAA,MAChBvZ,QAAQ,CAACmc,mBAAmB,CAACI,sBAAsB,CAAC5D,mBAAmB,CAAC6D;AAAAA,IAAAA,IAE5E;AAAA;AAAA,MAEEK;AAAAA,MACAS;AAAAA,MACAnB;AAAAA,MACAI;AAAAA,MACA5D;AAAAA,MACA6D;AAAAA,MACArB;AAAAA,IAAAA,CAEJ,GAEMqC,cAAcrkB,QAClB,OACO;AAAA,MACHrW,MAAM;AAAA,MACNkd,QAAQ,CAACmc;AAAAA,MACT1wB,MAAM6V;AAAAA,MACNgY,UAAUmD;AAAAA,MACVlD,gBAAgB;AAAA,MAChB72B,OAAO4C;AAAAA,MACPyiB,UAAUuU;AAAAA,IAAAA,IAEd,CAACH,iBAAiBM,oBAAoBH,UAAU,CAClD;AAGA,WACE,CAACv0B,cAAc3F,UACf,CAACm6B,sBACD,CAAC5D,mBACD,CAAC6D,kBACD,CAACrB,cAAc/4B,SAERo7B,cAGF7C;AAAAA,EACT;AACF;AAEA,SAASmC,gBAAgBpgC,OAOtB;AACD,QAAM;AAAA,IAACsjB;AAAAA,IAAQ+c;AAAAA,IAAWL;AAAAA,IAAqBP;AAAAA,IAAiB15B,aAAAA;AAAAA,EAAAA,IAAe/F;AAC/E,SAAY;AAAA,IACVoG,MAAM;AAAA,IACN2I,MAAMisB,QAAQj1B,aAAYgJ,IAAI;AAAA,IAC9BgyB,WAAWV,YAAYjB,cAAct3B;AAAAA,IACrC9B,OAAOF,oBAAoBC,YAAW;AAAA,IACtC62B,UAAUA,MAAMoD,oBAAoBj6B,YAAW;AAAA,IAC/ColB,UAAU,CAACsU;AAAAA,IACXnc;AAAAA,EAAAA;AAEJ;AC1TO,SAAS0d,6BAA6B53B,YAAgC;AAC3E,SAAO,WAAyC;AAC9C,WAAOA,aAAa,oBAAC,wBAAA,CAAA,CAAsB,IAAM;AAAA,EACnD;AACF;AAEA,SAAS63B,yBAAyB;AAChC,QAAM;AAAA,IAAC72B;AAAAA,IAAgBoQ;AAAAA,EAAAA,IAAkBjM,yBAAAA,GACnC2yB,gBAAczkB,QAAQ,MAAM;AAEhC,UAAMykB,cAAc,CAAC,GAAI92B,gBAAgBY,SAAS,IAAK,GAAIwP,kBAAkB,EAAG,EAC5ErP,OAAQY,SAAQ,CAACA,IAAIgB,SAAS,CAAChB,IAAIoB,MAAM,GACzC4C,QAAShE,WAAQA,MAAIsR,YAAY,CAAA,CAAE,EACpC/W,KAAMsF,CAAAA,MAAMA,EAAEI,YAAW,oBAAIC,KAAAA,GAAOC,QAAAA,IAAY,IAAID,KAAKL,EAAEI,OAAO,EAAEE,QAAAA,IAAY,GAAK;AACxF,QAAIg1B;AACF,aAAOzjB,WAAWyjB,aAAa,EAAE;AAEnC,UAAMC,SAAS/2B,gBAAgBY,OAC3BG,OAAQY,CAAAA,UAAQ,CAACA,MAAIgB,SAAS,CAAChB,MAAIoB,MAAM,GACzC7G,KAAMsF,CAAAA,QAAMA,IAAEI,YAAW,oBAAIC,KAAAA,GAAOC,QAAAA,IAAY,IAAID,KAAKL,IAAEI,OAAO,EAAEE,QAAAA,IAAY,GAAK;AACzF,WAAOi1B,SACH1jB,WACE;AAAA,MACEzR,SAASm1B,OAAOn1B;AAAAA,MAEhBnL,MAAMsgC,OAAOtgC;AAAAA,IAEf,GACA,CAAA,CACF,IACAiH;AAAAA,EACN,GAAG,CAACsC,gBAAgBY,OAAOwP,cAAc,CAAC;AAE1C,SACE,oBAAC,QACC,UAAA,oBAAC,MAAA,EAAK,MAAM,GAAG,SAAQ,YACrB,UAAA,oBAAC,MAAA,EAAK,KAAK,GAAG,OAAO,UAClB0mB,UAAAA,iBAAe,oBAAC,mBAAgB,UAAUA,cAAAA,CAAY,EAAA,CACzD,EAAA,CACF,EAAA,CACF;AAEJ;AC1CO,SAAAE,4BAAA;AAAA,QAAAxlC,IAAAC,EAAA,CAAA,GACL;AAAA,IAAA8d;AAAAA,EAAAA,IAAwBxL,gBAAAA;AAAiB,MAAA9R;AAAAT,WAAA+d,iBAIvCtd,KAAAA,MAAMsd,cAAcqU,eAAe;AAAA,IAAA,CAAE1oB,gBAAgB,GAAGwC;AAAAA,EAAAA,CAAiB,GAAClM,OAAA+d,eAAA/d,OAAAS,MAAAA,KAAAT,EAAA,CAAA;AAF5E,QAAAylC,SAAehlC;AAId,MAAAM;AAAA,SAAAf,SAAAylC,UAGC1kC,KAAA,oBAAA,SACE,UAAA,oBAAC,QAAA,EACI,IAAA,KACO,UAAA,GACJ2kC,MAAAA,eACD,MAAA,SACI,SAAA,GACF,UACED,SAAAA,QACJ,MAAA,kBACK,WAAA,QAAM,EAAA,CAEpB,GAAMzlC,OAAAylC,QAAAzlC,OAAAe,MAAAA,KAAAf,EAAA,CAAA,GAZNe;AAYM;ACtBH,MAAM4kC,uBAAuBlhC,cAAqDyH,MAAS,GACrF05B,+BAA+BD,qBAAqBE,UC8B3DC,eAA8B,CAAA;AAE7B,SAAAC,mBAAA3hC,OAAA;AAAA,QAAApE,IAAAC,EAAA,CAAA;AACL,MAAImE,MAAKsiB,UAAS;AAAA,QAAAjmB;AAAA,WAAAT,EAAA,CAAA,MAAAwB,uBAAAd,IAAA,2BAAA,KAEdD,MAAA,oBAAC,MAAA,EAAK,QAAA,IAAY,MAAA,WAAmB,SAAA,GACnC,UAAA,oBAAC,MAAA,EAAW,MAAA,GAAG,UAAA,mEAA+D,EAAA,CAChF,GAAOT,OAAAS,OAAAA,MAAAT,EAAA,CAAA,GAFPS;AAAAA,EAEO;AAEV,MAAAA;AAAA,SAAAT,SAAAoE,SACM3D,KAAA,oBAAC,4BAAA,EAA0B,GAAK2D,OAAK,GAAIpE,OAAAoE,OAAApE,OAAAS,MAAAA,KAAAT,EAAA,CAAA,GAAzCS;AAAyC;AAElD,SAAAulC,2BAAA5hC,OAAA;AAAA,QAAApE,IAAAC,EAAA,EAAA,GACE;AAAA,IAAA0c;AAAAA,EAAAA,IAAmBvY,OAEnB6N,QAAc7N,MAAK6N,OACnBpE,KAAWoE,OAAKnD,KAChBjD,SAAeoG,OAAKpG,QAEpB;AAAA,IAAAiK;AAAAA,IAAAmwB;AAAAA,EAAAA,IAA4BtwB,gBAAAA,GAC5BnD,UAAgBsD,OAAOrM,cAAc,GACrC;AAAA,IAAAwnB;AAAAA,IAAA5jB,cAAA64B;AAAAA,EAAAA,IAAqDthC,WAAWyiB,iBAAiB,GACjFld,eAAoB2L,OAAOpM,gBAAgB;AAAC,MAAAjJ;AAAAyO,OAAA;AAG1C,QAAI,CAAC+hB,UAAQ;AACXxwB,WAAOyL;AAAP,YAAAgD;AAAAA,IAAgB;AACjB,QAAAnO;AAAAf,MAAA,CAAA,MAAA6L,UAAA7L,SAAAixB,YACMlwB,OAAC8K,UAAAi6B,cAAsBp7B,KAAOsF,CAAAA,MAAOA,EAACxI,SAAUypB,QAAc,GAAChsB,MAAAjF,OAAA6L,QAAA7L,OAAAixB,UAAAjxB,OAAAe,OAAAA,MAAAf,EAAA,CAAA,GAAtES,KAAOM;AAAAA,EAA+D;AAJxE,QAAAolC,YAAkB1lC;AAKI,MAAAM;AAAAqlC,OAAA;AAGpB,QAAI,CAACD,WAAS;AACZplC,WAAOmL;AAAP,YAAAk6B;AAAAA,IAAgB;AACjB,QAAA9kC;AAAAtB,aAAAmmC,aACY7kC,MAAA,CAAC,UAAU;AAAA,MAAA2D,MAAOkhC;AAAAA,IAAAA,CAAU,GAACnmC,OAAAmmC,WAAAnmC,OAAAsB,OAAAA,MAAAtB,EAAA,CAAA;AAA1C,UAAAif,OAAa3d;AAA6B,QAAAC;AAAAvB,MAAA,CAAA,MAAAif,QAAAjf,SAAAmK,gBACnC5I,MAAA4I,eAAA,IAAkB8U,MAAM,gBAAgB;AAAA,MAAAha,MAAOkF;AAAAA,IAAAA,CAAY,IAA3D8U,MAAmEjf,OAAAif,MAAAjf,OAAAmK,cAAAnK,OAAAuB,OAAAA,MAAAvB,EAAA,CAAA,GAA1Ee,KAAOQ;AAAAA,EAAmE;AAL5E,QAAA8kC,aAAqCtlC,IAQrC4c,SAAeC,UAAAA;AAAW,MAAAtc;AAAAglC,OAAA;AAExB,QAAI,CAACJ,oBAAkB;AACrB5kC,WAAO4K;AAAP,YAAAo6B;AAAAA,IAAgB;AACjB,QAAA/kC;AAAAvB,MAAA,CAAA,MAAA2d,UAAA3d,SAAAkmC,sBAEM3kC,MAAAoc,OAAMzX,IAAKggC,kBAAkB,GAAClmC,OAAA2d,QAAA3d,OAAAkmC,oBAAAlmC,QAAAuB,OAAAA,MAAAvB,EAAA,EAAA,GAArCsB,KAAOC;AAAAA,EAAkD;AAL3D,QAAA01B,iBAAqD31B,IAapCC,KALGglC,kBAAkB/zB,SAASykB,cAAc,KAK5CA;AAA6B,MAAAnzB;AAAA9D,IAAA,EAAA,MAAAi3B,kBAAAj3B,UAAAuB,MAFrCuC,KAAA;AAAA,IAAAmzB;AAAAA,IAAAd,aAEQ50B;AAAAA,EAAAA,GACdvB,QAAAi3B,gBAAAj3B,QAAAuB,IAAAvB,QAAA8D,MAAAA,KAAA9D,EAAA,EAAA;AAJH,QAAA4S,UACS9O,IAOTsG,QAAc6H,OAAK7H;AAAW,MAAApG,IAAAE;AAAAlE,IAAA,EAAA,MAAAi3B,kBAAAj3B,EAAA,EAAA,MAAA6N,MAAA7N,EAAA,EAAA,MAAA2c,YAAA3c,UAAAoK,SAEpBpG,KAAAA,MAAA;AACJ,KAACoG,SAAD6sB,kBAAA,CAA6BppB,IAAEqG,WAAa,SAAS,KACvDyI,SAASnW,IAAIywB,eAAc7sB,SAAU6sB,eAAcnsB,MAAO,CAAC,OAAO,CAAC,CAAC;AAAA,EACrE,GACA5G,KAAA,CAACkG,OAAO6sB,gBAAgBta,UAAU9O,EAAE,GAAC7N,QAAAi3B,gBAAAj3B,QAAA6N,IAAA7N,QAAA2c,UAAA3c,QAAAoK,OAAApK,QAAAgE,IAAAhE,QAAAkE,OAAAF,KAAAhE,EAAA,EAAA,GAAAkE,KAAAlE,EAAA,EAAA,IAJxC6D,UAAUG,IAIPE,EAAqC;AAED,QAAA+K,KAAAqU,iBAAAA;AAAkB,MAAAkjB,eAAAhiB;AAAAxkB,YAAAiP,MAAzD;AAAA,IAAAuV;AAAAA,IAAA,GAAAgiB;AAAAA,EAAAA,IAAuCv3B,IAAkBjP,QAAAiP,IAAAjP,QAAAwmC,eAAAxmC,QAAAwkB,eAAAgiB,gBAAAxmC,EAAA,EAAA,GAAAwkB,aAAAxkB,EAAA,EAAA;AAAA,MAAAmP;AAAAnP,IAAA,EAAA,MAAAmK,gBAAAnK,EAAA,EAAA,MAAAwkB,cAAAxkB,EAAA,EAAA,MAAA8V,UAAA9V,UAAAimC,aAKzC92B,KAAA3H,CAAAA,SAAA;AACN,KAAC2C,gBAAe3C,KAAIsC,WAAY,KAAKtC,KAAI,CAAA,MAAQ,iBACnDy+B,UAEEp2B,MAAkC;AAAA,MAAA,GAC7BiG;AAAAA,MAAM,CAERpM,gBAAgB,GAAIlC,KAAI,CAAA,GAAGvC;AAAAA,IAAAA,CAC7B,CACH,IAEA0S,WAAW,MAAM6M,WAAWhd,IAAI,GAAG,CAAC;AAAA,EACrC,GACFxH,QAAAmK,cAAAnK,QAAAwkB,YAAAxkB,QAAA8V,QAAA9V,QAAAimC,WAAAjmC,QAAAmP,MAAAA,KAAAnP,EAAA,EAAA;AAAA,MAAAkc;AAAAlc,IAAA,EAAA,MAAAwmC,iBAAAxmC,UAAAmP,MAfI+M,KAAA;AAAA,IAAA,GACFsqB;AAAAA,IAAahiB,YACJrV;AAAAA,EAAAA,GAcbnP,QAAAwmC,eAAAxmC,QAAAmP,IAAAnP,QAAAkc,MAAAA,KAAAlc,EAAA,EAAA;AAjBH,QAAAymC,eACSvqB;AAkBR,MAAA8C,KAAAE;AAAAlf,IAAA,EAAA,MAAAqmC,cAAArmC,UAAAmK,gBAAAnK,EAAA,EAAA,MAAAwkB,cAISxF,MAAAA,MAAA;AACJqnB,kBAAA,CAAel8B,gBACjBqa,WAAW6hB,UAAU;AAAA,EACtB,GACAnnB,OAACmnB,YAAYl8B,cAAaqa,UAAU,GAACxkB,QAAAqmC,YAAArmC,QAAAmK,cAAAnK,QAAAwkB,YAAAxkB,QAAAgf,KAAAhf,QAAAkf,QAAAF,MAAAhf,EAAA,EAAA,GAAAkf,MAAAlf,EAAA,EAAA,IAJxC6D,UAAUmb,KAIPE,GAAqC;AAAC,MAAA+Q;AAAAyW,OAAA;AAAA,QAAAxW;AAAAlwB,MAAA,EAAA,MAAAoE,MAAAgI,WAGpB8jB,OAAA9rB,MAAKgI,QAAQ1B,KAC9B4B,OACF,GAACtM,EAAA,EAAA,IAAAoE,MAAAgI,SAAApM,QAAAkwB,QAAAA,OAAAlwB,EAAA,EAAA;AAFD,UAAA2mC,aAAmBzW;AAGnB,QAAIyW,YAAU;AAAA,UAAAxW;AAAAnwB,gBAAA2mC,cACLxW,2BAAC,kBAAA,EAAyBwW,QAAAA,WAAAA,CAAU,GAAI3mC,QAAA2mC,YAAA3mC,QAAAmwB,QAAAA,OAAAnwB,EAAA,EAAA,GAA/CiwB,MAAOE;AAAP,YAAAuW;AAAAA,IAA+C;AAEjDzW,UAAO/jB;AAAAA,EAAS;AAPlB,QAAA06B,eAAmB3W;AAQA,MAAAC;AAAAlwB,IAAA,EAAA,MAAAqmC,cAAArmC,EAAA,EAAA,MAAAi3B,kBAAAj3B,EAAA,EAAA,MAAA6L,UAAA7L,EAAA,EAAA,MAAA2c,YAAA3c,UAAAixB,YAKbf,MAAA,oBAAC,mBAAA,EAEUe,SAAAA,UACGoV,YACJx6B,QACQorB,gBACNta,YALLsU,QAKa,GAClBjxB,QAAAqmC,YAAArmC,QAAAi3B,gBAAAj3B,QAAA6L,QAAA7L,QAAA2c,UAAA3c,QAAAixB,UAAAjxB,QAAAkwB,OAAAA,MAAAlwB,EAAA,EAAA;AAAA,MAAAmwB;AAAAnwB,YAAAmK,gBACDgmB,MAAAhmB,oCAAgB,2BAAA,EAAyB,GAAGnK,QAAAmK,cAAAnK,QAAAmwB,OAAAA,MAAAnwB,EAAA,EAAA;AAAA,MAAA6mC;AAAA7mC,IAAA,EAAA,MAAAqmC,cAAArmC,EAAA,EAAA,MAAA4mC,gBAAA5mC,EAAA,EAAA,MAAAymC,gBAAAzmC,UAAAoE,SAE5CyiC,MAAAR,cAAA,CAAeM,gBACd,oBAAC,uBAAA,EAAqB,GAAKF,cACzB,UAAA,oBAAA,OAAA,EAAY,OAAA;AAAA,IAAA7U,YAAa;AAAA,EAAA,GACvB,UAAA,oBAAC,WAAA,EAAS,GAAKxtB,OAAqBiiC,cAAAA,WAAAA,IACtC,EAAA,CACF,GACDrmC,QAAAqmC,YAAArmC,QAAA4mC,cAAA5mC,QAAAymC,cAAAzmC,QAAAoE,OAAApE,QAAA6mC,OAAAA,MAAA7mC,EAAA,EAAA;AAAA,MAAA8mC;AAAA9mC,IAAA,EAAA,MAAAqmC,cAAArmC,UAAAoE,SAIA0iC,MAAA,CAACT,cAAcjiC,MAAK8N,cAAe9N,KAAK,GAACpE,QAAAqmC,YAAArmC,QAAAoE,OAAApE,QAAA8mC,OAAAA,MAAA9mC,EAAA,EAAA;AAAA,MAAA+mC;AAAA/mC,IAAA,EAAA,MAAA4mC,gBAAA5mC,EAAA,EAAA,MAAAkwB,OAAAlwB,EAAA,EAAA,MAAAmwB,OAAAnwB,EAAA,EAAA,MAAA6mC,OAAA7mC,UAAA8mC,OArB5CC,MAAA,qBAAC,OAAA,EAAa,OAAA,GACZ7W,UAAAA;AAAAA,IAAAA;AAAAA,IAQCC;AAAAA,IAEA0W;AAAAA,IAQAF;AAAAA,IAEAG;AAAAA,EAAAA,EAAAA,CACH,GAAQ9mC,QAAA4mC,cAAA5mC,QAAAkwB,KAAAlwB,QAAAmwB,KAAAnwB,QAAA6mC,KAAA7mC,QAAA8mC,KAAA9mC,QAAA+mC,OAAAA,MAAA/mC,EAAA,EAAA;AAAA,MAAAgnC;AAAA,SAAAhnC,EAAA,EAAA,MAAA4S,WAAA5S,UAAA+mC,OAvBVC,MAAA,oBAAC,8BAAA,EAAoCp0B,OAAAA,SACnCm0B,UAAAA,IAAAA,CAuBF,GAA+B/mC,QAAA4S,SAAA5S,QAAA+mC,KAAA/mC,QAAAgnC,OAAAA,MAAAhnC,EAAA,EAAA,GAxB/BgnC;AAwB+B;AAxHnC,SAAA16B,QAAAkc,GAAA;AAAA,SAuF8BA,EAAC/b,SAAU,WAAW+b,EAACye,cAAe;AAAQ;AAqC5E,SAAAV,kBAAAtc,WAAAgN,gBAAA;AAAA,QAAAj3B,IAAAC,EAAA,CAAA;AAAA,MAAAQ;AAAAyO,OAAA;AAKI,QAAI,CAAC+a,WAAS;AACZxpB,WAAOyL;AAAP,YAAAgD;AAAAA,IAAgB;AAElB,QAAI+a,cAActgB,iBAAe;AAC/BlJ,WAAOw2B;AAAP,YAAA/nB;AAAAA,IAAqB;AACtB,QAAAnO;AAAAf,aAAAiqB,aAEYlpB,KAAAgU,aAAakV,SAAS,GAACjqB,OAAAiqB,WAAAjqB,OAAAe,MAAAA,KAAAf,EAAA,CAAA;AAApC,UAAAwH,OAAazG;AACb,QAAAmmC,gBAAkDjQ;AAClD,aAAAhnB,IAAa,GAAGA,IAAIzI,KAAIsC,QAASmG,KAAG;AAClC,YAAAyE,UAAgBlN,KAAKyI,CAAC,GACtBnE,QAAco7B,eAAar7B,OAAanB,KAACsF,CAAAA,MAAOA,EAAClF,SAAU4J,OAAO;AAClE,UAAI,CAAC5I,OAAK;AACRrL,aAAOyL;AAAP,cAAAgD;AAAAA,MAAgB;AAElB,UAAIe,MAAMzI,KAAIsC,SAAU,GAAC;AACvBrJ,aAAOqL,MAAKtB;AAAZ,cAAA0E;AAAAA,MAAiB;AAEnB,UAAIpD,MAAKtB,KAAKmB,aAAc,UAAQ;AAClClL,aAAOyL;AAAP,cAAAgD;AAAAA,MAAgB;AAElBg4B,sBAAgBp7B,MAAKtB;AAAAA,IAAR;AAEf/J,SAAOymC;AAAAA,EAAa;AAAA,SAxBfzmC;AAyBwB;AAGjC,SAAA0mC,kBAAA1mC,IAAA;AAAA,QAAAT,IAAAC,EAAA,EAAA,GAA2B;AAAA,IAAAuS;AAAAA,IAAA6zB;AAAAA,IAAAx6B;AAAAA,IAAAorB;AAAAA,IAAAta;AAAAA,EAAAA,IAAAlc,IAazB;AAAA,IAAA4W,QAAAtW;AAAAA,EAAAA,IAEI+R,yBADM;AAAA,IAAAs0B,WAAAC;AAAAA,EAAAA,IAAAtmC;AAAoB,MAAAO;AAAAtB,IAAA,CAAA,MAAA6L,UAAA7L,SAAAwS,WAGRlR,KAAAuK,QAAMnB,KAAOsF,CAAAA,MAAOA,EAAC/K,SAAUuN,OAAO,GAACxS,OAAA6L,QAAA7L,OAAAwS,SAAAxS,OAAAsB,MAAAA,KAAAtB,EAAA,CAAA;AAA7D,QAAAsnC,gBAAsBhmC,IACtBimC,kBAAwB,CAAC,CAACtQ,gBAAcnsB,QAAUu8B,UAAUpQ,gBAAcnsB,IAAM;AAAC,MAAAvJ;AAAA2N,OAAA;AAG/E,QAAI,CAACq4B,mBAAD,CAAqB/0B,SAAO;AAC9BjR,WAAO2K;AAAP,YAAAgD;AAAAA,IAAgB;AAElB,UAAAs4B,uBAA6BF,eAAa73B;AAAc,QAAA3L;AAAA9D,MAAA,CAAA,MAAAunC,gBAAA17B,UAAA7L,EAAA,CAAA,MAAAwnC,wBAAAxnC,EAAA,CAAA,MAAAwS,WAEjD1O,MADayjC,gBAAe17B,QAAanB,KAAC0gB,CAAAA,QAAOpb,IAACxI,SAAUgL,OAAO,GACxD/C,cAAsBF,OACtCU,CAAAA,MAAO,CAACu3B,sBAAoBjf,KAAOkf,QAAQA,GAAExiC,SAAUgL,EAAChL,IAAK,CAC/D,GAACjF,EAAA,CAAA,IAAAunC,gBAAA17B,QAAA7L,OAAAwnC,sBAAAxnC,OAAAwS,SAAAxS,OAAA8D,OAAAA,MAAA9D,EAAA,CAAA,GAFDuB,KAAOuC;AAAAA,EAEN;AARH,QAAA4jC,4BAAkCnmC,IAYlC4U,cAAoBhW,OAAO,EAAK;AAAC,MAAA2D;AAAA9D,IAAA,CAAA,MAAAsnC,iBAAAtnC,EAAA,CAAA,MAAA0nC,6BAAA1nC,EAAA,CAAA,MAAA2c,YAAA3c,UAAAwS,WACvB1O,KAAAA,MAAA;AAIR,QAHIqS,YAAW1U,WAAX,CAAwB+Q,WAGxB80B,iBAAA,CAAkBI,2BAAyB59B;AAAQ;AAIvD,QAAA4b,QAAYlI,WAAUpY,KAAM,CAACuiC,aAAa,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AACrDL,sBACH5hB,QAAQA,MAAKkiB,OACXC,OACE,CACEh4B,MAAmB;AAAA,MAAA5K,MACXuN;AAAAA,MAAOzD,OACNpG;AAAAA,MAAmBnB,MACpBgL;AAAAA,MAAO/C,cACC,CAAA;AAAA,IAAA,CACf,CAAC,GAEJ,SACA,CAAC,UAAU,EAAE,CACf,CACF,IAGG63B,eAAa73B,cAAsB3F,WACtC4b,QAAQA,MAAKkiB,OAAQ,CAACD,aAAa,CAAA,GAAI,CAAC,UAAU;AAAA,MAAA1iC,MAAOuN;AAAAA,IAAAA,GAAU,cAAc,CAAC,CAAC,CAAC,IAGlFk1B,2BAAyB59B,WAC3B4b,QAAQA,MAAKkiB,OACXC,OACEH,0BAAyBr4B,IACvB4L,QAKF,GACA,SACA,CAAC,UAAU;AAAA,MAAAhW,MAAOuN;AAAAA,IAAAA,GAAU,gBAAgB,EAAE,CAChD,CACF,IAEFmK,SAAS+I,KAAK,GACdvP,YAAW1U,UAAW;AAAA,EAAH,GACpBzB,OAAAsnC,eAAAtnC,OAAA0nC,2BAAA1nC,OAAA2c,UAAA3c,QAAAwS,SAAAxS,QAAA8D,MAAAA,KAAA9D,EAAA,EAAA;AAAA,MAAAgE;AAAA,SAAAhE,EAAA,EAAA,MAAAqmC,cAAArmC,EAAA,EAAA,MAAAsnC,iBAAAtnC,EAAA,EAAA,MAAA0nC,6BAAA1nC,EAAA,EAAA,MAAA2c,YAAA3c,UAAAwS,WAAExO,KAAA,CAACqiC,YAAY1pB,UAAUnK,SAAS80B,eAAeI,yBAAyB,GAAC1nC,QAAAqmC,YAAArmC,QAAAsnC,eAAAtnC,QAAA0nC,2BAAA1nC,QAAA2c,UAAA3c,QAAAwS,SAAAxS,QAAAgE,MAAAA,KAAAhE,EAAA,EAAA,GA/C5E6D,UAAUC,IA+CPE,EAAyE,GAErE;AAAI;AAlFb,SAAAiX,SAAA6sB,QAAA;AAAA,SAmE4C;AAAA,IAAA,GAC3BA;AAAAA,IAAM/4B,OACF;AAAA,IAA2B4L,QAC1BmtB,OAAMntB,QAAYtL,IAAC+B,QAA6B;AAAA,EAAA;AACzD;AAvEb,SAAAA,SAAA1B,GAAA;AAAA,SAsEiD;AAAA,IAAAq4B,UAAW,CAAA;AAAA,IAAE,GAAKr4B;AAAAA,EAAAA;AAAE;AC7Q9D,SAAAs4B,gBAAA5jC,OAAA;AAAA,QAAApE,IAAAC,EAAA,CAAA,GACL;AAAA,IAAAuiB;AAAAA,EAAAA,IAAkBpe,OAClB6yB,iBAAuBryB,WAAW+gC,oBAAoC,GAAC1O,gBAEvEzvB,OAAc5C,WAAW8e,uBAAuB,GAAClc,QAA8BpD,MAAKoD,MACpF0pB,gBAAsB3b,iBAAiB0hB,gBAAgBzvB,IAAI;AAAC,MAAA/G;AAAAT,IAAA,CAAA,6BAAAU,IAAA,2BAAA,KAEtBD,KAAA;AAAA,IAAA0B,OAAQ;AAAA,EAAA,GAAOnC,OAAAS,MAAAA,KAAAT,EAAA,CAAA;AAI1C,QAAAe,KAAAmwB,eAAa9mB,SAAb;AAAsC,MAAA9I;AAAAtB,WAAAe,MAH7CO,yBAAC,MAAA,EAAW,MAAA,GAAQ,KAAA,GAAS,OAAA,UAAmB,aAAa,UAAA,GAC3D,UAAA,oBAAC,KAAA,EACC,UAAA,oBAAC,MAAA,EAAW,MAAA,GAAgB,cAAA,YACzBP,UAAAA,GAAAA,CACH,GACF,GACF,GAAOf,OAAAe,IAAAf,OAAAsB,MAAAA,KAAAtB,EAAA,CAAA;AAEN,QAAAuB,KAAAihB;AAAc,MAAA1e;AAAA,SAAA9D,EAAA,CAAA,MAAAsB,MAAAtB,SAAAuB,MATjBuC,KAAA,qBAAC,QAAU,QAAS,OAAA,UAAgB,OAAArD,IAClCa,UAAAA;AAAAA,IAAAA;AAAAA,IAQCC;AAAAA,EAAAA,EAAAA,CACH,GAAOvB,OAAAsB,IAAAtB,OAAAuB,IAAAvB,OAAA8D,MAAAA,KAAA9D,EAAA,CAAA,GAVP8D;AAUO;ACvBJ,SAASmkC,iBAAiB7jC,OAAmB;AAClD,SAAOA,MAAM8N,cAAc;AAAA,IAAC,GAAG9N;AAAAA,IAAOgG,OAAO;AAAA,IAAI89B,OAAO9jC,MAAM8jC,QAAQ;AAAA,IAAG3hB,SAAS;AAAA,EAAA,CAAM;AAC1F;ACAO,SAAA4hB,sBAAA/jC,OAAA;AAAA,QAAApE,IAAAC,EAAA,EAAA,GACL;AAAA,IAAAgS;AAAAA,IAAA0K;AAAAA,EAAAA,IAA0BvY,OAE1BuS,OAAapI,eAAAA;AAAgB,MAAA9N;AAAAT,IAAA,CAAA,MAAA2c,YAAA3c,EAAA,CAAA,MAAA2W,MAAA9I,MAAA7N,EAAA,CAAA,MAAAiS,SAEIxR,KAAAA,MAAA;AAC/B,UAAA2nC,WAAiBn2B,QAAA,KAAc0E,MAAI9I,MAAJ;AAC/B8O,aAASyrB,WAAW5hC,IAAI4hC,QAAkB,IAAN3qB,OAAO;AAAA,EAAC,GAC7Czd,OAAA2c,UAAA3c,EAAA,CAAA,IAAA2W,MAAA9I,IAAA7N,OAAAiS,OAAAjS,OAAAS,MAAAA,KAAAT,EAAA,CAAA;AAHD,QAAAqoC,eAAqB5nC,IAKrBoN,KAAWgM,MAAAA;AAAO,MAAA9Y;AAAAf,IAAA,CAAA,6BAAAU,IAAA,2BAAA,KAKAK,KAAA;AAAA,IAAAunC,QAAS;AAAA,EAAA,GAAStoC,OAAAe,MAAAA,KAAAf,EAAA,CAAA;AAInB,QAAAsB,KAAA,GAAG,CAAC2Q,KAAK,IACP1Q,MAAC0Q;AAAK,MAAAnO;AAAA9D,WAAAqoC,gBAAAroC,EAAA,CAAA,MAAA6N,MAAA7N,EAAA,CAAA,MAAAoE,MAAAmkC,gBAAAvoC,EAAA,CAAA,MAAAsB,MAAAtB,SAAAuB,MALnBuC,yBAAA,OAAA,EAAY,OAAA/C,IACV,UAAA,oBAAC,UAAM,GACDqD,MAAKmkC,cACL16B,IACG,OAAAvM,IACE,SAAAC,IACC8mC,UAAAA,cACA,UAAAjkC,MAAKmkC,aAAa7hB,UAAS,EAAA,CAEzC,GAAM1mB,OAAAqoC,cAAAroC,OAAA6N,IAAA7N,EAAA,CAAA,IAAAoE,MAAAmkC,cAAAvoC,OAAAsB,IAAAtB,OAAAuB,IAAAvB,QAAA8D,MAAAA,KAAA9D,EAAA,EAAA;AAAA,MAAAgE;AAAAhE,YAAA6N,MAEN7J,KAAA,oBAAC,MAAA,EAAK,OAAA,IAAY,MAAA,GAAU,QAAA,UAC1B,UAAA,oBAAA,SAAA,EAAgB6J,SAAAA,IAAI,UAAA,qCAAA,CAAkC,EAAA,CACxD,GAAO7N,QAAA6N,IAAA7N,QAAAgE,MAAAA,KAAAhE,EAAA,EAAA;AAAA,MAAAkE;AAAA,SAAAlE,EAAA,EAAA,MAAA8D,MAAA9D,UAAAgE,MAfXE,KAAA,oBAAC,QACC,UAAA,qBAAC,MAAA,EAAU,KAAA,GAAS,OAAA,cAClBJ,UAAAA;AAAAA,IAAAA;AAAAA,IAWAE;AAAAA,EAAAA,EAAAA,CAGF,GACF,GAAOhE,QAAA8D,IAAA9D,QAAAgE,IAAAhE,QAAAkE,MAAAA,KAAAlE,EAAA,EAAA,GAjBPkE;AAiBO;ACzBJ,SAAAskC,kBAAApkC,OAAA;AAAA,QAAApE,IAAAC,EAAA,EAAA,GACLg3B,iBAAuBryB,WAAW+gC,oBAAoC,GAAC1O,gBACvE;AAAA,IAAAhG;AAAAA,EAAAA,IAAmBrsB,WAAWyiB,iBAAiB,GAC/CnnB,MAAYC,OAAuB,IAAI,GACvC0N,KAAWgM,SACX;AAAA,IAAA8C;AAAAA,EAAAA,IAAmBvY;AAAK,MAAA3D,IAAAM;AAAAf,IAAA,CAAA,MAAAwB,uBAAAd,IAAA,2BAAA,KAEdD,KAAAA,MAAA;AACRP,QAAGuB,SAAuBgnC,cAAC,OAAc,GAAC7rB,MAAAA;AAAAA,EAAE,GAC3C7b,KAAA,CAAA,GAAEf,OAAAS,IAAAT,OAAAe,OAAAN,KAAAT,EAAA,CAAA,GAAAe,KAAAf,EAAA,CAAA,IAFL6D,UAAUpD,IAEPM,EAAE;AAAC,MAAAO;AAAAtB,WAAA2c,YAEuBrb,KAAAkG,CAAAA,SAAkBmV,SAASnW,IAAIgB,IAAI,CAAC,GAACxH,OAAA2c,UAAA3c,OAAAsB,MAAAA,KAAAtB,EAAA,CAAA;AAAlE,QAAAkqB,WAAiB5oB;AAA8D,MAAAC;AAAAvB,WAAAixB,YAG7E1vB,KAAAuK,CAAAA,UAAA;AACE,QAAI,CAACA,MAAK/G,IAAIjF,SAAU,GAAG,KAAvB,CAA6BmxB;AAAQ,aAChC;AAET,QAAInlB,MAAK/G,IAAIjF,SAAU,GAA8B,KAAjD,CAA4BmxB,SAAQnxB,SAAU,GAAG;AAAC,aAC7C;AAGT,UAAA4oC,gBAAsB58B,MAAK/G,IAAI0mB,MAAO,GAAG,GACzCkd,qBAA2BD,cAAaE,cAAet8B,OAAsB,GAC7Eu8B,gBAAsBH,cAAa1c,MAAO,GAAG2c,qBAAqB,CAAC,EAACr0B,KAAM,GAAG;AAAC,WACvE2c,SAAQ/c,WAAY20B,aAAa;AAAA,EAAC,GAC1C7oC,OAAAixB,UAAAjxB,OAAAuB,MAAAA,KAAAvB,EAAA,CAAA;AAbH,QAAAuP,UAAehO;AAgBf,MAAI,CAAC01B,gBAAc;AAAA,QAAAnzB;AAAA,WAAA9D,SAAAoE,SACVN,MAAAM,MAAK8N,cAAe9N,KAAK,GAACpE,OAAAoE,OAAApE,OAAA8D,OAAAA,MAAA9D,EAAA,CAAA,GAA1B8D;AAAAA,EAA0B;AAClC,MAAAA;AAAA9D,IAAA,CAAA,6BAAAU,IAAA,2BAAA,KAGsBoD,KAAA;AAAA,IAAA2O,UAAW;AAAA,EAAA,GAAIzS,OAAA8D,MAAAA,KAAA9D,EAAA,CAAA;AAAA,MAAAgE;AAAA,SAAAhE,SAAAi3B,kBAAAj3B,EAAA,EAAA,MAAAuP,WAAAvP,EAAA,EAAA,MAAA6N,MAAA7N,UAAAkqB,YAAAlqB,EAAA,EAAA,MAAAoE,MAAA6N,SAApCjO,yBAAC,KAAA,EAAU,MAAA,GAAU,OAAAF,IAAsB5D,KACzC,UAAA,oBAAC,mBAAA,EACK2N,IACQopB,YAAAA,gBACF/M,UACC,WAAA9lB,MAAK6N,OACR1C,QAAAA,QAAAA,CAAM,EAAA,CAElB,GAAMvP,OAAAi3B,gBAAAj3B,QAAAuP,SAAAvP,QAAA6N,IAAA7N,QAAAkqB,UAAAlqB,EAAA,EAAA,IAAAoE,MAAA6N,OAAAjS,QAAAgE,MAAAA,KAAAhE,EAAA,EAAA,GARNgE;AAQM;AA1CH,SAAAsI,QAAAsxB,GAAA;AAAA,SAuB6DA,EAAC99B,SAAU,GAAG;AAAC;AC9B5E,SAASgpC,gBACd18B,SACA66B,WACsC;AACtC,SAAO76B,QAAQ1B,KACZ8d,CAAAA,MACEA,EAAE/b,SAAS,WAAW+b,EAAE1d,SAASm8B,aACjCze,EAAE/b,SAAS,WAAW+b,EAAEye,cAAcA,SAC3C;AACF;AAEO,SAAS8B,mBACd38B,SACA48B,cAC4B;AAC5B,SAAO58B,QAAQ1B,KACZ8d,CAAAA,MAA2BA,EAAE/b,SAAS,cAAc+b,EAAEM,SAAShe,SAASk+B,YAC3E;AACF;ACdO,SAAAC,iBAAA7kC,OAAA;AAAA,QAAApE,IAAAC,EAAA,CAAA;AAAA,MAAAQ;AAAAT,IAAA,CAAA,MAAAwB,uBAAAd,IAAA,2BAAA,KAEWD,KAAA,CAAC,GAAG,GAAG,GAAG,CAAC,GAACT,OAAAS,MAAAA,KAAAT,EAAA,CAAA;AAAA,MAAAe;AAAA,SAAAf,SAAAoE,SAA1BrD,0BAAC,OAAA,EAAa,OAAAN,IACZ,UAAA;AAAA,IAAA,oBAAC,WAAA,EAAS,GAAK2D;IACf,oBAAC,YAAA,KAAeA,OAAK;AAAA,IACrB,oBAAC,cAAA,EAAwB,WAAA,UAAQ,GAAMA,MAAAA;IACvC,oBAAC,cAAA,EAAwB,WAAA,UAAQ,GAAMA,MAAAA,CAAK;AAAA,EAAA,EAAA,CAC9C,GAAQpE,OAAAoE,OAAApE,OAAAe,MAAAA,KAAAf,EAAA,CAAA,GALRe;AAKQ;AAIZ,SAAAmoC,aAAAzoC,IAAA;AAAA,QAAAT,IAAAC,EAAA,CAAA;AAAA,MAAAmE,OAAArD;AAAA,MAAAf,SAAAS,IAAA;AAAsB,UAAA;AAAA,MAAAwmC;AAAAA,MAAA,GAAA3lC;AAAAA,IAAAA,IAAAb;AAAA2D,YAAA9C,KACLP,KAAA+nC,gBAAgB1kC,MAAKgI,SAAU66B,SAAS,GAACjnC,OAAAS,IAAAT,OAAAoE,OAAApE,OAAAe;AAAAA,EAAA;AAAAqD,YAAApE,EAAA,CAAA,GAAAe,KAAAf,EAAA,CAAA;AAAxD,QAAAwM,SAAezL;AAAyC,MAAAO;AAAA,SAAAtB,EAAA,CAAA,MAAAwM,UAAAxM,SAAAoE,SACjD9C,KAAAkL,SAAS,oBAAC,mBAAA,EAAiB,GAAKpI,OAAeoI,OAAAA,CAAM,IAArD,MAAgExM,OAAAwM,QAAAxM,OAAAoE,OAAApE,OAAAsB,MAAAA,KAAAtB,EAAA,CAAA,GAAhEsB;AAAgE;AAGzE,MAAM6nC,OAAqC,CAAA;AAE3C,SAAAC,UAAAhlC,OAAA;AAAA,QAAApE,IAAAC,EAAA,EAAA,GACEopC,iBAAuBN,mBAAmB3kC,MAAKgI,SAAU,YAAY,GACrEk9B,UAAgBzvB,MAAAA,GAEhBzN,UAAgBi9B,gBAAcvgB,SAAkB1c,WAAhC+8B,MAChBI,aAAmBT,gBAAgB18B,SAAS,MAAM,GAClDo9B,cAAoBV,gBAAgB18B,SAAS,OAAO;AAEjB,MAAA3L;AAAAyO,OAAA;AAEjC,QAAI,CAACs6B,aAAW;AACd/oC,WAAOyL;AAAP,YAAAgD;AAAAA,IAAgB;AAElB,QAAIs6B,YAAW/8B,SAAU,SAAO;AAC9BhM,WAAO+oC;AAAP,YAAAt6B;AAAAA,IAAkB;AAKb,UAAAnO,MAAAyoC,aAAW19B,OAETxK,MAAAkoC,aAAW19B,MAAkBlB;AAAA,QAAArJ;AAAAvB,aAAAsB,OADtBC,MAAA;AAAA,MAAA,GACPD;AAAAA,MAA6BmoC,aAbf;AAAA,IAAA,GAelBzpC,OAAAsB,KAAAtB,OAAAuB,OAAAA,MAAAvB,EAAA,CAAA;AAAA,QAAA8D;AAAA9D,MAAA,CAAA,MAAAe,OAAAf,SAAAuB,OALIuC,MAAA;AAAA,MAAA,GACF/C;AAAAA,MAAkB6J,YACTrJ;AAAAA,IAAAA,GAIbvB,OAAAe,KAAAf,OAAAuB,KAAAvB,OAAA8D,OAAAA,MAAA9D,EAAA,CAAA;AAAA,QAAAgE;AAAAhE,MAAA,CAAA,MAAA8D,OAAA9D,SAAAwpC,eARIxlC,MAAA;AAAA,MAAA,GACFwlC;AAAAA,MAAW19B,OACPhI;AAAAA,IAAAA,GAOR9D,OAAA8D,KAAA9D,OAAAwpC,aAAAxpC,OAAAgE,OAAAA,MAAAhE,EAAA,CAAA,GATDS,KAAOuD;AAAAA,EASN;AAhBH,QAAA0lC,oBAA0BjpC;AAiBS,MAAAM;AAAAf,WAAAspC,WAK7BvoC,KAAA,oBAAC,MAAA,EAAU,KAAA,GACT,UAAA,oBAAC,MAAA,EAAQ,IAAA,SAAe,QAAA,YAAiB,MAAA,GAAYuoC,SAAAA,SAAS,UAAA,OAAA,CAE9D,EAAA,CACF,GAAOtpC,OAAAspC,SAAAtpC,OAAAe,MAAAA,KAAAf,EAAA,CAAA;AAAA,MAAAsB;AAAAtB,IAAA,EAAA,MAAAwB,uBAAAd,IAAA,2BAAA,KAEPY,KAAA,oBAAC,MAAA,EAAK,OAAA,IAAY,MAAA,GAAG,mDAErB,GAAOtB,QAAAsB,MAAAA,KAAAtB,EAAA,EAAA;AAAA,MAAAuB;AAAAvB,IAAA,EAAA,MAAAupC,cAAAvpC,UAAAoE,SAGJ7C,KAAAgoC,kCACE,KAAA,EAAS,MAAA,QACR,UAAA,oBAAC,qBAAiB,GAAKnlC,OAAemlC,oBAAU,GAClD,GACDvpC,QAAAupC,YAAAvpC,QAAAoE,OAAApE,QAAAuB,MAAAA,KAAAvB,EAAA,EAAA;AAAA,MAAA8D;AAAA9D,IAAA,EAAA,MAAA0pC,qBAAA1pC,UAAAoE,SACAN,KAAA4lC,qBACC,oBAAC,KAAA,EAAU,MAAA,GAAU,OAAA;AAAA,IAAAC,YAAa;AAAA,EAAA,GAChC,8BAAC,mBAAA,EAAiB,GAAKvlC,OAAeslC,QAAAA,kBAAAA,CAAiB,GACzD,GACD1pC,QAAA0pC,mBAAA1pC,QAAAoE,OAAApE,QAAA8D,MAAAA,KAAA9D,EAAA,EAAA;AAAA,MAAAgE;AAAAhE,IAAA,EAAA,MAAAuB,MAAAvB,UAAA8D,MAVHE,KAAA,qBAAC,MAAA,EAAW,OAAA,UACTzC,UAAAA;AAAAA,IAAAA;AAAAA,IAKAuC;AAAAA,EAAAA,EAAAA,CAKH,GAAO9D,QAAAuB,IAAAvB,QAAA8D,IAAA9D,QAAAgE,MAAAA,KAAAhE,EAAA,EAAA;AAAA,MAAAkE;AAAA,SAAAlE,EAAA,EAAA,MAAAe,MAAAf,UAAAgE,MAvBXE,KAAA,oBAAC,SAAa,OAAA,GACZ,UAAA,qBAAC,OAAA,EAAa,OAAA,GACZnD,UAAAA;AAAAA,IAAAA;AAAAA,IAMAO;AAAAA,IAIA0C;AAAAA,EAAAA,EAAAA,CAYF,GACF,GAAQhE,QAAAe,IAAAf,QAAAgE,IAAAhE,QAAAkE,MAAAA,KAAAlE,EAAA,EAAA,GAzBRkE;AAyBQ;AAIZ,SAAA0lC,WAAAxlC,OAAA;AAAA,QAAApE,IAAAC,EAAA,CAAA;AAAA,MAAAQ;AAAA,MAAAT,EAAA,CAAA,MAAAoE,MAAAgI,SAAA;AAEE,UAAAA,UADuB28B,mBAAmB3kC,MAAKgI,SAAU,YAAY,GACvC0c,SAAkB1c,WAAhC+8B;AACS1oC,SAAAqoC,gBAAgB18B,SAAS,QAAQ,GAACpM,EAAA,CAAA,IAAAoE,MAAAgI,SAAApM,OAAAS;AAAAA,EAAA;AAAAA,SAAAT,EAAA,CAAA;AAA3D,QAAA6pC,mBAAyBppC;AAAkC,MAAAM;AAAAf,IAAA,CAAA,MAAAoE,SAAApE,SAAA6pC,oBAEjD9oC,KAAA8oC,oBAAoB,oBAAC,mBAAA,EAAiB,GAAKzlC,OAAeylC,QAAAA,kBAAgB,GAAI7pC,OAAAoE,OAAApE,OAAA6pC,kBAAA7pC,OAAAe,MAAAA,KAAAf,EAAA,CAAA;AAAA,MAAAsB;AAAA,SAAAtB,SAAAe,MAAjFO,KAAA,oBAAA,UAAA,EAAGP,cAA8E,GAAIf,OAAAe,IAAAf,OAAAsB,MAAAA,KAAAtB,EAAA,CAAA,GAArFsB;AAAqF;AC5EvF,SAAAwoC,uBAAA1lC,OAAA;AAAA,QAAApE,IAAAC,EAAA,CAAA,GACL;AAAA,IAAAk2B;AAAAA,EAAAA,IAAsBvxB,WAAW+gC,oBAA0B,KAArC,CAAA;AAEtB,MACE,CAACxP,eAAD,EACE3gB,mBAAmB2gB,WAAsD,KAAtC4T,2BAA2B5T,WAAW;AAAE,WAEtE;AACR,MAAA11B;AAAA,SAAAT,EAAA,CAAA,MAAAm2B,eAAAn2B,SAAAoE,SAGC3D,yBAAC,oBAAA,EAAkB,GAAK2D,OAAoB+xB,aACzC/xB,UAAAA,MAAKC,SAAAA,CACR,GAAqBrE,OAAAm2B,aAAAn2B,OAAAoE,OAAApE,OAAAS,MAAAA,KAAAT,EAAA,CAAA,GAFrBS;AAEqB;AAIzB,SAAAupC,mBAAAvpC,IAAA;AAAA,QAAAT,IAAAC,EAAA,CAAA,GAA4B;AAAA,IAAAk2B;AAAAA,IAAA,GAAA/xB;AAAAA,EAAAA,IAAA3D,IAI1B,CAAAib,MAAAiT,OAAA,IAAwBruB,SAAS,CAAC,CAAC8D,MAAK6N,OAAcnI,MAAA;AAAC,MAAA/I;AAAAf,IAAA,CAAA,6BAAAU,IAAA,2BAAA,KAC1BK,KAAAA,MAAM4tB,QAAQ,EAAI,GAAC3uB,OAAAe,MAAAA,KAAAf,EAAA,CAAA;AAAhD,QAAAiqC,WAAiBlpC;AAAoC,MAAAO;AAAAtB,IAAA,CAAA,6BAAAU,IAAA,2BAAA,KACtBY,KAAAA,MAAMqtB,QAAQ,EAAK,GAAC3uB,OAAAsB,MAAAA,KAAAtB,EAAA,CAAA;AAAnD,QAAAkqC,aAAmB5oC;AAAqC,SAEjD8C,MAAK8N,cAAe;AAAA,IAAA,GACtB9N;AAAAA,IAAK+lC,aACK;AAAA,IAAIF;AAAAA,IAAAC;AAAAA,IAAAE,WAGN,CAAC1uB;AAAAA,IAAIwsB,OACT;AAAA,IAAC99B,OACDoL,mBAAmB2gB,WAAgD,IAAnE,mBAAA;AAAA,EAAA,CACR;AAAC;ACvBG,SAAAkU,uBAAAjmC,OAAA;AAAA,QAAApE,IAAAC,EAAA,CAAA,GACL;AAAA,IAAAk2B;AAAAA,EAAAA,IAAsBvxB,WAAW+gC,oBAA0B,KAArC,CAAA;AAEtB,MAAI,CAACxP;AAAW,WACP;AAGT,MAAI3gB,mBAAmB2gB,WAAW,GAAC;AAAA,QAAA11B;AAAA,WAAAT,EAAA,CAAA,MAAAm2B,eAAAn2B,SAAAoE,SAC1B3D,KAAA,oBAAC,mBAAA,EAAiB,GAAK2D,OAAoB+xB,YAAAA,CAAW,GAAIn2B,OAAAm2B,aAAAn2B,OAAAoE,OAAApE,OAAAS,MAAAA,KAAAT,EAAA,CAAA,GAA1DS;AAAAA,EAA0D;AAGnE,MAAIspC,2BAA2B5T,WAAW,GAAC;AAAA,QAAA11B;AAAA,WAAAT,EAAA,CAAA,MAAAm2B,eAAAn2B,SAAAoE,SAClC3D,KAAA,oBAAC,kBAAA,EAAgB,GAAK2D,OAAoB+xB,YAAAA,CAAW,GAAIn2B,OAAAm2B,aAAAn2B,OAAAoE,OAAApE,OAAAS,MAAAA,KAAAT,EAAA,CAAA,GAAzDS;AAAAA,EAAyD;AACjE,SACM;AAAI;AAGb,SAAA6pC,uBAAAr4B,OAAAs4B,eAAA5tB,UAAA;AAAA,QAAA3c,IAAAC,EAAA,CAAA;AAAA,MAAAQ,IAAAM;AAAAf,IAAA,CAAA,MAAAuqC,iBAAAvqC,SAAA2c,YAAA3c,EAAA,CAAA,MAAAiS,SAKYxR,KAAAA,MAAA;AACR,UAAA+pC,cAAoBv4B,OAAK1C,OAASuY,CAAAA,MAChCyiB,cAAa7/B,KACXsF,CAAAA,MAAOA,EAAClF,UAAWgd,EAAC/Y,UAAWxF,sBAAsBue,EAAC2iB,eAAgB3iB,EAACtd,KACzE,CACF,GACAkgC,cAAoBz4B,OAAKnI,UAAL,GACpB6gC,cAAoBH,aAAW1gC,UAAX;AACpB,KAAK,CAAC6gC,eAADD,eAAgCC,eAAeJ,cAAazgC,WAI/D6S,SAASa,WAAUpY,KAAM,CAACqY,MAAAA,CAAO,CAAC,CAAC;AAAA,EACpC,GACA1c,MAACwpC,eAAet4B,OAAO0K,QAAQ,GAAC3c,OAAAuqC,eAAAvqC,OAAA2c,UAAA3c,OAAAiS,OAAAjS,OAAAS,IAAAT,OAAAe,OAAAN,KAAAT,EAAA,CAAA,GAAAe,KAAAf,EAAA,CAAA,IAdnC6D,UAAUpD,IAcPM,EAAgC;AAAC;AAGtC,SAAA6pC,kBAAAnqC,IAAA;AAAA,QAAAT,IAAAC,EAAA,EAAA;AAAA,MAAAk2B,aAAA/xB;AAAApE,WAAAS,MAA2B;AAAA,IAAA01B;AAAAA,IAAA,GAAA/xB;AAAAA,EAAAA,IAAA3D,IAGkCT,OAAAS,IAAAT,OAAAm2B,aAAAn2B,OAAAoE,UAAA+xB,cAAAn2B,EAAA,CAAA,GAAAoE,QAAApE,EAAA,CAAA;AAC3D,QAAA;AAAA,IAAAiS;AAAAA,IAAA0K;AAAAA,EAAAA,IAA0BvY;AAAK,MAAArD;AAAAf,IAAA,CAAA,MAAAm2B,YAAAtqB,UAGvB9K,KAAAo1B,YAAWtqB,OAAO0D,OAAQjD,OAAwC,GAACtM,EAAA,CAAA,IAAAm2B,YAAAtqB,QAAA7L,OAAAe,MAAAA,KAAAf,EAAA,CAAA;AAD3E,QAAA6L,SACQ9K;AAKRupC,yBAAuBr4B,OAA2BpG,QAAQ8Q,QAAQ;AAAC,MAAArb;AAAAtB,IAAA,CAAA,MAAA6L,UAAA7L,EAAA,CAAA,MAAA2c,YAAA3c,EAAA,CAAA,MAAAiS,OAAAnI,UAGjExI,KAAAA,CAAAupC,SAAAtV,kBAAA;AACE,QAAIsV;AACF,UAAI54B,OAAKnI;AACP6S,iBAASa,WAAUpY,KAAMqY,MAAM,CAAC;AAAA,UAAAxY,MAAOswB;AAAAA,QAAAA,CAAc,CAAC,CAAC,CAAC;AAAA,WAAC;AAGzD,cAAA4J,QAActzB,OAAM0D,OACVS,CAAAA,MAAOA,EAAClF,SAAUyqB,aAAa,EAAClmB,IACnC+B,QAML;AACFuL,iBAASa,WAAUpY,KAAM,CAACuiC,aAAa,CAAA,CAAE,GAAGE,OAAO1I,OAAO,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAAA,MAAC;AAAA,SAC5E;AAED,YAAA2L,aAAoC;AAAA,QAAA7lC,MAC5BswB;AAAAA,QAAaxmB,OACZ;AAAA,QAA4B07B,cACrBlV;AAAAA,MAAAA;AAEhB5Y,eAASa,WAAUpY,KAAM,CAACuiC,aAAa,CAAA,CAAE,GAAGE,OAAO,CAACiD,UAAU,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAAA,IAAC;AAAA,EACnF,GACF9qC,OAAA6L,QAAA7L,OAAA2c,UAAA3c,EAAA,CAAA,IAAAiS,OAAAnI,QAAA9J,OAAAsB,MAAAA,KAAAtB,EAAA,CAAA;AA1BH,QAAA+qC,iBAAuBzpC;AA4BtB,MAAAC;AAAA,MAAAvB,EAAA,CAAA,MAAA6L,UAAA7L,UAAA+qC,kBAAA/qC,EAAA,EAAA,MAAAiS,OAAA;AAAA,QAAAnO;AAAA9D,MAAA,EAAA,MAAA+qC,kBAAA/qC,UAAAiS,SAIenO,MAAAonB,CAAAA,YAER,oBAAC,MAAA,EAA4B,OAAA,UAAc,KAAA,GACzC,UAAA,oBAAC,YAAA,EACQ,OAAApf,QAAKhB,MACL,OAAAgB,QAAKtB,KAAKJ,SAAU0B,QAAKhB,MAEpB,YAAAmH,OACF84B,UAAAA,eAAAA,CAAc,EAAA,GANjBj/B,QAAKhB,IAQhB,GAEH9K,QAAA+qC,gBAAA/qC,QAAAiS,OAAAjS,QAAA8D,OAAAA,MAAA9D,EAAA,EAAA,GAZAuB,KAAAsK,OAAMwD,IAAKvL,GAYX,GAAC9D,OAAA6L,QAAA7L,QAAA+qC,gBAAA/qC,QAAAiS,OAAAjS,QAAAuB;AAAAA,EAAA;AAAAA,SAAAvB,EAAA,EAAA;AAAA,MAAA8D;AAAA,SAAA9D,UAAAuB,MAbJuC,KAAA,oBAAC,OAAA,EAAa,OAAA,GACXvC,UAAAA,GAAAA,CAaH,GAAQvB,QAAAuB,IAAAvB,QAAA8D,MAAAA,KAAA9D,EAAA,EAAA,GAdR8D;AAcQ;AA3DZ,SAAAsN,SAAA+Z,SAAA;AAAA,SAwBctb,MAAuB;AAAA,IAAA5K,MACf6G,QAAKhB;AAAAA,IAAKiE,OACT;AAAA,IAA4B07B,cACrB3+B,QAAKhB;AAAAA,EAAAA,CACpB;AAAC;AA5BhB,SAAAwB,QAAAR,OAAA;AAAA,SAO+CL,kBAAkBK,MAAKtB,IAAK;AAAC;AAwD5E,SAAAwgC,iBAAAvqC,IAAA;AAAA,QAAAT,IAAAC,EAAA,EAAA;AAAA,MAAAk2B,aAAA/xB;AAAApE,WAAAS,MAA0B;AAAA,IAAA01B;AAAAA,IAAA,GAAA/xB;AAAAA,EAAAA,IAAA3D,IAGkCT,OAAAS,IAAAT,OAAAm2B,aAAAn2B,OAAAoE,UAAA+xB,cAAAn2B,EAAA,CAAA,GAAAoE,QAAApE,EAAA,CAAA;AAC1D,QAAA;AAAA,IAAAiS;AAAAA,IAAA0K;AAAAA,EAAAA,IAA0BvY;AAAK,MAAArD;AAAAf,IAAA,CAAA,MAAAm2B,YAAA1rB,MAGvB1J,KAAAo1B,YAAW1rB,GAAG8E,OAAQ0L,MAAyC,GAACjb,EAAA,CAAA,IAAAm2B,YAAA1rB,IAAAzK,OAAAe,MAAAA,KAAAf,EAAA,CAAA;AADxE,QAAAirC,UACQlqC;AAKRupC,yBAAuBr4B,OAA2Bg5B,SAAStuB,QAAQ;AAAC,MAAArb;AAAAtB,IAAA,CAAA,MAAAirC,WAAAjrC,EAAA,CAAA,MAAA2c,YAAA3c,EAAA,CAAA,MAAAiS,OAAAnI,UAGlExI,KAAAA,CAAAupC,SAAAtV,kBAAA;AACE,QAAIsV;AACF,UAAI54B,OAAKnI;AACP6S,iBAASa,WAAUpY,KAAMqY,MAAM,CAAC;AAAA,UAAAxY,MAAOswB;AAAAA,QAAAA,CAAc,CAAC,CAAC,CAAC;AAAA,WAAC;AAGzD,cAAA4J,QAAc8L,QAAO17B,OACXS,CAAAA,MAAOA,EAAClF,SAAUyqB,aAAa,EAAClmB,IACnCsM,MAML;AACFgB,iBAASa,WAAUpY,KAAM,CAACuiC,aAAa,CAAA,CAAE,GAAGE,OAAO1I,OAAO,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAAA,MAAC;AAAA,SAC5E;AAED,YAAA2L,aAAmC;AAAA,QAAA7lC,MAC3BswB;AAAAA,QAAaxmB,OACZ;AAAA,QAA2BvE,MAC5B+qB;AAAAA,MAAAA;AAER5Y,eAASa,WAAUpY,KAAM,CAACuiC,aAAa,CAAA,CAAE,GAAGE,OAAO,CAACiD,UAAU,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAAA,IAAC;AAAA,EACnF,GACF9qC,OAAAirC,SAAAjrC,OAAA2c,UAAA3c,EAAA,CAAA,IAAAiS,OAAAnI,QAAA9J,OAAAsB,MAAAA,KAAAtB,EAAA,CAAA;AA1BH,QAAA+qC,iBAAuBzpC;AA4BtB,MAAAC;AAAA,MAAAvB,EAAA,CAAA,MAAAirC,WAAAjrC,UAAA+qC,kBAAA/qC,EAAA,EAAA,MAAAiS,OAAA;AAAA,QAAAnO;AAAA9D,MAAA,EAAA,MAAA+qC,kBAAA/qC,UAAAiS,SAGgBnO,MAAAonC,CAAAA,eAET,oBAAC,MAAA,EACC,UAAA,oBAAC,cACQ,OAAAz2B,WAAQ3J,MACR,OAAAH,OAAO8J,YAAU,OAAoD,IAArE,SAAsCA,WAAQrK,SAAUqK,WAAQ3J,MAE3D,YAAAmH,OACF84B,UAAAA,eAAAA,CAAc,EAAA,GANjBt2B,WAAQ3J,IAQnB,GAEH9K,QAAA+qC,gBAAA/qC,QAAAiS,OAAAjS,QAAA8D,OAAAA,MAAA9D,EAAA,EAAA,GAZAuB,KAAA0pC,QAAO57B,IAAKvL,GAYZ,GAAC9D,OAAAirC,SAAAjrC,QAAA+qC,gBAAA/qC,QAAAiS,OAAAjS,QAAAuB;AAAAA,EAAA;AAAAA,SAAAvB,EAAA,EAAA;AAAA,MAAA8D;AAAA,SAAA9D,UAAAuB,MAbJuC,KAAA,oBAAC,OAAA,EAAa,OAAA,GACXvC,UAAAA,GAAAA,CAaH,GAAQvB,QAAAuB,IAAAvB,QAAA8D,MAAAA,KAAA9D,EAAA,EAAA,GAdR8D;AAcQ;AA1DZ,SAAA6X,OAAA7P,OAAA;AAAA,SAwBc+D,MAAsB;AAAA,IAAA5K,MACd6G,MAAKhB;AAAAA,IAAKiE,OACT;AAAA,IAA2BvE,MAC5BsB,MAAKhB;AAAAA,EAAAA,CACZ;AAAC;AA5BhB,SAAAmQ,OAAAxG,UAAA;AAAA,SAO8ChJ,kBAAkBgJ,QAAQ;AAAC;AAuDzE,SAAA02B,WAAA1qC,IAAA;AAAA,QAAAT,IAAAC,EAAA,EAAA,GAAoB;AAAA,IAAAmK;AAAAA,IAAAisB;AAAAA,IAAApkB;AAAAA,IAAA0K;AAAAA,EAAAA,IAAAlc;AAUnB,MAAAM;AAAAf,IAAA,CAAA,MAAAq2B,cAAAr2B,SAAAiS,SACiBlR,MAACs1B,YAAUvsB,UAAX,CAAwB,CAACusB,YAAU3rB,KAAOod,CAAAA,MAAOA,EAAC7iB,SAAUgN,KAAK,GAACjS,OAAAq2B,YAAAr2B,OAAAiS,OAAAjS,OAAAe,MAAAA,KAAAf,EAAA,CAAA;AAAlF,QAAA6qC,UAAgB9pC;AAAkE,MAAAO;AAAAtB,IAAA,CAAA,MAAA6qC,WAAA7qC,SAAA2c,YAAA3c,EAAA,CAAA,MAAAiS,SACjD3Q,KAAAA,MAAMqb,SAASkuB,SAAS54B,KAAK,GAACjS,OAAA6qC,SAAA7qC,OAAA2c,UAAA3c,OAAAiS,OAAAjS,OAAAsB,MAAAA,KAAAtB,EAAA,CAAA;AAA/D,QAAAqoC,eAAqB/mC;AAAuE,MAAAC;AAAAvB,IAAA,CAAA,MAAA6qC,WAAA7qC,SAAAqoC,gBAIxF9mC,KAAA,oBAAC,UAAA,EAAkBspC,SAAmBxC,UAAAA,aAAAA,CAAY,GAAIroC,OAAA6qC,SAAA7qC,OAAAqoC,cAAAroC,OAAAuB,MAAAA,KAAAvB,EAAA,CAAA;AAAA,MAAA8D;AAAA9D,IAAA,EAAA,6BAAAU,IAAA,2BAAA,KAEvCoD,KAAA;AAAA,IAAAsnC,QAAS;AAAA,EAAA,GAAUprC,QAAA8D,MAAAA,KAAA9D,EAAA,EAAA;AAAA,MAAAgE;AAAAhE,YAAAoK,SAAhCpG,yBAAC,MAAA,EAAY,OAAAF,IAA2B,MAAA,oBAExC,GAAO9D,QAAAoK,OAAApK,QAAAgE,MAAAA,KAAAhE,EAAA,EAAA;AAAA,MAAAkE;AAAAlE,IAAA,EAAA,MAAAqoC,gBAAAroC,UAAAgE,MAHTE,yBAAC,MAAA,EAAgB,cAAYmkC,SAAAA,cAC3BrkC,UAAAA,GAAAA,CAGF,GAAOhE,QAAAqoC,cAAAroC,QAAAgE,IAAAhE,QAAAkE,MAAAA,KAAAlE,EAAA,EAAA;AAAA,MAAAiP;AAAA,SAAAjP,EAAA,EAAA,MAAAuB,MAAAvB,UAAAkE,MANT+K,0BAAC,MAAA,EAAU,KAAA,GAAS,OAAA,cAClB1N,UAAAA;AAAAA,IAAAA;AAAAA,IACA2C;AAAAA,EAAAA,EAAAA,CAKF,GAAOlE,QAAAuB,IAAAvB,QAAAkE,IAAAlE,QAAAiP,MAAAA,KAAAjP,EAAA,EAAA,GAPPiP;AAOO;ACvMX,MAAMo8B,UAAU3rB,OAAOgM,GAAG,EAAC9L,WAAA;AAAA,EAAAC,aAAA;AAAA,EAAAC,aAAA;AAAA,CAAA;AAYpB,SAAAwrB,YAAAlnC,OAAA;AAAA,QAAApE,IAAAC,EAAA,CAAA;AAGLsrC,sBAAoBnnC,KAAK;AAAC,MAAA3D;AAAAT,WAAAoE,SACT3D,KAAA2D,MAAK8N,cAAe9N,KAAK,GAACpE,OAAAoE,OAAApE,OAAAS,MAAAA,KAAAT,EAAA,CAAA;AAAA,MAAAe;AAAA,SAAAf,SAAAS,MAApCM,KAAA,oBAAC,SAAA,EAASN,cAA2B,GAAUT,OAAAS,IAAAT,OAAAe,MAAAA,KAAAf,EAAA,CAAA,GAA/Ce;AAA+C;AAGxD,SAAAwqC,oBAAAnnC,OAAA;AAAA,QAAApE,IAAAC,EAAA,CAAA;AAAA,MAAAQ;AAAAT,WAAAoE,SACY3D,KAAAA,MAAA;AACR,QAAA+qC,WAAe;AAEf,UAAAC,OAAcrnC,MAAK6N,SAAN,CAAA,GAAoC5C,IAAMoK,CAAAA,UACjDA,MAAK1K,UAAW,UACX0K,SAGT+xB,WAAWA,IACJ37B,MAAuB;AAAA,MAAA5K,MACtB88B,UAAU,EAAE;AAAA,MAAChzB,OACZ;AAAA,MAAOm5B,OACP;AAAA,MAACH,UACE,CAAA;AAAA,MAAEnnB,OACL;AAAA,MAAQvc,UACL,CAACoV,KAAK;AAAA,IAAA,CACjB,EACF;AAEG+xB,gBACFpnC,MAAKuY,SAAUnW,IAAIilC,GAAG,CAAC;AAAA,EACxB,GAGFzrC,OAAAoE,OAAApE,OAAAS,MAAAA,KAAAT,EAAA,CAAA;AAAA,MAAAe;AAAAf,IAAA,CAAA,MAAAwB,uBAAAd,IAAA,2BAAA,KAAEK,KAAA,IAAEf,OAAAe,MAAAA,KAAAf,EAAA,CAAA,GAxBL6D,UAAUpD,IAwBPM,EAAE;AAAC;AClDD,SAAS2qC,uBAAuBtnC,OAAwB;AAC7D,SAAOA,MAAM8N,cAAc;AAAA,IACzB,GAAG9N;AAAAA,IACHgG,OAAO;AAAA,EAAA,CACR;AACH;ACFO,SAAAuhC,uBAAAvnC,OAAA;AAAA,QAAApE,IAAAC,EAAA,EAAA,GACL0W,OAAapI,kBAGbq9B,gBAAsBxnC,MAAK6N,OAC3B45B,kBAAwBznC,MAAKgI;AAAQ,MAAA3L;AAAAT,WAAA4rC,iBAE5BnrC,KAAAmrC,iBAAA,CAAA,GAAmB5rC,OAAA4rC,eAAA5rC,OAAAS,MAAAA,KAAAT,EAAA,CAAA;AAAA,MAAAe;AAAA,MAAAf,SAAAS,MAAAT,EAAA,CAAA,MAAA2W,MAAA9I,IAAA;AAAA,QAAAvM;AAAAtB,MAAA,CAAA,MAAA2W,MAAA9I,MAASvM,MAAAwmB,OAAO,CAACA,EAACnY,UAAWmY,EAACnY,WAAYgH,MAAI9I,IAAI7N,EAAA,CAAA,IAAA2W,MAAA9I,IAAA7N,OAAAsB,OAAAA,MAAAtB,EAAA,CAAA,GAAtEe,KAACN,GAAmB8O,OAASjO,GAAyC,GAACtB,OAAAS,IAAAT,EAAA,CAAA,IAAA2W,MAAA9I,IAAA7N,OAAAe;AAAAA,EAAA;AAAAA,SAAAf,EAAA,CAAA;AAD/E,QAAAiS,QACQlR;AAEP,MAAAO;AAAAtB,WAAA6rC,mBAGIvqC,KAAAuqC,mBAAA,CAAA,GAAqB7rC,OAAA6rC,iBAAA7rC,OAAAsB,MAAAA,KAAAtB,EAAA,CAAA;AAAA,MAAAuB;AAAA,MAAAvB,SAAAsB,MAAAtB,EAAA,EAAA,MAAA2W,MAAA9I,IAAA;AAAA,QAAA/J;AAAA9D,MAAA,EAAA,MAAA2W,MAAA9I,MAAS/J,MAAAgoC,CAAAA,QAAA;AAC7B,UAAIhkB,IAACrb,SAAU;AAAO,eACb;AAGT,YAAA0P,UAAc2L,KAACW,MAAaxW;AAAO,aAC5B,CAACA,QAAKtC,UAAWsC,QAAKtC,WAAYgH,MAAI9I;AAAAA,IAAI,GAClD7N,EAAA,EAAA,IAAA2W,MAAA9I,IAAA7N,QAAA8D,OAAAA,MAAA9D,EAAA,EAAA,GAPDuB,KAACD,GAAqBiO,OAASzL,GAO9B,GAAC9D,OAAAsB,IAAAtB,EAAA,EAAA,IAAA2W,MAAA9I,IAAA7N,QAAAuB;AAAAA,EAAA;AAAAA,SAAAvB,EAAA,EAAA;AATN,QAAAoM,UAEI7K;AASH,MAAAuC;AAAA,SAAA9D,EAAA,EAAA,MAAAoM,WAAApM,UAAAoE,SAAApE,EAAA,EAAA,MAAAiS,SACMnO,KAAAM,MAAK8N,cAAe;AAAA,IAAA,GAAI9N;AAAAA,IAAK6N;AAAAA,IAAA7F;AAAAA,EAAAA,CAAiB,GAACpM,QAAAoM,SAAApM,QAAAoE,OAAApE,QAAAiS,OAAAjS,QAAA8D,MAAAA,KAAA9D,EAAA,EAAA,GAA/C8D;AAA+C;ACvBjD,SAAAioC,gCAAA3nC,OAAA;AAAA,QAAApE,IAAAC,EAAA,CAAA,GACLC,MAAYC,OAAuB,IAAI;AAAC,MAAAM,IAAAM;AAAAf,IAAA,CAAA,MAAAwB,uBAAAd,IAAA,2BAAA,KAG9BD,KAAAA,MAAA;AACR,UAAAkB,SAAezB,IAAGuB,SAAiBuqC,QAAC,8BAA8B;AAClE,QAAI,CAACrqC;AAAM;AAGX,UAAAif,QAAc/e,SAAQoqC,cAAe,OAAO,GAC5CC,WAAiB,MAAM/jC,KAAIgkC,OAAAA,CAAS,GAAE7+B,QAAS,KAAK,GAAG;AACvD3L,WAAMkM,KAAMq+B,UAEZtrB,MAAKwrB,YAAa;AAAA,SACbF,QAAQ;AAAA,OAEbvqC,OAAM0qC,QAASzrB,KAAK;AAAA,EAAC,GACpB7f,KAAA,CAACb,GAAG,GAACF,OAAAS,IAAAT,OAAAe,OAAAN,KAAAT,EAAA,CAAA,GAAAe,KAAAf,EAAA,CAAA,IAbR6D,UAAUpD,IAaPM,EAAK;AAAC,MAAAO;AAAAtB,WAAAoE,SAEc9C,KAAA8C,MAAK8N,cAAe9N,KAAK,GAACpE,OAAAoE,OAAApE,OAAAsB,MAAAA,KAAAtB,EAAA,CAAA;AAAA,MAAAuB;AAAA,SAAAvB,SAAAsB,MAA1CC,KAAA,oBAAC,KAAA,EAASrB,KAAMoB,UAAAA,GAAAA,CAA2B,GAAMtB,OAAAsB,IAAAtB,OAAAuB,MAAAA,KAAAvB,EAAA,CAAA,GAAjDuB;AAAiD;ACjBnD,MAAM+qC,wBAAwBC,WAAW;AAAA,EAC9C/hC,MAAM;AAAA,EACNM,MAAM7B;AAAAA,EACNmB,OAAO;AAAA,EACP2S,UAAU;AAAA,EACV5J,MAAMq5B;AAAAA,EACNC,YAAY;AAAA,IACVlxB,OAAOwwB;AAAAA,EAAAA;AAAAA,EAETlgC,QAAQ,CACN6gC,YAAY;AAAA,IACVliC,MAAM;AAAA,IACNM,MAAM;AAAA,IACNV,OAAO;AAAA,EAAA,CACR,GACDsiC,YAAY;AAAA,IACV5hC,MAAM;AAAA,IACNN,MAAM;AAAA,IACNJ,OAAO;AAAA,IACPK,IAAI,CACFkiC,kBAAkB;AAAA,MAChBniC,MAAM;AAAA,MACNoiC,QAAQ,CAAC;AAAA,QAACxiC,OAAO;AAAA,QAAU6H,OAAO;AAAA,MAAA,CAAS;AAAA,MAC3C46B,OAAO,CAAA;AAAA,MACPC,OAAO;AAAA,QACLC,YAAY,CAAA;AAAA,QACZvQ,aAAa,CAAA;AAAA,MAAA;AAAA,IACf,CACD,CAAC;AAAA,EAAA,CAEL,CAAC;AAAA,EAEJwQ,SAAS;AAAA,IACP3X,QAAQ;AAAA,MACNjrB,OAAO;AAAA,MACPwI,SAAS;AAAA,IAAA;AAAA,IAEXq6B,QAAQ;AAAA,MAAC7iC;AAAAA,MAAOwI;AAAAA,IAAAA,GAAU;AAKxB,YAAMs6B,QAJOt6B,SACTuB,QAASsF,WAAeA,OAAOpV,QAAQ,EACxC8P,QAAS8uB,CAAAA,UAAeA,OAAO3R,MAAM7F,MAAM,GAAG,CAAC,EAC/Clc,OAAOyW,OAAO,GACGlc,UAAU;AAC9B,aAAO;AAAA,QACLM;AAAAA,QACA+iC,UAAU,UAAUD,KAAK;AAAA,QACzBE,OAAOC;AAAAA,MAAAA;AAAAA,IAEX;AAAA,EAAA;AAEJ,CAAC,GCZYC,iBAAiBf,WAAW;AAAA,EACvC/hC,MAAM;AAAA,EACNM,MAAM9B;AAAAA,EACNoB,OAAO;AAAA,EACP+I,MAAMo6B;AAAAA,EAEN1hC,QAAQ,CACN6gC,YAAY;AAAA,IACVliC,MAAM;AAAA,IACNM,MAAM;AAAA,IACNV,OAAO;AAAA,IACPqiC,YAAY;AAAA,MACVlxB,OAAOitB;AAAAA,IAAAA;AAAAA,IAET3jB,YAAa2oB,CAAAA,SAAS;AACpB,YAAM1P,mBAAmBX,oBAAAA;AACzB,aAAOqQ,KAAKC,OAAO,CAACx7B,OAAOW,YAAY;AACrC,YAAI,CAACX;AACH,iBAAO;AAET,YAAI;AACF,gBAAMy7B,QAAQ96B,QAAQ/Q,UAAUiN;AAChC,cAAI,CAAC4+B;AACH,mBAAO;AAET,gBAAMC,gBAAgBD,MAAMpgC,QAAQ,IAAIsgC,OAAO,IAAIrlC,sBAAsB,EAAE,GAAG,EAAE,GAC1EoV,SAAS/K,QAAQ+K,OAAOzX,IAAIynC,aAAa;AAC/C,cAAI,CAAChwB;AACH,mBAAO,gGAAgGgwB,aAAa;AAGtH,gBAAM;AAAA,YAAC/5B;AAAAA,UAAAA,IAAakqB,iBAAiBngB,MAA0B;AAE/D,iBADiB/J,UAAUlJ,KAAM+jB,CAAAA,MAAMA,EAAE1pB,QAAQkN,KAAK,IAI/C,KAFE,oBAAoBA,KAAK;AAAA,QAGpC,SAASwF,GAAG;AACVyW,iBAAAA,QAAQpL,MAAM,qCAAqCrL,CAAC,GAC7C;AAAA,QACT;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EAAA,CACD,CAAC;AAAA,EAEJu1B,SAAS;AAAA,IACP3X,QAAQ;AAAA,MACN7tB,MAAM;AAAA,IAAA;AAAA,IAERylC,QAAQ;AAAA,MAACzlC;AAAAA,IAAAA,GAAO;AACd,aAAO;AAAA,QACL4C,OAAO5C;AAAAA,QACPA;AAAAA,QACA2L,MAAM06B;AAAAA,MAAAA;AAAAA,IAEV;AAAA,EAAA;AAAA,EAEFpB,YAAY;AAAA,IACVO,SAAShF;AAAAA,EAAAA;AAAAA,EAEXhhC,SAAS;AAAA,IACP8mC,OAAO;AAAA,MACLtjC,MAAM;AAAA,IAAA;AAAA,EACR;AAEJ,CAAC,GAEY6R,YAAYkwB,WAAW;AAAA,EAClC/hC,MAAM;AAAA,EACNM,MAAMhC;AAAAA,EACNsB,OAAO;AAAA,EACP+I,MAAM46B;AAAAA,EACNliC,QAAQ,CACN6gC,YAAY;AAAA,IACVliC,MAAM;AAAA,IACNM,MAAM;AAAA,IACNV,OAAO;AAAA,IACPq/B,aAAa;AAAA,IACbh4B,aAAa;AAAA,IACboT,YAAa2oB,CAAAA,SAASA,KAAKQ,SAAAA;AAAAA,EAAS,CACrC,GACDtB,YAAY;AAAA,IACVliC,MAAM;AAAA,IACNyjC,MAAM;AAAA,IACNnjC,MAAM;AAAA,IACNV,OAAO;AAAA,IACPqH,aAAa;AAAA,EAAA,CACd,CAAC;AAAA,EAEJu7B,SAAS;AAAA,IACP3X,QAAQ;AAAA,MACNjrB,OAAO;AAAA,IAAA;AAAA,EACT;AAAA,EAEFpD,SAAS;AAAA,IACP8mC,OAAO;AAAA,MACLtjC,MAAM;AAAA,MACNrI,OAAO;AAAA,IAAA;AAAA,EACT;AAEJ,CAAC,GAEY+rC,gBAAgB3B,WAAW;AAAA,EACtC/hC,MAAM;AAAA,EACNM,MAAM/B;AAAAA,EACNqB,OAAOkiC,sBAAsBliC;AAAAA,EAC7B+I,MAAMm5B,sBAAsBn5B;AAAAA,EAC5BtH,QAAQ,CACN6gC,YAAY;AAAA,IACVliC,MAAM;AAAA,IACNM,MAAM;AAAA,IACNlF,IAAI,CAAC;AAAA,MAAC4E,MAAM8hC,sBAAsBxhC;AAAAA,IAAAA,CAAK;AAAA,IACvCV,OAAO;AAAA,IACPqH,aAAa;AAAA,IACboT,YAAa2oB,CAAAA,SAASA,KAAKQ,SAAAA;AAAAA,IAC3BvB,YAAY;AAAA,MACVlxB,OAAO,SAAanX,OAAO;AACzB,eAAO,oBAAC,OAAI,OAAO;AAAA,UAAC+pC,UAAU;AAAA,QAAA,GAAO/pC,UAAAA,MAAM8N,cAAc9N,KAAK,EAAA,CAAE;AAAA,MAClE;AAAA,IAAA;AAAA,EACF,CACD,CAAC;AAAA,EAEJ4oC,SAAS;AAAA,IACP3X,QAAQ;AAAA,MACNn1B,KAAK;AAAA,MACLkK,OAAO;AAAA,MACPwI,SAAS;AAAA,IAAA;AAAA,IAEXq6B,QAAQ5X,QAAQ;AACd,aAAOA,OAAOn1B,MACTosC,uBAAuBU,SAASC,UAAU5X,MAAM,KAAKA,SACtD;AAAA,QAACjrB,OAAO;AAAA,QAAyBgjC,OAAOd,sBAAsBn5B;AAAAA,MAAAA;AAAAA,IACpE;AAAA,EAAA;AAAA,EAEFnM,SAAS;AAAA,IACP8mC,OAAO;AAAA,MACLtjC,MAAM;AAAA,MACNrI,OAAO;AAAA,IAAA;AAAA,EACT;AAEJ,CAAC,GAEYwY,SAAS4xB,WAAW;AAAA,EAC/B/hC,MAAM;AAAA,EACNM,MAAMjC;AAAAA,EACNuB,OAAO;AAAA,EACPK,IAAI;AAAA,IACFkiC,kBAAkB;AAAA,MAChBniC,MAAM;AAAA,MACNoiC,QAAQ,CAAC;AAAA,QAACxiC,OAAO;AAAA,QAAU6H,OAAO;AAAA,MAAA,CAAS;AAAA,MAC3C46B,OAAO,CAAA;AAAA,MACPC,OAAO;AAAA,QACLC,YAAY,CAAA;AAAA,QACZvQ,aAAa,CAAA;AAAA,MAAA;AAAA,MAEf/xB,IAAI,CACFkiC,kBAAkB;AAAA,QAChBniC,MAAM8iC,eAAexiC;AAAAA,MAAAA,CACtB,GACD6hC,kBAAkB;AAAA,QAChBniC,MAAM0jC,cAAcpjC;AAAAA,MAAAA,CACrB,GACD6hC,kBAAkB;AAAA,QAChBniC,MAAM6R,UAAUvR;AAAAA,MAAAA,CACjB,CAAC;AAAA,IAAA,CAEL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAWL,CAAC,GAEYsjC,kBAAkB7B,WAAW;AAAA,EACxC/hC,MAAM;AAAA,EACNM,MAAMvB;AAAAA,EACNa,OAAO;AAAA,EACPyB,QAAQ,CACN6gC,YAAY;AAAA,IACVliC,MAAM;AAAA,IACNM,MAAM;AAAA,IACNV,OAAO;AAAA,EAAA,CACR,CAAC;AAEN,CAAC,GAEYikC,iBAAiB9B,WAAW;AAAA,EACvC/hC,MAAM;AAAA,EACNM,MAAMtB;AAAAA,EACNY,OAAO;AAAA,EACPyB,QAAQ,CACN6gC,YAAY;AAAA,IACVliC,MAAM;AAAA,IACNM,MAAM;AAAA,IACNV,OAAO;AAAA,EAAA,CACR,CAAC;AAEN,CAAC,GAEYD,cAAcoiC,WAAW;AAAA,EACpC/hC,MAAM;AAAA,EACNM,MAAMlC;AAAAA,EACNwB,OAAO;AAAA,EACPwe,WAAW,CACT;AAAA,IAAC9d,MAAM;AAAA,IAAcV,OAAO;AAAA,IAAcpD,SAAS;AAAA,MAACmjC,aAAa;AAAA,MAAMC,WAAW;AAAA,IAAA;AAAA,EAAI,CAAE;AAAA,EAE1F4C,SAAS;AAAA,IACP3X,QAAQ;AAAA,MACNliB,MAAM;AAAA,MACN/I,OAAO;AAAA,MACPuF,QAAQ;AAAA,IAAA;AAAA,IAEVs9B,SAASA,CAAC;AAAA,MAAC95B;AAAAA,MAAM/I;AAAAA,MAAOuF;AAAAA,IAAAA,OACf;AAAA,MACLvF;AAAAA;AAAAA,MAEA+I,MAAMA,OAAO+rB,MAAM/rB,IAAI,IAAkB6V;AAAAA,MACzCrZ;AAAAA,IAAAA;AAAAA,EACF;AAAA,EAGJ88B,YAAY;AAAA,IACVlxB,OAAO0tB;AAAAA,IACP+D,SAAU5oC,CAAAA,UAAe;AACvB,YAAMkqC,OAAOlqC,MAAM+O;AACnB,kCACG,MAAA,EAAK,KAAK,GAAG,OAAM,UAAS,SAAS,GACnCm7B,UAAAA;AAAAA,QAAAA,QACC,oBAAC,KAAA,EAAI,MAAK,QACR,UAAA,oBAAC,MAAA,EAAK,MAAM,GACV,UAAA,oBAAC,MAAA,CAAA,CAAI,EAAA,CACP,GACF;AAAA,4BAGD,OAAA,EAAM,MAAM,GAAG,OAAO,GACrB,UAAA,oBAAC,MAAA,EAAK,MAAM,GAAG,cAAa,YAAW,QAAO,UAC3CpkC,UAAAA,oBAAoB9F,KAAK,GAC5B,GACF;AAAA,QAECA,MAAMuL,UACL,oBAAC,MAAA,EAAK,MAAM,GACV,UAAA,oBAAC,SAAA,EACC,SAAS,oBAAC,MAAA,EAAK,MAAM,GAAG,UAAA,sBAAA,CAAmB,GAC3C,SAAS,GACT,WAAU,OACV,QAAM,IAEN,UAAA,oBAAC,UAAA,CAAA,CAAQ,EAAA,CACX,EAAA,CACF;AAAA,MAAA,GAEJ;AAAA,IAEJ;AAAA,EAAA;AAAA,EAEF9D,QAAQ,CACN6gC,YAAY;AAAA,IACVliC,MAAMmQ,OAAO7P;AAAAA,IACbA,MAAM;AAAA,IACNV,OAAO;AAAA,IACPqH,aACE,qBAAA,UAAA,EAAA,UAAA;AAAA,MAAA;AAAA,MACa;AAAA,2BACV,KAAA,EAAE,MAAM9E,qBAAqB,QAAO,UAAS,KAAI,cAAY,UAAA;AAAA,QAAA;AAAA,4BACrC,gBAAA,CAAA,CAAc;AAAA,MAAA,EAAA,CACvC;AAAA,IAAA,GACF;AAAA,IAEF8/B,YAAY;AAAA,MACVlxB,OAAO+vB;AAAAA,IAAAA;AAAAA,EACT,CACD,GACDoB,YAAY;AAAA,IACVliC,MAAM;AAAA,IACNM,MAAM;AAAA,IACNV,OAAO;AAAA,IACPmkC,UAAU;AAAA,IACV9B,YAAY;AAAA,MACV3gC,OAAOm8B;AAAAA,MACP1sB,OAAO0jB;AAAAA,IAAAA;AAAAA,EACT,CACD,GACDyN,YAAY;AAAA,IACVliC,MAAM;AAAA,IACNM,MAAM;AAAA,IACNV,OAAO;AAAA,IACPmkC,UAAU;AAAA,IACV9B,YAAY;AAAA,MACV3gC,OAAOm8B;AAAAA,IAAAA;AAAAA,EACT,CACD,GACDyE,YAAY;AAAA,IACVliC,MAAM;AAAA,IACNM,MAAM;AAAA,IACNV,OAAO;AAAA,IACPmkC,UAAU;AAAA,IACV9B,YAAY;AAAA,MACV3gC,OAAOm8B;AAAAA,MACP1sB,OAAO4sB;AAAAA,IAAAA;AAAAA,IAETqG,cAAcA,CAACC,SAAS77B,YAAYA,QAAQtE,aAAaT,MAAM;AAAA,IAC/D6Y,UAAW9T,CAAAA,YACToT,CAAAA,EACEpT,QAAQjR,QAAQ+sC,eAAe97B,QAAQjR,QAAQ+sC,gBAAgB97B,QAAQtE,aAAaT;AAAAA,EAAAA,CAEzF,GACD6+B,YAAY;AAAA,IACVliC,MAAM;AAAA,IACNM,MAAM;AAAA,IACNV,OAAO;AAAA,IACPsd,QAAQ;AAAA,IACR6mB,UAAU;AAAA,IACVC,cAAcA,CAACC,SAAS77B,YACfA,QAAQtE,aAAaT,MAAM;AAAA,EAAA,CAErC,GACD6+B,YAAY;AAAA,IACVliC,MAAM;AAAA,IACNM,MAAM;AAAA,IACNV,OAAO;AAAA,IACPqiC,YAAY;AAAA,MACVlxB,OAAO8uB;AAAAA,MACPv+B,OAAOg+B;AAAAA,IAAAA;AAAAA,IAETr/B,IAAI,CACFkiC,kBAAkB;AAAA,MAACniC,MAAM4jC,gBAAgBtjC;AAAAA,IAAAA,CAAK,GAC9C6hC,kBAAkB;AAAA,MAACniC,MAAM6jC,eAAevjC;AAAAA,IAAAA,CAAK,CAAC;AAAA,EAAA,CAEjD,CAAC;AAEN,CAAC,GAEY6jC,oBAAoBpC,WAAW;AAAA,EAC1C/hC,MAAM;AAAA,EACNM,MAAMnC;AAAAA,EACNyB,OAAO;AAAA;AAAA;AAAA;AAAA,EAIPyB,QAAQ,CACN6gC,YAAY;AAAA,IACVliC,MAAM;AAAA,IACNM,MAAM;AAAA,IACNV,OAAO;AAAA,IACPsc,UAAU;AAAA,IACVgB,QAAQ;AAAA,EAAA,CACT,GACDglB,YAAY;AAAA,IACVliC,MAAM;AAAA,IACNM,MAAM;AAAA,IACNV,OAAO;AAAA,IACPK,IAAI,CAAC;AAAA,MAACD,MAAML,YAAYW;AAAAA,IAAAA,CAAK;AAAA,IAC7B2hC,YAAY;AAAA,MACV3gC,OAAO4/B;AAAAA,MACPnwB,OAAOowB;AAAAA,IAAAA;AAAAA,EACT,CACD,CAAC;AAAA,EAEJqB,SAAS;AAAA,IACP3X,QAAQ;AAAA,MACNjrB,OAAO;AAAA,IAAA;AAAA,EACT;AAEJ,CAAC,GAEYwkC,uBAAuBrC,WAAW;AAAA;AAAA,EAE7C/hC,MAAM;AAAA,EAGDuS,UAAU;AAAA,EACfjS,MAAMpC;AAAAA,EACN0B,OAAO;AAAA,EAEPqiC,YAAY;AAAA,IACVlxB,OAAOwqB;AAAAA,IACPj6B,OAAQ1H,CAAAA,UACCA,MAAM8N,cAAc;AAAA,MAAC,GAAG9N;AAAAA,MAAOgG,OAAO;AAAA,IAAA,CAAG;AAAA,EAAA;AAAA,EAGpDyB,QAAQ,CACN6gC,YAAY;AAAA,IACVliC,MAAM;AAAA,IACNM,MAAM;AAAA,IACNV,OAAO;AAAA,EAAA,CACR,GACDsiC,YAAY;AAAA,IACVliC,MAAM;AAAA,IACNM,MAAM;AAAA,IACNV,OAAO;AAAA,IACPK,IAAI,CAAC;AAAA,MAACD,MAAMmkC,kBAAkB7jC;AAAAA,IAAAA,CAAK;AAAA,EAAA,CACpC,CAAC;AAAA,EAEJkiC,SAAS;AAAA,IACP3X,QAAQ;AAAA,MACNjrB,OAAO;AAAA,IAAA;AAAA,EACT;AAEJ,CAAC,GAEYykC,kBAAkBtC,WAAW;AAAA,EACxC/hC,MAAM;AAAA,EACNM,MAAM3B;AAAAA,EACNiB,OAAO;AAAA,EACPyB,QAAQ,CACN6gC,YAAY;AAAA,IACVliC,MAAM;AAAA,IACNM,MAAM;AAAA,IACNV,OAAO;AAAA,EAAA,CACR,GACDsiC,YAAY;AAAA,IACVliC,MAAM;AAAA,IACNM,MAAM;AAAA,IACNV,OAAO;AAAA,EAAA,CACR,GACDsiC,YAAY;AAAA,IACVliC,MAAM;AAAA,IACNM,MAAM;AAAA,IACNV,OAAO;AAAA,EAAA,CACR,GACDsiC,YAAY;AAAA,IACVliC,MAAM;AAAA,IACNM,MAAM;AAAA,IACNV,OAAO;AAAA,EAAA,CACR,GACDsiC,YAAY;AAAA,IACVliC,MAAM;AAAA,IACNM,MAAM;AAAA,IACNV,OAAO;AAAA,EAAA,CACR,CAAC;AAEN,CAAC,GAEY0kC,4BAA4BvC,WAAW;AAAA;AAAA,EAElD/hC,MAAM;AAAA,EAGDuS,UAAU;AAAA,EACfjS,MAAM5B;AAAAA,EACNkB,OAAO;AAAA,EACPyB,QAAQ,CACN6gC,YAAY;AAAA,IACVliC,MAAM;AAAA,IACNM,MAAM;AAAA,IACNV,OAAO;AAAA,IACPK,IAAI,CAAC;AAAA,MAACD,MAAMqkC,gBAAgB/jC;AAAAA,IAAAA,CAAK;AAAA,EAAA,CAClC,CAAC;AAEN,CAAC;ACpeD,SAASikC,gBAA8DvkC,MAAY;AAEjF,QAAMwkC,iBAAkBxkC,MAAciiC,YAAY3gC;AAClD,SAAO;AAAA,IACL,GAAGtB;AAAAA,IACH,GAAI,gBAAgBA,OAChB;AAAA,MACEiiC,YAAY;AAAA,QACV,GAAGjiC,KAAKiiC;AAAAA,QACR3gC,OAAQ1H,CAAAA,UAAsB;AAC5B,gBAAM6qC,WAAW;AAAA,YAAC,GAAG7qC;AAAAA,YAAO8qC,qBAAqBhjC;AAAAA,UAAAA;AACjD,iBAAI,OAAO8iC,kBAAmB,aACrBA,eAAeC,QAAQ,IAEzB7qC,MAAM8N,cAAc+8B,QAAQ;AAAA,QACrC;AAAA,MAAA;AAAA,IACF,IAEF,CAAA;AAAA,IACJ,GAAI,YAAYzkC,OACZ;AAAA;AAAA,MAEEqB,QAAQrB,KAAKqB,QAAQwD,IAAKvD,CAAAA,UAAUijC,gBAAgBjjC,KAAK,CAAC;AAAA,IAAA,IAE5D,CAAA;AAAA,IACJ,GAAI,QAAQtB,OACR;AAAA;AAAA,MAEEC,IAAID,KAAKC,IAAI4E,IAAK8/B,CAAAA,kBAAkBJ,gBAAgBI,aAAa,CAAC;AAAA,IAAA,IAEpE,CAAA;AAAA,EAAC;AAET;AAEA,MAAMC,kBAAkB,CACtBT,mBACAxkC,aACAmjC,gBACA3yB,QACA0B,WACA6xB,aAAa,EACb7+B,IAAI0/B,eAAe,GAERM,cAAc,CACzB,GAAGD,iBACHhB,iBACAC,gBACAO,sBACAE,2BACAD,iBACAvC,qBAAqB,GCfV/zB,SAAS+2B,aAAyCj4B,CAAAA,WAAW;AACxE,QAAMk4B,qBAAqBl4B,UAAU,CAAA,GAC/BP,aAAay4B,mBAAmB33B,WAAWd,cAAc,IACzDmC,eAAes2B,mBAAmBh3B,QAAQU,cAC1Cu2B,cAAcD,mBAAmBh3B,QAAQi3B;AAM/C,MAJI,OAAO14B,cAAe,YACxBme,mBAAmBne,UAAU,GAG3BmC,iBAAiB/M,WAAc+M,eAAe,KAAKA,eAAe;AACpE,UAAM,IAAIpU,MACR,IAAIiI,WAAW,gFAAgFmM,YAAY,EAC7G;AAGF,MAAIu2B,gBAAgBtjC,WAAcsjC,cAAc,KAAKA,cAAc;AACjE,UAAM,IAAI3qC,MACR,IAAIiI,WAAW,2EAA2E0iC,WAAW,EACvG;AAGF,SAAO;AAAA,IACL1kC,MAAMgC;AAAAA,IAID2iC,YAAY;AAAA,IACjB9xB,QAAQ;AAAA,MACN/G,OAAOy4B;AAAAA,IAAAA;AAAAA,IAETK,MAAM;AAAA,MACJC,SAAS,CAAC,CAAA,CAAE;AAAA,IAAA;AAAA,IAGd9tC,UAAU;AAAA,MACR+tC,YAAYA,CAACC,MAAMj9B,YAAY;AAC7B,cAAMvF,eAAeuF,QAAQvF,cACvByiC,YAAYl9B,QAAQ+K,OAAOzX,IAAImH,YAAY;AACjD,eAAIyiC,aAAavkC,sBAAsBukC,SAAS,IACvC,CAAC,GAAGD,MAAMxd,eAAe,IAE3Bwd;AAAAA,MACT;AAAA,MACAE,uBAAuBA,CAACF,MAAM;AAAA,QAACxiC;AAAAA,QAAcsQ;AAAAA,MAAAA,MAAY;AACvD,YAAItQ,iBAAiB3E;AACnB,iBAAO,CAAA;AAET,cAAMonC,YAAYnyB,OAAOzX,IAAImH,YAAY;AACzC,eAAIyiC,aAAavkC,sBAAsBukC,SAAS,IACvC,CAAC,GAAGD,MAAMpM,kBAAkB,IAE9BoM;AAAAA,MACT;AAAA,MACAG,yBAAyBA,CAACH,MAAM;AAAA,QAACriC;AAAAA,QAAYmQ;AAAAA,QAAQ/S;AAAAA,MAAAA,MAAgB;AACnE,YAAIA,eAAelC;AACjB,iBAAO,CAAA;AAET,cAAMonC,YAAYnyB,OAAOzX,IAAI0E,UAAU;AACvC,eAAIklC,aAAat6B,mBAAmBs6B,SAAS,KAAKvkC,sBAAsBukC,SAAS,IACxE,CAAC,GAAGD,MAAMzK,6BAA6B53B,UAAU,CAAC,IAEpDqiC;AAAAA,MACT;AAAA,MACApD,YAAY;AAAA,QACVwD,iBAAiB3wB;AAAAA,MAAAA;AAAAA,IACnB;AAAA,IAGF4wB,QAAQ;AAAA,MACNzD,YAAY;AAAA,QACV0D,QAAQ,SAAgB/rC,OAAO;AAC7B,iBAAO,oBAAC,cAAA,EAAa,GAAIA,OAAO,QAAQmrC,oBAAmB;AAAA,QAC7D;AAAA,MAAA;AAAA,IACF;AAAA,IAGFa,MAAM;AAAA,MACJ3D,YAAY;AAAA,QACVlxB,OAAOvJ;AAAAA,QACPlG,OAAOoW;AAAAA,QACPuG,MAAM7E;AAAAA,QACNnK,OAAO4J;AAAAA,QACPgtB,aAAa1sB;AAAAA,MAAAA;AAAAA,IACf;AAAA,IAGF2sB,SAAS,CACPhB,aAAa;AAAA,MACXxkC,MAAM,GAAGgC,WAAW;AAAA,MACpBsjC,MAAM;AAAA,QAAC3D,YAAY;AAAA,UAAClxB,OAAOqH;AAAAA,QAAAA;AAAAA,MAAc;AAAA,IAAC,CAC3C,EAAA,GAED0sB,aAAa;AAAA,MACXxkC,MAAM,GAAGgC,WAAW;AAAA,MACpBsjC,MAAM;AAAA,QACJ3D,YAAY;AAAA,UACVlxB,OAAQnX,CAAAA,UAAU;AAChB,kBAAM;AAAA,cAACwG;AAAAA,YAAAA,IAAcxG;AAErB,mBAAI2G,QAAQH,UAAU,IACb,oBAAC,sBAAA,EAAqB,GAAIxG,OAAM,IAElCA,MAAM8N,cAAc9N,KAAK;AAAA,UAClC;AAAA,QAAA;AAAA,MACF;AAAA,IACF,CACD,GAAG;AAAA,EAAA;AAGV,CAAC,GCjJKmsC,QAAQA,CACZ5hC,QACAic,OACA9U,QACA9O,aAEAwpC,MAAM;AAAA;AAAA,EAEJ7hC,OAAO8hC,WAAWF,MAAM3lB,OAAO9U,QAAQ;AAAA,IACrC46B,KAAK1pC,SAAQ0pC;AAAAA,IACbC,gBAAgB;AAAA,EAAA,CACjB;AAAA,CACH,GAEIC,SAASA,CACbjiC,QACAic,OACA9U,QACA9O;AAAAA;AAAAA,EAGAwpC,MAAM;AAAA;AAAA,IAEJ7hC,OAAOiiC,OAAOhmB,OAAO9U,QAAQ;AAAA,MAC3B+6B,QAAQ,CAAC,WAAW,YAAY,WAAW;AAAA,MAC3CC,eAAe;AAAA,MACfC,YAAY;AAAA,MACZL,KAAK1pC,SAAQ0pC;AAAAA,IAAAA,CACd;AAAA,GACH;AAAA;AAEF,SAASM,eACPtrB,OACuB;AACvB,SAAOA,MAAMlb,SAAS;AACxB;AAGO,MAAMymC,cAAcA,CACzBtiC,QACAic,OACA9U,SAA4B,CAAA,GAC5B9O,WAA8B,OAC3B;AACH,QAAMkqC,aAAyCtmB,OACzCumB,gBAA4CvmB,OAE5CwmB,aAAab,MAAM5hC,QAAQuiC,YAAYp7B,QAAQ9O,QAAO,GAEtDqqC,UAAUT,OAAOjiC,QAAQwiC,eAAer7B,QAAQ9O,QAAO,EAAEwe,KAC7D8rB,SAAS,CAACttB,IAAI/T,MACIA,MAAM,KACP,CAAC+gC,eAAehtB,EAAE,IAIxButB,WACL,IAAI1sC,MACFmf,GAAGxZ,SAAS,cACR,+CACA,4CAA4CwZ,GAAGxZ,IAAI,GACzD,CACF,IAEKC,GAAGuZ,EAAE,CACb,GACDwtB,MAAAA,CACF,GAEM,CAACC,UAAUC,qBAAqB,IAAIC,UAAUN,SAASL,cAAc,GACrEY,kBAAmBlsB,WACnB,CAAC1e,SAAQ6qC,eAAensB,MAAMlb,SAAS,aAClC,KAGFxD,SAAQ6qC,YAAY/xC,SAAS4lB,MAAMosB,UAAU;AAGtD,SAAOC,MACLN,SAASjsB,KAAKwsB,KAAK,CAAC,CAAC,GACrBN,sBAAsBlsB,KACpBjW,OAAOqiC,eAAe,GACtBK,UAAWvsB,CAAAA,UAAUqsB,MAAMtnC,GAAGib,KAAK,GAAGjb,GAAGib,KAAK,EAAEF,KAAK0sB,MAAMlrC,SAAQmrC,gBAAgB,GAAI,CAAC,CAAC,CAAC,CAC5F,CACF,EAAE3sB,KAAK4sB,yBAAyBhB,UAAU,CAAC;AAC7C,GClFMiB,iBAAiB,CAAA,GACjBC,kBAAsC;AAAA,EAAC5jC,YAAY;AAAa;AAE/D,SAAA6jC,kBAAA3nB,OAAAnqB,IAAAM,IAAA;AAAA,QAAAf,IAAAC,EAAA,EAAA,GAEL6V,SAAArV,OAAAyL,SAAAmmC,iBAAA5xC,IACAuG,WAAAsrC,iBAEA,CAAA77B,SAAAC,UAAA,IAA8BpW,SAAS,EAAI,GAC3C,CAAAwiB,OAAAC,QAAA,IAA0BziB,SAAS,EAAK,GACxC,CAAAkyC,MAAAC,OAAA,IAAwBnyC,SAAmB,IAAI,GAC/CoyC,eAAqBvyC,OAA0B,IAAI;AAAC,MAAAmB;AAAAtB,IAAA,CAAA,6BAAAU,IAAA,2BAAA,KAE3BY,KAAA;AAAA,IAAAoN,YAAa;AAAA,EAAA,GAAc1O,OAAAsB,MAAAA,KAAAtB,EAAA,CAAA;AAApD,QAAA2O,SAAeC,UAAUtN,EAA2B;AAAC,MAAAC,IAAAuC;AAAA9D,IAAA,CAAA,MAAA2O,UAAA3O,EAAA,CAAA,MAAAgH,YAAAhH,EAAA,CAAA,MAAA8V,UAAA9V,SAAA4qB,SAE3CrpB,KAAAA,OAENmxC,aAAYjxC,UAAWwvC,YAAYtiC,QAAQic,OAAO9U,QAAQ9O,QAAO,EAACwe,KAE9DmtB,qBAAqBC,OAAO,GAC5B5vB,WAAWogB,CAAAA,SACTlV,QAAOpL,MAAOsgB,GAAG,GACjBrgB,SAAS,EAAI,GACbrM,WAAW,EAAK,GAChB+7B,QAAQ,IAAI,GAELhoC,GAAG,IAAI,EACf,CACH,EAACpF,UACUwtC,CAAAA,cAAA;AACTJ,YAAQhxC,CAAAA,YAAcmxC,QAAQnxC,SAASoxC,SAA+B,IAAhDpxC,UAAAoxC,SAAkD,GACxEn8B,WAAW,EAAK,GAChBqM,SAAS,EAAK;AAAA,EAAC,CAChB,GAGE,MACE2vB,aAAYjxC,UAAWixC,aAAYjxC,QAAQqkB,YAAAA,IAA3C5Z,SAERpI,KAAA,CAAC8mB,OAAO9U,QAAQ9O,UAAS2H,MAAM,GAAC3O,OAAA2O,QAAA3O,OAAAgH,UAAAhH,OAAA8V,QAAA9V,OAAA4qB,OAAA5qB,OAAAuB,IAAAvB,OAAA8D,OAAAvC,KAAAvB,EAAA,CAAA,GAAA8D,KAAA9D,EAAA,CAAA,IAxBnC6D,UAAUtC,IAwBPuC,EAAgC;AAAC,MAAAE;AAAA,SAAAhE,EAAA,CAAA,MAAAwyC,QAAAxyC,SAAA8iB,SAAA9iB,EAAA,CAAA,MAAAyW,WAE7BzS,KAAA;AAAA,IAAAyS;AAAAA,IAAAqM;AAAAA,IAAA0vB;AAAAA,EAAAA,GAAsBxyC,OAAAwyC,MAAAxyC,OAAA8iB,OAAA9iB,OAAAyW,SAAAzW,QAAAgE,MAAAA,KAAAhE,EAAA,EAAA,GAAtBgE;AAAsB;ACpD/B,MAAM8uC,UAAkC,CAAA,GAElCC,eAAe;AAEd,SAAAC,iBAAA;AAAA,QAAAhzC,IAAAC,EAAA,EAAA,GACL0d,SAAeC,UAAAA;AAAW,MAAAnd;AAAAT,IAAA,CAAA,6BAAAU,IAAA,2BAAA,KACDD,KAAA;AAAA,IAAAiO,YAAa;AAAA,EAAA,GAAa1O,OAAAS,MAAAA,KAAAT,EAAA,CAAA;AAAnD,QAAA2O,SAAeC,UAAUnO,EAA0B,GACnD,CAAAwyC,QAAAC,SAAA,IAA4B5yC,SAAS,EAAK,GAC1C,CAAA6yC,WAAAC,YAAA,IAAkC9yC,SAASyyC,YAAY;AAAC,MAAAhyC;AAAAf,IAAA,CAAA,6BAAAU,IAAA,2BAAA,KAEmCK,KAAA;AAAA,IAAAyJ,MACnFnB;AAAAA,EAAAA,GACPrJ,OAAAe,MAAAA,KAAAf,EAAA,CAAA;AAFD,QAAA;AAAA,IAAAwyC;AAAAA,EAAAA,IAAeD,kBAA0C,kCAAkCxxC,EAE1F;AAAC,MAAAO;AAAAtB,WAAA2d,UAGOrc,KAAAm6B,gBAAgB9d,MAAM,GAAC3d,OAAA2d,QAAA3d,OAAAsB,MAAAA,KAAAtB,EAAA,CAAA;AADhC,QAAA4W,QACEtV;AACU,MAAAC;AAAAvB,IAAA,CAAA,MAAA2O,UAAA3O,SAAA4W,SAEmBrV,KAAAA,MAAA;AAC7B2xC,cAAU,EAAI;AACd,QAAAG,UAAc;AAoBd1uC,6BAnBA;AACEyuC,mBAAa,aAAax8B,MAAK9M,MAAO,EAAE;AACxC,YAAAwpC,cAAoB3kC,OAAM2kC,YAAAA;AAC1B,eAAArjC,IAAa,GAAGA,IAAI2G,MAAK9M,UAClBupC,SAD2BpjC,KAAG;AAInC,cAAAzF,OAAaoM,MAAM3G,CAAC;AAEpB,cAAMqjC,YAAWC,gBAAiB/oC,IAA6B,GAC3DyF,IAAI,KAAKA,IAAI,OAAO,MAEtB,MAAMqjC,YAAWrlB,UACjBqlB,YAAWE,SACXJ,aAAa,WAAWnjC,CAAC,IAAI2G,MAAK9M,MAAO,EAAE;AAAA,MAC5C;AAEH,YAAMwpC,YAAWrlB,OAAAA;AAAAA,IAAS,KAErBjf,MACEkf,QAAOpL,KAAM,EAACpL,QACZ,MAAA;AACPw7B,gBAAU,EAAK,GACfE,aAAaL,YAAY;AAAA,IAAC,CAC3B,GACI,MAAA;AACLM,gBAAUA,IACVH,UAAU,EAAK,GACfE,aAAaL,YAAY;AAAA,IAAC;AAAA,EAC3B,GACF/yC,OAAA2O,QAAA3O,OAAA4W,OAAA5W,OAAAuB,MAAAA,KAAAvB,EAAA,CAAA;AAjCD,QAAAyzC,aAAmBlyC;AAiCyB,MAAAuC;AAAA9D,IAAA,CAAA,6BAAAU,IAAA,2BAAA,KAGDoD,KAAA;AAAA,IAAAxB,QAAS;AAAA,EAAA,GAAqBtC,OAAA8D,MAAAA,KAAA9D,EAAA,CAAA;AAAA,MAAAgE;AAAAhE,WAAAizC,UAIzDjvC,KAAAivC,SAAS,oBAAC,WAAe,OAAA;AAAA,IAAAlnB,WAAY;AAAA,EAAA,EAAC,CAAC,IAAvCmB,UAAsDltB,OAAAizC,QAAAjzC,OAAAgE,MAAAA,KAAAhE,EAAA,CAAA;AAAA,MAAAkE;AAAAlE,IAAA,EAAA,MAAAizC,UAAAjzC,EAAA,EAAA,MAAAyzC,cAAAzzC,EAAA,EAAA,MAAAmzC,aAAAnzC,UAAAgE,MAFhEE,KAAA,oBAAC,KAAA,EACC,8BAAC,QAAA,EACO,MAAAF,IACAmvC,MAAAA,WACIF,UAAAA,QACDQ,SAAAA,YAAU,EAAA,CAEvB,GAAMzzC,QAAAizC,QAAAjzC,QAAAyzC,YAAAzzC,QAAAmzC,WAAAnzC,QAAAgE,IAAAhE,QAAAkE,MAAAA,KAAAlE,EAAA,EAAA;AAAA,MAAAiP;AAAAjP,IAAA,EAAA,6BAAAU,IAAA,2BAAA,KAGFuO,yBAAC,OAAA,EAAM,UAAA,gBAAA,CAAa,GAAQjP,QAAAiP,MAAAA,KAAAjP,EAAA,EAAA;AAAA,MAAAmP;AAAAnP,YAAA4W,SAEzBzH,KAAAyH,MAAKvH,IAAK/C,KAIV,GAACtM,QAAA4W,OAAA5W,QAAAmP,MAAAA,KAAAnP,EAAA,EAAA;AAAA,MAAAkc;AAAAlc,YAAAmP,MAPN+M,KAAA,qBAAC,OAAA,EAAa,OAAA,GACZjN,UAAAA;AAAAA,IAAAA;AAAAA,IACA,4BACGE,UAAAA,GAAAA,CAKH;AAAA,EAAA,EAAA,CACF,GAAQnP,QAAAmP,IAAAnP,QAAAkc,MAAAA,KAAAlc,EAAA,EAAA;AAAA,MAAAgf;AAAAhf,IAAA,EAAA,6BAAAU,IAAA,2BAAA,KAGNse,0BAAC,OAAA,EAAM,UAAA,gBAAA,CAAa,GAAQhf,QAAAgf,OAAAA,MAAAhf,EAAA,EAAA;AAExB,QAAAkf,MAAAszB,QAAAM;AAAe,MAAA7iB;AAAAjwB,YAAAkf,OAAhB+Q,MAAC/Q,IAAe7P,IAAM+B,MAItB,GAACpR,QAAAkf,KAAAlf,QAAAiwB,OAAAA,MAAAjwB,EAAA,EAAA;AAAA,MAAAkwB;AAAAlwB,YAAAiwB,OAPNC,MAAA,qBAAC,OAAA,EAAa,OAAA,GACZlR,UAAAA;AAAAA,IAAAA;AAAAA,IACA,4BACGiR,UAAAA,IAAAA,CAKH;AAAA,EAAA,EAAA,CACF,GAAQjwB,QAAAiwB,KAAAjwB,QAAAkwB,OAAAA,MAAAlwB,EAAA,EAAA;AAAA,MAAAmwB;AAAAnwB,IAAA,EAAA,MAAAkwB,OAAAlwB,UAAAkc,MArBViU,MAAA,qBAAC,MAAA,EAAU,KAAA,GACTjU,UAAAA;AAAAA,IAAAA;AAAAA,IAWAgU;AAAAA,EAAAA,EAAAA,CAUF,GAAOlwB,QAAAkwB,KAAAlwB,QAAAkc,IAAAlc,QAAAmwB,OAAAA,MAAAnwB,EAAA,EAAA;AAAA,MAAA6mC;AAAA,SAAA7mC,EAAA,EAAA,MAAAmwB,OAAAnwB,UAAAkE,MAhCX2iC,MAAA,oBAAC,QAAc,SAAA,GAAY,UAAA,QAAc,OAAA/iC,IACvC,UAAA,qBAAC,OAAA,EAAa,OAAA,GACZI,UAAAA;AAAAA,IAAAA;AAAAA,IAQAisB;AAAAA,EAAAA,EAAAA,CAuBF,GACF,GAAOnwB,QAAAmwB,KAAAnwB,QAAAkE,IAAAlE,QAAA6mC,OAAAA,MAAA7mC,EAAA,EAAA,GAlCP6mC;AAkCO;AApFJ,SAAAz1B,OAAAsiC,QAAA;AAAA,SA4ES,4BACE,UAAA,oBAAC,aAAA,EAAwBlpC,oBAAI,KADtBA,OAAIM,IAEb;AAAK;AA9Ed,SAAAwB,MAAAqnC,QAAA;AAAA,SAiES,4BACE,UAAA,oBAAC,aAAA,EAAwBnpC,oBAAI,KADtBA,OAAIM,IAEb;AAAK;AAqBrB,SAAA8oC,YAAAnzC,IAAA;AAAA,QAAAT,IAAAC,EAAA,CAAA,GAAqB;AAAA,IAAA4zC;AAAAA,EAAAA,IAAApzC;AAAgD,MAAAM;AAAAf,WAAA6zC,cACzC9yC,KAAA40B,KAAII,UAAW8d,YAAY,MAAM,CAAC,GAAC7zC,OAAA6zC,YAAA7zC,OAAAe,MAAAA,KAAAf,EAAA,CAAA;AAA7D,QAAA26B,MAA0B55B;AAAkD,MAAAO;AAAA,SAAAtB,SAAA26B,OACrEr5B,KAAA,oBAAA,OAAA,EAAMq5B,eAAI,GAAM36B,OAAA26B,KAAA36B,OAAAsB,MAAAA,KAAAtB,EAAA,CAAA,GAAhBsB;AAAgB;ACAlB,SAAAwyC,eAAA;AACL,QAAA;AAAA,IAAAz6B;AAAAA,EAAAA,IAAuBE,kBAAAA;AAAmB,SACnCF;AAAY;"}
|