{
  "version": 3,
  "sources": ["../../src/document/components/chrome/evaluations/formatDuration.ts", "../../src/document/components/chrome/agentPanel/components/AgentChatMessages.tsx", "../../src/document/components/chrome/agentPanel/components/useScrollSentinel.styles.ts", "../../src/document/components/chrome/agentPanel/components/AgentChatMessages.styles.ts", "../../src/app/agent/components/AgentInput/AttachmentList.tsx", "../../src/app/agent/components/AgentInput/AttachmentList.styles.ts", "../../src/app/agent/components/AgentInput/ImageLightbox.tsx", "../../src/app/agent/components/AgentInput/ImageLightbox.styles.ts", "../../src/app/agent/components/AgentRow/AgentRow.tsx", "../../src/app/agent/components/AgentButton/AgentButton.styles.ts", "../../src/app/agent/components/AgentButton/AgentButton.tsx", "../../src/app/agent/components/AgentRow/AgentRow.styles.ts", "../../src/document/components/chrome/agentPanel/PromptPartsText.styles.ts", "../../src/document/components/chrome/agentPanel/SelectionTag.tsx", "../../src/document/components/chrome/layers/IconAgentLayerCollectionItem.tsx", "../../src/document/components/chrome/layers/IconAgentLayerFormCheckbox.tsx", "../../src/document/components/chrome/layers/IconAgentLayerOverlay.tsx", "../../src/document/components/chrome/layers/IconAgentLayerPlaceholder.tsx", "../../src/document/components/chrome/layers/layerIcons.ts", "../../src/document/components/chrome/agentPanel/SelectionTag.styles.ts", "../../src/document/components/chrome/agentPanel/components/IconAgentMultiSelect.tsx", "../../src/document/components/chrome/agentPanel/components/AgentChatTurn.tsx", "../../src/document/components/chrome/agentPanel/AgentChatPanel.styles.ts", "../../src/document/components/chrome/agentPanel/PromptPartsText.tsx", "../../src/app/agent/components/AgentInput/AgentFooter.styles.ts", "../../src/document/components/chrome/agentPanel/components/AgentChangesSummary.tsx", "../../src/document/components/chrome/agentPanel/components/AgentChangesSummary.styles.ts", "../../src/document/components/chrome/agentPanel/components/AgentChatTask.tsx", "../../src/document/components/chrome/agentPanel/components/AgentChat.common.styles.ts", "../../src/document/components/chrome/agentPanel/components/AgentChatTask.styles.ts", "../../src/document/components/chrome/agentPanel/components/IconAgentAnalyze.tsx", "../../src/document/components/chrome/agentPanel/components/IconAgentDesignPlan.tsx", "../../src/document/components/chrome/agentPanel/components/IconAgentFonts.tsx", "../../src/document/components/chrome/agentPanel/components/IconAgentGlobe.tsx", "../../src/document/components/chrome/agentPanel/components/IconAgentImage.tsx", "../../src/document/components/chrome/agentPanel/components/IconAgentCodeFile.tsx", "../../src/document/components/chrome/agentPanel/components/AgentContextUsageMeter.styles.ts", "../../src/document/components/chrome/agentPanel/components/AgentContextUsageMeter.tsx", "../../src/document/components/chrome/agentPanel/components/agentTurnStatsMenu.ts", "../../src/document/components/chrome/agentPanel/components/AgentChatCodePatch.tsx", "../../../../../node_modules/@shikijs/types/dist/index.mjs", "../../../../../node_modules/@shikijs/vscode-textmate/dist/index.js", "../../../../../node_modules/@shikijs/core/dist/index.mjs", "../../../../../node_modules/shiki/dist/langs.mjs", "../../../../../node_modules/shiki/dist/themes.mjs", "../../../../../node_modules/@shikijs/engine-oniguruma/dist/index.mjs", "../../../../../node_modules/shiki/dist/bundle-full.mjs", "../../src/document/components/chrome/agentPanel/components/AgentChatCodePatch.styles.ts", "../../src/document/components/chrome/agentPanel/components/AgentErrorCard.styles.ts", "../../src/document/components/chrome/agentPanel/components/IconAgentWarning.tsx", "../../src/document/components/chrome/agentPanel/components/AgentErrorCard.tsx", "../../src/document/components/chrome/agentPanel/components/AgentChatError.tsx", "../../src/app/agent/components/ModelPicker/ModelPicker.tsx", "../../src/app/agent/components/ModelPicker/ModelPicker.styles.ts", "../../src/app/agent/components/AgentInput/AgentChatIcons.tsx", "../../src/app/agent/components/AgentInput/AgentFooter.tsx", "../../src/app/agent/components/AgentInput/AgentInput.tsx", "../../src/app/agent/components/AgentInput/AgentInput.styles.ts", "../../src/app/agent/components/AgentInput/AgentSuggestionPopover.tsx", "../../src/app/agent/components/AgentInput/AgentSuggestionPopover.styles.ts", "../../src/document/models/CanvasTree/nodes/utils/entityReferenceOrder.ts", "../../src/app/agent/components/AgentInput/suggestionItems.styles.ts", "../../src/app/agent/components/AgentInput/suggestionItems.tsx", "../../src/prosemirror/deleteCharCommand.ts", "../../src/app/agent/editor/useAgentInputEditorView.ts", "../../src/app/agent/editor/TagNodeView.tsx", "../../src/app/agent/editor/suggestPlugin.ts", "../../src/app/agent/editor/utils/tagInsertion.ts", "../../src/app/agent/editor/useMessageHistoryNavigator.ts", "../../src/app/agent/hooks/useAgentModel.ts", "../../src/app/agent/utils/convertSvgAttachmentToPng.ts", "../../src/app/agent/hooks/useAttachments.ts", "../../src/document/components/chrome/agentPanel/components/AgentChatInput.tsx", "../../src/document/models/CanvasTree/utils/hasAnchorLink.ts", "../../src/document/components/chrome/layers/Layers.tsx", "../../src/document/components/chrome/contentPanel/ContentPanelSearchBar.tsx", "../../src/document/components/chrome/shared/AgentSearchBar.styles.ts", "../../src/document/components/chrome/contentPanel/PanelSearch.tsx", "../../src/document/components/chrome/sortableTree/index.tsx", "../../src/document/components/chrome/sortableTree/Item.tsx", "../../src/document/components/chrome/layers/VirtualSlotProperyNode.ts", "../../src/document/components/chrome/sortableTree/InsertionIndicator.tsx", "../../src/document/components/chrome/sortableTree/Item.styles.ts", "../../src/document/components/chrome/sortableTree/index.styles.ts", "../../src/document/components/chrome/layers/LayerPanelItem.tsx", "../../src/document/components/chrome/shared/CollapseIndicator.tsx", "../../src/document/components/chrome/layers/AgentLayerIndicatorIcons.tsx", "../../src/document/components/chrome/layers/LayerErrorIndicator.tsx", "../../src/document/components/chrome/layers/Layers.styles.ts", "../../src/document/components/chrome/Pages/utils/getWebPagesInVisualOrder.ts", "../../src/document/components/utils/usePageComboBoxListItems.ts", "../../src/document/components/chrome/layers/PageSelector.tsx", "../../src/document/components/chrome/layers/PageSelector.styles.ts", "../../src/document/components/chrome/agentPanel/components/AgentChatInput.styles.ts", "../../src/document/components/chrome/agentPanel/components/AgentChatTurn.styles.ts", "../../src/document/components/chrome/agentPanel/components/RevertButton.tsx", "../../src/document/components/chrome/agentPanel/components/IconRevert.tsx", "../../src/document/components/chrome/agentPanel/components/useScrollSentinel.ts"],
  "sourcesContent": ["export function formatDuration(durationMs: number): string {\n\tif (durationMs < 1000) return `${durationMs}ms`\n\n\tif (durationMs < 60_000) {\n\t\tconst durationSeconds = durationMs / 1000\n\t\tconst roundedSeconds = durationSeconds < 10 ? Math.round(durationSeconds * 10) / 10 : Math.round(durationSeconds)\n\t\tconst formattedSeconds = Number.isInteger(roundedSeconds)\n\t\t\t? String(Math.round(roundedSeconds))\n\t\t\t: roundedSeconds.toFixed(1)\n\t\treturn `${formattedSeconds}s`\n\t}\n\n\tconst totalSeconds = Math.round(durationMs / 1000)\n\tconst minutes = Math.floor(totalSeconds / 60)\n\tconst seconds = totalSeconds % 60\n\treturn `${minutes}m ${seconds}s`\n}\n", "import { type ScrollOffsetRestorationCache, ScrollWithOffsetRestoration, Stack } from \"@framerjs/fresco\"\nimport { dimensions } from \"@framerjs/fresco/tokens\"\nimport { assert, emptyArray } from \"@framerjs/shared\"\nimport { cx } from \"@linaria/core\"\nimport type { AgentAttachmentFile, AgentAttachmentImage } from \"app/agent/attachments.ts\"\nimport type { AgentInputSegment } from \"app/agent/editor/agentInputSchema.ts\"\nimport type { Agent, AgentID, AgentState } from \"app/ai/agents/Agent.ts\"\nimport type { AgentRequest } from \"app/ai/agents/types.ts\"\nimport type { LanguageModel } from \"app/ai/languageModels.ts\"\nimport type { AgentReasoningEffort } from \"app/ai/models.ts\"\nimport engine from \"document/engine.ts\"\nimport type { NodeID } from \"document/models/CanvasTree/index.ts\"\nimport { useCallback, useEffect, useRef, useState } from \"react\"\nimport { useIsViewOnly } from \"web/pages/project/permissions/useIsViewOnly.ts\"\nimport type { AgentSelectionMode } from \"../AgentChatPanel.tsx\"\nimport * as styles from \"./AgentChatMessages.styles.ts\"\nimport { AgentChatTurn } from \"./AgentChatTurn.tsx\"\nimport { useScrollSentinel } from \"./useScrollSentinel.ts\"\n\ninterface AgentChatMessagesProps {\n\tclassName?: string\n\tagentId: AgentID\n\tstate: AgentState\n\trequests: readonly AgentRequest[]\n\tscrollRestorationCache: ScrollOffsetRestorationCache\n\tactiveScopeId: NodeID\n\tfollowMode: boolean\n\tresetAutoScrollKey: number\n\thideCreditLimitError: boolean\n\tselectionMode?: AgentSelectionMode\n}\n\nexport function AgentChatMessages({\n\tclassName,\n\tagentId,\n\tstate,\n\trequests,\n\tactiveScopeId,\n\tscrollRestorationCache,\n\tfollowMode,\n\tresetAutoScrollKey,\n\thideCreditLimitError,\n\tselectionMode,\n}: AgentChatMessagesProps) {\n\tconst scrollContainerRef = useRef<HTMLDivElement>(null)\n\tconst messagesContentRef = useRef<HTMLDivElement>(null)\n\tconst sentinelRef = useRef<HTMLDivElement>(null)\n\tconst autoScrollEnabledRef = useRef(true)\n\n\tconst isViewOnly = useIsViewOnly(\"canDesign\")\n\n\tconst [isAtBottom, setIsAtBottom] = useState(false)\n\tconst [revertingRequestId, setRevertingRequestId] = useState<string | null>(null)\n\n\tconst isGenerating = state === \"generating\"\n\tconst hasMessages = requests.length > 0\n\n\tconst scrollToBottom = useCallback((instant = false) => {\n\t\tconst container = scrollContainerRef.current\n\t\tif (!container) return\n\n\t\tconst maxScrollTop = container.scrollHeight - container.clientHeight\n\t\tif (instant) {\n\t\t\tcontainer.scrollTop = maxScrollTop\n\t\t} else {\n\t\t\tcontainer.scrollTo({ top: maxScrollTop, behavior: \"smooth\" })\n\t\t}\n\t}, [])\n\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: Reset auto scroll behavior when the user submits a new prompt.\n\tuseEffect(() => {\n\t\tautoScrollEnabledRef.current = true\n\t}, [resetAutoScrollKey])\n\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: We want to read isGenerating but not to trigger the callback.\n\tuseEffect(() => {\n\t\t// Disable auto scroll when switching to a previously viewed conversation so ScrollWithOffsetRestoration\n\t\t// can restore the saved position. Enable auto scroll when switching to a conversation with no\n\t\t// saved position or if generating.\n\t\tautoScrollEnabledRef.current = isGenerating || !scrollRestorationCache.has(agentId)\n\t}, [agentId, scrollRestorationCache])\n\n\tconst handleBottomSentinelChange = useCallback((isIntersecting: boolean) => {\n\t\tautoScrollEnabledRef.current = isIntersecting\n\t\tsetIsAtBottom(isIntersecting)\n\t}, [])\n\n\t// When at the bottom of the scroll container within the threshold, auto scroll is enabled.\n\t// Small scrolls in the threshold don't disable the auto scroll.\n\tuseScrollSentinel({\n\t\tsentinelRef,\n\t\tscrollContainerRef,\n\t\tonChange: handleBottomSentinelChange,\n\t})\n\n\t// When the scroll container is resized and auto scroll is enabled we should scroll to the bottom.\n\tuseEffect(() => {\n\t\tconst container = scrollContainerRef.current\n\t\tif (!container) return\n\n\t\tconst resizeObserver = new ResizeObserver(() => {\n\t\t\tif (!autoScrollEnabledRef.current) return\n\t\t\tscrollToBottom(true)\n\t\t})\n\n\t\tresizeObserver.observe(container)\n\t\treturn () => resizeObserver.disconnect()\n\t}, [scrollToBottom])\n\n\tuseEffect(() => {\n\t\tconst content = messagesContentRef.current\n\t\tif (!content) return\n\n\t\tlet animationFrame: number | null = null\n\t\tconst scheduleScrollToBottom = () => {\n\t\t\tif (animationFrame !== null) return\n\t\t\tanimationFrame = requestAnimationFrame(() => {\n\t\t\t\tanimationFrame = null\n\t\t\t\tif (!autoScrollEnabledRef.current) return\n\t\t\t\tscrollToBottom(true)\n\t\t\t})\n\t\t}\n\n\t\tconst mutationObserver = new MutationObserver(scheduleScrollToBottom)\n\n\t\tmutationObserver.observe(content, { childList: true, subtree: true, characterData: true })\n\t\tscheduleScrollToBottom()\n\t\treturn () => {\n\t\t\tmutationObserver.disconnect()\n\t\t\tif (animationFrame !== null) {\n\t\t\t\tcancelAnimationFrame(animationFrame)\n\t\t\t}\n\t\t}\n\t}, [scrollToBottom])\n\n\tconst withStopGuard = useCallback(\n\t\tasync (requestId: string, fn: (agent: Agent) => Promise<void>) => {\n\t\t\tif (revertingRequestId) return\n\t\t\tconst agent = engine.stores.agentStore.getAgent(agentId)\n\t\t\tassert(agent, \"Agent not found\")\n\t\t\tsetRevertingRequestId(requestId)\n\t\t\ttry {\n\t\t\t\tif (agent.isBusy) await agent.stop()\n\t\t\t\tawait fn(agent)\n\t\t\t} finally {\n\t\t\t\tsetRevertingRequestId(null)\n\t\t\t}\n\t\t},\n\t\t[agentId, revertingRequestId],\n\t)\n\n\tconst stopAndReapplyRequest = useCallback(\n\t\t(request: AgentRequest) => withStopGuard(request.id, agent => agent.reapplyRequestChanges(request)),\n\t\t[withStopGuard],\n\t)\n\n\tconst stopAndRevertConversation = useCallback(\n\t\t(request: AgentRequest) =>\n\t\t\twithStopGuard(request.id, async agent => {\n\t\t\t\tconst messages = await agent.revertUntil(request)\n\t\t\t\tconst hasRemainingMessages = messages.length > 0 || agent.state !== \"idle\"\n\t\t\t\tconst images = request.images ?? []\n\t\t\t\tconst files = request.files ?? []\n\t\t\t\tif (hasRemainingMessages) {\n\t\t\t\t\tengine.stores.agentStore.prefillChatInput(agentId, request.parts, images, files)\n\t\t\t\t} else {\n\t\t\t\t\tengine.stores.agentStore.prefillNewChatInput(request.parts, images, files)\n\t\t\t\t\tengine.stores.agentStore.activeChatAgentId = undefined\n\t\t\t\t\tengine.stores.agentStore.dismiss(agent.id)\n\t\t\t\t}\n\t\t\t}),\n\t\t[agentId, withStopGuard],\n\t)\n\n\tconst stopAndRevertChanges = (request: AgentRequest) =>\n\t\twithStopGuard(request.id, agent => agent.revertRequestChanges(request))\n\n\tconst retryRequest = useCallback(async () => {\n\t\tconst agent = engine.stores.agentStore.getAgent(agentId)\n\t\tif (!agent) return\n\n\t\tautoScrollEnabledRef.current = true\n\n\t\tawait agent.resumeLastRequest()\n\t}, [agentId])\n\n\tconst handleEditRequest = useCallback(\n\t\tasync (\n\t\t\trequest: AgentRequest,\n\t\t\tparts: readonly AgentInputSegment[],\n\t\t\tmodel: LanguageModel,\n\t\t\treasoningEffort: AgentReasoningEffort,\n\t\t\timages: readonly AgentAttachmentImage[],\n\t\t\tfiles: readonly AgentAttachmentFile[],\n\t\t) => {\n\t\t\tconst agent = engine.stores.agentStore.getAgent(agentId)\n\t\t\tif (!agent) return\n\n\t\t\tawait agent.stop()\n\t\t\tawait agent.revertMessageUntil(request)\n\t\t\tvoid agent.send(parts, request.selection ?? emptyArray(), model, reasoningEffort, images, files)\n\t\t},\n\t\t[agentId],\n\t)\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cx(\n\t\t\t\tstyles.container,\n\t\t\t\tclassName,\n\t\t\t\t!hasMessages && styles.containerEmpty,\n\t\t\t\tstyles.fade,\n\t\t\t\t!isAtBottom && styles.fadeVisible,\n\t\t\t)}\n\t\t>\n\t\t\t<ScrollWithOffsetRestoration\n\t\t\t\tref={scrollContainerRef}\n\t\t\t\tclassName={styles.scroll}\n\t\t\t\trestorationID={agentId}\n\t\t\t\trestorationCache={scrollRestorationCache}\n\t\t\t>\n\t\t\t\t<Stack\n\t\t\t\t\tref={messagesContentRef}\n\t\t\t\t\tclassName={styles.messagesContent}\n\t\t\t\t\tdirection=\"column\"\n\t\t\t\t\tgap={dimensions.css.agentChatMessagesGap}\n\t\t\t\t>\n\t\t\t\t\t{requests.map((request, i) => {\n\t\t\t\t\t\tconst isLastRequest = i === requests.length - 1\n\t\t\t\t\t\tconst canRevert = !isViewOnly && (request.done || (isLastRequest && isGenerating))\n\t\t\t\t\t\tconst isReverted =\n\t\t\t\t\t\t\t(request.revertedChangeset?.length ?? 0) > 0 || (request.revertedCodeFileChanges?.length ?? 0) > 0\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<AgentChatTurn\n\t\t\t\t\t\t\t\tagentId={agentId}\n\t\t\t\t\t\t\t\tscrollContainerRef={scrollContainerRef}\n\t\t\t\t\t\t\t\tisGenerating={isGenerating}\n\t\t\t\t\t\t\t\tisLatestTurn={isLastRequest}\n\t\t\t\t\t\t\t\tkey={request.id}\n\t\t\t\t\t\t\t\trequest={request}\n\t\t\t\t\t\t\t\tactiveScopeId={activeScopeId}\n\t\t\t\t\t\t\t\tfollowMode={followMode}\n\t\t\t\t\t\t\t\tonRevertConversation={canRevert ? () => stopAndRevertConversation(request) : undefined}\n\t\t\t\t\t\t\t\tonRevertChanges={canRevert ? () => stopAndRevertChanges(request) : undefined}\n\t\t\t\t\t\t\t\tonReapply={canRevert && isReverted ? () => stopAndReapplyRequest(request) : undefined}\n\t\t\t\t\t\t\t\tisReverting={revertingRequestId === request.id}\n\t\t\t\t\t\t\t\tonRetry={isLastRequest ? retryRequest : undefined}\n\t\t\t\t\t\t\t\tonEditRequest={handleEditRequest}\n\t\t\t\t\t\t\t\tselectionMode={selectionMode}\n\t\t\t\t\t\t\t\thideCreditLimitError={isLastRequest ? hideCreditLimitError : true}\n\t\t\t\t\t\t\t\tstyle={isLastRequest ? { minHeight: \"100%\", paddingBottom: dimensions.css.panelPadding } : undefined}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)\n\t\t\t\t\t})}\n\t\t\t\t\t<div ref={sentinelRef} aria-hidden className={styles.sentinel} />\n\t\t\t\t</Stack>\n\t\t\t</ScrollWithOffsetRestoration>\n\t\t</div>\n\t)\n}\n", "import \"useScrollSentinel.styles_qwddr3.wyw.css\"; export const sentinel = \"sentinel_s13uxm3v\";", "import \"AgentChatMessages.styles_1t8t6tf.wyw.css\"; import { cx } from \"@linaria/core\";\nimport { sentinel as sentinelBase } from \"./useScrollSentinel.styles.ts\";\nexport const container = \"container_c12dx4e3\";\nexport const containerEmpty = \"containerEmpty_cgdfxrr\";\nexport const scroll = \"scroll_sohnqqg\";\nexport const messagesContent = \"messagesContent_m1tnjerf\";\nexport const sentinel = cx(sentinelBase, \"sentinel_sb4ygtw\");\nexport const fade = \"fade_f1d1xzn0\";\nexport const fadeVisible = \"fadeVisible_f1oiye8c\";", "import { IconAgentError, IconAgentRemove, Scroll, Spinner, Stack } from \"@framerjs/fresco\"\nimport { dimensions } from \"@framerjs/fresco/tokens/dimensions\"\nimport { cx } from \"@linaria/core\"\nimport type { AttachmentStatus } from \"app/agent/hooks/useAttachments.ts\"\nimport { AnimatePresence } from \"framer-motion\"\nimport { useCallback, useState } from \"react\"\nimport * as styles from \"./AttachmentList.styles.ts\"\nimport { ImageLightbox } from \"./ImageLightbox.tsx\"\n\nexport interface AttachmentListImage {\n\tsrc: string\n\talt: string\n\tattachmentIndex?: number\n\tstatus?: AttachmentStatus\n}\ninterface AttachmentListProps {\n\tclassName?: string\n\titems: readonly AttachmentListImage[]\n\tonRemoveImage?: (index: number) => void\n\t/** When false, items are non-interactive and removed from the tab order. */\n\tinteractive?: boolean\n}\n\nexport function AttachmentList({ className, items, onRemoveImage, interactive = true }: AttachmentListProps) {\n\tconst [lightboxImage, setLightboxImage] = useState<{ src: string; alt: string } | null>(null)\n\n\treturn (\n\t\t<>\n\t\t\t<Scroll direction=\"horizontal\" className={cx(styles.listContainer, className)}>\n\t\t\t\t<Stack direction=\"row\" gap={dimensions.css.panelGapSmall}>\n\t\t\t\t\t{items.map((item, index) => (\n\t\t\t\t\t\t<AttachmentListItem\n\t\t\t\t\t\t\tkey={item.src}\n\t\t\t\t\t\t\t{...item}\n\t\t\t\t\t\t\tonClick={\n\t\t\t\t\t\t\t\t!interactive || (item.status && item.status !== \"uploaded\")\n\t\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t\t: () => setLightboxImage({ src: item.src, alt: item.alt })\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tonRemoveImage={onRemoveImage && interactive ? () => onRemoveImage?.(index) : undefined}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</Stack>\n\t\t\t</Scroll>\n\n\t\t\t<AnimatePresence>\n\t\t\t\t{lightboxImage !== null && (\n\t\t\t\t\t<ImageLightbox\n\t\t\t\t\t\tkey=\"lightbox\"\n\t\t\t\t\t\tsrc={lightboxImage.src}\n\t\t\t\t\t\talt={lightboxImage.alt}\n\t\t\t\t\t\tonClose={() => setLightboxImage(null)}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</AnimatePresence>\n\t\t</>\n\t)\n}\n\ninterface AttachmentListItemProps {\n\tsrc: string\n\talt: string\n\tstatus?: AttachmentStatus\n\tonClick?: () => void\n\tonRemoveImage?: () => void\n}\n\nfunction AttachmentListItem({ src, alt, status, onClick, onRemoveImage }: AttachmentListItemProps) {\n\tconst uploading = status === \"uploading\"\n\tconst error = status === \"error\"\n\tconst shouldShowRemoveButton = !uploading && onRemoveImage\n\n\tconst handleClick = useCallback(\n\t\t(e: React.MouseEvent) => {\n\t\t\te.stopPropagation()\n\t\t\tonClick?.()\n\t\t},\n\t\t[onClick],\n\t)\n\n\tconst handleKeyDown = useCallback(\n\t\t(e: React.KeyboardEvent) => {\n\t\t\tif (e.key === \"Enter\" || e.key === \" \") {\n\t\t\t\tif (e.target !== e.currentTarget) return\n\t\t\t\te.preventDefault()\n\t\t\t\te.stopPropagation()\n\t\t\t\tonClick?.()\n\t\t\t}\n\t\t},\n\t\t[onClick],\n\t)\n\n\tconst handleRemoveImage = useCallback(\n\t\t(e: React.MouseEvent) => {\n\t\t\te.stopPropagation()\n\t\t\tonRemoveImage?.()\n\t\t},\n\t\t[onRemoveImage],\n\t)\n\n\tconst interactiveProps = onClick\n\t\t? {\n\t\t\t\trole: \"button\" as const,\n\t\t\t\ttabIndex: 0,\n\t\t\t\tonClick: handleClick,\n\t\t\t\tonKeyDown: handleKeyDown,\n\t\t\t}\n\t\t: {}\n\n\treturn (\n\t\t<div className={cx(styles.itemContainer, onClick && styles.itemClickable)} {...interactiveProps}>\n\t\t\t<div className={styles.itemImageContainer}>\n\t\t\t\t<img\n\t\t\t\t\tsrc={src}\n\t\t\t\t\talt={alt}\n\t\t\t\t\tclassName={cx(styles.itemImage, uploading && styles.itemImageUploading, error && styles.itemImageDimmed)}\n\t\t\t\t\tdecoding=\"async\"\n\t\t\t\t\tdraggable={false}\n\t\t\t\t/>\n\t\t\t</div>\n\n\t\t\t{uploading && (\n\t\t\t\t<div className={styles.statusOverlay}>\n\t\t\t\t\t<Spinner size=\"normal\" inline />\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{error && (\n\t\t\t\t<div className={styles.statusOverlay}>\n\t\t\t\t\t<IconAgentError />\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{shouldShowRemoveButton && (\n\t\t\t\t<button type=\"button\" className={styles.itemRemoveButton} onClick={handleRemoveImage} aria-label=\"Remove image\">\n\t\t\t\t\t<IconAgentRemove />\n\t\t\t\t</button>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n", "import \"AttachmentList.styles_12fu65o.wyw.css\"; export const attachmentSize = 40;\nexport const listContainer = \"listContainer_l1inf3tv\";\nexport const itemRemoveButton = \"itemRemoveButton_i1oj4rqb\";\nexport const itemContainer = \"itemContainer_iu6qdk6\";\nexport const itemImageContainer = \"itemImageContainer_i1azg95d\";\nexport const itemImage = \"itemImage_i9s3jhf\";\nexport const itemImageUploading = \"itemImageUploading_iqbhftr\";\nexport const itemImageDimmed = \"itemImageDimmed_i10qjr8z\";\nexport const itemClickable = \"itemClickable_i7bq8ow\";\nexport const statusOverlay = \"statusOverlay_s1723gaw\";", "import { IconAgentRemove, PortalWithTheme, Scroll } from \"@framerjs/fresco\"\nimport {\n\tpopoverScaleInDurationMs,\n\tpopoverScaleInInitialScale,\n\tpopoverScaleOutDurationMs,\n} from \"@framerjs/fresco/src/components/popoverAnimation.ts\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport { motion, type Transition } from \"framer-motion\"\nimport type React from \"react\"\nimport { useCallback, useLayoutEffect, useRef } from \"react\"\nimport * as styles from \"./ImageLightbox.styles.ts\"\n\ninterface ImageLightboxProps {\n\tsrc: string\n\talt: string\n\tonClose: () => void\n}\n\nconst enterTransition: Transition = { duration: popoverScaleInDurationMs / 1000, ease: [0.16, 1, 0.3, 1] }\nconst exitTransition: Transition = { duration: popoverScaleOutDurationMs / 1000, ease: \"easeOut\" }\n\nexport function ImageLightbox({ src, alt, onClose }: ImageLightboxProps) {\n\tconst backdropRef = useRef<HTMLDivElement>(null)\n\n\tuseLayoutEffect(() => {\n\t\tbackdropRef.current?.focus()\n\t}, [])\n\n\tconst handleClick = useCallback(\n\t\t(event: React.MouseEvent) => {\n\t\t\tevent.stopPropagation()\n\t\t\tif (event.target !== event.currentTarget) return\n\t\t\tonClose()\n\t\t},\n\t\t[onClose],\n\t)\n\n\tconst handleKeyDown = useCallback(\n\t\t(event: React.KeyboardEvent) => {\n\t\t\tevent.stopPropagation()\n\t\t\tif (event.key === \"Escape\") onClose()\n\t\t},\n\t\t[onClose],\n\t)\n\n\treturn (\n\t\t<PortalWithTheme>\n\t\t\t{/* biome-ignore lint/nursery/noStaticElementInteractions: Backdrop click-to-close, close button exists for a11y */}\n\t\t\t{/* biome-ignore lint/a11y/useKeyWithClickEvents: onKeyDown handles Escape */}\n\t\t\t<div\n\t\t\t\tref={backdropRef}\n\t\t\t\tclassName={styles.backdrop}\n\t\t\t\trole=\"presentation\"\n\t\t\t\ttabIndex={-1}\n\t\t\t\tonClick={handleClick}\n\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t>\n\t\t\t\t<motion.div\n\t\t\t\t\tclassName={styles.backdropOverlay}\n\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\tanimate={{ opacity: 1, transition: enterTransition }}\n\t\t\t\t\texit={{ opacity: 0, transition: exitTransition }}\n\t\t\t\t/>\n\t\t\t\t<motion.div\n\t\t\t\t\tclassName={styles.container}\n\t\t\t\t\tinitial={{ opacity: 0, scale: popoverScaleInInitialScale }}\n\t\t\t\t\tanimate={{ opacity: 1, scale: 1, transition: enterTransition }}\n\t\t\t\t\texit={{ opacity: 0, scale: popoverScaleInInitialScale, transition: exitTransition }}\n\t\t\t\t\t// biome-ignore lint/a11y/useSemanticElements: <dialog> has aggressive UA styles that break portal layout\n\t\t\t\t\trole=\"dialog\"\n\t\t\t\t\taria-modal=\"true\"\n\t\t\t\t\taria-label={alt}\n\t\t\t\t>\n\t\t\t\t\t<Scroll className={styles.scrollArea}>\n\t\t\t\t\t\t<img src={src} alt={alt} className={styles.image} decoding=\"async\" draggable={false} />\n\t\t\t\t\t</Scroll>\n\t\t\t\t\t<button type=\"button\" className={styles.closeButton} onClick={onClose} aria-label={Dictionary.Close}>\n\t\t\t\t\t\t<IconAgentRemove />\n\t\t\t\t\t</button>\n\t\t\t\t</motion.div>\n\t\t\t</div>\n\t\t</PortalWithTheme>\n\t)\n}\n", "import \"ImageLightbox.styles_1d2f4f1.wyw.css\"; export const backdrop = \"backdrop_bke4zsm\";\nexport const backdropOverlay = \"backdropOverlay_b1pbnos1\";\nexport const container = \"container_c13hyp7o\";\nexport const scrollArea = \"scrollArea_so3jir0\";\nexport const image = \"image_i1ivjxcp\";\nexport const closeButton = \"closeButton_c99v13f\";", "import { IconChevronRight, Stack } from \"@framerjs/fresco\"\nimport { colors, dimensions } from \"@framerjs/fresco/tokens\"\nimport { cx } from \"@linaria/core\"\nimport { Children, Fragment, type PropsWithChildren, type ReactNode, isValidElement } from \"react\"\nimport { AgentButton } from \"../AgentButton/AgentButton.tsx\"\nimport * as styles from \"./AgentRow.styles.ts\"\n\ninterface ListProps extends PropsWithChildren {\n\tdivider?: boolean\n}\n\nconst List = ({ children, divider = true }: ListProps) => {\n\tconst childArray = flattenChildren(children)\n\n\treturn (\n\t\t<Stack direction=\"column\" gap={dimensions.css.modalGap} className={styles.list}>\n\t\t\t{divider\n\t\t\t\t? childArray.map((child, index) => (\n\t\t\t\t\t\t<Fragment key={index}>\n\t\t\t\t\t\t\t{child}\n\t\t\t\t\t\t\t{index < childArray.length - 1 && <div className={styles.divider} />}\n\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t))\n\t\t\t\t: children}\n\t\t</Stack>\n\t)\n}\n\nfunction flattenChildren(children: ReactNode): ReactNode[] {\n\tif (children == null) return []\n\n\tconst result: ReactNode[] = []\n\n\tChildren.forEach(children, child => {\n\t\tif (child == null || child === false) return\n\n\t\tif (isValidElement(child) && child.type === Fragment) {\n\t\t\tresult.push(...flattenChildren(child.props.children))\n\t\t} else {\n\t\t\tresult.push(child)\n\t\t}\n\t})\n\n\treturn result\n}\n\ninterface ItemProps extends PropsWithChildren {\n\tonClick?: () => void\n\tclassName?: string\n}\n\nconst Item = ({ children, onClick, className }: ItemProps) => {\n\treturn (\n\t\t<Stack direction=\"row\" gap={dimensions.css.modalGap} className={cx(styles.container, className)} onClick={onClick}>\n\t\t\t{children}\n\t\t</Stack>\n\t)\n}\n\ninterface TextProps extends PropsWithChildren {\n\tclassName?: string\n\tcontainerClassName?: string\n}\n\nconst Text = ({ children, className, containerClassName }: TextProps) => {\n\treturn (\n\t\t<div className={cx(styles.textContainer, containerClassName)}>\n\t\t\t<span className={cx(styles.text, className)}>{children}</span>\n\t\t</div>\n\t)\n}\n\ninterface IconProps extends PropsWithChildren {\n\tcolor?: string\n\ttinted?: boolean\n\tclassName?: string\n}\n\nconst Icon = ({ children, color = colors.inputIcon, tinted, className }: IconProps) => {\n\treturn (\n\t\t<div className={cx(styles.icon, tinted && styles.tintedIcon, className)} style={{ color }}>\n\t\t\t{children}\n\t\t</div>\n\t)\n}\n\ninterface ChevronButtonProps {\n\tonClick: () => void\n}\n\nconst ChevronButton = ({ onClick }: ChevronButtonProps) => {\n\treturn (\n\t\t<AgentButton variant=\"secondary\" onClick={onClick}>\n\t\t\t<IconChevronRight />\n\t\t</AgentButton>\n\t)\n}\n\nexport const AgentRow = {\n\tList,\n\tItem,\n\tText,\n\tIcon,\n\tChevronButton,\n}\n", "import \"AgentButton.styles_1635pg.wyw.css\"; import { cx } from \"@linaria/core\";\nexport const base = \"base_b1466p6n\";\nexport const primary = cx(base, \"primary_p1fqlfzg\");\nexport const secondary = cx(base, \"secondary_szcmhrk\");\nexport const tertiary = cx(base, \"tertiary_titfu8l\");\nexport const sharedIconColors = \"sharedIconColors_sppxv2i\";\nexport const outline = \"outline_o1ki183q\";\nexport const disabled = \"disabled_d5azfm2\";", "import { CenterChild } from \"@framerjs/fresco\"\nimport { cx } from \"library/modules/cx.ts\"\nimport * as styles from \"./AgentButton.styles.ts\"\n\ntype AgentButtonVariant = \"primary\" | \"secondary\" | \"tertiary\" | \"outline\" | \"clean\"\n\ninterface AgentButtonProps {\n\tclassName?: string\n\tvariant: AgentButtonVariant\n\tchildren: React.ReactNode\n\tdisabled?: boolean\n\t\"aria-label\"?: string\n\tonClick?: (e: React.MouseEvent<HTMLButtonElement>) => void\n\tonMouseDown?: (event: React.MouseEvent<HTMLButtonElement>) => void\n\tonKeyDown?: (event: React.KeyboardEvent<HTMLButtonElement>) => void\n}\n\nexport const AgentButton = ({\n\tclassName,\n\tvariant,\n\tdisabled,\n\tchildren,\n\t\"aria-label\": ariaLabel,\n\tonClick,\n\tonMouseDown,\n\tonKeyDown,\n}: AgentButtonProps) => {\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tclassName={cx(styles.base, variantStyles[variant], disabled && variant !== \"clean\" && styles.disabled, className)}\n\t\t\tonClick={onClick}\n\t\t\tonMouseDown={onMouseDown}\n\t\t\tonKeyDown={onKeyDown}\n\t\t\tdisabled={disabled}\n\t\t\taria-label={ariaLabel}\n\t\t>\n\t\t\t<CenterChild>{children}</CenterChild>\n\t\t</button>\n\t)\n}\n\nconst variantStyles: Record<AgentButtonProps[\"variant\"], string> = {\n\tprimary: styles.primary,\n\tsecondary: styles.secondary,\n\ttertiary: styles.tertiary,\n\toutline: styles.outline,\n\tclean: \"\",\n}\n", "import \"AgentRow.styles_1x2hcd2.wyw.css\"; export const list = \"list_lfmb6wu\";\nexport const container = \"container_cj27ohz\";\nexport const textContainer = \"textContainer_tas4uwj\";\nexport const text = \"text_t178831y\";\nexport const icon = \"icon_i1hwk49a\";\nexport const tintedIcon = \"tintedIcon_tqbwgo2\";\nexport const divider = \"divider_dbaypx2\";", "import \"PromptPartsText.styles_zrio96.wyw.css\"; export const selectionTagTopOffset = -0.5;\nexport const selectionTagWrapper = \"selectionTagWrapper_s925u8z\";", "import { IconAgentComponentBadge, IconLayerLink, Stack } from \"@framerjs/fresco\"\nimport { cx } from \"@linaria/core\"\nimport { isVideoFileName } from \"app/agent/attachments.ts\"\nimport pluralize from \"pluralize\"\nimport type { ComponentType } from \"react\"\nimport { isUndefined } from \"utils/typeChecks.ts\"\nimport { pagePathLabel } from \"../../utils/pathToName.ts\"\nimport { IconAgentAssetLayoutTemplate } from \"../assets/IconAgentAssetLayoutTemplate.tsx\"\nimport { IconAgentLayerText } from \"../layers/AgentLayerIcons.tsx\"\nimport { IconAgentLayerGrid } from \"../layers/IconAgentLayerGrid.tsx\"\nimport type { LayerIconName } from \"../layers/layerIconNames.ts\"\nimport { getLayerIcons } from \"../layers/layerIcons.ts\"\nimport * as styles from \"./SelectionTag.styles.ts\"\nimport { IconAgentCMS } from \"./components/IconAgentCMS.tsx\"\nimport { IconAgentComponent } from \"./components/IconAgentComponent.tsx\"\nimport { IconAgentMultiSelect } from \"./components/IconAgentMultiSelect.tsx\"\nimport { IconAgentPage } from \"./components/IconAgentPage.tsx\"\nimport { IconAgentVideo } from \"./components/IconAgentVideo.tsx\"\n\ninterface SingleLayerProps {\n\tnodeName: string\n\tlayerIconName: LayerIconName\n\tisComponent: boolean\n\tlayerCount?: undefined\n}\n\ninterface GroupedLayerProps {\n\tlayerCount: number\n\tnodeName?: undefined\n\tlayerIconName?: undefined\n\tisComponent?: undefined\n}\n\ntype Props = SingleLayerProps | GroupedLayerProps\n\nconst tagGap = 3\nconst agentLayerIcons = getLayerIcons(true)\n\nexport function CanvasSelectionTag(props: Props) {\n\tconst isGrouped = !isUndefined(props.layerCount)\n\n\tconst Icon = isGrouped\n\t\t? IconAgentMultiSelect\n\t\t: props.isComponent\n\t\t\t? IconAgentComponentBadge\n\t\t\t: props.layerIconName\n\t\t\t\t? agentLayerIcons[props.layerIconName]\n\t\t\t\t: null\n\n\treturn (\n\t\t<Stack\n\t\t\tdirection=\"row\"\n\t\t\tgap={tagGap}\n\t\t\talignItems=\"center\"\n\t\t\tclassName={cx(styles.container, props.isComponent && styles.containerComponent)}\n\t\t>\n\t\t\t{Icon && (\n\t\t\t\t<span className={styles.icon}>\n\t\t\t\t\t<Icon />\n\t\t\t\t</span>\n\t\t\t)}\n\t\t\t<span className={styles.label}>{isGrouped ? `${props.layerCount} layers` : props.nodeName}</span>\n\t\t</Stack>\n\t)\n}\n\ninterface CmsTableSelectionTagProps {\n\tcollectionName: string\n\tcellCount: number\n}\n\nexport function CmsTableSelectionTag({ collectionName, cellCount }: CmsTableSelectionTagProps) {\n\tconst cellLabel = `${cellCount} ${pluralize(\"cell\", cellCount)}`\n\n\treturn (\n\t\t<Stack direction=\"row\" gap={tagGap} alignItems=\"center\" className={styles.container}>\n\t\t\t<span className={styles.icon}>\n\t\t\t\t<IconAgentLayerGrid />\n\t\t\t</span>\n\t\t\t<span className={styles.label}>{`${collectionName}: ${cellLabel}`}</span>\n\t\t</Stack>\n\t)\n}\n\nexport function CmsCollectionTag({ collectionName }: { collectionName: string }) {\n\treturn (\n\t\t<Stack direction=\"row\" gap={tagGap} alignItems=\"center\" className={styles.container}>\n\t\t\t<span className={styles.icon}>\n\t\t\t\t<IconAgentCMS />\n\t\t\t</span>\n\t\t\t<span className={styles.label}>{collectionName}</span>\n\t\t</Stack>\n\t)\n}\n\nexport function PageTag({ name }: { name: string }) {\n\tconst displayName = pagePathLabel(name)\n\n\treturn (\n\t\t<Stack direction=\"row\" gap={tagGap} alignItems=\"center\" className={styles.container}>\n\t\t\t<span className={styles.icon}>\n\t\t\t\t<IconAgentPage />\n\t\t\t</span>\n\t\t\t<span className={styles.label}>{displayName}</span>\n\t\t</Stack>\n\t)\n}\n\nexport function ComponentTag({ name }: { name: string }) {\n\treturn (\n\t\t<Stack direction=\"row\" gap={tagGap} alignItems=\"center\" className={cx(styles.container, styles.containerComponent)}>\n\t\t\t<span className={styles.icon}>\n\t\t\t\t<IconAgentComponent />\n\t\t\t</span>\n\t\t\t<span className={styles.label}>{name}</span>\n\t\t</Stack>\n\t)\n}\n\nfunction StyleTagBase({ name, icon: Icon }: { name: string; icon: ComponentType }) {\n\treturn (\n\t\t<Stack direction=\"row\" gap={tagGap} alignItems=\"center\" className={styles.container}>\n\t\t\t<span className={styles.icon}>\n\t\t\t\t<Icon />\n\t\t\t</span>\n\t\t\t<span className={styles.label}>{name}</span>\n\t\t</Stack>\n\t)\n}\n\nexport function TextStyleTag({ name }: { name: string }) {\n\treturn <StyleTagBase name={name} icon={IconAgentLayerText} />\n}\n\nexport function LinkStyleTag({ name }: { name: string }) {\n\treturn <StyleTagBase name={name} icon={IconLayerLink} />\n}\n\nexport function ColorStyleTag({ name, color }: { name: string; color: string }) {\n\treturn (\n\t\t<Stack direction=\"row\" gap={tagGap} alignItems=\"center\" className={styles.container}>\n\t\t\t<span className={styles.colorSwatch} style={{ backgroundColor: color }} />\n\t\t\t<span className={styles.label}>{name}</span>\n\t\t</Stack>\n\t)\n}\n\nexport function LayoutTemplateTag({ name }: { name: string }) {\n\treturn <StyleTagBase name={name} icon={IconAgentAssetLayoutTemplate} />\n}\n\nexport function SkillTag({ label }: { label: string }) {\n\treturn (\n\t\t<Stack direction=\"row\" gap={tagGap} alignItems=\"center\" className={styles.container}>\n\t\t\t<span className={styles.label}>{label}</span>\n\t\t</Stack>\n\t)\n}\n\ninterface FileAttachmentTagProps {\n\tname: string\n}\n\nexport function FileAttachmentTag({ name }: FileAttachmentTagProps) {\n\tconst dotIndex = name.lastIndexOf(\".\")\n\tconst baseName = dotIndex > 0 ? name.slice(0, dotIndex) : name\n\tconst extension = dotIndex > 0 ? name.slice(dotIndex) : \"\"\n\tconst isVideo = isVideoFileName(name)\n\n\treturn (\n\t\t<Stack direction=\"row\" gap={tagGap} alignItems=\"center\" className={cx(styles.container, styles.containerFile)}>\n\t\t\t<span className={styles.icon}>{isVideo ? <IconAgentVideo /> : <IconAgentPage />}</span>\n\t\t\t<span className={styles.label}>\n\t\t\t\t<span className={styles.fileNameBase}>{baseName}</span>\n\t\t\t\t{extension && <span>{extension}</span>}\n\t\t\t</span>\n\t\t</Stack>\n\t)\n}\n", "import type { SVGProps } from \"react\"\n\nexport function IconAgentLayerCollectionItem(props: SVGProps<SVGSVGElement>) {\n\treturn (\n\t\t<svg role=\"presentation\" xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" fill=\"none\" {...props}>\n\t\t\t<path\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\tfillOpacity={0.2}\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\td=\"M1.5 8.75v-5.5C1.5 1.869 3.515.75 6 .75s4.5 1.119 4.5 2.5v5.5m0 0c0 1.381-2.015 2.5-4.5 2.5s-4.5-1.119-4.5-2.5\"\n\t\t\t/>\n\t\t\t<path fill=\"transparent\" stroke=\"currentColor\" d=\"M10.25 3.25c0 1.105-1.903 2-4.25 2s-4.25-.895-4.25-2\" />\n\t\t</svg>\n\t)\n}\n", "import type { SVGProps } from \"react\"\n\nexport function IconAgentLayerFormCheckbox(props: SVGProps<SVGSVGElement>) {\n\treturn (\n\t\t<svg role=\"presentation\" xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" fill=\"none\" {...props}>\n\t\t\t<path\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\td=\"m1.25 5.5 2.189 2.189a1.5 1.5 0 0 0 2.122 0L10.5 2.75\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n", "import type { SVGProps } from \"react\"\n\nexport function IconAgentLayerOverlay(props: SVGProps<SVGSVGElement>) {\n\treturn (\n\t\t<svg role=\"presentation\" xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" fill=\"none\" {...props}>\n\t\t\t<g stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"1.5\">\n\t\t\t\t<path\n\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\tfillOpacity={0.2}\n\t\t\t\t\td=\"M4.25 2.25a1.5 1.5 0 0 1 1.5-1.5h4a1.5 1.5 0 0 1 1.5 1.5v4a1.5 1.5 0 0 1-1.5 1.5h-4a1.5 1.5 0 0 1-1.5-1.5Z\"\n\t\t\t\t/>\n\t\t\t\t<path\n\t\t\t\t\tfill=\"transparent\"\n\t\t\t\t\td=\"M8 7.75v2a1.5 1.5 0 0 1-1.5 1.5h-4A1.5 1.5 0 0 1 1 9.75v-4a1.5 1.5 0 0 1 1.5-1.5h1.75\"\n\t\t\t\t/>\n\t\t\t</g>\n\t\t</svg>\n\t)\n}\n", "import type { SVGProps } from \"react\"\n\nexport function IconAgentLayerPlaceholder(props: SVGProps<SVGSVGElement>) {\n\treturn (\n\t\t<svg role=\"presentation\" xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" fill=\"none\" {...props}>\n\t\t\t<path\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\tfillOpacity={0.2}\n\t\t\t\td=\"M.75 3.75a3 3 0 0 1 3-3h4.5a3 3 0 0 1 3 3v4.5a3 3 0 0 1-3 3h-4.5a3 3 0 0 1-3-3Z\"\n\t\t\t/>\n\t\t\t<path\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\td=\"M1 4V3a2 2 0 0 1 2-2h1M10.75 4V3a2 2 0 0 0-2-2h-1M10.75 7.75v1a2 2 0 0 1-2 2h-1M1 7.75v1a2 2 0 0 0 2 2h1\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n", "import {\n\tIconLayerBoolean,\n\tIconLayerBreakpoint,\n\tIconLayerCheckbox,\n\tIconLayerCollectionItem,\n\tIconLayerComponent,\n\tIconLayerForm,\n\tIconLayerFormContainer,\n\tIconLayerFormInput,\n\tIconLayerFormSelect,\n\tIconLayerFrame,\n\tIconLayerGrid,\n\tIconLayerGroup,\n\tIconLayerImageFill,\n\tIconLayerLabel,\n\tIconLayerMasonry,\n\tIconLayerPath,\n\tIconLayerPlaceholder,\n\tIconLayerPolygon,\n\tIconLayerRadio,\n\tIconLayerRect,\n\tIconLayerRound,\n\tIconLayerSVG,\n\tIconLayerShader,\n\tIconLayerStack,\n\tIconLayerStackHorizontal,\n\tIconLayerStackWithData,\n\tIconLayerStackWrapHorizontal,\n\tIconLayerStackWrapVertical,\n\tIconLayerStar,\n\tIconLayerText,\n\tIconLayerVector,\n\tIconOverlay,\n} from \"@framerjs/fresco\"\nimport { IconAgentCMS } from \"../agentPanel/components/IconAgentCMS.tsx\"\nimport { IconAgentComponent } from \"../agentPanel/components/IconAgentComponent.tsx\"\nimport {\n\tIconAgentBreakpointLayoutTemplate,\n\tIconAgentLayerBoolean,\n\tIconAgentLayerForm,\n\tIconAgentLayerFormInput,\n\tIconAgentLayerFormLabel,\n\tIconAgentLayerFormRadio,\n\tIconAgentLayerFormSelect,\n\tIconAgentLayerFrame,\n\tIconAgentLayerImage,\n\tIconAgentLayerMasonryStackWrapVertical,\n\tIconAgentLayerPath,\n\tIconAgentLayerPolygon,\n\tIconAgentLayerRect,\n\tIconAgentLayerRound,\n\tIconAgentLayerShader,\n\tIconAgentLayerStackHorizontal,\n\tIconAgentLayerStackVertical,\n\tIconAgentLayerStackWrapHorizontal,\n\tIconAgentLayerStar,\n\tIconAgentLayerText,\n\tIconAgentLayerVector,\n\tIconAgentLayerViewBox,\n} from \"./AgentLayerIcons.tsx\"\nimport { IconAgentLayerCollectionItem } from \"./IconAgentLayerCollectionItem.tsx\"\nimport { IconAgentLayerFormCheckbox } from \"./IconAgentLayerFormCheckbox.tsx\"\nimport { IconAgentLayerGrid } from \"./IconAgentLayerGrid.tsx\"\nimport { IconAgentLayerOverlay } from \"./IconAgentLayerOverlay.tsx\"\nimport { IconAgentLayerPlaceholder } from \"./IconAgentLayerPlaceholder.tsx\"\nimport type { LayerIconName } from \"./layerIconNames.ts\"\n\nconst defaultLayerIcons: Record<LayerIconName, React.FC> = {\n\tcomponent: IconLayerComponent,\n\tlabel: IconLayerLabel,\n\tcheckbox: IconLayerCheckbox,\n\tradio: IconLayerRadio,\n\tbreakpoint: IconLayerBreakpoint,\n\tgrid: IconLayerGrid,\n\tmasonry: IconLayerMasonry,\n\tstack: IconLayerStack,\n\t\"stack-horizontal\": IconLayerStackHorizontal,\n\t\"stack-with-data\": IconLayerStackWithData,\n\t\"stack-wrap-horizontal\": IconLayerStackWrapHorizontal,\n\t\"stack-wrap-vertical\": IconLayerStackWrapVertical,\n\tform: IconLayerForm,\n\tframe: IconLayerFrame,\n\t\"frame-round\": IconLayerRound,\n\ttext: IconLayerText,\n\tsvg: IconLayerSVG,\n\tpath: IconLayerPath,\n\tplaceholder: IconLayerPlaceholder,\n\tboolean: IconLayerBoolean,\n\tstar: IconLayerStar,\n\tpolygon: IconLayerPolygon,\n\toval: IconLayerRound,\n\t// @FIXME: rename the icon\n\toverlay: IconOverlay,\n\trectangle: IconLayerRect,\n\timage: IconLayerImageFill,\n\tgroup: IconLayerGroup,\n\t\"form-container\": IconLayerFormContainer,\n\t\"form-input\": IconLayerFormInput,\n\t\"form-select\": IconLayerFormSelect,\n\t\"collection-item\": IconLayerCollectionItem,\n\t\"view-box\": IconLayerPlaceholder,\n\tvector: IconLayerVector,\n\tshader: IconLayerShader,\n}\n\nconst agentLayerIcons: Record<LayerIconName, React.FC> = {\n\t...defaultLayerIcons,\n\tcomponent: IconAgentComponent,\n\tcheckbox: IconAgentLayerFormCheckbox,\n\tbreakpoint: IconAgentBreakpointLayoutTemplate,\n\tgrid: IconAgentLayerGrid,\n\tmasonry: IconAgentLayerMasonryStackWrapVertical,\n\tframe: IconAgentLayerFrame,\n\t\"frame-round\": IconAgentLayerRound,\n\ttext: IconAgentLayerText,\n\tpath: IconAgentLayerPath,\n\tboolean: IconAgentLayerBoolean,\n\tstar: IconAgentLayerStar,\n\tpolygon: IconAgentLayerPolygon,\n\toval: IconAgentLayerRound,\n\toverlay: IconAgentLayerOverlay,\n\trectangle: IconAgentLayerRect,\n\tstack: IconAgentLayerStackVertical,\n\t\"stack-horizontal\": IconAgentLayerStackHorizontal,\n\t\"stack-with-data\": IconAgentCMS,\n\t\"stack-wrap-horizontal\": IconAgentLayerStackWrapHorizontal,\n\t\"stack-wrap-vertical\": IconAgentLayerMasonryStackWrapVertical,\n\timage: IconAgentLayerImage,\n\tsvg: IconAgentLayerImage,\n\tlabel: IconAgentLayerFormLabel,\n\tform: IconAgentLayerForm,\n\t\"form-container\": IconAgentLayerForm,\n\t\"form-input\": IconAgentLayerFormInput,\n\t\"form-select\": IconAgentLayerFormSelect,\n\t\"collection-item\": IconAgentLayerCollectionItem,\n\tradio: IconAgentLayerFormRadio,\n\tplaceholder: IconAgentLayerPlaceholder,\n\t\"view-box\": IconAgentLayerViewBox,\n\tvector: IconAgentLayerVector,\n\tshader: IconAgentLayerShader,\n}\n\nexport const layerIcons = defaultLayerIcons\n\nexport function getLayerIcons(agentExperimentEnabled: boolean): Record<LayerIconName, React.FC> {\n\treturn agentExperimentEnabled ? agentLayerIcons : defaultLayerIcons\n}\n", "import \"SelectionTag.styles_jnta2w.wyw.css\"; export const removeButton = \"removeButton_rpg5phz\";\nexport const containerNeutral = \"containerNeutral_cs668uc\";\nexport const container = \"container_c6e2otx\";\nexport const containerComponent = \"containerComponent_ckz1v1j\";\nexport const icon = \"icon_i1b29lih\";\nexport const colorSwatch = \"colorSwatch_ck1xnor\";\nexport const label = \"label_lzpjv9q\";\nexport const containerFile = \"containerFile_cdnhwls\";\nexport const fileNameBase = \"fileNameBase_fgbb8eo\";", "import type { SVGProps } from \"react\"\n\nexport function IconAgentMultiSelect(props: SVGProps<SVGSVGElement>) {\n\treturn (\n\t\t<svg\n\t\t\trole=\"presentation\"\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\twidth=\"12\"\n\t\t\theight=\"12\"\n\t\t\tfill=\"none\"\n\t\t\taria-hidden=\"true\"\n\t\t\tfocusable=\"false\"\n\t\t\t{...props}\n\t\t>\n\t\t\t<g stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"1.5\">\n\t\t\t\t<path\n\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\tfillOpacity={0.2}\n\t\t\t\t\td=\"M4.25 2.75a1.5 1.5 0 0 1 1.5-1.5h3.5a1.5 1.5 0 0 1 1.5 1.5v3.5a1.5 1.5 0 0 1-1.5 1.5h-3.5a1.5 1.5 0 0 1-1.5-1.5Z\"\n\t\t\t\t/>\n\t\t\t\t<path\n\t\t\t\t\tfill=\"transparent\"\n\t\t\t\t\td=\"M7.75 7.75v1.5a1.5 1.5 0 0 1-1.5 1.5h-3.5a1.5 1.5 0 0 1-1.5-1.5v-3.5a1.5 1.5 0 0 1 1.5-1.5H4\"\n\t\t\t\t/>\n\t\t\t</g>\n\t\t</svg>\n\t)\n}\n", "import { Stack } from \"@framerjs/fresco\"\nimport { dimensions } from \"@framerjs/fresco/tokens\"\nimport { assert, assertNever, emptyArray } from \"@framerjs/shared\"\nimport { cx } from \"@linaria/core\"\nimport { getAttachmentPreviewUrl, type AgentAttachmentFile, type AgentAttachmentImage } from \"app/agent/attachments.ts\"\nimport { AttachmentList, type AttachmentListImage } from \"app/agent/components/AgentInput/AttachmentList.tsx\"\nimport { AgentRow } from \"app/agent/components/AgentRow/AgentRow.tsx\"\nimport type { AgentInputSegment } from \"app/agent/editor/agentInputSchema.ts\"\nimport type { UploadedAttachment } from \"app/agent/hooks/useAttachments.ts\"\nimport { formatOperationSummary } from \"app/agent/utils/messages.ts\"\nimport type { AgentID } from \"app/ai/agents/Agent.ts\"\nimport { SKIPPED_ANSWER } from \"app/ai/agents/tools/askClarification.ts\"\nimport type { ClarificationQuestion } from \"app/ai/agents/tools/askClarification.ts\"\nimport { supportsCompletedAt } from \"app/ai/agents/tools/transformers/createUIConnectedTool.ts\"\nimport type { AgentRequest, TransientTurnMessage } from \"app/ai/agents/types.ts\"\nimport { defaultAgentModel, type LanguageModel } from \"app/ai/languageModels.ts\"\nimport type { AgentReasoningEffort } from \"app/ai/models.ts\"\nimport { applyTypography } from \"app/ai/utils/typography.ts\"\nimport * as promptPartsStyles from \"document/components/chrome/agentPanel/PromptPartsText.styles.ts\"\nimport { FileAttachmentTag } from \"document/components/chrome/agentPanel/SelectionTag.tsx\"\nimport { useToolbarTooltipVariant } from \"document/components/chrome/projectbar/ToolbarTooltip.tsx\"\nimport engine from \"document/engine.ts\"\nimport \"streamdown/styles.css\"\nimport type { NodeID } from \"document/models/CanvasTree/index.ts\"\nimport { randomID } from \"document/models/CanvasTree/nodes/NodeID.ts\"\nimport { useEngineCallback } from \"document/useEngineCallback.ts\"\nimport { Color } from \"library/render/types/Color/Color.ts\"\nimport pluralize from \"pluralize\"\nimport {\n\tmemo,\n\tuseCallback,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n\ttype ComponentProps,\n\ttype ReactNode,\n\ttype RefObject,\n\ttype JSX,\n\tuseLayoutEffect,\n\tuseId,\n} from \"react\"\nimport type { ExtraProps } from \"streamdown\"\nimport { Streamdown } from \"streamdown\"\nimport { isNull, isNumber, isString } from \"utils/typeChecks.ts\"\nimport { useIsViewOnly } from \"web/pages/project/permissions/useIsViewOnly.ts\"\nimport * as panelStyles from \"../AgentChatPanel.styles.ts\"\nimport type { AgentSelectionMode } from \"../AgentChatPanel.tsx\"\nimport { PromptPartsText } from \"../PromptPartsText.tsx\"\nimport { AgentChangesSummary } from \"./AgentChangesSummary.tsx\"\nimport * as commonStyles from \"./AgentChat.common.styles.ts\"\nimport { AgentChatCodePatch } from \"./AgentChatCodePatch.tsx\"\nimport { AgentChatError } from \"./AgentChatError.tsx\"\nimport { ChatInput } from \"./AgentChatInput.tsx\"\nimport * as taskStyles from \"./AgentChatTask.styles.ts\"\nimport {\n\tactionForBlockingTaskType,\n\tAgentChatExpandableGroup,\n\tAgentChatExpandableTrace,\n\tAgentChatThinkingTrace,\n\tAgentChatThinkingTraceText,\n\tAgentChatTask,\n\tAgentChatTaskLogLine,\n\tappendEllipsis,\n\tgetDisplayDurationMs,\n\tgetBlockingTaskIcon,\n\tgetBlockingTaskLabel,\n\tInlineAgentChatCard,\n} from \"./AgentChatTask.tsx\"\nimport * as styles from \"./AgentChatTurn.styles.ts\"\nimport { RevertButton } from \"./RevertButton.tsx\"\nimport { useScrollSentinel } from \"./useScrollSentinel.ts\"\n\nconst streamdownComponents = {\n\tcolor: ColorChip,\n\timg: MarkdownImage,\n} as const\n\ninterface AgentChatTurnProps {\n\tagentId: AgentID\n\trequest: AgentRequest\n\tactiveScopeId: NodeID\n\tfollowMode: boolean\n\tisGenerating: boolean\n\tisLatestTurn: boolean\n\tscrollContainerRef: RefObject<HTMLDivElement | null>\n\tonEditRequest: (\n\t\trequest: AgentRequest,\n\t\tparts: readonly AgentInputSegment[],\n\t\tmodel: LanguageModel,\n\t\treasoningEffort: AgentReasoningEffort,\n\t\timages: readonly AgentAttachmentImage[],\n\t\tfiles: readonly AgentAttachmentFile[],\n\t) => void\n\t/** Rewind the conversation back to (and discarding) this turn. */\n\tonRevertConversation?: () => void\n\t/** Revert only the document/code changes produced by this turn (latest-turn only). */\n\tonRevertChanges?: () => void\n\tonReapply?: () => void\n\tisReverting?: boolean\n\tonRetry?: () => void\n\thideCreditLimitError?: boolean\n\tselectionMode?: AgentSelectionMode\n\tstyle?: React.CSSProperties\n}\n\nconst UserBubble = memo(function UserBubble({\n\trequest,\n\tisStuck,\n\tonRevert,\n\tisReverting = false,\n\tonSubmit,\n\tselectionMode,\n}: {\n\trequest: AgentRequest\n\tisStuck: boolean\n\tonSubmit: (\n\t\tparts: readonly AgentInputSegment[],\n\t\tmodel: LanguageModel,\n\t\treasoningEffort: AgentReasoningEffort,\n\t\timages: readonly AgentAttachmentImage[],\n\t\tfiles: readonly AgentAttachmentFile[],\n\t) => void\n\tonRevert?: () => void\n\tisReverting?: boolean\n\tselectionMode?: AgentSelectionMode\n}) {\n\tconst userTextRef = useRef<HTMLSpanElement>(null)\n\tconst bubbleRef = useRef<HTMLDivElement>(null)\n\tconst hadSelectionOnPointerDownRef = useRef(false)\n\tconst [isTextClamped, setIsTextClamped] = useState(false)\n\tconst [isExpanded, setIsExpanded] = useState(false)\n\tconst chatInputAPIRef = useRef<ComponentProps<typeof ChatInput>[\"chatInputAPIRef\"][\"current\"]>(undefined)\n\tconst hasHydratedExpandedEditorRef = useRef(false)\n\tconst inputId = useId()\n\tconst shouldUseToolbarTooltip = useToolbarTooltipVariant() === \"toolbar\"\n\n\tconst { parts, images, files, model } = request\n\tconst hasEditorContent = parts.some(part => !isString(part) || part.trim().length > 0)\n\tconst hasInlineFileSegments = parts.some(p => !isString(p) && p.type === \"fileAttachment\")\n\n\tuseEffect(() => {\n\t\tconst userText = userTextRef.current\n\t\tif (!userText || isExpanded) return\n\n\t\tconst updateClampState = () => {\n\t\t\tsetIsTextClamped(userText.scrollHeight - userText.clientHeight > 1)\n\t\t}\n\n\t\tconst resizeObserver = new ResizeObserver(() => {\n\t\t\tupdateClampState()\n\t\t})\n\t\tresizeObserver.observe(userText)\n\n\t\treturn () => {\n\t\t\tresizeObserver.disconnect()\n\t\t}\n\t}, [isExpanded])\n\n\tconst handleBubblePointerDown = useCallback(() => {\n\t\tconst selection = window.getSelection()\n\t\thadSelectionOnPointerDownRef.current = selection !== null && selection.toString().length > 0\n\t\twasConfirmingOnPointerDownRef.current = isConfirmingRevertRef.current\n\t}, [])\n\n\tconst expandForEdit = useEngineCallback(() => {\n\t\tif (isExpanded) return\n\n\t\tsetIsExpanded(true)\n\t\tengine.stores.agentStore.activeInputId = inputId\n\n\t\t// When this bubble is currently sticky, expanding it should keep its top edge pinned so\n\t\t// the editor grows downward instead of getting clipped above the viewport.\n\t\tif (isStuck) {\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\tbubbleRef.current?.scrollIntoView({ block: \"start\", inline: \"nearest\" })\n\t\t\t})\n\t\t}\n\t}, [isExpanded, inputId, isStuck])\n\n\tconst dismissEdit = useEngineCallback(() => {\n\t\tif (!isExpanded) return\n\n\t\tsetIsExpanded(false)\n\t\tengine.stores.agentStore.activeInputId = undefined\n\t\tif (selectionMode?.enabled) {\n\t\t\tselectionMode.setEnabled(false)\n\t\t}\n\t}, [isExpanded, selectionMode])\n\n\tconst handleBubbleClick = useCallback(() => {\n\t\tif (isExpanded) return\n\t\t// If the user has a text selection, on click just dismiss the selection and don't\n\t\t// expand the bubble.\n\t\tif (hadSelectionOnPointerDownRef.current) return\n\t\t// If a click is dismissing the revert confirm state, don't also expand for edit.\n\t\tif (wasConfirmingOnPointerDownRef.current) return\n\n\t\tconst selection = window.getSelection()\n\t\tif (selection && selection.toString().length > 0) return\n\n\t\texpandForEdit()\n\t}, [isExpanded, expandForEdit])\n\n\t// Close the expanded bubble when the user clicks anywhere outside of it.\n\tuseEffect(() => {\n\t\tif (!isExpanded) return\n\n\t\tconst handlePointerDown = (e: PointerEvent) => {\n\t\t\t// Dismiss the expanded bubble when the user clicks anywhere in the agent panel (but\n\t\t\t// outside of the bubble).\n\t\t\tif (!(e.target instanceof Element)) return\n\t\t\tif (bubbleRef.current?.contains(e.target)) return\n\t\t\tif (!e.target.closest(`.${panelStyles.agentPanel}`)) return\n\n\t\t\tdismissEdit()\n\t\t}\n\n\t\tdocument.addEventListener(\"pointerdown\", handlePointerDown)\n\t\treturn () => document.removeEventListener(\"pointerdown\", handlePointerDown)\n\t}, [isExpanded, dismissEdit])\n\n\tconst attachmentImages: readonly AttachmentListImage[] = images\n\t\t? images.map(image => ({ src: getAttachmentPreviewUrl(image), alt: image.referenceImage.originalFilename }))\n\t\t: emptyArray()\n\n\tconst hasImages = attachmentImages.length > 0\n\tconst hasFiles = files.length > 0\n\n\tconst editingAttachments = useMemo(() => {\n\t\tconst imageAttachments = images.map(\n\t\t\timage =>\n\t\t\t\t({\n\t\t\t\t\tid: randomID(),\n\t\t\t\t\tpreviewUrl: getAttachmentPreviewUrl(image),\n\t\t\t\t\tstatus: \"uploaded\",\n\t\t\t\t\tresult: image,\n\t\t\t\t}) satisfies UploadedAttachment,\n\t\t)\n\t\tconst fileAttachments = files.map(\n\t\t\tfile =>\n\t\t\t\t({\n\t\t\t\t\tid: randomID(),\n\t\t\t\t\tpreviewUrl: file.uploadResult.url,\n\t\t\t\t\tstatus: \"uploaded\",\n\t\t\t\t\tresult: file,\n\t\t\t\t}) satisfies UploadedAttachment,\n\t\t)\n\t\treturn [...imageAttachments, ...fileAttachments]\n\t}, [images, files])\n\n\tconst onCancel = useCallback(() => {\n\t\tdismissEdit()\n\t}, [dismissEdit])\n\n\t// Tracks whether the revert button is currently showing its confirm step. When a click on the\n\t// bubble dismisses confirm, we use this (captured at pointerdown) to skip expanding for edit.\n\tconst wasConfirmingOnPointerDownRef = useRef(false)\n\tconst isConfirmingRevertRef = useRef(false)\n\tconst handleRevertConfirmingChange = useCallback((value: boolean) => {\n\t\tisConfirmingRevertRef.current = value\n\t}, [])\n\n\t// Hydrate the expanded editor input.\n\tuseLayoutEffect(() => {\n\t\tif (!isExpanded) {\n\t\t\thasHydratedExpandedEditorRef.current = false\n\t\t\treturn\n\t\t}\n\n\t\tif (hasHydratedExpandedEditorRef.current) return\n\n\t\tconst api = chatInputAPIRef.current\n\t\tif (!api || api.isDestroyed()) return\n\n\t\tapi.setContent(parts)\n\t\tapi.setAttachments(editingAttachments ?? emptyArray())\n\t\tapi.focus()\n\t\thasHydratedExpandedEditorRef.current = true\n\t}, [isExpanded, parts, editingAttachments])\n\n\treturn (\n\t\t<div ref={bubbleRef} className={cx(styles.userBubbleSticky, isStuck && styles.userBubbleStickyStuck)}>\n\t\t\t{isExpanded ? (\n\t\t\t\t<div className={styles.stickyInner}>\n\t\t\t\t\t<ChatInput\n\t\t\t\t\t\tid={inputId}\n\t\t\t\t\t\tchatInputAPIRef={chatInputAPIRef}\n\t\t\t\t\t\tmodel={model ?? defaultAgentModel}\n\t\t\t\t\t\tselectionMode={selectionMode}\n\t\t\t\t\t\tonSubmit={onSubmit}\n\t\t\t\t\t\tonCancel={onCancel}\n\t\t\t\t\t\tplaceholder=\"Ask Framer\u2026\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t) : (\n\t\t\t\t<Stack\n\t\t\t\t\tclassName={cx(\n\t\t\t\t\t\tstyles.stickyInner,\n\t\t\t\t\t\tstyles.userBubble,\n\t\t\t\t\t\tstyles.userBubbleFades,\n\t\t\t\t\t\tisTextClamped && styles.userBubbleFadeBottomVisible,\n\t\t\t\t\t)}\n\t\t\t\t\tdirection=\"column\"\n\t\t\t\t\tgap={10}\n\t\t\t\t\tonPointerDown={handleBubblePointerDown}\n\t\t\t\t\tonClick={handleBubbleClick}\n\t\t\t\t>\n\t\t\t\t\t{(hasEditorContent || hasFiles) && (\n\t\t\t\t\t\t<span ref={userTextRef} className={cx(styles.userText, styles.userTextClamp, \"wantsNativeTextAction\")}>\n\t\t\t\t\t\t\t{!hasInlineFileSegments &&\n\t\t\t\t\t\t\t\tfiles.map(file => (\n\t\t\t\t\t\t\t\t\t<span key={file.fileName} className={promptPartsStyles.selectionTagWrapper}>\n\t\t\t\t\t\t\t\t\t\t<FileAttachmentTag name={file.fileName} />\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t{hasEditorContent && <PromptPartsText parts={parts} />}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{hasImages && !hasEditorContent && !hasFiles && (\n\t\t\t\t\t\t<span className={styles.userImageOnlyLabel}>{`Using ${pluralize(\"image\", attachmentImages.length)}`}</span>\n\t\t\t\t\t)}\n\t\t\t\t\t{hasImages && <AttachmentList items={attachmentImages} />}\n\t\t\t\t\t{onRevert && (\n\t\t\t\t\t\t<RevertButton\n\t\t\t\t\t\t\tonRevert={onRevert}\n\t\t\t\t\t\t\tisReverting={isReverting}\n\t\t\t\t\t\t\tshowTooltip={shouldUseToolbarTooltip}\n\t\t\t\t\t\t\tonConfirmingChange={handleRevertConfirmingChange}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\t\t\t)}\n\t\t</div>\n\t)\n})\n\nexport function AgentChatTurn({\n\tagentId,\n\trequest,\n\tactiveScopeId,\n\tfollowMode,\n\tisGenerating,\n\tisLatestTurn,\n\tscrollContainerRef,\n\tonEditRequest,\n\tonRevertConversation,\n\tonRevertChanges,\n\tonReapply,\n\tisReverting,\n\tonRetry,\n\thideCreditLimitError,\n\tselectionMode,\n\tstyle,\n}: AgentChatTurnProps) {\n\tconst { state } = request\n\tconst fallbackScopeId = request.scopeId ?? activeScopeId\n\tconst stickySentinelRef = useRef<HTMLDivElement>(null)\n\tconst [isStuck, setIsStuck] = useState(false)\n\n\tconst handleStickyChange = useCallback((isIntersecting: boolean) => {\n\t\tsetIsStuck(!isIntersecting)\n\t}, [])\n\n\tuseScrollSentinel({\n\t\tsentinelRef: stickySentinelRef,\n\t\tscrollContainerRef,\n\t\tonChange: handleStickyChange,\n\t})\n\n\tconst isViewOnly = useIsViewOnly(\"canDesign\")\n\n\tconst submitEditedRequest = useCallback(\n\t\t(\n\t\t\tparts: readonly AgentInputSegment[],\n\t\t\tmodel: LanguageModel,\n\t\t\treasoningEffort: AgentReasoningEffort,\n\t\t\timages: readonly AgentAttachmentImage[],\n\t\t\tfiles: readonly AgentAttachmentFile[],\n\t\t) => {\n\t\t\tif (isViewOnly) return\n\t\t\tonEditRequest(request, parts, model, reasoningEffort, images, files)\n\t\t},\n\t\t[request, onEditRequest, isViewOnly],\n\t)\n\treturn (\n\t\t<Stack className={styles.turnContainer} direction=\"column\" gap={dimensions.css.agentChatMessagesGap} style={style}>\n\t\t\t<div ref={stickySentinelRef} aria-hidden className={styles.stickySentinel} />\n\t\t\t<UserBubble\n\t\t\t\trequest={request}\n\t\t\t\tonRevert={onRevertConversation}\n\t\t\t\tisReverting={isReverting}\n\t\t\t\tisStuck={isStuck}\n\t\t\t\tonSubmit={submitEditedRequest}\n\t\t\t\tselectionMode={selectionMode}\n\t\t\t/>\n\t\t\t<AgentStream\n\t\t\t\tagentId={agentId}\n\t\t\t\trequest={request}\n\t\t\t\tmessages={state.messages}\n\t\t\t\tfallbackScopeId={fallbackScopeId}\n\t\t\t\tfollowMode={followMode}\n\t\t\t\tisGenerating={!request.done && isGenerating}\n\t\t\t\tisLatestTurn={isLatestTurn}\n\t\t\t\tscrollContainerRef={scrollContainerRef}\n\t\t\t\tonRevertChanges={onRevertChanges}\n\t\t\t\tonReapply={onReapply}\n\t\t\t\tisReverting={isReverting}\n\t\t\t/>\n\t\t\t{renderError(request, onRetry, hideCreditLimitError)}\n\t\t</Stack>\n\t)\n}\n\ntype RenderedBaseMessage = Exclude<TransientTurnMessage, { type: \"command\" }> & {\n\tscopeId?: NodeID\n\tcomplete?: boolean\n}\ntype RenderedThinkingMessage = Extract<RenderedBaseMessage, { type: \"thinking\" }> & {\n\tinheritedTaskLabels?: TaskMessageLabels\n}\ntype RenderedSingleMessage = Exclude<RenderedBaseMessage, { type: \"thinking\" }> | RenderedThinkingMessage\ntype TaskMessageType =\n\t| \"thinking\"\n\t| \"read\"\n\t| \"script-read\"\n\t| \"step\"\n\t| \"create-component\"\n\t| \"annotation\"\n\t| \"code-agent-status\"\n\t| \"scripting\"\ntype RenderedTaskMessage = Extract<RenderedSingleMessage, { type: TaskMessageType }>\ntype TaskMessage = RenderedTaskMessage\ntype RenderedActivityMessage = Extract<\n\tRenderedTaskMessage,\n\t{ type: \"thinking\" | \"read\" | \"script-read\" | \"scripting\" | \"create-component\" }\n>\ntype RenderedActivityActionMessage = Extract<\n\tRenderedActivityMessage,\n\t{ type: \"read\" | \"script-read\" | \"scripting\" | \"create-component\" }\n>\ntype RenderedActivityThinkingMessage = Extract<RenderedActivityMessage, { type: \"thinking\" }>\ntype PendingChatPart = Exclude<RenderedSingleMessage, { type: \"step\" | \"annotation\" | \"text\" }>\ninterface RenderedActivityAction {\n\tid: string\n\tmessage: RenderedActivityActionMessage\n\tthinkingMessages: readonly RenderedActivityThinkingMessage[]\n\tsourceActivityCount: number\n}\ninterface RenderedActivityGroup {\n\ttype: \"activity-group\"\n\tid: string\n\tactions: readonly RenderedActivityAction[]\n}\ntype RenderedMessage = RenderedSingleMessage | RenderedActivityGroup\ntype ReadMessage = Extract<RenderedActivityActionMessage, { type: \"read\" }>\ntype ScriptReadMessage = Extract<RenderedActivityActionMessage, { type: \"script-read\" }>\n\ninterface TaskMessageLabels {\n\tactive: string\n\tcomplete: string\n}\ntype TaskMessageLabelState = \"active\" | \"complete\"\n\nconst defaultThinkingTaskLabels: TaskMessageLabels = { active: \"Thinking\", complete: \"Thought\" }\nconst readProjectTaskLabels: TaskMessageLabels = { active: \"Reading project\", complete: \"Read project\" }\nconst reviewChangesTaskLabels: TaskMessageLabels = { active: \"Reviewing changes\", complete: \"Reviewed changes\" }\nconst inspectLayersTaskLabels: TaskMessageLabels = { active: \"Inspecting layers\", complete: \"Inspected layers\" }\nconst scriptingTaskLabels: TaskMessageLabels = { active: \"Writing script\", complete: \"Wrote script\" }\nconst analyticsTaskLabels: TaskMessageLabels = { active: \"Reading analytics\", complete: \"Read analytics\" }\nconst createComponentTaskLabels: TaskMessageLabels = { active: \"Creating component\", complete: \"Created component\" }\n\nfunction getTaskMessageText(message: TaskMessage): string {\n\tswitch (message.type) {\n\t\tcase \"thinking\": {\n\t\t\tconst state: TaskMessageLabelState = !!message.complete || isNumber(message.durationMs) ? \"complete\" : \"active\"\n\t\t\treturn getThinkingTaskMessageLabels(message)[state]\n\t\t}\n\t\tcase \"read\": {\n\t\t\tconst state: TaskMessageLabelState = message.durationMs ? \"complete\" : \"active\"\n\t\t\treturn getReadProjectMessageLabels(message)[state]\n\t\t}\n\t\tcase \"script-read\": {\n\t\t\tconst state: TaskMessageLabelState = message.count === 0 && !message.durationMs ? \"active\" : \"complete\"\n\t\t\treturn getScriptReadMessageLabels(message)[state]\n\t\t}\n\t\tcase \"scripting\": {\n\t\t\tconst state: TaskMessageLabelState = message.completedAt ? \"complete\" : \"active\"\n\t\t\treturn getScriptingMessageLabels(message)[state]\n\t\t}\n\t\tcase \"step\":\n\t\tcase \"create-component\":\n\t\tcase \"annotation\":\n\t\tcase \"code-agent-status\":\n\t\t\treturn message.text\n\t\tdefault:\n\t\t\tassertNever(message, \"Invalid task message type\")\n\t}\n}\n\nfunction getInheritedTaskMessageLabels(\n\tmessage: TransientTurnMessage | RenderedActivityMessage | undefined,\n): TaskMessageLabels | undefined {\n\tif (!message) return\n\n\tswitch (message.type) {\n\t\tcase \"read\":\n\t\t\treturn getReadProjectMessageLabels(message)\n\t\tcase \"script-read\":\n\t\t\treturn getScriptReadMessageLabels(message)\n\t\tcase \"scripting\":\n\t\t\treturn getScriptingMessageLabels(message)\n\t\tcase \"create-component\":\n\t\t\treturn createComponentTaskLabels\n\t\tcase \"thinking\":\n\t\tcase \"step\":\n\t\tcase \"annotation\":\n\t\tcase \"code-agent-status\":\n\t\tcase \"text\":\n\t\tcase \"design-plan\":\n\t\tcase \"command\":\n\t\tcase \"blocking-task\":\n\t\tcase \"code-patch\":\n\t\tcase \"clarification\":\n\t\tcase \"changes\":\n\t\t\treturn\n\t\tdefault:\n\t\t\tassertNever(message, \"Invalid message type\")\n\t}\n}\n\nfunction getScriptingMessageLabels(message: Extract<TransientTurnMessage, { type: \"scripting\" }>): TaskMessageLabels {\n\treturn message.task === \"analytics\" ? analyticsTaskLabels : scriptingTaskLabels\n}\n\nfunction getReadProjectMessageLabels(message: Extract<TransientTurnMessage, { type: \"read\" }>): TaskMessageLabels {\n\tswitch (message.task) {\n\t\tcase \"review\":\n\t\t\treturn reviewChangesTaskLabels\n\t\tdefault:\n\t\t\treturn readProjectTaskLabels\n\t}\n}\n\nfunction getScriptReadMessageLabels(message: Extract<TaskMessage, { type: \"script-read\" }>): TaskMessageLabels {\n\tif (message.count === 0) return inspectLayersTaskLabels\n\n\tconst layerCount = `${message.count} ${pluralize(\"layer\", message.count)}`\n\treturn { active: `Reading ${layerCount}`, complete: `Read ${layerCount}` }\n}\n\nfunction getThinkingTaskMessageLabels(message: Extract<TaskMessage, { type: \"thinking\" }>): TaskMessageLabels {\n\tconst { inheritedTaskLabels } = message\n\tif (inheritedTaskLabels) return inheritedTaskLabels\n\n\tif (!message.variant) return defaultThinkingTaskLabels\n\n\tswitch (message.variant) {\n\t\tcase \"review\":\n\t\t\treturn reviewChangesTaskLabels\n\t\tcase \"create-component\":\n\t\t\treturn createComponentTaskLabels\n\t\tdefault:\n\t\t\tassertNever(message.variant, \"Invalid thinking variant\")\n\t}\n}\n\nfunction getTaskMessageDurationMs(message: TaskMessage): number | undefined {\n\tif (supportsCompletedAt(message) && isNumber(message.timestamp)) {\n\t\treturn isNumber(message.completedAt) ? message.completedAt - message.timestamp : undefined\n\t}\n\treturn isNumber(message.durationMs) ? message.durationMs : undefined\n}\n\nfunction getIsLoading(message: TaskMessage, isGenerating: boolean, lastMessage?: RenderedMessage): boolean {\n\tif (supportsCompletedAt(message)) {\n\t\treturn isGenerating && !isNumber(message.completedAt)\n\t}\n\tconst latestMessage = getLatestActivityMessage(lastMessage) ?? lastMessage\n\treturn isGenerating && latestMessage === message\n}\n\nfunction getRenderedMessageKey(message: RenderedMessage, index: number, isLatest: boolean): string {\n\tif (isRenderedActivityGroup(message)) return message.id\n\treturn `${index}-${isLatest}`\n}\n\nfunction isRenderedActivityGroup(message: RenderedMessage | undefined): message is RenderedActivityGroup {\n\treturn message?.type === \"activity-group\"\n}\n\nfunction isActivityActionMessage(message: RenderedSingleMessage): message is RenderedActivityActionMessage {\n\treturn isTraceGroupMessage(message) && message.type !== \"thinking\"\n}\n\nconst AssistantBubble = memo(function AssistantBubble({\n\tcontent,\n\tisGenerating,\n}: {\n\tcontent: string\n\tisGenerating: boolean\n}) {\n\tif (!hasRenderableAssistantContent(content)) return null\n\n\treturn (\n\t\t<div className={styles.assistantMessage}>\n\t\t\t<Streamdown\n\t\t\t\tanimated\n\t\t\t\tisAnimating={isGenerating}\n\t\t\t\tcontrols={false}\n\t\t\t\tmode={isGenerating ? \"streaming\" : \"static\"}\n\t\t\t\tclassName={cx(styles.assistantText, styles.markdownStyles, \"wantsNativeTextAction\")}\n\t\t\t\tallowedTags={{ color: [\"color\"] }}\n\t\t\t\tcomponents={streamdownComponents}\n\t\t\t\t// Streamdown's default link-safety modal uses Tailwind classes that don't resolve\n\t\t\t\t// in our Linaria setup, causing it to render inline. Consider a custom renderModal\n\t\t\t\t// with Fresco components if we want to restore URL preview and link safety before navigation.\n\t\t\t\tlinkSafety={{ enabled: false }}\n\t\t\t>\n\t\t\t\t{applyTypography(content)}\n\t\t\t</Streamdown>\n\t\t</div>\n\t)\n})\n\n/**\n * Checks if the assistant content is meaningful and not just an empty code block or some empty text.\n * Might need to be extended to handle other cases where the assistant content is not meaningful.\n */\nfunction hasRenderableAssistantContent(content: string): boolean {\n\tconst trimmed = content.replaceAll(\"\\r\\n\", \"\\n\").replaceAll(\"\\r\", \"\\n\").trim()\n\tif (!trimmed) return false\n\tif (!trimmed.startsWith(\"```\")) return true\n\tif (trimmed === \"```\") return false\n\n\treturn true\n}\n\nconst ClarificationAnswersBubble = memo(function ClarificationAnswersBubble({\n\tanswers,\n\tquestions,\n}: {\n\tanswers: readonly string[]\n\tquestions: readonly ClarificationQuestion[]\n}) {\n\tif (answers.every(answer => answer === SKIPPED_ANSWER)) return null\n\n\treturn (\n\t\t<Stack className={commonStyles.inputCard} direction=\"column\" gap={10}>\n\t\t\t{answers.map((answer, index) => {\n\t\t\t\tconst question = questions[index]\n\t\t\t\tif (!question || answer === SKIPPED_ANSWER) return null\n\n\t\t\t\treturn (\n\t\t\t\t\t<Stack\n\t\t\t\t\t\tkey={`${question.question}-${answer}`}\n\t\t\t\t\t\tclassName={styles.clarificationAnswerGroup}\n\t\t\t\t\t\tdirection=\"column\"\n\t\t\t\t\t\tgap={5}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span className={styles.clarificationQuestion}>{question.question}</span>\n\t\t\t\t\t\t<span className={cx(styles.clarificationAnswer, \"wantsNativeTextAction\")}>{answer}</span>\n\t\t\t\t\t</Stack>\n\t\t\t\t)\n\t\t\t})}\n\t\t</Stack>\n\t)\n})\n\nfunction AgentStream({\n\tmessages,\n\tagentId,\n\trequest,\n\tfallbackScopeId,\n\tfollowMode,\n\tisGenerating,\n\tisLatestTurn,\n\tscrollContainerRef,\n\tonRevertChanges,\n\tonReapply,\n\tisReverting,\n}: {\n\tmessages: readonly TransientTurnMessage[]\n\tagentId: AgentID\n\trequest: AgentRequest\n\tfallbackScopeId: NodeID\n\tfollowMode: boolean\n\tisGenerating: boolean\n\tisLatestTurn: boolean\n\tscrollContainerRef: RefObject<HTMLDivElement | null>\n\tonRevertChanges?: () => void\n\tonReapply?: () => void\n\tisReverting?: boolean\n}) {\n\tconst flatMessages = toRenderedMessages(messages)\n\tconst renderedMessages = groupRenderedMessages(flatMessages)\n\tconst lastMessage = renderedMessages[renderedMessages.length - 1]\n\n\treturn (\n\t\t<AgentRow.Item className={styles.streamContainer}>\n\t\t\t<div className={styles.stepsList}>\n\t\t\t\t{renderedMessages.map((message, i) => {\n\t\t\t\t\tconst key = getRenderedMessageKey(message, i, lastMessage === message)\n\t\t\t\t\tif (isRenderedActivityGroup(message)) {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<AgentChatActivityTrace\n\t\t\t\t\t\t\t\tkey={key}\n\t\t\t\t\t\t\t\tgroup={message}\n\t\t\t\t\t\t\t\tisGenerating={isGenerating}\n\t\t\t\t\t\t\t\tlastMessage={lastMessage}\n\t\t\t\t\t\t\t\tscrollContainerRef={scrollContainerRef}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\n\t\t\t\t\tswitch (message.type) {\n\t\t\t\t\t\tcase \"thinking\":\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<AgentChatThinkingTrace\n\t\t\t\t\t\t\t\t\tkey={key}\n\t\t\t\t\t\t\t\t\ttext={message.text}\n\t\t\t\t\t\t\t\t\tcomplete={!!message.complete || !getIsLoading(message, isGenerating, lastMessage)}\n\t\t\t\t\t\t\t\t\tdurationMs={getTaskMessageDurationMs(message)}\n\t\t\t\t\t\t\t\t\tscrollContainerRef={scrollContainerRef}\n\t\t\t\t\t\t\t\t\ttitle={getTaskMessageText(message)}\n\t\t\t\t\t\t\t\t\tlatest={lastMessage === message}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\tcase \"read\":\n\t\t\t\t\t\tcase \"script-read\":\n\t\t\t\t\t\tcase \"step\":\n\t\t\t\t\t\tcase \"create-component\":\n\t\t\t\t\t\tcase \"annotation\":\n\t\t\t\t\t\tcase \"scripting\":\n\t\t\t\t\t\tcase \"code-agent-status\":\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<AgentChatTask\n\t\t\t\t\t\t\t\t\tkey={key}\n\t\t\t\t\t\t\t\t\tagentId={agentId}\n\t\t\t\t\t\t\t\t\ttext={getTaskMessageText(message)}\n\t\t\t\t\t\t\t\t\tallowLarge={lastMessage === message && !followMode}\n\t\t\t\t\t\t\t\t\tloading={getIsLoading(message, isGenerating, lastMessage)}\n\t\t\t\t\t\t\t\t\tscopeId={message.scopeId ?? fallbackScopeId}\n\t\t\t\t\t\t\t\t\tdurationMs={getTaskMessageDurationMs(message)}\n\t\t\t\t\t\t\t\t\ttimestamp={message.timestamp}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\tcase \"blocking-task\": {\n\t\t\t\t\t\t\tconst durationMs =\n\t\t\t\t\t\t\t\tmessage.completedAt && message.timestamp ? message.completedAt - message.timestamp : undefined\n\t\t\t\t\t\t\tconst durationInSeconds = isNumber(durationMs) ? Math.max(Math.round(durationMs / 1000), 1) : undefined\n\t\t\t\t\t\t\tconst loading = !isNumber(durationMs) && isGenerating\n\t\t\t\t\t\t\tconst imageUrls = extractStringArray(message.metadata?.imageUrls) ?? []\n\t\t\t\t\t\t\tconst isImageViewingTask = message.task === \"analyze\" && imageUrls.length > 0\n\t\t\t\t\t\t\tconst Icon = isImageViewingTask\n\t\t\t\t\t\t\t\t? getBlockingTaskIcon(\"image-search\", undefined)\n\t\t\t\t\t\t\t\t: getBlockingTaskIcon(message.task, message.message)\n\n\t\t\t\t\t\t\tconst label =\n\t\t\t\t\t\t\t\tgetBlockingTaskLabel(message) ??\n\t\t\t\t\t\t\t\t(isNumber(durationInSeconds) && durationInSeconds > 0 ? `${durationInSeconds}s` : undefined)\n\t\t\t\t\t\t\tconst title = isImageViewingTask\n\t\t\t\t\t\t\t\t? `${loading ? \"Viewing\" : \"Viewed\"} ${message.message ?? \"image\"}`\n\t\t\t\t\t\t\t\t: actionForBlockingTaskType(message.task, message.message, !loading)\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<InlineAgentChatCard\n\t\t\t\t\t\t\t\t\tkey={key}\n\t\t\t\t\t\t\t\t\ticon={<Icon />}\n\t\t\t\t\t\t\t\t\ttitle={appendEllipsis(title, !loading)}\n\t\t\t\t\t\t\t\t\tloading={loading}\n\t\t\t\t\t\t\t\t\tlabel={label}\n\t\t\t\t\t\t\t\t\timageUrls={imageUrls}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase \"design-plan\": {\n\t\t\t\t\t\t\tconst Icon = getBlockingTaskIcon(\"deprecated-design-plan\", undefined)\n\t\t\t\t\t\t\tconst isComplete = isNumber(message.durationMs)\n\t\t\t\t\t\t\tconst durationInSeconds = isNumber(message.durationMs)\n\t\t\t\t\t\t\t\t? `${Math.max(Math.round(message.durationMs / 1000), 1)}s`\n\t\t\t\t\t\t\t\t: undefined\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<InlineAgentChatCard\n\t\t\t\t\t\t\t\t\tkey={key}\n\t\t\t\t\t\t\t\t\ticon={<Icon />}\n\t\t\t\t\t\t\t\t\ttitle={appendEllipsis(\n\t\t\t\t\t\t\t\t\t\tactionForBlockingTaskType(\"deprecated-design-plan\", undefined, isComplete),\n\t\t\t\t\t\t\t\t\t\tisComplete,\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\tloading={!isComplete && isGenerating}\n\t\t\t\t\t\t\t\t\tlabel={durationInSeconds}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase \"text\":\n\t\t\t\t\t\t\treturn <AssistantBubble key={key} content={message.text} isGenerating={isGenerating} />\n\t\t\t\t\t\tcase \"code-patch\":\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<AgentChatCodePatch\n\t\t\t\t\t\t\t\t\tkey={key}\n\t\t\t\t\t\t\t\t\tcontent={message.content}\n\t\t\t\t\t\t\t\t\tfileName={message.fileName}\n\t\t\t\t\t\t\t\t\toperation={message.operation}\n\t\t\t\t\t\t\t\t\tisStreaming={isGenerating && !message.complete}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\tcase \"clarification\":\n\t\t\t\t\t\t\treturn !message.answers || !message.questions ? (\n\t\t\t\t\t\t\t\t<AgentChatTask\n\t\t\t\t\t\t\t\t\tagentId={agentId}\n\t\t\t\t\t\t\t\t\tkey={key}\n\t\t\t\t\t\t\t\t\ttext={message.questions ? \"Asking questions\u2026\" : \"Drafting questions\u2026\"}\n\t\t\t\t\t\t\t\t\ttimestamp={message.timestamp}\n\t\t\t\t\t\t\t\t\tscopeId={message.scopeId ?? fallbackScopeId}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<ClarificationAnswersBubble key={key} answers={message.answers} questions={message.questions} />\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\tcase \"changes\":\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<AgentChangesSummary\n\t\t\t\t\t\t\t\t\tkey={key}\n\t\t\t\t\t\t\t\t\trequest={request}\n\t\t\t\t\t\t\t\t\tagentId={agentId}\n\t\t\t\t\t\t\t\t\tchanges={message.changes}\n\t\t\t\t\t\t\t\t\tonRevert={isLatestTurn ? onRevertChanges : undefined}\n\t\t\t\t\t\t\t\t\tonReapply={isLatestTurn ? onReapply : undefined}\n\t\t\t\t\t\t\t\t\tisReverting={isReverting}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tassertNever(message, \"Invalid message type\")\n\t\t\t\t\t}\n\t\t\t\t})}\n\t\t\t</div>\n\t\t</AgentRow.Item>\n\t)\n}\n\nconst AgentChatActivityTrace = memo(function AgentChatActivityTrace({\n\tgroup,\n\tisGenerating,\n\tlastMessage,\n\tscrollContainerRef,\n}: {\n\tgroup: RenderedActivityGroup\n\tisGenerating: boolean\n\tlastMessage?: RenderedMessage\n\tscrollContainerRef: RefObject<HTMLDivElement | null>\n}) {\n\tconst latestAction = getActivityGroupLatestAction(group)\n\tconst latestMessage = latestAction ? getActivityActionLatestMessage(latestAction) : undefined\n\tconst bodyActions = getActivityTraceBodyActions(group)\n\tconst hasBodyActions = bodyActions.length > 0\n\tconst singleActionTraceText =\n\t\tgroup.actions.length === 1 && latestAction ? getActivityActionTraceText(latestAction) : undefined\n\tconst latestTraceText = latestAction ? getActivityActionTraceText(latestAction) : undefined\n\tconst latestComplete = latestMessage ? getActivityMessageComplete(latestMessage, isGenerating, lastMessage) : true\n\tconst canExpand = hasBodyActions || (!!singleActionTraceText && latestComplete)\n\n\tif (!latestAction || !latestMessage) return null\n\n\tconst title = getActivityGroupTitle(group, isGenerating, lastMessage)\n\tconst loading = getActivityActionLoading(latestAction, isGenerating, lastMessage)\n\tconst durationMs = getActivityGroupDurationMs(group.actions)\n\n\treturn (\n\t\t<AgentChatExpandableGroup\n\t\t\theader={expanded => <AgentChatTaskLogLine text={title} durationMs={durationMs} loading={loading && !expanded} />}\n\t\t\tcanExpand={canExpand}\n\t\t\tclassName={taskStyles.thinkingTrace}\n\t\t\tscrollContainerRef={scrollContainerRef}\n\t\t>\n\t\t\t{expanded => {\n\t\t\t\tconst expandedContentVisible = expanded && (hasBodyActions || !!singleActionTraceText)\n\t\t\t\tconst latestTraceVisible =\n\t\t\t\t\t!!latestTraceText && !expanded && latestMessage.type === \"thinking\" && !latestComplete\n\t\t\t\tif (!expandedContentVisible && !latestTraceVisible) return null\n\n\t\t\t\treturn (\n\t\t\t\t\t<div className={cx(expandedContentVisible && hasBodyActions && taskStyles.activityTraceViewport)}>\n\t\t\t\t\t\t<div className={taskStyles.thinkingTraceItemList}>\n\t\t\t\t\t\t\t{expanded &&\n\t\t\t\t\t\t\t\tbodyActions.map(action => {\n\t\t\t\t\t\t\t\t\tconst actionLatestMessage = getActivityActionLatestMessage(action)\n\t\t\t\t\t\t\t\t\tconst complete = getActivityMessageComplete(actionLatestMessage, isGenerating, lastMessage)\n\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<AgentChatExpandableTrace\n\t\t\t\t\t\t\t\t\t\t\tkey={action.id}\n\t\t\t\t\t\t\t\t\t\t\theader={\n\t\t\t\t\t\t\t\t\t\t\t\t<AgentChatTaskLogLine\n\t\t\t\t\t\t\t\t\t\t\t\t\ttext={getTaskMessageText(action.message)}\n\t\t\t\t\t\t\t\t\t\t\t\t\tdurationMs={getActivityActionDurationMs(action)}\n\t\t\t\t\t\t\t\t\t\t\t\t\tloading={getActivityActionLoading(action, isGenerating, lastMessage)}\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\ttraceText={getActivityActionTraceText(action)}\n\t\t\t\t\t\t\t\t\t\t\tcomplete={complete}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t{((expanded && singleActionTraceText) || latestTraceVisible) && latestTraceText && (\n\t\t\t\t\t\t\t\t<AgentChatThinkingTraceText traceText={latestTraceText} clipped={latestTraceVisible} />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t)\n\t\t\t}}\n\t\t</AgentChatExpandableGroup>\n\t)\n})\n\nfunction getActivityGroupTitle(\n\tgroup: RenderedActivityGroup,\n\tisGenerating: boolean,\n\tlastMessage?: RenderedMessage,\n): string {\n\tconst latestAction = getActivityGroupLatestAction(group)\n\tif (!latestAction) return \"\"\n\n\tconst latestMessage = getActivityActionLatestMessage(latestAction)\n\tif (getActivityMessageComplete(latestMessage, isGenerating, lastMessage)) {\n\t\tconst exploredLayerCount = getExploredLayerCount(group.actions)\n\t\tif (exploredLayerCount > 0 && getSourceActivityCount(group.actions) > 1) {\n\t\t\treturn `Explored ${exploredLayerCount} ${pluralize(\"layer\", exploredLayerCount)}`\n\t\t}\n\t}\n\n\treturn getActivityActionTitle(latestAction, isGenerating, lastMessage)\n}\n\nfunction getActivityTraceBodyActions(group: RenderedActivityGroup): readonly RenderedActivityAction[] {\n\tif (group.actions.length === 1) return emptyArray()\n\treturn group.actions\n}\n\nfunction getActivityMessageComplete(\n\tmessage: RenderedActivityMessage,\n\tisGenerating: boolean,\n\tlastMessage?: RenderedMessage,\n): boolean {\n\treturn !!message.complete || !getIsLoading(message, isGenerating, lastMessage)\n}\n\nfunction getThinkingTraceText(message: Extract<RenderedActivityMessage, { type: \"thinking\" }>): string | undefined {\n\treturn message.text?.trim() || undefined\n}\n\nfunction getActivityActionTitle(\n\taction: RenderedActivityAction,\n\tisGenerating: boolean,\n\tlastMessage?: RenderedMessage,\n): string {\n\tconst latestMessage = getActivityActionLatestMessage(action)\n\tif (latestMessage.type === \"thinking\" && !getActivityMessageComplete(latestMessage, isGenerating, lastMessage)) {\n\t\treturn getTaskMessageText(latestMessage)\n\t}\n\n\treturn getTaskMessageText(action.message)\n}\n\nfunction getActivityActionLoading(\n\taction: RenderedActivityAction,\n\tisGenerating: boolean,\n\tlastMessage?: RenderedMessage,\n): boolean {\n\treturn getIsLoading(getActivityActionLatestMessage(action), isGenerating, lastMessage)\n}\n\nfunction getActivityActionTraceText(action: RenderedActivityAction): string | undefined {\n\tconst traceText = action.thinkingMessages.map(getThinkingTraceText).filter(isString).join(\"\\n\\n\")\n\treturn traceText || undefined\n}\n\nfunction getActivityActionLatestMessage(action: RenderedActivityAction): RenderedActivityMessage {\n\treturn getActivityActionLatestThinkingMessage(action) ?? action.message\n}\n\nfunction getActivityActionLatestThinkingMessage(\n\taction: RenderedActivityAction,\n): RenderedActivityThinkingMessage | undefined {\n\tfor (let index = action.thinkingMessages.length - 1; index >= 0; index--) {\n\t\tconst message = action.thinkingMessages[index]\n\t\tif (message && shouldKeepActivityThinking(message)) return message\n\t}\n\n\treturn\n}\n\nfunction getActivityGroupLatestAction(group: RenderedActivityGroup): RenderedActivityAction | undefined {\n\treturn group.actions[group.actions.length - 1]\n}\n\nfunction getExploredLayerCount(actions: readonly RenderedActivityAction[]): number {\n\tlet count = 0\n\tfor (const action of actions) {\n\t\tif (action.message.type === \"script-read\" && action.message.count > 0) count += action.message.count\n\t}\n\treturn count\n}\n\n// Activity groups summarize the visible action rows underneath them. Sum the same display-rounded\n// durations each child row shows, so an expanded group does not disagree with its visible rows.\nfunction getActivityGroupDurationMs(actions: readonly RenderedActivityAction[]): number | undefined {\n\tlet totalDurationMs = 0\n\tfor (const action of actions) {\n\t\tconst durationMs = getActivityActionDurationMs(action)\n\t\tconst displayDurationMs = getDisplayDurationMs(durationMs)\n\t\tif (!isNumber(displayDurationMs)) return\n\t\ttotalDurationMs += displayDurationMs\n\t}\n\treturn totalDurationMs\n}\n\nfunction getActivityActionDurationMs(action: RenderedActivityAction): number | undefined {\n\treturn getActivityDurationMs(action.message, getActivityActionLatestMessage(action))\n}\n\nfunction getActivityDurationMs(\n\tfirstMessage: RenderedActivityMessage,\n\tlastMessage: RenderedActivityMessage,\n): number | undefined {\n\tif (!isNumber(firstMessage.timestamp)) return\n\n\tconst completedAt = getTaskMessageCompletedAt(lastMessage)\n\tif (!isNumber(completedAt)) return\n\n\treturn completedAt - firstMessage.timestamp\n}\n\nfunction getTaskMessageCompletedAt(message: TaskMessage): number | undefined {\n\tif (supportsCompletedAt(message)) return message.completedAt\n\tif (!isNumber(message.timestamp)) return\n\n\tconst durationMs = getTaskMessageDurationMs(message)\n\tif (!isNumber(durationMs)) return\n\n\treturn message.timestamp + durationMs\n}\n\nfunction extractStringArray(value: unknown): readonly string[] | undefined {\n\tif (!Array.isArray(value)) return undefined\n\tif (!value.every((item): item is string => typeof item === \"string\")) return undefined\n\treturn value\n}\n\nfunction renderError(request: AgentRequest, onRetry?: () => void, hideCreditLimitError?: boolean) {\n\tconst { aborted } = request\n\tif (!aborted) return null\n\n\tif (hideCreditLimitError && aborted.reason === \"credit-limit-reached\") return null\n\treturn <AgentChatError error={aborted} onRetry={onRetry} />\n}\n\n// Replace Streamdown's default <img>, which wraps images in a Tailwind-styled container with a\n// download button we can't style. The `controls` prop has no image toggle; `components.img` is\n// the only supported opt-out.\nfunction MarkdownImage({ src, alt, title }: JSX.IntrinsicElements[\"img\"] & ExtraProps) {\n\treturn <img src={src} alt={alt} title={title} className={styles.markdownImage} decoding=\"async\" draggable={false} />\n}\n\nfunction ColorChip({ children, color }: { children?: ReactNode; color?: string }) {\n\tif (!isString(color) || (!Color.isColorString(color) && !Color.isP3String(color))) return children\n\n\treturn (\n\t\t<span className={styles.colorPreview}>\n\t\t\t<span aria-hidden data-sd-animate=\"\" className={styles.colorPreviewSwatch} style={{ backgroundColor: color }} />\n\t\t\t{children}\n\t\t</span>\n\t)\n}\n\nfunction formatOperationsSummary(commandMessages: readonly Extract<TransientTurnMessage, { type: \"command\" }>[]) {\n\treturn formatOperationSummary(commandMessages.map(message => message.command))\n}\n\nfunction isLatestOnlyMessage(message: TransientTurnMessage): boolean {\n\tif (message.type === \"code-agent-status\") return true\n\treturn message.type === \"read\" && message.task === \"review\"\n}\n\n// Hello traveler, LLMs love to refactor this function to add some sort of \"flush\" method that they\n// end up having to call multiple times. It is never necessary. Don't allow them to do it.\nexport function toRenderedMessages(messages: readonly TransientTurnMessage[]): readonly RenderedSingleMessage[] {\n\tconst renderedMessages: RenderedSingleMessage[] = []\n\t// oxlint-disable-next-line oxc/no-accumulating-spread\n\tlet pendingSteps: readonly Extract<TransientTurnMessage, { type: \"step\" | \"annotation\" }>[] = []\n\t// oxlint-disable-next-line oxc/no-accumulating-spread\n\tlet pendingCommands: readonly Extract<TransientTurnMessage, { type: \"command\" }>[] = []\n\n\tlet start: number | null = null\n\tlet scopeId: NodeID | null = null\n\tlet pendingChatPart: PendingChatPart | null = null\n\n\tconst lastMessage = messages[messages.length - 1]\n\tfor (const [index, message] of messages.entries()) {\n\t\tconst nextMessage = messages[index + 1]\n\t\tif (isLatestOnlyMessage(message) && nextMessage) {\n\t\t\t// Code-agent statuses (\u201CDrafting code\u2026\u201D, \u201CReviewing code\u2026\u201D), and \"Reviewing changes\u2026\" are\n\t\t\t// only useful while they\u2019re the active phase. Once anything else is appended, hide them from\n\t\t\t// the rendered transcript.\n\t\t\tcontinue\n\t\t}\n\n\t\t// Record the start time of the first message since we last recorded a timestamp.\n\t\tif (isNumber(message.timestamp) && isNull(start)) {\n\t\t\tstart = message.timestamp\n\t\t}\n\n\t\tif (pendingChatPart) {\n\t\t\trenderedMessages.push({\n\t\t\t\t...pendingChatPart,\n\t\t\t\tdurationMs:\n\t\t\t\t\tisNumber(message.timestamp) && isNumber(pendingChatPart.timestamp)\n\t\t\t\t\t\t? message.timestamp - pendingChatPart.timestamp\n\t\t\t\t\t\t: undefined,\n\t\t\t\tcomplete: true,\n\t\t\t})\n\t\t\tpendingChatPart = null\n\t\t}\n\n\t\tif (message.type === \"step\" || message.type === \"annotation\") {\n\t\t\tpendingSteps = [...pendingSteps, message]\n\t\t\tcontinue\n\t\t}\n\n\t\tif (message.type === \"command\") {\n\t\t\t// We can only determine the scope id for the command if it is provided, otherwise we assume\n\t\t\t// it was part of the previous scope.\n\t\t\tscopeId = message.scopeId ?? scopeId\n\t\t\tpendingCommands = [...pendingCommands, message]\n\t\t\tcontinue\n\t\t}\n\n\t\t// When we encounter a non-step/non-command message, we can calculate the duration of the\n\t\t// previous messages and finalize a step summary. For `Text` we show operation details; for\n\t\t// other message kinds (for example `Answers`) we preserve the last step content.\n\t\tconst duration = !isNull(start) && isNumber(message.timestamp) ? message.timestamp - start : undefined\n\t\tconst summary = formatOperationsSummary(pendingCommands)\n\t\tif (summary) {\n\t\t\trenderedMessages.push({\n\t\t\t\ttype: \"step\",\n\t\t\t\ttext: summary,\n\t\t\t\ttimestamp: message.timestamp,\n\t\t\t\tdurationMs: duration,\n\t\t\t\tcomplete: true,\n\t\t\t\tscopeId: scopeId ?? undefined,\n\t\t\t})\n\t\t}\n\n\t\t// When the previous recorded (not rendered) message was a read review, we apply the review\n\t\t// variant to the current thinking message.\n\t\tconst lastPart = messages[index - 1]\n\t\tconst inheritedTaskLabels = getInheritedTaskMessageLabels(lastPart)\n\t\tconst brandedMessage = applyInheritedTaskLabels({ ...message, scopeId: scopeId ?? undefined }, inheritedTaskLabels)\n\n\t\tif (\n\t\t\tlastMessage === message ||\n\t\t\tbrandedMessage.type === \"text\" ||\n\t\t\tbrandedMessage.type === \"code-patch\" ||\n\t\t\tbrandedMessage.type === \"blocking-task\" ||\n\t\t\tbrandedMessage.type === \"code-agent-status\" ||\n\t\t\tbrandedMessage.type === \"scripting\"\n\t\t) {\n\t\t\t// If the message can calculate it's duration itself, so doesn't need a duration, add it to\n\t\t\t// the output immediately.\n\t\t\trenderedMessages.push(brandedMessage)\n\t\t} else {\n\t\t\t// Otherwise, we need to wait for the next message to calculate the duration.\n\t\t\tassert(isPendingChatPart(brandedMessage), \"Deferred chat part should be pending\")\n\t\t\tpendingChatPart = brandedMessage\n\t\t}\n\n\t\t// Wipe these accumulators to start a new summary after any non-step/non-command message.\n\t\tpendingSteps = []\n\t\tpendingCommands = []\n\t\tstart = null\n\n\t\t// Don't wipe the scope id so that we can continue to show the task preview for the previous\n\t\t// scope. This happens frequently when the model writes some prose, then continues to modify the\n\t\t// current scope, starting with an annotation.\n\t}\n\n\tif (pendingSteps.length > 0) {\n\t\tconst lastStep = pendingSteps[pendingSteps.length - 1]\n\t\tassert(lastStep, \"Last step should exist\")\n\t\trenderedMessages.push({ ...lastStep, scopeId: scopeId ?? undefined })\n\t}\n\n\treturn renderedMessages\n}\n\nexport function groupRenderedMessages(messages: readonly RenderedSingleMessage[]): readonly RenderedMessage[] {\n\tconst renderedMessages: RenderedMessage[] = []\n\tlet pendingActions: readonly RenderedActivityAction[] = []\n\n\tfor (const message of messages) {\n\t\tconst lastMessage = getLatestPendingActionMessage(pendingActions) ?? getLatestTraceMessage(renderedMessages)\n\t\tconst inheritedTaskLabels = getInheritedTaskMessageLabels(lastMessage)\n\t\tconst messageWithThinkingLabel = applyInheritedTaskLabels(message, inheritedTaskLabels, true)\n\n\t\tif (isActivityActionMessage(messageWithThinkingLabel)) {\n\t\t\tpendingActions = appendActivityAction(pendingActions, messageWithThinkingLabel, renderedMessages.length)\n\t\t\tcontinue\n\t\t}\n\n\t\tif (messageWithThinkingLabel.type === \"thinking\") {\n\t\t\tif (pendingActions.length > 0) {\n\t\t\t\tpendingActions = appendThinkingToLatestActivityAction(pendingActions, messageWithThinkingLabel)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\trenderedMessages.push(messageWithThinkingLabel)\n\t\t\tcontinue\n\t\t}\n\n\t\tif (messageWithThinkingLabel.type === \"text\" && !hasRenderableAssistantContent(messageWithThinkingLabel.text)) {\n\t\t\tcontinue\n\t\t}\n\n\t\tappendActivityActionGroup(renderedMessages, pendingActions)\n\t\tpendingActions = []\n\t\trenderedMessages.push(messageWithThinkingLabel)\n\t}\n\n\tappendActivityActionGroup(renderedMessages, pendingActions)\n\treturn renderedMessages\n}\n\nfunction appendActivityActionGroup(renderedMessages: RenderedMessage[], actions: readonly RenderedActivityAction[]) {\n\tif (actions.length === 0) return\n\n\tif (getSourceActivityCount(actions) > 1) {\n\t\trenderedMessages.push(createActivityGroup(actions, renderedMessages.length))\n\t\treturn\n\t}\n\n\tconst action = actions[0]\n\tassert(action, \"Single activity action should exist\")\n\trenderedMessages.push(\n\t\tshouldRenderActivityActionTrace(action) ? createActivityGroup(actions, renderedMessages.length) : action.message,\n\t)\n}\n\nfunction appendActivityAction(\n\tactions: readonly RenderedActivityAction[],\n\tmessage: RenderedActivityActionMessage,\n\tindex: number,\n): readonly RenderedActivityAction[] {\n\tconst lastAction = actions[actions.length - 1]\n\tif (\n\t\tlastAction?.message.type === \"script-read\" &&\n\t\tmessage.type === \"script-read\" &&\n\t\tcanMergeActivityAction(lastAction)\n\t) {\n\t\treturn [\n\t\t\t...actions.slice(0, -1),\n\t\t\t{\n\t\t\t\t...lastAction,\n\t\t\t\tmessage: mergeScriptReadMessages(lastAction.message, message),\n\t\t\t\tsourceActivityCount: lastAction.sourceActivityCount + 1,\n\t\t\t},\n\t\t]\n\t}\n\n\tif (lastAction?.message.type === \"read\" && message.type === \"read\" && canMergeReadAction(lastAction, message)) {\n\t\treturn [\n\t\t\t...actions.slice(0, -1),\n\t\t\t{\n\t\t\t\t...lastAction,\n\t\t\t\tmessage: mergeReadMessages(lastAction.message, message),\n\t\t\t\tsourceActivityCount: lastAction.sourceActivityCount + 1,\n\t\t\t},\n\t\t]\n\t}\n\n\treturn [...actions, createActivityAction(message, index + actions.length)]\n}\n\nfunction canMergeReadAction(firstAction: RenderedActivityAction, nextMessage: ReadMessage): boolean {\n\treturn (\n\t\tfirstAction.message.type === \"read\" &&\n\t\tfirstAction.message.task === nextMessage.task &&\n\t\tfirstAction.message.scopeId === nextMessage.scopeId &&\n\t\tcanMergeActivityAction(firstAction)\n\t)\n}\n\nfunction canMergeActivityAction(action: RenderedActivityAction): boolean {\n\treturn !shouldRenderActivityActionTrace(action)\n}\n\nfunction appendThinkingToLatestActivityAction(\n\tactions: readonly RenderedActivityAction[],\n\tmessage: RenderedActivityThinkingMessage,\n): readonly RenderedActivityAction[] {\n\tconst lastAction = actions[actions.length - 1]\n\tassert(lastAction, \"Latest activity action should exist\")\n\treturn [\n\t\t...actions.slice(0, -1),\n\t\t{\n\t\t\t...lastAction,\n\t\t\tthinkingMessages: [...lastAction.thinkingMessages, message],\n\t\t},\n\t]\n}\n\nfunction createActivityAction(message: RenderedActivityActionMessage, index: number): RenderedActivityAction {\n\treturn {\n\t\tid: `activity-action-${index}-${message.type}-${message.timestamp ?? \"unknown\"}`,\n\t\tmessage,\n\t\tthinkingMessages: emptyArray(),\n\t\tsourceActivityCount: 1,\n\t}\n}\n\nfunction createActivityGroup(actions: readonly RenderedActivityAction[], index: number): RenderedActivityGroup {\n\tconst firstAction = actions[0]\n\tassert(firstAction, \"Activity group must contain at least one action\")\n\treturn {\n\t\ttype: \"activity-group\",\n\t\tid: `activity-${index}-${firstAction.message.type}-${firstAction.message.timestamp ?? \"unknown\"}`,\n\t\tactions,\n\t}\n}\n\nfunction shouldRenderActivityActionTrace(action: RenderedActivityAction): boolean {\n\treturn action.thinkingMessages.some(shouldKeepActivityThinking)\n}\n\nfunction shouldKeepActivityThinking(message: RenderedActivityThinkingMessage): boolean {\n\treturn !!getThinkingTraceText(message) || !isCompletedActivityThinking(message)\n}\n\nfunction isCompletedActivityThinking(message: RenderedActivityThinkingMessage): boolean {\n\treturn !!message.complete || isNumber(message.durationMs)\n}\n\nfunction getSourceActivityCount(actions: readonly RenderedActivityAction[]): number {\n\tlet count = 0\n\tfor (const action of actions) count += action.sourceActivityCount\n\treturn count\n}\n\nfunction mergeScriptReadMessages(firstMessage: ScriptReadMessage, nextMessage: ScriptReadMessage): ScriptReadMessage {\n\tconst completedAt = getTaskMessageCompletedAt(nextMessage)\n\tconst durationMs =\n\t\tisNumber(firstMessage.timestamp) && isNumber(completedAt) ? completedAt - firstMessage.timestamp : undefined\n\n\treturn {\n\t\t...firstMessage,\n\t\tcount: firstMessage.count + nextMessage.count,\n\t\tdurationMs,\n\t\tcomplete: firstMessage.complete && nextMessage.complete ? true : undefined,\n\t}\n}\n\nfunction mergeReadMessages(firstMessage: ReadMessage, nextMessage: ReadMessage): ReadMessage {\n\tconst completedAt = getTaskMessageCompletedAt(nextMessage)\n\tconst durationMs =\n\t\tisNumber(firstMessage.timestamp) && isNumber(completedAt) ? completedAt - firstMessage.timestamp : undefined\n\n\treturn {\n\t\t...firstMessage,\n\t\tdurationMs,\n\t\tcomplete: firstMessage.complete && nextMessage.complete ? true : undefined,\n\t}\n}\n\nfunction getLatestTraceMessage(messages: readonly RenderedMessage[]): RenderedActivityMessage | undefined {\n\treturn getLatestActivityMessage(messages[messages.length - 1])\n}\n\nfunction getLatestActivityMessage(message: RenderedMessage | undefined): RenderedActivityMessage | undefined {\n\tif (isRenderedActivityGroup(message)) {\n\t\tconst latestAction = getActivityGroupLatestAction(message)\n\t\treturn latestAction ? getActivityActionLatestMessage(latestAction) : undefined\n\t}\n\tif (message && isTraceGroupMessage(message)) return message\n\treturn\n}\n\nfunction getLatestPendingActionMessage(\n\tactions: readonly RenderedActivityAction[],\n): RenderedActivityActionMessage | undefined {\n\treturn actions[actions.length - 1]?.message\n}\n\nfunction isTraceGroupMessage(message: RenderedSingleMessage): message is RenderedActivityMessage {\n\tswitch (message.type) {\n\t\tcase \"thinking\":\n\t\tcase \"read\":\n\t\tcase \"script-read\":\n\t\tcase \"scripting\":\n\t\tcase \"create-component\":\n\t\t\treturn true\n\t\tcase \"step\":\n\t\tcase \"annotation\":\n\t\tcase \"code-agent-status\":\n\t\tcase \"text\":\n\t\tcase \"blocking-task\":\n\t\tcase \"code-patch\":\n\t\tcase \"clarification\":\n\t\tcase \"changes\":\n\t\tcase \"design-plan\":\n\t\t\treturn false\n\t\tdefault:\n\t\t\tassertNever(message, \"Invalid message type\")\n\t}\n}\n\nfunction isPendingChatPart(message: RenderedSingleMessage): message is PendingChatPart {\n\tswitch (message.type) {\n\t\tcase \"step\":\n\t\tcase \"annotation\":\n\t\tcase \"text\":\n\t\t\treturn false\n\t\tcase \"thinking\":\n\t\tcase \"read\":\n\t\tcase \"script-read\":\n\t\tcase \"create-component\":\n\t\tcase \"code-agent-status\":\n\t\tcase \"scripting\":\n\t\tcase \"blocking-task\":\n\t\tcase \"code-patch\":\n\t\tcase \"clarification\":\n\t\tcase \"changes\":\n\t\tcase \"design-plan\":\n\t\t\treturn true\n\t\tdefault:\n\t\t\tassertNever(message, \"Invalid message type\")\n\t}\n}\n\nfunction applyInheritedTaskLabels(\n\tmessage: RenderedSingleMessage,\n\tinheritedTaskLabels: TaskMessageLabels | undefined,\n\t// Used by the grouping pass after activity aggregation. For example, script-read(1) + script-read(2)\n\t// merges to count 3, so a folded thinking label should be rewritten from \"Reading 2 layers\" to \"Reading 3 layers\".\n\toverwriteExisting = false,\n): RenderedSingleMessage {\n\tif (message.type !== \"thinking\" || message.variant || !inheritedTaskLabels) {\n\t\treturn message\n\t}\n\n\tif (message.inheritedTaskLabels && !overwriteExisting) {\n\t\treturn message\n\t}\n\n\treturn { ...message, inheritedTaskLabels }\n}\n", "import \"AgentChatPanel.styles_7e3hi3.wyw.css\"; export const agentPanel = \"agentPanel_a1lhpv91\";\nexport const disabled = \"disabled_d1b3a0ym\";\nexport const header = \"header_h1447jtx\";\nexport const divider = \"divider_d1da86kv\";\nexport const content = \"content_c1yw7gd7\";\nexport const messages = \"messages_m1isp4r0\";\nexport const newChatButton = \"newChatButton_neksj7q\";", "import { assertNever } from \"@framerjs/shared\"\nimport type { AgentInputSegment, LayerTagSegment } from \"app/agent/editor/agentInputSchema.ts\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport { isString } from \"utils/typeChecks.ts\"\nimport * as styles from \"./PromptPartsText.styles.ts\"\nimport {\n\tCanvasSelectionTag,\n\tColorStyleTag,\n\tCmsCollectionTag,\n\tCmsTableSelectionTag,\n\tComponentTag,\n\tFileAttachmentTag,\n\tLinkStyleTag,\n\tLayoutTemplateTag,\n\tPageTag,\n\tSkillTag,\n\tTextStyleTag,\n} from \"./SelectionTag.tsx\"\n\nfunction PromptLayerSelectionPart({ part }: { part: LayerTagSegment }) {\n\tif (part.nodes.length > 1) {\n\t\treturn <CanvasSelectionTag layerCount={part.nodes.length} />\n\t}\n\n\tconst node = part.nodes[0]\n\treturn (\n\t\t<CanvasSelectionTag\n\t\t\tnodeName={node?.name ?? Dictionary.Unknown}\n\t\t\tlayerIconName={node?.type ?? \"rectangle\"}\n\t\t\tisComponent={node?.type === \"component\"}\n\t\t/>\n\t)\n}\n\nexport function PromptPartsText({ parts }: { parts: readonly AgentInputSegment[] }) {\n\treturn (\n\t\t<>\n\t\t\t{parts.map((part, index) => {\n\t\t\t\tconst key = `${index}`\n\t\t\t\tif (isString(part)) return <span key={key}>{part}</span>\n\n\t\t\t\tswitch (part.type) {\n\t\t\t\t\tcase \"cmsCollection\":\n\t\t\t\t\t\treturn withSelectionTagWrapper(key, <CmsCollectionTag collectionName={part.collectionName} />)\n\t\t\t\t\tcase \"cmsSelection\": {\n\t\t\t\t\t\tconst cellsCount =\n\t\t\t\t\t\t\tpart.collectionItemIds.length * (part.variableColumnIds.length + part.metadataColumnIds.length)\n\t\t\t\t\t\treturn withSelectionTagWrapper(\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t<CmsTableSelectionTag collectionName={part.collectionName} cellCount={cellsCount} />,\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t\tcase \"layer\":\n\t\t\t\t\t\treturn withSelectionTagWrapper(key, <PromptLayerSelectionPart part={part} />)\n\t\t\t\t\tcase \"page\":\n\t\t\t\t\t\treturn withSelectionTagWrapper(key, <PageTag name={part.name || Dictionary.Unknown} />)\n\t\t\t\t\tcase \"designPage\":\n\t\t\t\t\t\treturn withSelectionTagWrapper(key, <PageTag name={part.name || Dictionary.Unknown} />)\n\t\t\t\t\tcase \"component\":\n\t\t\t\t\t\treturn withSelectionTagWrapper(key, <ComponentTag name={part.name || Dictionary.Unknown} />)\n\t\t\t\t\tcase \"textStyle\":\n\t\t\t\t\t\treturn withSelectionTagWrapper(key, <TextStyleTag name={part.name || Dictionary.Unknown} />)\n\t\t\t\t\tcase \"linkStyle\":\n\t\t\t\t\t\treturn withSelectionTagWrapper(key, <LinkStyleTag name={part.name || Dictionary.Unknown} />)\n\t\t\t\t\tcase \"colorStyle\":\n\t\t\t\t\t\treturn withSelectionTagWrapper(\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t<ColorStyleTag name={part.name || Dictionary.Unknown} color={part.color} />,\n\t\t\t\t\t\t)\n\t\t\t\t\tcase \"layoutTemplate\":\n\t\t\t\t\t\treturn withSelectionTagWrapper(key, <LayoutTemplateTag name={part.name || Dictionary.Unknown} />)\n\t\t\t\t\tcase \"skill\":\n\t\t\t\t\t\treturn withSelectionTagWrapper(key, <SkillTag label={part.label || part.skillId} />)\n\t\t\t\t\tcase \"fileAttachment\":\n\t\t\t\t\t\treturn withSelectionTagWrapper(key, <FileAttachmentTag name={part.fileName} />)\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn assertNever(part)\n\t\t\t\t}\n\t\t\t})}\n\t\t</>\n\t)\n}\n\nfunction withSelectionTagWrapper(key: string, child: JSX.Element) {\n\treturn (\n\t\t<span className={styles.selectionTagWrapper} key={key}>\n\t\t\t{child}\n\t\t</span>\n\t)\n}\n", "import \"AgentFooter.styles_1k3bi8g.wyw.css\"; import { sharedIconColors } from \"../AgentButton/AgentButton.styles.ts\";\nexport const footer = \"footer_f1n52xcq\";\nexport const modelPickerContainer = \"modelPickerContainer_m1wvrs19\";\nexport const active = \"active_a1w06due\";\nexport const chatIconButton = \"chatIconButton_c1yjyxpr\";\nexport const button = sharedIconColors;", "import { assertNever } from \"@framerjs/shared\"\nimport { cx } from \"@linaria/core\"\nimport { AgentButton } from \"app/agent/components/AgentButton/AgentButton.tsx\"\nimport * as chatFooterStyles from \"app/agent/components/AgentInput/AgentFooter.styles.ts\"\nimport type { AgentID } from \"app/ai/agents/Agent.ts\"\nimport type { AgentChangeKind, AgentRequest, TransientTurnMessage } from \"app/ai/agents/types.ts\"\nimport engine from \"document/engine.ts\"\nimport type { NodeID } from \"document/models/CanvasTree/index.ts\"\nimport { useCallback, useState } from \"react\"\nimport { countAndNoun } from \"utils/countAndNoun.ts\"\nimport { IconAgentLayerLink, IconAgentLayerText } from \"../../layers/AgentLayerIcons.tsx\"\nimport { stopPropagation } from \"../../properties/rows/utils/stopPropagation.ts\"\nimport * as styles from \"./AgentChangesSummary.styles.ts\"\nimport { appendEllipsis } from \"./AgentChatTask.tsx\"\nimport { IconAgentCMS } from \"./IconAgentCMS.tsx\"\nimport { IconAgentCodeFile } from \"./IconAgentCodeFile.tsx\"\nimport { IconAgentComponent } from \"./IconAgentComponent.tsx\"\nimport { IconAgentHome } from \"./IconAgentHome.tsx\"\nimport { IconAgentPage } from \"./IconAgentPage.tsx\"\nimport { showAgentTurnContextMenu } from \"./agentTurnStatsMenu.ts\"\n\ntype Change = Extract<TransientTurnMessage, { type: \"changes\" }>[\"changes\"][number]\n\nconst collapsedCount = 3\n\nexport function AgentChangesSummary({\n\trequest,\n\tagentId,\n\tchanges,\n\tonRevert,\n\tonReapply,\n\tisReverting,\n}: {\n\trequest: AgentRequest\n\tagentId: AgentID\n\tchanges: readonly Change[]\n\tonRevert?: () => void\n\tonReapply?: () => void\n\tisReverting?: boolean\n}) {\n\tconst [showAll, setShowAll] = useState(false)\n\tconst visibleRows = showAll ? changes : changes.slice(0, collapsedCount)\n\tconst hiddenCount = changes.length - visibleRows.length\n\tconst hasToggle = changes.length > collapsedCount\n\n\tconst handleContextMenu = useCallback(\n\t\t(event: React.MouseEvent) => {\n\t\t\tevent.preventDefault()\n\t\t\tshowAgentTurnContextMenu({\n\t\t\t\trequest,\n\t\t\t\tagentId,\n\t\t\t\tonUndoChanges: onRevert,\n\t\t\t\tlocation: { x: event.clientX, y: event.clientY },\n\t\t\t})\n\t\t},\n\t\t[request, agentId, onRevert],\n\t)\n\n\tif (changes.length === 0) return null\n\n\treturn (\n\t\t<div className={styles.card} onContextMenu={handleContextMenu}>\n\t\t\t<div className={styles.header}>\n\t\t\t\t<span className={styles.headerTitle}>Changes</span>\n\t\t\t\t{onRevert && !onReapply && (\n\t\t\t\t\t<AgentButton\n\t\t\t\t\t\tvariant=\"clean\"\n\t\t\t\t\t\tdisabled={isReverting}\n\t\t\t\t\t\tonClick={onRevert}\n\t\t\t\t\t\tonMouseDown={stopPropagation}\n\t\t\t\t\t\tclassName={cx(chatFooterStyles.button, styles.undoRedoButton)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span>Undo</span>\n\t\t\t\t\t</AgentButton>\n\t\t\t\t)}\n\t\t\t\t{onReapply && (\n\t\t\t\t\t<AgentButton\n\t\t\t\t\t\tvariant=\"clean\"\n\t\t\t\t\t\tdisabled={isReverting}\n\t\t\t\t\t\tonClick={onReapply}\n\t\t\t\t\t\tonMouseDown={stopPropagation}\n\t\t\t\t\t\tclassName={cx(chatFooterStyles.button, styles.undoRedoButton)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span>Redo</span>\n\t\t\t\t\t</AgentButton>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t<div className={styles.rows}>\n\t\t\t\t{visibleRows.map((row, i) => {\n\t\t\t\t\tconst viewable = isViewableRowKind(row.kind)\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={row.id}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclassName={cx(\n\t\t\t\t\t\t\t\tstyles.row,\n\t\t\t\t\t\t\t\tviewable && styles.rowViewable,\n\t\t\t\t\t\t\t\ti === visibleRows.length - 1 && !hasToggle && styles.rowLast,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tonClick={viewable ? () => viewSummary(row) : undefined}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div className={styles.title}>\n\t\t\t\t\t\t\t\t<span className={styles.icon}>\n\t\t\t\t\t\t\t\t\t<SummaryIcon kind={row.kind} id={row.id} />\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t<span className={styles.name}>{row.name}</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div className={styles.count}>\n\t\t\t\t\t\t\t\t<span className={styles.countValue}>{formatChangeCount(row)}</span>\n\t\t\t\t\t\t\t\t{viewable && <span className={styles.viewLabel}>View</span>}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t)\n\t\t\t\t})}\n\t\t\t</div>\n\t\t\t{hasToggle && (\n\t\t\t\t<button type=\"button\" className={styles.showMore} onClick={() => setShowAll(v => !v)}>\n\t\t\t\t\t{showAll ? \"Show less\" : appendEllipsis(`Show ${hiddenCount} more`, false)}\n\t\t\t\t</button>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n\nfunction SummaryIcon({ kind, id }: { kind: Change[\"kind\"]; id: NodeID }) {\n\tswitch (kind) {\n\t\tcase \"code-file\":\n\t\t\treturn <IconAgentCodeFile />\n\t\tcase \"collection\":\n\t\t\treturn <IconAgentCMS />\n\t\tcase \"component\":\n\t\t\treturn <IconAgentComponent />\n\t\tcase \"page\":\n\t\t\treturn engine.tree.root.homePageNodeId === id ? <IconAgentHome /> : <IconAgentPage />\n\t\tcase \"text-style\":\n\t\t\treturn <IconAgentLayerText />\n\t\tcase \"link-style\":\n\t\t\treturn <IconAgentLayerLink />\n\t\tcase \"layer\":\n\t\t\treturn <IconAgentPage />\n\t\tdefault:\n\t\t\tassertNever(kind, \"Invalid AgentChangeKind\")\n\t}\n}\n\nfunction viewSummary(summary: Change): void {\n\tif (summary.kind === \"code-file\") {\n\t\tengine.stores.codeEditorStore.editFile(summary.id)\n\t\treturn\n\t}\n\tengine.stores.scopeStore.selectByNode(summary.id)\n}\n\nfunction isViewableRowKind(kind: AgentChangeKind): boolean {\n\tswitch (kind) {\n\t\tcase \"text-style\":\n\t\tcase \"link-style\":\n\t\t\treturn false\n\t\tcase \"code-file\":\n\t\tcase \"collection\":\n\t\tcase \"component\":\n\t\tcase \"page\":\n\t\tcase \"layer\":\n\t\t\treturn true\n\t\tdefault:\n\t\t\tassertNever(kind, \"Invalid AgentChangeKind\")\n\t}\n}\n\nfunction formatChangeCount(row: Change): string {\n\tswitch (row.kind) {\n\t\tcase \"code-file\":\n\t\t\treturn countAndNoun(row.changes, \"Line\", \"Lines\")\n\t\tcase \"collection\":\n\t\t\treturn countAndNoun(row.changes, \"Item\", \"Items\")\n\t\tcase \"text-style\":\n\t\tcase \"link-style\":\n\t\t\treturn countAndNoun(row.changes, \"Style\", \"Styles\")\n\t\tcase \"component\":\n\t\tcase \"page\":\n\t\tcase \"layer\":\n\t\t\treturn countAndNoun(row.changes, \"Layer\", \"Layers\")\n\t\tdefault:\n\t\t\tassertNever(row.kind, \"Invalid AgentChangeKind\")\n\t}\n}\n", "import \"AgentChangesSummary.styles_9ap71z.wyw.css\"; import { cx } from \"@linaria/core\";\nexport const card = \"card_c1lcvpf5\";\nexport const header = \"header_h26xreu\";\nexport const headerTitle = \"headerTitle_h11th2cw\";\nconst headerAction = \"headerAction_hu2ls0k\";\nexport const undoRedoButton = cx(headerAction, \"undoRedoButton_uwqaf91\", \"undoRedoButton_u1v0uru9\");\nexport const rows = \"rows_r1dn60h9\";\nexport const row = \"row_r1dmfufu\";\nexport const rowViewable = \"rowViewable_rnnudwa\";\nexport const rowLast = \"rowLast_rjjjkw6\";\nexport const countValue = \"countValue_c1oacnf9\";\nexport const viewLabel = \"viewLabel_v2txdid\";\nexport const title = \"title_t1rpsvip\";\nexport const icon = \"icon_i14v0je2\";\nexport const name = \"name_n10ar6o9\";\nexport const count = \"count_cwbaxa5\";\nexport const showMore = \"showMore_s6uxiyf\";", "import { Button, IconInputSearch, IconSectionCollapsed } from \"@framerjs/fresco\"\nimport { colors, dimensions } from \"@framerjs/fresco/tokens\"\nimport { assertNever } from \"@framerjs/shared\"\nimport { cx } from \"@linaria/core\"\nimport { AgentButton } from \"app/agent/components/AgentButton/AgentButton.tsx\"\nimport * as chatFooterStyles from \"app/agent/components/AgentInput/AgentFooter.styles.ts\"\nimport { AttachmentList, type AttachmentListImage } from \"app/agent/components/AgentInput/AttachmentList.tsx\"\nimport { AgentRow } from \"app/agent/components/AgentRow/AgentRow.tsx\"\nimport type { AgentID } from \"app/ai/agents/Agent.ts\"\nimport type { BlockingTaskType, ChatPart } from \"app/ai/agents/types.ts\"\nimport { applyTypography } from \"app/ai/utils/typography.ts\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport { EngineChange } from \"document/EngineChanges.ts\"\nimport { IconAgentAssetLayoutTemplate } from \"document/components/chrome/assets/IconAgentAssetLayoutTemplate.tsx\"\nimport { getWebPagePath } from \"document/components/utils/getWebPagePath.ts\"\nimport engine from \"document/engine.ts\"\nimport { type MaybeShallowScopeNode, type NodeID, isScopeNode } from \"document/models/CanvasTree/index.ts\"\nimport {\n\tisContentManagementNode,\n\tisLayoutTemplateNode,\n\tisSmartComponentNode,\n\tisWebPageNode,\n} from \"document/models/CanvasTree/nodes/utils/nodeCheck.ts\"\nimport { useEngineCallback } from \"document/useEngineCallback.ts\"\nimport { useEngineState } from \"document/useEngineState.ts\"\nimport { type Transition, motion } from \"framer-motion\"\nimport type React from \"react\"\nimport { memo, useEffect, useLayoutEffect, useRef, useState, type RefObject } from \"react\"\nimport { isArray, isNumber, isString } from \"utils/typeChecks.ts\"\nimport * as commonStyles from \"./AgentChat.common.styles.ts\"\nimport * as styles from \"./AgentChatTask.styles.ts\"\nimport { IconAgentAnalyze } from \"./IconAgentAnalyze.tsx\"\nimport { IconAgentCMS } from \"./IconAgentCMS.tsx\"\nimport { IconAgentComponent } from \"./IconAgentComponent.tsx\"\nimport { IconAgentDesignPlan } from \"./IconAgentDesignPlan.tsx\"\nimport { IconAgentFonts } from \"./IconAgentFonts.tsx\"\nimport { IconAgentGlobe } from \"./IconAgentGlobe.tsx\"\nimport { IconAgentHome } from \"./IconAgentHome.tsx\"\nimport { IconAgentImage } from \"./IconAgentImage.tsx\"\nimport { IconAgentPage } from \"./IconAgentPage.tsx\"\n\ntype AgentChatTaskType = \"component\" | \"webpage\" | \"cms\" | \"layoutTemplate\"\n\ninterface AgentChatTaskProps {\n\tagentId: AgentID\n\tscopeId: NodeID\n\ttext: string\n\tallowLarge?: boolean\n\tloading?: boolean\n\tdurationMs?: number\n\ttimestamp?: number\n}\n\ninterface AgentChatTaskLogLineProps {\n\ttext: string\n\tdurationMs?: number\n\ttimestamp?: number\n\tloading?: boolean\n\tloadingClassName?: string\n\ttextClassName?: string\n}\n\ninterface AgentChatExpandableTraceProps {\n\theader: React.ReactNode\n\ttraceText?: string\n\tcomplete: boolean\n\tclassName?: string\n\talwaysRenderButton?: boolean\n\tscrollContainerRef?: RefObject<HTMLDivElement | null>\n}\n\ninterface AgentChatExpandableGroupProps {\n\theader: React.ReactNode | ((expanded: boolean) => React.ReactNode)\n\tcanExpand: boolean\n\tclassName?: string\n\tscrollContainerRef?: RefObject<HTMLDivElement | null>\n\tchildren: (expanded: boolean) => React.ReactNode\n}\n\nconst taskTypeIconName = {\n\tcomponent: IconAgentComponent,\n\twebpage: IconAgentPage,\n\tcms: IconAgentCMS,\n\tlayoutTemplate: IconAgentAssetLayoutTemplate,\n} as const\n\nconst taskTypeFallbackTitle: Record<AgentChatTaskType, string> = {\n\tcomponent: Dictionary.Component,\n\twebpage: Dictionary.Page,\n\tcms: Dictionary.Collection,\n\tlayoutTemplate: Dictionary.Template,\n}\n\nconst accentColorForType: Record<AgentChatTaskType, string> = {\n\tcomponent: colors.agentButtonChatLabelForeground,\n\twebpage: colors.agentButtonChatLabelForeground,\n\tcms: colors.agentButtonChatLabelForeground,\n\tlayoutTemplate: colors.agentButtonChatLabelForeground,\n}\n\nfunction getType(node: MaybeShallowScopeNode): AgentChatTaskType {\n\tif (isSmartComponentNode(node)) return \"component\"\n\tif (isContentManagementNode(node)) return \"cms\"\n\tif (isLayoutTemplateNode(node)) return \"layoutTemplate\"\n\treturn \"webpage\"\n}\n\nconst transition: Transition = { duration: styles.duration, type: \"spring\", bounce: 0.2 }\nconst absoluteDateTimeFormatter = new Intl.DateTimeFormat(undefined, {\n\tdateStyle: \"medium\",\n\ttimeStyle: \"medium\",\n})\n\nfunction appendOptionalMessage(prefix: string, message: string | undefined): string {\n\tif (!message) return prefix\n\treturn `${prefix} ${message}`\n}\n\nexport function getBlockingTaskIcon(\n\ttask: BlockingTaskType,\n\tmessage: string | undefined,\n): React.ComponentType<React.SVGProps<SVGSVGElement>> {\n\tswitch (task) {\n\t\tcase \"font-search\":\n\t\t\treturn IconAgentFonts\n\t\tcase \"screenshot\":\n\t\t\treturn message === Dictionary.Home ? IconAgentHome : IconAgentPage\n\t\tcase \"image-search\":\n\t\t\treturn IconAgentImage\n\t\tcase \"fetch\":\n\t\t\treturn IconAgentGlobe\n\t\tcase \"search-with-script\":\n\t\t\treturn IconInputSearch\n\t\tcase \"publish\":\n\t\t\treturn IconAgentGlobe\n\t\tcase \"analyze\":\n\t\t\treturn IconAgentAnalyze\n\t\tcase \"search\":\n\t\t\treturn IconInputSearch\n\t\tcase \"deprecated-design-plan\":\n\t\t\treturn IconAgentDesignPlan\n\t\tcase \"make-external-component-local\":\n\t\t\treturn IconAgentComponent\n\t\tdefault:\n\t\t\tassertNever(task, \"Unknown blocking task type\")\n\t}\n}\n\nexport function actionForBlockingTaskType(\n\ttype: BlockingTaskType,\n\tmessage: string | undefined,\n\tcompleted: boolean,\n): string {\n\tswitch (type) {\n\t\tcase \"font-search\":\n\t\t\treturn `${completed ? \"Searched\" : \"Searching\"} ${message ?? \"for fonts\"}`\n\t\tcase \"screenshot\":\n\t\t\treturn `${completed ? \"Viewed\" : \"Viewing\"} ${message ?? \"screenshot\"}`\n\t\tcase \"image-search\":\n\t\t\treturn `${completed ? \"Searched\" : \"Searching\"} ${message ?? \"for images\"}`\n\t\tcase \"fetch\":\n\t\t\treturn `${completed ? \"Viewed\" : \"Viewing\"} ${message ?? \"a URL\"}`\n\t\tcase \"publish\":\n\t\t\treturn message ?? (completed ? Dictionary.Published : \"Publishing\")\n\t\tcase \"make-external-component-local\":\n\t\t\treturn message ?? (completed ? \"Unlinked component\" : \"Unlinking component\")\n\t\tcase \"deprecated-design-plan\":\n\t\t\treturn `${completed ? Dictionary.CreatedAt : \"Creating\"} a design plan`\n\t\tcase \"search-with-script\":\n\t\t\treturn `${completed ? \"Searched\" : \"Searching\"}`\n\t\tcase \"analyze\":\n\t\t\treturn appendOptionalMessage(`${completed ? \"Analyzed\" : \"Analyzing\"}`, message)\n\t\tcase \"search\":\n\t\t\treturn appendOptionalMessage(`${completed ? \"Searched\" : \"Searching\"}`, message)\n\t\tdefault:\n\t\t\tassertNever(type, \"Unknown async task type\")\n\t}\n}\n\nexport function appendEllipsis(text: string, completed: boolean): string {\n\treturn completed ? text : `${text}\u2026`\n}\n\ninterface InlineAgentChatCardProps {\n\ticon?: React.ReactElement\n\ttitle: string\n\tloading?: boolean\n\tlabel?: string | readonly string[]\n\tonLabelClick?: () => void\n\timageUrls?: readonly string[]\n}\n\nfunction useRotatingLabelValues(label: readonly string[] | string | undefined) {\n\tconst [index, setIndex] = useState(0)\n\n\tuseEffect(() => {\n\t\tif (!isArray(label)) return\n\t\tconst interval = setInterval(() => {\n\t\t\tsetIndex(prev => (prev + 1) % label.length)\n\t\t}, 1000)\n\t\treturn () => clearInterval(interval)\n\t}, [label])\n\n\tif (!isArray(label)) return label\n\n\treturn label[index]\n}\n\nexport function getBlockingTaskLabel(\n\tpart: Extract<ChatPart, { type: \"blocking-task\" }>,\n): string | readonly string[] | undefined {\n\tswitch (part.task) {\n\t\tcase \"analyze\":\n\t\tcase \"search\":\n\t\t\tif (part.completedAt) return undefined\n\t\t\treturn isArray(part.metadata?.pages) && part.metadata?.pages.every(isString) ? part.metadata?.pages : undefined\n\t\tcase \"font-search\":\n\t\tcase \"screenshot\":\n\t\tcase \"image-search\":\n\t\tcase \"fetch\":\n\t\tcase \"publish\":\n\t\tcase \"deprecated-design-plan\":\n\t\tcase \"search-with-script\":\n\t\tcase \"make-external-component-local\":\n\t\t\treturn\n\t\tdefault:\n\t\t\tassertNever(part.task, \"Unknown blocking task type\")\n\t}\n}\n\nexport function InlineAgentChatCard({\n\ticon,\n\ttitle,\n\tloading,\n\tlabel,\n\tonLabelClick,\n\timageUrls,\n}: InlineAgentChatCardProps) {\n\tconst [expanded, setExpanded] = useState(false)\n\tconst hasImages = !!imageUrls && imageUrls.length > 0 && !loading\n\tconst labelValue = useRotatingLabelValues(label)\n\n\tconst attachmentImages: readonly AttachmentListImage[] = hasImages\n\t\t? imageUrls.map(src => ({ src, alt: \"Screenshot\" }))\n\t\t: []\n\n\tconst interactiveProps = hasImages\n\t\t? ({\n\t\t\t\trole: \"button\",\n\t\t\t\ttabIndex: 0,\n\t\t\t\t\"aria-expanded\": expanded,\n\t\t\t\tonClick: () => setExpanded(prev => !prev),\n\t\t\t\tonKeyDown: (e: React.KeyboardEvent) => {\n\t\t\t\t\tif (e.key === \"Enter\" || e.key === \" \") {\n\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\tsetExpanded(prev => !prev)\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t} as const)\n\t\t: {}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cx(styles.card, styles.inlineTask, hasImages && styles.inlineTaskClickable)}\n\t\t\tdata-expanded={expanded ? \"true\" : undefined}\n\t\t\t{...interactiveProps}\n\t\t>\n\t\t\t<div className={styles.inlineTaskRow}>\n\t\t\t\t{icon && <div className={styles.icon}>{icon}</div>}\n\t\t\t\t<AgentRow.Text\n\t\t\t\t\tcontainerClassName={styles.taskMessageContainer}\n\t\t\t\t\tclassName={cx(styles.message, loading ? styles.loadingLog : styles.inlineTaskColor)}\n\t\t\t\t>\n\t\t\t\t\t{title}\n\t\t\t\t</AgentRow.Text>\n\n\t\t\t\t{labelValue &&\n\t\t\t\t\t(onLabelClick ? (\n\t\t\t\t\t\t<Button variant=\"clean\" className={styles.inlineTaskLabel} onClick={onLabelClick}>\n\t\t\t\t\t\t\t{labelValue}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<span className={styles.inlineTaskLabel}>{labelValue}</span>\n\t\t\t\t\t))}\n\t\t\t</div>\n\n\t\t\t{hasImages && (\n\t\t\t\t<div className={styles.imagesWrapper} aria-hidden={!expanded}>\n\t\t\t\t\t<div className={cx(styles.inlineTaskImages, styles.imagesContent)}>\n\t\t\t\t\t\t<div className={cx(commonStyles.divider, styles.inlineTaskDivider)} />\n\n\t\t\t\t\t\t<AttachmentList items={attachmentImages} interactive={expanded} />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n\ninterface SlowThinkingTraceTitleState {\n\tactive: boolean\n\tshowSlowTitle: boolean\n}\n\nconst slowResponseTimeoutMs = 15_000\nfunction useShouldShowSlowThinkingTraceTitle(active: boolean): boolean {\n\tconst [state, setState] = useState<SlowThinkingTraceTitleState>({ active, showSlowTitle: false })\n\tconst showSlowTitle = state.active === active ? state.showSlowTitle : false\n\n\tif (state.active !== active) setState({ active, showSlowTitle: false })\n\n\tuseEffect(() => {\n\t\tif (!active || showSlowTitle) return\n\n\t\tconst timeoutId = setTimeout(() => {\n\t\t\tsetState(current => {\n\t\t\t\tif (current.active !== active || current.showSlowTitle) return current\n\t\t\t\treturn { active, showSlowTitle: true }\n\t\t\t})\n\t\t}, slowResponseTimeoutMs)\n\n\t\treturn () => clearTimeout(timeoutId)\n\t}, [active, showSlowTitle])\n\n\treturn showSlowTitle\n}\n\nexport const AgentChatThinkingTrace = memo(function AgentChatThinkingTrace({\n\ttext,\n\tcomplete,\n\tdurationMs,\n\tscrollContainerRef,\n\ttitle,\n\tlatest = false,\n\tclassName,\n}: {\n\ttext?: string\n\tcomplete: boolean\n\tdurationMs?: number\n\tscrollContainerRef: RefObject<HTMLDivElement | null>\n\ttitle: string\n\tlatest?: boolean\n\tclassName?: string\n}) {\n\tconst traceText = text?.trim()\n\tconst hasTrace = !!traceText\n\tconst shouldShowSlowTitle = useShouldShowSlowThinkingTraceTitle(latest && !complete && !hasTrace)\n\tconst durationInSeconds = isNumber(durationMs) ? Math.max(Math.round(durationMs / 1000), 1) : undefined\n\n\tconst traceTitle = shouldShowSlowTitle ? \"Taking longer than expected\" : title\n\n\treturn (\n\t\t<AgentChatExpandableTrace\n\t\t\theader={\n\t\t\t\t<>\n\t\t\t\t\t<AgentRow.Text className={cx(styles.message, complete ? styles.logColor : styles.loadingLog)}>\n\t\t\t\t\t\t{traceTitle}\n\t\t\t\t\t</AgentRow.Text>\n\t\t\t\t\t{isNumber(durationInSeconds) && durationInSeconds > 0 && (\n\t\t\t\t\t\t<span className={styles.stepDuration}>{durationInSeconds}s</span>\n\t\t\t\t\t)}\n\t\t\t\t</>\n\t\t\t}\n\t\t\ttraceText={traceText}\n\t\t\tcomplete={complete}\n\t\t\tclassName={cx(styles.thinkingTrace, className)}\n\t\t\talwaysRenderButton\n\t\t\tscrollContainerRef={scrollContainerRef}\n\t\t/>\n\t)\n})\n\nexport function AgentChatExpandableTrace({\n\theader,\n\ttraceText,\n\tcomplete,\n\tclassName,\n\talwaysRenderButton = false,\n\tscrollContainerRef,\n}: AgentChatExpandableTraceProps) {\n\tconst [expanded, setExpanded] = useState(false)\n\tconst rootRef = useRef<HTMLDivElement>(null)\n\tconst anchorTopRef = useRef<number | undefined>(undefined)\n\tconst hasTrace = !!traceText\n\tconst canExpand = complete && hasTrace\n\tconst traceVisible = hasTrace && (!complete || expanded)\n\tconst shouldRenderButton = alwaysRenderButton || hasTrace\n\n\tconst toggleExpanded = () => {\n\t\tif (!canExpand) return\n\t\tanchorTopRef.current = scrollContainerRef ? rootRef.current?.getBoundingClientRect().top : undefined\n\t\tsetExpanded(current => !current)\n\t}\n\n\tuseLayoutEffect(() => {\n\t\tconst anchorTop = anchorTopRef.current\n\t\tconst root = rootRef.current\n\t\tif (!root || !isNumber(anchorTop)) return\n\n\t\tanchorTopRef.current = undefined\n\t\tconst nextTop = root.getBoundingClientRect().top\n\t\tconst delta = nextTop - anchorTop\n\t\tif (delta === 0) return\n\n\t\tscrollContainerRef?.current?.scrollBy({ top: delta })\n\t})\n\n\treturn (\n\t\t<div ref={rootRef} className={className}>\n\t\t\t{shouldRenderButton ? (\n\t\t\t\t<Button\n\t\t\t\t\tvariant=\"clean\"\n\t\t\t\t\tclassName={styles.thinkingTraceHeader}\n\t\t\t\t\taria-expanded={traceVisible}\n\t\t\t\t\tonClick={toggleExpanded}\n\t\t\t\t\tenabled={canExpand}\n\t\t\t\t>\n\t\t\t\t\t{header}\n\t\t\t\t\t{canExpand && (\n\t\t\t\t\t\t<span className={cx(styles.thinkingTraceChevron, expanded && styles.thinkingTraceChevronExpanded)}>\n\t\t\t\t\t\t\t<IconSectionCollapsed />\n\t\t\t\t\t\t</span>\n\t\t\t\t\t)}\n\t\t\t\t</Button>\n\t\t\t) : (\n\t\t\t\theader\n\t\t\t)}\n\t\t\t{traceVisible && traceText && <AgentChatThinkingTraceText traceText={traceText} clipped={!complete} />}\n\t\t</div>\n\t)\n}\n\nexport function AgentChatExpandableGroup({\n\theader,\n\tcanExpand,\n\tclassName,\n\tscrollContainerRef,\n\tchildren,\n}: AgentChatExpandableGroupProps) {\n\tconst [expanded, setExpanded] = useState(false)\n\tconst rootRef = useRef<HTMLDivElement>(null)\n\tconst anchorTopRef = useRef<number | undefined>(undefined)\n\n\tconst toggleExpanded = () => {\n\t\tif (!canExpand) return\n\t\tanchorTopRef.current = !expanded && scrollContainerRef ? rootRef.current?.getBoundingClientRect().top : undefined\n\t\tsetExpanded(current => !current)\n\t}\n\n\tuseLayoutEffect(() => {\n\t\tif (!expanded) return\n\n\t\tconst anchorTop = anchorTopRef.current\n\t\tconst root = rootRef.current\n\t\tif (!root || !isNumber(anchorTop)) return\n\n\t\tanchorTopRef.current = undefined\n\t\tconst nextTop = root.getBoundingClientRect().top\n\t\tconst delta = nextTop - anchorTop\n\t\tif (delta === 0) return\n\n\t\tscrollContainerRef?.current?.scrollBy({ top: delta })\n\t}, [expanded, scrollContainerRef])\n\n\treturn (\n\t\t<div ref={rootRef} className={className}>\n\t\t\t<Button\n\t\t\t\tvariant=\"clean\"\n\t\t\t\tclassName={styles.thinkingTraceHeader}\n\t\t\t\taria-expanded={expanded}\n\t\t\t\tonClick={toggleExpanded}\n\t\t\t\tenabled={canExpand}\n\t\t\t>\n\t\t\t\t{typeof header === \"function\" ? header(expanded) : header}\n\t\t\t\t{canExpand && (\n\t\t\t\t\t<span className={cx(styles.thinkingTraceChevron, expanded && styles.thinkingTraceChevronExpanded)}>\n\t\t\t\t\t\t<IconSectionCollapsed />\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t</Button>\n\t\t\t{children(expanded)}\n\t\t</div>\n\t)\n}\n\nexport function AgentChatThinkingTraceText({ traceText, clipped }: { traceText: string; clipped: boolean }) {\n\tconst traceViewportRef = useRef<HTMLDivElement>(null)\n\tconst traceTextRef = useRef<HTMLDivElement>(null)\n\tconst [isOverflowing, setIsOverflowing] = useState(false)\n\n\tuseLayoutEffect(() => {\n\t\tconst viewport = traceViewportRef.current\n\t\tconst traceTextElement = traceTextRef.current\n\t\tif (!traceText || !viewport || !traceTextElement || !clipped) {\n\t\t\tsetIsOverflowing(false)\n\t\t\treturn\n\t\t}\n\n\t\tsetIsOverflowing(traceTextElement.scrollHeight - viewport.clientHeight > 1)\n\t}, [clipped, traceText])\n\n\treturn (\n\t\t<div\n\t\t\tref={traceViewportRef}\n\t\t\tclassName={cx(\n\t\t\t\tstyles.thinkingTraceViewport,\n\t\t\t\tclipped && isOverflowing && styles.thinkingTraceViewportOverflowing,\n\t\t\t\t!clipped && styles.thinkingTraceViewportExpanded,\n\t\t\t)}\n\t\t>\n\t\t\t<div ref={traceTextRef} className={cx(styles.thinkingTraceText, \"wantsNativeTextAction\")}>\n\t\t\t\t{applyTypography(traceText)}\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\nexport function AgentChatTaskLogLine({\n\ttext,\n\tdurationMs,\n\ttimestamp,\n\tloading = false,\n\tloadingClassName = styles.loadingLog,\n\ttextClassName = styles.logColor,\n}: AgentChatTaskLogLineProps) {\n\tconst durationText = formatDuration(durationMs)\n\tconst startedAt = getStartedAtTimestamp(timestamp, durationMs)\n\n\treturn (\n\t\t<AgentRow.Text className={cx(styles.message, loading ? loadingClassName : textClassName)}>\n\t\t\t{applyTypography(text)}\n\t\t\t{durationText && (\n\t\t\t\t<span\n\t\t\t\t\tclassName={styles.stepDuration}\n\t\t\t\t\ttitle={startedAt ? `Started at ${formatAbsoluteDateTime(startedAt)}` : undefined}\n\t\t\t\t>\n\t\t\t\t\t{durationText}\n\t\t\t\t</span>\n\t\t\t)}\n\t\t</AgentRow.Text>\n\t)\n}\n\nexport function AgentChatTask({\n\tagentId,\n\tscopeId,\n\ttext,\n\tallowLarge = true,\n\tloading = false,\n\tdurationMs,\n\ttimestamp,\n}: AgentChatTaskProps) {\n\tconst activeScopeId = useEngineState(() => engine.stores.scopeStore.active.id, [], [engine.stores.scopeStore])\n\tconst { title, type, exists } = useEngineState(\n\t\t() => {\n\t\t\tconst scopeNode = engine.tree.getNodeWithTrait(scopeId, isScopeNode)\n\t\t\tconst type = getType(scopeNode)\n\t\t\tconst exists = !!scopeNode\n\n\t\t\tif (type === \"cms\") {\n\t\t\t\treturn { title: Dictionary.Cms, type, exists }\n\t\t\t}\n\n\t\t\tif (scopeId === engine.tree.root.homePageNodeId) {\n\t\t\t\treturn { title: Dictionary.Home, type, exists }\n\t\t\t}\n\n\t\t\tconst pageName = isWebPageNode(scopeNode)\n\t\t\t\t? getWebPagePath(engine.tree, scopeNode)\n\t\t\t\t: scopeNode?.resolveValue(\"name\")?.trim()\n\n\t\t\treturn {\n\t\t\t\ttitle: pageName || taskTypeFallbackTitle[type],\n\t\t\t\ttype,\n\t\t\t\texists,\n\t\t\t} as const\n\t\t},\n\t\t[scopeId],\n\t\t[EngineChange.Tree],\n\t)\n\n\tconst compact = !exists || scopeId === activeScopeId || !allowLarge\n\tconst loadingTextClassName = compact ? styles.loadingLog : styles.loadingLogCard\n\n\t// To prevent *old* messages from animating set a false transition after layout animation is\n\t// complete.\n\tconst layoutDependency = compact ? \"large\" : \"compact\"\n\n\tconst Icon = taskTypeIconName[type] ?? IconAgentHome\n\n\tconst handleClick = useEngineCallback(() => {\n\t\tif (compact) return\n\t\tengine.stores.scopeStore.selectByNode(scopeId)\n\t}, [scopeId, compact])\n\n\tconst enableFollowMode = useEngineCallback(\n\t\t(e: React.MouseEvent) => {\n\t\t\te.stopPropagation()\n\t\t\tengine.stores.scopeStore.selectScopeByAgent(scopeId)\n\t\t\tengine.stores.agentStore.setFollowModeForAgent(agentId, true)\n\t\t},\n\t\t[scopeId, agentId],\n\t)\n\n\treturn (\n\t\t<motion.div\n\t\t\tlayout\n\t\t\tclassName={cx(styles.card, compact ? styles.compact : undefined)}\n\t\t\tstyle={{\n\t\t\t\t// Inline border-radius so it can be scale corrected during the animation.\n\t\t\t\tborderRadius: dimensions.values.cardRadius,\n\t\t\t}}\n\t\t\tonClick={handleClick}\n\t\t\ttransition={transition}\n\t\t\tlayoutDependency={layoutDependency}\n\t\t>\n\t\t\t<motion.div\n\t\t\t\tlayoutDependency={layoutDependency}\n\t\t\t\tlayout=\"position\"\n\t\t\t\tclassName={styles.content}\n\t\t\t\ttransition={transition}\n\t\t\t>\n\t\t\t\t{/* These layers are hidden with just opacity to ensure they animate properly. */}\n\t\t\t\t<div className={styles.header} style={{ \"--accent-color\": accentColorForType[type] }}>\n\t\t\t\t\t<div className={styles.icon}>\n\t\t\t\t\t\t<Icon />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className={commonStyles.title}>{title}</div>\n\t\t\t\t\t{loading && (\n\t\t\t\t\t\t<AgentButton\n\t\t\t\t\t\t\tvariant=\"clean\"\n\t\t\t\t\t\t\tclassName={cx(chatFooterStyles.button, styles.followButton)}\n\t\t\t\t\t\t\tonClick={enableFollowMode}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span>Follow</span>\n\t\t\t\t\t\t</AgentButton>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t\t<AgentChatTaskLogLine\n\t\t\t\t\ttext={text}\n\t\t\t\t\tdurationMs={durationMs}\n\t\t\t\t\ttimestamp={timestamp}\n\t\t\t\t\tloading={loading}\n\t\t\t\t\tloadingClassName={cx(loadingTextClassName, styles.messageWithFollowButton)}\n\t\t\t\t/>\n\t\t\t</motion.div>\n\t\t</motion.div>\n\t)\n}\n\nfunction formatDuration(durationMs: number | undefined): string | undefined {\n\tif (!isNumber(durationMs)) return\n\n\tconst displayDurationMs = getDisplayDurationMs(durationMs)\n\tif (!isNumber(displayDurationMs)) return\n\n\treturn `${displayDurationMs / 1000}s`\n}\n\nexport function getDisplayDurationMs(durationMs: number | undefined): number | undefined {\n\tif (!isNumber(durationMs) || durationMs <= 0) return\n\n\treturn Math.max(Math.round(durationMs / 100) * 100, 100)\n}\n\nfunction getStartedAtTimestamp(timestamp: number | undefined, durationMs: number | undefined): number | undefined {\n\tif (!isNumber(timestamp) || !isNumber(durationMs) || durationMs <= 0) return\n\treturn Math.max(timestamp - durationMs, 0)\n}\n\nfunction formatAbsoluteDateTime(timestamp: number): string {\n\treturn absoluteDateTimeFormatter.format(new Date(timestamp))\n}\n", "import \"AgentChat.common.styles_v1wfat.wyw.css\"; import { colors } from \"@framerjs/fresco/tokens\";\nimport { cx } from \"@linaria/core\";\nexport const selectableText = `\n\tcursor: text;\n\t-webkit-user-select: text;\n\tuser-select: text;\n`;\nexport const truncatedText = \"truncatedText_tgsynem\";\nexport const inputCard = \"inputCard_ipofwx6\";\nexport const actionButton = \"actionButton_adym9ck\";\nexport const title = cx(\"title_tfhsi4\", truncatedText);\nexport const divider = \"divider_d1l72493\";\nconst getFadeOverlayMask = (direction, fadeSize) => {\n  if (direction === \"to bottom\") {\n    return `\n\t\t\t-webkit-mask-image: linear-gradient(to bottom, black calc(100% - ${fadeSize}), transparent 100%);\n\t\t\tmask-image: linear-gradient(to bottom, black calc(100% - ${fadeSize}), transparent 100%);\n\t\t`;\n  }\n  return `\n\t\t-webkit-mask-image: linear-gradient(to bottom, transparent 0%, black ${fadeSize});\n\t\tmask-image: linear-gradient(to bottom, transparent 0%, black ${fadeSize});\n\t`;\n};\nexport const getFadeOverlay = (direction, fadeColor = colors.panelBackground, fadeSize = \"4em\") => {\n  return `\n\t\t\tcontent: \"\";\n\t\t\tposition: absolute;\n\t\t\tleft: 0;\n\t\t\tright: 0;\n\t\t\theight: ${fadeSize};\n\t\t\tpointer-events: none;\n\t\t\ttransition: opacity 160ms ease-out;\n\t\t\tbackground-color: ${fadeColor};\n\t\t\t${getFadeOverlayMask(direction, fadeSize)}\n\t`;\n};", "import \"AgentChatTask.styles_1x3ocr2.wyw.css\"; import { cx } from \"@linaria/core\";\nexport const duration = 0.4;\nconst rightAccessoryText = \"rightAccessoryText_r1ftuuxm\";\nexport const card = \"card_c12t7qur\";\nexport const content = \"content_c1me51ue\";\nexport const header = \"header_h12hn28v\";\nexport const compact = \"compact_cl92j5c\";\nexport const icon = \"icon_i156oayt\";\nexport const followButton = cx(rightAccessoryText, \"followButton_f1jkiwrk\");\nexport const message = \"message_m1cxbclz\";\nexport const messageWithFollowButton = \"messageWithFollowButton_mx340bu\";\nexport const logColor = \"logColor_l125w5vp\";\nexport const inlineTaskColor = \"inlineTaskColor_i1b9rlk7\";\nconst loadingLogBase = \"loadingLogBase_l8beevn\";\nexport const loadingLog = cx(loadingLogBase, \"loadingLog_lbrrigg\");\nexport const loadingLogCard = cx(loadingLogBase, \"loadingLogCard_l1hda4n6\");\nexport const stepDuration = cx(rightAccessoryText, \"stepDuration_s1sawfju\");\nexport const inlineTaskLabel = cx(rightAccessoryText, \"inlineTaskLabel_i166n30x\");\nexport const taskMessageContainer = \"taskMessageContainer_tm22i46\";\nexport const inlineTask = \"inlineTask_iuw42m4\";\nexport const inlineTaskClickable = \"inlineTaskClickable_i9tnnme\";\nexport const imagesWrapper = \"imagesWrapper_i1fs1xeg\";\nexport const imagesContent = \"imagesContent_i7vgob2\";\nexport const inlineTaskImages = \"inlineTaskImages_i1ofxsu1\";\nexport const inlineTaskDivider = \"inlineTaskDivider_i1ke6qzm\";\nexport const inlineTaskRow = \"inlineTaskRow_is1wefn\";\nexport const thinkingTrace = \"thinkingTrace_t1rd445s\";\nexport const thinkingTraceHeader = \"thinkingTraceHeader_t1nbcwl5\";\nexport const thinkingTraceChevron = \"thinkingTraceChevron_tzz5ncf\";\nexport const thinkingTraceChevronExpanded = \"thinkingTraceChevronExpanded_tfvhd2j\";\nexport const thinkingTraceViewport = \"thinkingTraceViewport_t3uzkyj\";\nexport const thinkingTraceViewportOverflowing = \"thinkingTraceViewportOverflowing_t16cjxck\";\nexport const thinkingTraceViewportExpanded = \"thinkingTraceViewportExpanded_t4p43ai\";\nexport const thinkingTraceText = \"thinkingTraceText_thsopyv\";\nexport const thinkingTraceItemList = \"thinkingTraceItemList_t1k1y3v2\";\nexport const activityTraceViewport = \"activityTraceViewport_a1tw9ws0\";", "export function IconAgentAnalyze() {\n\treturn (\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" fill=\"none\">\n\t\t\t<title>Analysis</title>\n\t\t\t<path\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\td=\"M7.75 1.5v9M4.25 1.5v9M.75 4.5v3M11.25 4.5v3\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n", "import type { SVGProps } from \"react\"\n\nexport function IconAgentDesignPlan(props: SVGProps<SVGSVGElement>) {\n\treturn (\n\t\t<svg\n\t\t\trole=\"presentation\"\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\twidth=\"12\"\n\t\t\theight=\"12\"\n\t\t\tviewBox=\"0 0 12 12\"\n\t\t\tfill=\"none\"\n\t\t\t{...props}\n\t\t>\n\t\t\t<path\n\t\t\t\td=\"M1.25 7.83c0-.371.148-.728.41-.99l5.09-5.09a2.476 2.476 0 0 1 3.5 0 2.476 2.476 0 0 1 0 3.5l-5.09 5.09c-.262.262-.619.41-.99.41H1.25Z\"\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\tfillOpacity={0.2}\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n", "import type { SVGProps } from \"react\"\n\nexport function IconAgentFonts(props: SVGProps<SVGSVGElement>) {\n\treturn (\n\t\t<svg\n\t\t\trole=\"presentation\"\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\twidth=\"12\"\n\t\t\theight=\"12\"\n\t\t\tfill=\"none\"\n\t\t\taria-hidden=\"true\"\n\t\t\tfocusable=\"false\"\n\t\t\t{...props}\n\t\t>\n\t\t\t<g fill=\"transparent\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeMiterlimit=\"10\" strokeWidth=\"1.5\">\n\t\t\t\t<path d=\"M6.25 2.25V10\" />\n\t\t\t\t<path d=\"M2 2.25h8.5\" />\n\t\t\t</g>\n\t\t</svg>\n\t)\n}\n", "import type { SVGProps } from \"react\"\n\nexport function IconAgentGlobe(props: SVGProps<SVGSVGElement>) {\n\treturn (\n\t\t<svg\n\t\t\trole=\"presentation\"\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\twidth=\"12\"\n\t\t\theight=\"12\"\n\t\t\tviewBox=\"0 0 12 12\"\n\t\t\tfill=\"none\"\n\t\t\t{...props}\n\t\t>\n\t\t\t<path\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\td=\"M6 0a6 6 0 1 1 0 12A6 6 0 0 1 6 0M1.5 6a4.5 4.5 0 0 0 3.896 4.46c.189.188.392.29.604.29s.415-.102.604-.29a4.501 4.501 0 0 0 0-8.92c-.189-.188-.392-.29-.604-.29s-.415.102-.604.29A4.5 4.5 0 0 0 1.5 6\"\n\t\t\t/>\n\t\t\t<path\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\td=\"M6 .75C7.243.75 8.25 3.101 8.25 6S7.243 11.25 6 11.25 3.75 8.899 3.75 6 4.757.75 6 .75Z\"\n\t\t\t/>\n\t\t\t<path fill=\"currentColor\" fillOpacity={0.2} d=\"M6 1a5 5 0 1 1-.001 10.001A5 5 0 0 1 6 1\" />\n\t\t\t<path fill=\"transparent\" stroke=\"currentColor\" d=\"M.5 6S3 7 6 7s5.5-1 5.5-1\" />\n\t\t</svg>\n\t)\n}\n", "import type { SVGProps } from \"react\"\n\nexport function IconAgentImage(props: SVGProps<SVGSVGElement>) {\n\treturn (\n\t\t<svg\n\t\t\trole=\"presentation\"\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\twidth=\"12\"\n\t\t\theight=\"12\"\n\t\t\tviewBox=\"0 0 12 12\"\n\t\t\tfill=\"none\"\n\t\t\t{...props}\n\t\t>\n\t\t\t<path\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\td=\"M1.25 3.25a2 2 0 0 1 2-2h5.5a2 2 0 0 1 2 2v5.5a2 2 0 0 1-2 2h-5.5a2 2 0 0 1-2-2Z\"\n\t\t\t/>\n\t\t\t<path\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\tfillOpacity={0.2}\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\td=\"M1.848 7.56a7 7 0 0 1 8.304 0l.598.44v.75a2 2 0 0 1-2 2h-5.5a2 2 0 0 1-2-2V8Z\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n", "import type { SVGProps } from \"react\"\n\nexport function IconAgentCodeFile(props: SVGProps<SVGSVGElement>) {\n\treturn (\n\t\t<svg role=\"presentation\" xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" fill=\"none\" {...props}>\n\t\t\t<path\n\t\t\t\td=\"M 3.5 2.75 L 1.311 4.939 C 0.725 5.525 0.725 6.475 1.311 7.061 L 3.5 9.25\"\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t/>\n\t\t\t<path\n\t\t\t\td=\"M 8.5 2.75 L 10.689 4.939 C 11.275 5.525 11.275 6.475 10.689 7.061 L 8.5 9.25\"\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n", "import \"AgentContextUsageMeter.styles_1xu3jeg.wyw.css\"; export const contextTooltipContent = \"contextTooltipContent_c1xaxwla\";\nexport const contextMeterTooltipAnchor = \"contextMeterTooltipAnchor_c10d3rhz\";\nexport const contextMeter = \"contextMeter_c18dbvxt\";\nexport const contextMeterRing = \"contextMeterRing_cs71xes\";\nexport const contextMeterOval = \"contextMeterOval_c12amb2z\";\nexport const contextMeterPath = \"contextMeterPath_cxuy8ux\";\nexport const contextTooltipPercent = \"contextTooltipPercent_c1m4bwxf\";\nexport const contextTooltipTokens = \"contextTooltipTokens_csgi1aw\";", "import { Tooltip } from \"@framerjs/fresco\"\nimport { useDimensionValue } from \"app/agent/hooks/useDimensionValue.ts\"\nimport type { AgentContextUsage } from \"app/ai/agents/Agent.ts\"\nimport type { LanguageModel } from \"app/ai/languageModels.ts\"\nimport { ContextLimitCap, getContextLimitForModel } from \"app/ai/models.ts\"\nimport type { CSSProperties } from \"react\"\nimport * as styles from \"./AgentContextUsageMeter.styles.ts\"\n\ninterface AgentContextUsageDisplay extends AgentContextUsage {\n\tpercent: number\n\tcontextLimit: number\n}\n\nexport function getEffectiveContextLimit(model: LanguageModel, inputTokens: number): number {\n\tconst lowerBound = getContextLimitForModel(model, ContextLimitCap.Lower)\n\tconst upperBound = getContextLimitForModel(model, ContextLimitCap.Upper)\n\n\tif (inputTokens > upperBound) return getContextLimitForModel(model, ContextLimitCap.Max)\n\tif (inputTokens > lowerBound) return upperBound\n\treturn lowerBound\n}\n\nfunction createContextUsageDisplay(usage: AgentContextUsage): AgentContextUsageDisplay | undefined {\n\tconst normalizedInputTokens = Math.max(0, usage.inputTokens)\n\tconst contextLimit = getEffectiveContextLimit(usage.model, normalizedInputTokens)\n\tif (contextLimit <= 0) return undefined\n\n\treturn {\n\t\tmodel: usage.model,\n\t\tpercent: (normalizedInputTokens / contextLimit) * 100,\n\t\tinputTokens: normalizedInputTokens,\n\t\tcontextLimit,\n\t\tsource: usage.source,\n\t}\n}\n\nconst compactTokenFormatter = new Intl.NumberFormat(\"en-US\", {\n\tnotation: \"compact\",\n\tcompactDisplay: \"short\",\n\tmaximumFractionDigits: 1,\n})\n\nexport function formatContextTokenCount(value: number): string {\n\treturn compactTokenFormatter.format(Math.max(0, value)).toUpperCase()\n}\n\nexport function formatContextPercent(value: number): string {\n\tconst label = value.toFixed(1)\n\treturn `${label.endsWith(\".0\") ? label.slice(0, -2) : label}%`\n}\n\ninterface AgentContextUsageMeterProps {\n\tusage: AgentContextUsage\n}\n\nconst ringRadius = 6\nconst ringCircumference = 2 * Math.PI * ringRadius\n/** Vertical gap from the input to the tooltip. */\nconst contextTooltipVerticalGapFromInput = 3\n/** Horizontal gap from the input to the tooltip, so the borders align on top of each other. */\nconst contextTooltipHorizontalGapFromInput = 1\n\nexport function AgentContextUsageMeter({ usage }: AgentContextUsageMeterProps) {\n\tconst panelPadding = useDimensionValue(\"panelPadding\")\n\tconst display = createContextUsageDisplay(usage)\n\tif (!display) return null\n\n\tconst percentLabel = formatContextPercent(display.percent)\n\tconst tokenLabel = `${formatContextTokenCount(display.inputTokens)}/${formatContextTokenCount(display.contextLimit)} tokens`\n\tconst progress = Math.min(100, Math.max(0, display.percent))\n\tconst strokeDashoffset = ringCircumference * (1 - progress / 100)\n\n\tconst tooltip = (\n\t\t<div className={styles.contextTooltipContent}>\n\t\t\t<div className={styles.contextTooltipPercent}>{percentLabel} context</div>\n\t\t\t<div className={styles.contextTooltipTokens}>{tokenLabel}</div>\n\t\t</div>\n\t)\n\n\treturn (\n\t\t<Tooltip\n\t\t\ttooltip={tooltip}\n\t\t\tvariant=\"toolbar\"\n\t\t\tdirection=\"bottom\"\n\t\t\tdelay={0}\n\t\t\thideOnClick={false}\n\t\t\talignment=\"end\"\n\t\t\tpositionOffset={{\n\t\t\t\tx: panelPadding + contextTooltipHorizontalGapFromInput,\n\t\t\t\ty: panelPadding + contextTooltipVerticalGapFromInput,\n\t\t\t}}\n\t\t\tclassName={styles.contextMeterTooltipAnchor}\n\t\t>\n\t\t\t<div className={styles.contextMeter} aria-label={`${percentLabel} context, ${tokenLabel}`}>\n\t\t\t\t<svg className={styles.contextMeterRing} viewBox=\"0 0 20 20\" aria-hidden=\"true\">\n\t\t\t\t\t<circle className={styles.contextMeterOval} cx={10} cy={10} r={ringRadius} />\n\t\t\t\t\t<circle\n\t\t\t\t\t\tclassName={styles.contextMeterPath}\n\t\t\t\t\t\tcx={10}\n\t\t\t\t\t\tcy={10}\n\t\t\t\t\t\tr={ringRadius}\n\t\t\t\t\t\tstyle={\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tstrokeDasharray: ringCircumference,\n\t\t\t\t\t\t\t\tstrokeDashoffset,\n\t\t\t\t\t\t\t} satisfies CSSProperties\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t</svg>\n\t\t\t</div>\n\t\t</Tooltip>\n\t)\n}\n", "import { noop } from \"@framerjs/shared/src/noop.ts\"\nimport type { AgentID } from \"app/ai/agents/Agent.ts\"\nimport type { AgentRequest } from \"app/ai/agents/types.ts\"\nimport { ContextLimitCap, getContextLimitForModel, labelForEffort, modelNames } from \"app/ai/models.ts\"\nimport type { MenuItemOptions } from \"app/menu.ts\"\nimport engine from \"document/engine.ts\"\nimport { isNumber } from \"utils/typeChecks.ts\"\nimport { formatDuration } from \"../../evaluations/formatDuration.ts\"\nimport { formatContextPercent } from \"./AgentContextUsageMeter.tsx\"\n\ninterface ShowAgentTurnContextMenuParams {\n\trequest: AgentRequest\n\tagentId: AgentID\n\tonUndoChanges?: () => void\n\tlocation: { x: number; y: number }\n}\n\nexport function showAgentTurnContextMenu({\n\trequest,\n\tagentId,\n\tonUndoChanges,\n\tlocation,\n}: ShowAgentTurnContextMenuParams) {\n\tconst stats = collectStats(request, agentId)\n\n\tconst items: MenuItemOptions[] = [\n\t\t{ label: \"Undo Changes\", enabled: !!onUndoChanges, click: onUndoChanges },\n\t\t{ label: \"Mark as Bad\", click: noop }, // TODO\n\t\t{ type: \"separator\" },\n\t\t{ label: \"Prompt Stats\", submenu: buildPromptStatsSubmenu(stats) },\n\t]\n\n\tengine.stores.contextMenuStore.show(items, { location })\n}\n\nfunction formatCost(cost: number | undefined): string {\n\tif (!isNumber(cost)) return missingValue\n\treturn `$${cost.toFixed(cost < 1 ? 3 : 2)}`\n}\n\n// 1 credit = $0.0085 = 0.85 cents. Work in hundredths of a cent (dollars \u00D7 10_000) so the\n// conversion stays integer math and avoids floating-point drift from dividing by 0.0085.\n// https://github.com/framer/FramerAIService/blob/29fe5a93d17010617471febb2d3cebe0bf0fc226/clients/usage_credits.go#L5\nconst hundredthsOfACentPerCredit = 85\n\nfunction costToCredits(cost: number): number {\n\tconst hundredthsOfACent = Math.round(cost * 10_000)\n\treturn Math.round(hundredthsOfACent / hundredthsOfACentPerCredit)\n}\n\nfunction formatCredits(cost: number | undefined): string {\n\tif (!isNumber(cost)) return missingValue\n\treturn formatTokenCount(costToCredits(cost))\n}\n\nfunction formatTokenCount(value: number): string {\n\treturn value.toLocaleString()\n}\n\nfunction getSessionCost(agentId: AgentID): number | undefined {\n\tconst agent = engine.stores.agentStore.getAgent(agentId)\n\tif (!agent) return undefined\n\tlet total = 0\n\tfor (const turn of agent.chatMessages) {\n\t\tif (turn.done && isNumber(turn.cost)) total += turn.cost\n\t}\n\treturn total > 0 ? total : undefined\n}\n\nfunction getContextPercent(agentId: AgentID): number | undefined {\n\tconst contextUsage = engine.stores.agentStore.getAgent(agentId)?.contextUsage\n\tif (!contextUsage) return undefined\n\n\tconst inputTokens = Math.max(0, contextUsage.inputTokens)\n\tconst lowerBound = getContextLimitForModel(contextUsage.model, ContextLimitCap.Lower)\n\tconst upperBound = getContextLimitForModel(contextUsage.model, ContextLimitCap.Upper)\n\tconst contextLimit =\n\t\tinputTokens > upperBound\n\t\t\t? getContextLimitForModel(contextUsage.model, ContextLimitCap.Max)\n\t\t\t: inputTokens > lowerBound\n\t\t\t\t? upperBound\n\t\t\t\t: lowerBound\n\tif (contextLimit <= 0) return undefined\n\n\treturn (inputTokens / contextLimit) * 100\n}\n\nconst missingValue = \"\u2014\"\n\ninterface Stat {\n\tlabel: string\n\tvalue: string\n\tgroup?: boolean\n}\n\nfunction collectStats(request: AgentRequest, agentId: AgentID): Stat[] {\n\tconst { inputTokens, outputTokens, totalTokens } = request.usage ?? {}\n\n\tconst throughput =\n\t\tisNumber(outputTokens) && isNumber(request.elapsedMs) && request.elapsedMs > 0\n\t\t\t? `${Math.round(outputTokens / (request.elapsedMs / 1000))}tps`\n\t\t\t: missingValue\n\n\tconst contextPercent = getContextPercent(agentId)\n\tconst isEmployee = engine.stores.sessionStore.user.isFramerEmployee === true\n\n\treturn [\n\t\t{ label: \"Credits used\", value: formatCredits(request.cost) },\n\t\t{ label: \"Model\", value: request.model ? modelNames[request.model] : missingValue },\n\t\t{ label: \"Reasoning\", value: request.reasoningEffort ? labelForEffort(request.reasoningEffort) : missingValue },\n\t\t{ label: \"Total time\", value: isNumber(request.elapsedMs) ? formatDuration(request.elapsedMs) : missingValue },\n\t\t{ label: \"Latency\", value: isNumber(request.ttftMs) ? `${(request.ttftMs / 1000).toFixed(2)}s` : missingValue },\n\t\t{ label: \"Throughput\", value: throughput },\n\t\t...(isEmployee\n\t\t\t? [\n\t\t\t\t\t{ label: \"Prompt Cost\", value: isNumber(request.cost) ? formatCost(request.cost) : missingValue },\n\t\t\t\t\t{ label: \"Session Cost\", value: formatCost(getSessionCost(agentId)) },\n\t\t\t\t]\n\t\t\t: []),\n\t\t{\n\t\t\tlabel: \"Context\",\n\t\t\tvalue: isNumber(contextPercent) ? formatContextPercent(contextPercent) : missingValue,\n\t\t\tgroup: true,\n\t\t},\n\t\t{ label: \"Tokens in\", value: isNumber(inputTokens) ? formatTokenCount(inputTokens) : missingValue },\n\t\t{ label: \"Tokens out\", value: isNumber(outputTokens) ? formatTokenCount(outputTokens) : missingValue },\n\t\t{ label: \"Total tokens\", value: isNumber(totalTokens) ? formatTokenCount(totalTokens) : missingValue },\n\t]\n}\n\nfunction buildPromptStatsSubmenu(stats: Stat[]): MenuItemOptions[] {\n\tconst items: MenuItemOptions[] = []\n\tfor (const stat of stats) {\n\t\tif (stat.group && items.length > 0) items.push({ type: \"separator\" })\n\t\titems.push({ label: stat.label, readonly: true, acceleratorLabelTokens: [stat.value] })\n\t}\n\n\tconst clipboardText = stats.map(stat => `${stat.label}: ${stat.value}`).join(\"\\n\")\n\titems.push({ type: \"separator\" })\n\titems.push({ label: \"Copy\", click: () => void navigator.clipboard.writeText(clipboardText) })\n\n\treturn items\n}\n", "import { Button } from \"@framerjs/fresco\"\nimport { cx } from \"@linaria/core\"\nimport { type DiffLinePrefix, parseDiffLines } from \"app/ai/agents/diffLines.ts\"\nimport type { CodePatchOperation } from \"app/ai/agents/types.ts\"\nimport { useEngineCallback } from \"document/useEngineCallback.ts\"\nimport { useAndAssertVekterEngine } from \"document/useVekterEngine.ts\"\nimport { useEffect, useMemo, useRef, useState } from \"react\"\nimport { createHighlighter, type HighlighterGeneric } from \"shiki\"\nimport tsx from \"shiki/langs/tsx.mjs\"\nimport dracula from \"shiki/themes/dracula.mjs\"\nimport githubLight from \"shiki/themes/github-light.mjs\"\nimport { useDarkAppearance } from \"web/components/darkThemeClassName.ts\"\nimport * as styles from \"./AgentChatCodePatch.styles.ts\"\nimport * as taskStyles from \"./AgentChatTask.styles.ts\"\nimport { InlineAgentChatCard } from \"./AgentChatTask.tsx\"\nimport { IconAgentCode } from \"./IconAgentCode.tsx\"\n\ntype SupportedPatchLanguage = \"tsx\"\n\ntype PatchHighlighterTheme = \"github-light\" | \"dracula\"\n\ntype CodePatchHighlighter = HighlighterGeneric<SupportedPatchLanguage, PatchHighlighterTheme>\n\ninterface AgentChatCodePatchProps {\n\tcontent: string\n\tfileName?: string\n\toperation?: CodePatchOperation\n\tisStreaming?: boolean\n}\n\nexport function AgentChatCodePatch({ content, fileName, operation, isStreaming = false }: AgentChatCodePatchProps) {\n\tconst engine = useAndAssertVekterEngine()\n\tconst { codeEditorStore } = engine.stores\n\tconst linesRef = useRef<HTMLDivElement>(null)\n\tconst isDark = useDarkAppearance()\n\n\tconst { name, extension } = displayFileName(fileName)\n\tconst normalizedExtension = extension.toLowerCase().trim()\n\tconst language = isSupportedPatchLanguage(normalizedExtension) ? normalizedExtension : undefined\n\tconst { prefixes, cleanCode } = parseDiffLines(content)\n\n\tconst highlightResult = useHighlight(cleanCode, language, isDark)\n\tconst showDiff = operation === \"update_file\"\n\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: Scroll to the bottom of the diff when the highlight result changes.\n\tuseEffect(() => {\n\t\tif (!isStreaming || !linesRef.current || !content) return\n\t\tlinesRef.current.scrollTop = linesRef.current.scrollHeight\n\t}, [isStreaming, content, highlightResult])\n\n\tconst isGoToFileEnabled = !!fileName && !isStreaming\n\n\tconst handleHeaderClick = useEngineCallback(() => {\n\t\tif (!isGoToFileEnabled) return\n\t\tcodeEditorStore.editFile(fileName)\n\t}, [isGoToFileEnabled, fileName, codeEditorStore])\n\n\tif (operation === \"delete_file\") {\n\t\treturn (\n\t\t\t<InlineAgentChatCard label=\"Deleted\" icon={<IconAgentCode />} title={extension ? `${name}.${extension}` : name} />\n\t\t)\n\t}\n\n\tif (!content) return null\n\n\tconst cleanLines = cleanCode.split(\"\\n\")\n\tconst tokenLines: DiffLineToken[][] = cleanLines.map((line, i) => highlightResult?.tokens[i] ?? [{ content: line }])\n\n\t// TODO: Check if file still exists otherwise disable click action and update cursor to default\n\treturn (\n\t\t<div className={cx(taskStyles.card, styles.codeCard)}>\n\t\t\t<div className={styles.header}>\n\t\t\t\t<IconAgentCode className={styles.headerIcon} />\n\n\t\t\t\t<Button className={styles.fileName} variant=\"clean\" enabled={isGoToFileEnabled} onClick={handleHeaderClick}>\n\t\t\t\t\t{name}\n\t\t\t\t\t{extension && <span className={styles.fileNameExtension}>.{extension}</span>}\n\t\t\t\t</Button>\n\t\t\t</div>\n\n\t\t\t<div className={styles.divider} />\n\n\t\t\t<div ref={linesRef} className={styles.lines}>\n\t\t\t\t<pre className={styles.diffPre}>\n\t\t\t\t\t<code className={styles.diffCodeBlock}>\n\t\t\t\t\t\t{tokenLines.map((tokens, index) => (\n\t\t\t\t\t\t\t<DiffLine key={index} prefix={prefixes[index] ?? \" \"} tokens={tokens} showDiff={showDiff} />\n\t\t\t\t\t\t))}\n\t\t\t\t\t</code>\n\t\t\t\t</pre>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\nfunction isSupportedPatchLanguage(extension: string): extension is SupportedPatchLanguage {\n\treturn extension === \"tsx\"\n}\n\nfunction displayFileName(fileName: string | undefined): { name: string; extension: string } {\n\tif (!fileName) return { name: \"Code patch\", extension: \"\" }\n\tconst base = fileName.split(\"/\").at(-1) ?? fileName\n\tconst dotIndex = base.lastIndexOf(\".\")\n\tif (dotIndex <= 0) return { name: base, extension: \"\" }\n\treturn { name: base.slice(0, dotIndex), extension: base.slice(dotIndex + 1) }\n}\n\nconst nonBreakingSpace = \"\\u00A0\"\n\n// One Shiki highlighter for the panel: both light/dark themes and only the grammars we need.\n// We use a module-level promise (not getSingletonHighlighter from shiki/bundle/web) so the vekter\n// chunk stays fine-grained instead of pulling the full web bundle.\nlet highlighterPromise: Promise<CodePatchHighlighter> | null = null\nlet resolvedHighlighter: CodePatchHighlighter | null = null\n\nfunction getHighlighter(): Promise<CodePatchHighlighter> {\n\tif (!highlighterPromise) {\n\t\thighlighterPromise = createHighlighter({\n\t\t\tthemes: [githubLight, dracula],\n\t\t\tlangs: [tsx],\n\t\t})\n\t\t\t.then(hl => {\n\t\t\t\tresolvedHighlighter = hl\n\t\t\t\treturn hl\n\t\t\t})\n\t\t\t.catch(error => {\n\t\t\t\thighlighterPromise = null\n\t\t\t\tthrow error\n\t\t\t})\n\t}\n\treturn highlighterPromise\n}\n\ninterface HighlightResult {\n\ttokens: DiffLineToken[][]\n}\n\nfunction tokenizeSync(code: string, language: SupportedPatchLanguage, isDark: boolean): HighlightResult | null {\n\tif (!resolvedHighlighter) return null\n\ttry {\n\t\tconst theme: PatchHighlighterTheme = isDark ? \"dracula\" : \"github-light\"\n\t\tconst { tokens } = resolvedHighlighter.codeToTokens(code, { lang: language, theme })\n\t\treturn { tokens: tokens.map(line => line.map(t => ({ content: t.content, color: t.color }))) }\n\t} catch {\n\t\treturn null\n\t}\n}\n\nfunction useHighlight(\n\tcode: string,\n\tlanguage: SupportedPatchLanguage | undefined,\n\tisDark: boolean,\n): HighlightResult | null {\n\tconst syncResult = useMemo(() => {\n\t\tif (!code || !language) return null\n\t\treturn tokenizeSync(code, language, isDark)\n\t}, [code, language, isDark])\n\n\tconst [asyncResult, setAsyncResult] = useState<HighlightResult | null>(null)\n\n\tuseEffect(() => {\n\t\tif (syncResult || !code || !language) return\n\n\t\tlet cancelled = false\n\t\tvoid getHighlighter()\n\t\t\t.then(hl => {\n\t\t\t\tif (cancelled) return\n\t\t\t\tconst theme: PatchHighlighterTheme = isDark ? \"dracula\" : \"github-light\"\n\t\t\t\tconst { tokens } = hl.codeToTokens(code, { lang: language, theme })\n\t\t\t\tsetAsyncResult({\n\t\t\t\t\ttokens: tokens.map(line => line.map(t => ({ content: t.content, color: t.color }))),\n\t\t\t\t})\n\t\t\t})\n\t\t\t.catch(() => {})\n\n\t\treturn () => {\n\t\t\tcancelled = true\n\t\t}\n\t}, [syncResult, code, language, isDark])\n\n\treturn syncResult ?? asyncResult\n}\n\ninterface DiffLineToken {\n\tcontent: string\n\tcolor?: string\n}\n\ninterface DiffLineProps {\n\tprefix: DiffLinePrefix\n\ttokens: DiffLineToken[]\n\tshowDiff: boolean\n}\n\nfunction DiffLine({ prefix, tokens, showDiff }: DiffLineProps) {\n\treturn (\n\t\t<span\n\t\t\tclassName={cx(\n\t\t\t\tstyles.diffLine,\n\t\t\t\tshowDiff && prefix === \"+\" && styles.diffLineAdd,\n\t\t\t\tshowDiff && prefix === \"-\" && styles.diffLineRemove,\n\t\t\t)}\n\t\t>\n\t\t\t<span\n\t\t\t\tclassName={cx(\n\t\t\t\t\tstyles.diffGutter,\n\t\t\t\t\tshowDiff && prefix === \"+\" && styles.diffGutterAdd,\n\t\t\t\t\tshowDiff && prefix === \"-\" && styles.diffGutterRemove,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{prefix === \" \" ? nonBreakingSpace : prefix}\n\t\t\t</span>\n\t\t\t<span className={cx(styles.diffCode, \"wantsNativeTextAction\")}>\n\t\t\t\t{tokens.map((token, index) => (\n\t\t\t\t\t<span key={index} style={token.color ? { color: token.color } : undefined}>\n\t\t\t\t\t\t{token.content}\n\t\t\t\t\t</span>\n\t\t\t\t))}\n\t\t\t</span>\n\t\t</span>\n\t)\n}\n", "class ShikiError extends Error {\n  constructor(message) {\n    super(message);\n    this.name = \"ShikiError\";\n  }\n}\n\nexport { ShikiError };\n", "// src/utils.ts\nfunction clone(something) {\n  return doClone(something);\n}\nfunction doClone(something) {\n  if (Array.isArray(something)) {\n    return cloneArray(something);\n  }\n  if (something instanceof RegExp) {\n    return something;\n  }\n  if (typeof something === \"object\") {\n    return cloneObj(something);\n  }\n  return something;\n}\nfunction cloneArray(arr) {\n  let r = [];\n  for (let i = 0, len = arr.length; i < len; i++) {\n    r[i] = doClone(arr[i]);\n  }\n  return r;\n}\nfunction cloneObj(obj) {\n  let r = {};\n  for (let key in obj) {\n    r[key] = doClone(obj[key]);\n  }\n  return r;\n}\nfunction mergeObjects(target, ...sources) {\n  sources.forEach((source) => {\n    for (let key in source) {\n      target[key] = source[key];\n    }\n  });\n  return target;\n}\nfunction basename(path) {\n  const idx = ~path.lastIndexOf(\"/\") || ~path.lastIndexOf(\"\\\\\");\n  if (idx === 0) {\n    return path;\n  } else if (~idx === path.length - 1) {\n    return basename(path.substring(0, path.length - 1));\n  } else {\n    return path.substr(~idx + 1);\n  }\n}\nvar CAPTURING_REGEX_SOURCE = /\\$(\\d+)|\\${(\\d+):\\/(downcase|upcase)}/g;\nvar RegexSource = class {\n  static hasCaptures(regexSource) {\n    if (regexSource === null) {\n      return false;\n    }\n    CAPTURING_REGEX_SOURCE.lastIndex = 0;\n    return CAPTURING_REGEX_SOURCE.test(regexSource);\n  }\n  static replaceCaptures(regexSource, captureSource, captureIndices) {\n    return regexSource.replace(CAPTURING_REGEX_SOURCE, (match, index, commandIndex, command) => {\n      let capture = captureIndices[parseInt(index || commandIndex, 10)];\n      if (capture) {\n        let result = captureSource.substring(capture.start, capture.end);\n        while (result[0] === \".\") {\n          result = result.substring(1);\n        }\n        switch (command) {\n          case \"downcase\":\n            return result.toLowerCase();\n          case \"upcase\":\n            return result.toUpperCase();\n          default:\n            return result;\n        }\n      } else {\n        return match;\n      }\n    });\n  }\n};\nfunction strcmp(a, b) {\n  if (a < b) {\n    return -1;\n  }\n  if (a > b) {\n    return 1;\n  }\n  return 0;\n}\nfunction strArrCmp(a, b) {\n  if (a === null && b === null) {\n    return 0;\n  }\n  if (!a) {\n    return -1;\n  }\n  if (!b) {\n    return 1;\n  }\n  let len1 = a.length;\n  let len2 = b.length;\n  if (len1 === len2) {\n    for (let i = 0; i < len1; i++) {\n      let res = strcmp(a[i], b[i]);\n      if (res !== 0) {\n        return res;\n      }\n    }\n    return 0;\n  }\n  return len1 - len2;\n}\nfunction isValidHexColor(hex) {\n  if (/^#[0-9a-f]{6}$/i.test(hex)) {\n    return true;\n  }\n  if (/^#[0-9a-f]{8}$/i.test(hex)) {\n    return true;\n  }\n  if (/^#[0-9a-f]{3}$/i.test(hex)) {\n    return true;\n  }\n  if (/^#[0-9a-f]{4}$/i.test(hex)) {\n    return true;\n  }\n  return false;\n}\nfunction escapeRegExpCharacters(value) {\n  return value.replace(/[\\-\\\\\\{\\}\\*\\+\\?\\|\\^\\$\\.\\,\\[\\]\\(\\)\\#\\s]/g, \"\\\\$&\");\n}\nvar CachedFn = class {\n  constructor(fn) {\n    this.fn = fn;\n  }\n  cache = /* @__PURE__ */ new Map();\n  get(key) {\n    if (this.cache.has(key)) {\n      return this.cache.get(key);\n    }\n    const value = this.fn(key);\n    this.cache.set(key, value);\n    return value;\n  }\n};\n\n// src/theme.ts\nvar Theme = class {\n  constructor(_colorMap, _defaults, _root) {\n    this._colorMap = _colorMap;\n    this._defaults = _defaults;\n    this._root = _root;\n  }\n  static createFromRawTheme(source, colorMap) {\n    return this.createFromParsedTheme(parseTheme(source), colorMap);\n  }\n  static createFromParsedTheme(source, colorMap) {\n    return resolveParsedThemeRules(source, colorMap);\n  }\n  _cachedMatchRoot = new CachedFn(\n    (scopeName) => this._root.match(scopeName)\n  );\n  getColorMap() {\n    return this._colorMap.getColorMap();\n  }\n  getDefaults() {\n    return this._defaults;\n  }\n  match(scopePath) {\n    if (scopePath === null) {\n      return this._defaults;\n    }\n    const scopeName = scopePath.scopeName;\n    const matchingTrieElements = this._cachedMatchRoot.get(scopeName);\n    const effectiveRule = matchingTrieElements.find(\n      (v) => _scopePathMatchesParentScopes(scopePath.parent, v.parentScopes)\n    );\n    if (!effectiveRule) {\n      return null;\n    }\n    return new StyleAttributes(\n      effectiveRule.fontStyle,\n      effectiveRule.foreground,\n      effectiveRule.background\n    );\n  }\n};\nvar ScopeStack = class _ScopeStack {\n  constructor(parent, scopeName) {\n    this.parent = parent;\n    this.scopeName = scopeName;\n  }\n  static push(path, scopeNames) {\n    for (const name of scopeNames) {\n      path = new _ScopeStack(path, name);\n    }\n    return path;\n  }\n  static from(...segments) {\n    let result = null;\n    for (let i = 0; i < segments.length; i++) {\n      result = new _ScopeStack(result, segments[i]);\n    }\n    return result;\n  }\n  push(scopeName) {\n    return new _ScopeStack(this, scopeName);\n  }\n  getSegments() {\n    let item = this;\n    const result = [];\n    while (item) {\n      result.push(item.scopeName);\n      item = item.parent;\n    }\n    result.reverse();\n    return result;\n  }\n  toString() {\n    return this.getSegments().join(\" \");\n  }\n  extends(other) {\n    if (this === other) {\n      return true;\n    }\n    if (this.parent === null) {\n      return false;\n    }\n    return this.parent.extends(other);\n  }\n  getExtensionIfDefined(base) {\n    const result = [];\n    let item = this;\n    while (item && item !== base) {\n      result.push(item.scopeName);\n      item = item.parent;\n    }\n    return item === base ? result.reverse() : void 0;\n  }\n};\nfunction _scopePathMatchesParentScopes(scopePath, parentScopes) {\n  if (parentScopes.length === 0) {\n    return true;\n  }\n  for (let index = 0; index < parentScopes.length; index++) {\n    let scopePattern = parentScopes[index];\n    let scopeMustMatch = false;\n    if (scopePattern === \">\") {\n      if (index === parentScopes.length - 1) {\n        return false;\n      }\n      scopePattern = parentScopes[++index];\n      scopeMustMatch = true;\n    }\n    while (scopePath) {\n      if (_matchesScope(scopePath.scopeName, scopePattern)) {\n        break;\n      }\n      if (scopeMustMatch) {\n        return false;\n      }\n      scopePath = scopePath.parent;\n    }\n    if (!scopePath) {\n      return false;\n    }\n    scopePath = scopePath.parent;\n  }\n  return true;\n}\nfunction _matchesScope(scopeName, scopePattern) {\n  return scopePattern === scopeName || scopeName.startsWith(scopePattern) && scopeName[scopePattern.length] === \".\";\n}\nvar StyleAttributes = class {\n  constructor(fontStyle, foregroundId, backgroundId) {\n    this.fontStyle = fontStyle;\n    this.foregroundId = foregroundId;\n    this.backgroundId = backgroundId;\n  }\n};\nfunction parseTheme(source) {\n  if (!source) {\n    return [];\n  }\n  if (!source.settings || !Array.isArray(source.settings)) {\n    return [];\n  }\n  let settings = source.settings;\n  let result = [], resultLen = 0;\n  for (let i = 0, len = settings.length; i < len; i++) {\n    let entry = settings[i];\n    if (!entry.settings) {\n      continue;\n    }\n    let scopes;\n    if (typeof entry.scope === \"string\") {\n      let _scope = entry.scope;\n      _scope = _scope.replace(/^[,]+/, \"\");\n      _scope = _scope.replace(/[,]+$/, \"\");\n      scopes = _scope.split(\",\");\n    } else if (Array.isArray(entry.scope)) {\n      scopes = entry.scope;\n    } else {\n      scopes = [\"\"];\n    }\n    let fontStyle = -1 /* NotSet */;\n    if (typeof entry.settings.fontStyle === \"string\") {\n      fontStyle = 0 /* None */;\n      let segments = entry.settings.fontStyle.split(\" \");\n      for (let j = 0, lenJ = segments.length; j < lenJ; j++) {\n        let segment = segments[j];\n        switch (segment) {\n          case \"italic\":\n            fontStyle = fontStyle | 1 /* Italic */;\n            break;\n          case \"bold\":\n            fontStyle = fontStyle | 2 /* Bold */;\n            break;\n          case \"underline\":\n            fontStyle = fontStyle | 4 /* Underline */;\n            break;\n          case \"strikethrough\":\n            fontStyle = fontStyle | 8 /* Strikethrough */;\n            break;\n        }\n      }\n    }\n    let foreground = null;\n    if (typeof entry.settings.foreground === \"string\" && isValidHexColor(entry.settings.foreground)) {\n      foreground = entry.settings.foreground;\n    }\n    let background = null;\n    if (typeof entry.settings.background === \"string\" && isValidHexColor(entry.settings.background)) {\n      background = entry.settings.background;\n    }\n    for (let j = 0, lenJ = scopes.length; j < lenJ; j++) {\n      let _scope = scopes[j].trim();\n      let segments = _scope.split(\" \");\n      let scope = segments[segments.length - 1];\n      let parentScopes = null;\n      if (segments.length > 1) {\n        parentScopes = segments.slice(0, segments.length - 1);\n        parentScopes.reverse();\n      }\n      result[resultLen++] = new ParsedThemeRule(\n        scope,\n        parentScopes,\n        i,\n        fontStyle,\n        foreground,\n        background\n      );\n    }\n  }\n  return result;\n}\nvar ParsedThemeRule = class {\n  constructor(scope, parentScopes, index, fontStyle, foreground, background) {\n    this.scope = scope;\n    this.parentScopes = parentScopes;\n    this.index = index;\n    this.fontStyle = fontStyle;\n    this.foreground = foreground;\n    this.background = background;\n  }\n};\nvar FontStyle = /* @__PURE__ */ ((FontStyle2) => {\n  FontStyle2[FontStyle2[\"NotSet\"] = -1] = \"NotSet\";\n  FontStyle2[FontStyle2[\"None\"] = 0] = \"None\";\n  FontStyle2[FontStyle2[\"Italic\"] = 1] = \"Italic\";\n  FontStyle2[FontStyle2[\"Bold\"] = 2] = \"Bold\";\n  FontStyle2[FontStyle2[\"Underline\"] = 4] = \"Underline\";\n  FontStyle2[FontStyle2[\"Strikethrough\"] = 8] = \"Strikethrough\";\n  return FontStyle2;\n})(FontStyle || {});\nfunction resolveParsedThemeRules(parsedThemeRules, _colorMap) {\n  parsedThemeRules.sort((a, b) => {\n    let r = strcmp(a.scope, b.scope);\n    if (r !== 0) {\n      return r;\n    }\n    r = strArrCmp(a.parentScopes, b.parentScopes);\n    if (r !== 0) {\n      return r;\n    }\n    return a.index - b.index;\n  });\n  let defaultFontStyle = 0 /* None */;\n  let defaultForeground = \"#000000\";\n  let defaultBackground = \"#ffffff\";\n  while (parsedThemeRules.length >= 1 && parsedThemeRules[0].scope === \"\") {\n    let incomingDefaults = parsedThemeRules.shift();\n    if (incomingDefaults.fontStyle !== -1 /* NotSet */) {\n      defaultFontStyle = incomingDefaults.fontStyle;\n    }\n    if (incomingDefaults.foreground !== null) {\n      defaultForeground = incomingDefaults.foreground;\n    }\n    if (incomingDefaults.background !== null) {\n      defaultBackground = incomingDefaults.background;\n    }\n  }\n  let colorMap = new ColorMap(_colorMap);\n  let defaults = new StyleAttributes(defaultFontStyle, colorMap.getId(defaultForeground), colorMap.getId(defaultBackground));\n  let root = new ThemeTrieElement(new ThemeTrieElementRule(0, null, -1 /* NotSet */, 0, 0), []);\n  for (let i = 0, len = parsedThemeRules.length; i < len; i++) {\n    let rule = parsedThemeRules[i];\n    root.insert(0, rule.scope, rule.parentScopes, rule.fontStyle, colorMap.getId(rule.foreground), colorMap.getId(rule.background));\n  }\n  return new Theme(colorMap, defaults, root);\n}\nvar ColorMap = class {\n  _isFrozen;\n  _lastColorId;\n  _id2color;\n  _color2id;\n  constructor(_colorMap) {\n    this._lastColorId = 0;\n    this._id2color = [];\n    this._color2id = /* @__PURE__ */ Object.create(null);\n    if (Array.isArray(_colorMap)) {\n      this._isFrozen = true;\n      for (let i = 0, len = _colorMap.length; i < len; i++) {\n        this._color2id[_colorMap[i]] = i;\n        this._id2color[i] = _colorMap[i];\n      }\n    } else {\n      this._isFrozen = false;\n    }\n  }\n  getId(color) {\n    if (color === null) {\n      return 0;\n    }\n    color = color.toUpperCase();\n    let value = this._color2id[color];\n    if (value) {\n      return value;\n    }\n    if (this._isFrozen) {\n      throw new Error(`Missing color in color map - ${color}`);\n    }\n    value = ++this._lastColorId;\n    this._color2id[color] = value;\n    this._id2color[value] = color;\n    return value;\n  }\n  getColorMap() {\n    return this._id2color.slice(0);\n  }\n};\nvar emptyParentScopes = Object.freeze([]);\nvar ThemeTrieElementRule = class _ThemeTrieElementRule {\n  scopeDepth;\n  parentScopes;\n  fontStyle;\n  foreground;\n  background;\n  constructor(scopeDepth, parentScopes, fontStyle, foreground, background) {\n    this.scopeDepth = scopeDepth;\n    this.parentScopes = parentScopes || emptyParentScopes;\n    this.fontStyle = fontStyle;\n    this.foreground = foreground;\n    this.background = background;\n  }\n  clone() {\n    return new _ThemeTrieElementRule(this.scopeDepth, this.parentScopes, this.fontStyle, this.foreground, this.background);\n  }\n  static cloneArr(arr) {\n    let r = [];\n    for (let i = 0, len = arr.length; i < len; i++) {\n      r[i] = arr[i].clone();\n    }\n    return r;\n  }\n  acceptOverwrite(scopeDepth, fontStyle, foreground, background) {\n    if (this.scopeDepth > scopeDepth) {\n      console.log(\"how did this happen?\");\n    } else {\n      this.scopeDepth = scopeDepth;\n    }\n    if (fontStyle !== -1 /* NotSet */) {\n      this.fontStyle = fontStyle;\n    }\n    if (foreground !== 0) {\n      this.foreground = foreground;\n    }\n    if (background !== 0) {\n      this.background = background;\n    }\n  }\n};\nvar ThemeTrieElement = class _ThemeTrieElement {\n  constructor(_mainRule, rulesWithParentScopes = [], _children = {}) {\n    this._mainRule = _mainRule;\n    this._children = _children;\n    this._rulesWithParentScopes = rulesWithParentScopes;\n  }\n  _rulesWithParentScopes;\n  static _cmpBySpecificity(a, b) {\n    if (a.scopeDepth !== b.scopeDepth) {\n      return b.scopeDepth - a.scopeDepth;\n    }\n    let aParentIndex = 0;\n    let bParentIndex = 0;\n    while (true) {\n      if (a.parentScopes[aParentIndex] === \">\") {\n        aParentIndex++;\n      }\n      if (b.parentScopes[bParentIndex] === \">\") {\n        bParentIndex++;\n      }\n      if (aParentIndex >= a.parentScopes.length || bParentIndex >= b.parentScopes.length) {\n        break;\n      }\n      const parentScopeLengthDiff = b.parentScopes[bParentIndex].length - a.parentScopes[aParentIndex].length;\n      if (parentScopeLengthDiff !== 0) {\n        return parentScopeLengthDiff;\n      }\n      aParentIndex++;\n      bParentIndex++;\n    }\n    return b.parentScopes.length - a.parentScopes.length;\n  }\n  match(scope) {\n    if (scope !== \"\") {\n      let dotIndex = scope.indexOf(\".\");\n      let head;\n      let tail;\n      if (dotIndex === -1) {\n        head = scope;\n        tail = \"\";\n      } else {\n        head = scope.substring(0, dotIndex);\n        tail = scope.substring(dotIndex + 1);\n      }\n      if (this._children.hasOwnProperty(head)) {\n        return this._children[head].match(tail);\n      }\n    }\n    const rules = this._rulesWithParentScopes.concat(this._mainRule);\n    rules.sort(_ThemeTrieElement._cmpBySpecificity);\n    return rules;\n  }\n  insert(scopeDepth, scope, parentScopes, fontStyle, foreground, background) {\n    if (scope === \"\") {\n      this._doInsertHere(scopeDepth, parentScopes, fontStyle, foreground, background);\n      return;\n    }\n    let dotIndex = scope.indexOf(\".\");\n    let head;\n    let tail;\n    if (dotIndex === -1) {\n      head = scope;\n      tail = \"\";\n    } else {\n      head = scope.substring(0, dotIndex);\n      tail = scope.substring(dotIndex + 1);\n    }\n    let child;\n    if (this._children.hasOwnProperty(head)) {\n      child = this._children[head];\n    } else {\n      child = new _ThemeTrieElement(this._mainRule.clone(), ThemeTrieElementRule.cloneArr(this._rulesWithParentScopes));\n      this._children[head] = child;\n    }\n    child.insert(scopeDepth + 1, tail, parentScopes, fontStyle, foreground, background);\n  }\n  _doInsertHere(scopeDepth, parentScopes, fontStyle, foreground, background) {\n    if (parentScopes === null) {\n      this._mainRule.acceptOverwrite(scopeDepth, fontStyle, foreground, background);\n      return;\n    }\n    for (let i = 0, len = this._rulesWithParentScopes.length; i < len; i++) {\n      let rule = this._rulesWithParentScopes[i];\n      if (strArrCmp(rule.parentScopes, parentScopes) === 0) {\n        rule.acceptOverwrite(scopeDepth, fontStyle, foreground, background);\n        return;\n      }\n    }\n    if (fontStyle === -1 /* NotSet */) {\n      fontStyle = this._mainRule.fontStyle;\n    }\n    if (foreground === 0) {\n      foreground = this._mainRule.foreground;\n    }\n    if (background === 0) {\n      background = this._mainRule.background;\n    }\n    this._rulesWithParentScopes.push(new ThemeTrieElementRule(scopeDepth, parentScopes, fontStyle, foreground, background));\n  }\n};\n\n// src/encodedTokenAttributes.ts\nvar EncodedTokenMetadata = class _EncodedTokenMetadata {\n  static toBinaryStr(encodedTokenAttributes) {\n    return encodedTokenAttributes.toString(2).padStart(32, \"0\");\n  }\n  static print(encodedTokenAttributes) {\n    const languageId = _EncodedTokenMetadata.getLanguageId(encodedTokenAttributes);\n    const tokenType = _EncodedTokenMetadata.getTokenType(encodedTokenAttributes);\n    const fontStyle = _EncodedTokenMetadata.getFontStyle(encodedTokenAttributes);\n    const foreground = _EncodedTokenMetadata.getForeground(encodedTokenAttributes);\n    const background = _EncodedTokenMetadata.getBackground(encodedTokenAttributes);\n    console.log({\n      languageId,\n      tokenType,\n      fontStyle,\n      foreground,\n      background\n    });\n  }\n  static getLanguageId(encodedTokenAttributes) {\n    return (encodedTokenAttributes & 255 /* LANGUAGEID_MASK */) >>> 0 /* LANGUAGEID_OFFSET */;\n  }\n  static getTokenType(encodedTokenAttributes) {\n    return (encodedTokenAttributes & 768 /* TOKEN_TYPE_MASK */) >>> 8 /* TOKEN_TYPE_OFFSET */;\n  }\n  static containsBalancedBrackets(encodedTokenAttributes) {\n    return (encodedTokenAttributes & 1024 /* BALANCED_BRACKETS_MASK */) !== 0;\n  }\n  static getFontStyle(encodedTokenAttributes) {\n    return (encodedTokenAttributes & 30720 /* FONT_STYLE_MASK */) >>> 11 /* FONT_STYLE_OFFSET */;\n  }\n  static getForeground(encodedTokenAttributes) {\n    return (encodedTokenAttributes & 16744448 /* FOREGROUND_MASK */) >>> 15 /* FOREGROUND_OFFSET */;\n  }\n  static getBackground(encodedTokenAttributes) {\n    return (encodedTokenAttributes & 4278190080 /* BACKGROUND_MASK */) >>> 24 /* BACKGROUND_OFFSET */;\n  }\n  /**\n   * Updates the fields in `metadata`.\n   * A value of `0`, `NotSet` or `null` indicates that the corresponding field should be left as is.\n   */\n  static set(encodedTokenAttributes, languageId, tokenType, containsBalancedBrackets, fontStyle, foreground, background) {\n    let _languageId = _EncodedTokenMetadata.getLanguageId(encodedTokenAttributes);\n    let _tokenType = _EncodedTokenMetadata.getTokenType(encodedTokenAttributes);\n    let _containsBalancedBracketsBit = _EncodedTokenMetadata.containsBalancedBrackets(encodedTokenAttributes) ? 1 : 0;\n    let _fontStyle = _EncodedTokenMetadata.getFontStyle(encodedTokenAttributes);\n    let _foreground = _EncodedTokenMetadata.getForeground(encodedTokenAttributes);\n    let _background = _EncodedTokenMetadata.getBackground(encodedTokenAttributes);\n    if (languageId !== 0) {\n      _languageId = languageId;\n    }\n    if (tokenType !== 8 /* NotSet */) {\n      _tokenType = fromOptionalTokenType(tokenType);\n    }\n    if (containsBalancedBrackets !== null) {\n      _containsBalancedBracketsBit = containsBalancedBrackets ? 1 : 0;\n    }\n    if (fontStyle !== -1 /* NotSet */) {\n      _fontStyle = fontStyle;\n    }\n    if (foreground !== 0) {\n      _foreground = foreground;\n    }\n    if (background !== 0) {\n      _background = background;\n    }\n    return (_languageId << 0 /* LANGUAGEID_OFFSET */ | _tokenType << 8 /* TOKEN_TYPE_OFFSET */ | _containsBalancedBracketsBit << 10 /* BALANCED_BRACKETS_OFFSET */ | _fontStyle << 11 /* FONT_STYLE_OFFSET */ | _foreground << 15 /* FOREGROUND_OFFSET */ | _background << 24 /* BACKGROUND_OFFSET */) >>> 0;\n  }\n};\nfunction toOptionalTokenType(standardType) {\n  return standardType;\n}\nfunction fromOptionalTokenType(standardType) {\n  return standardType;\n}\n\n// src/matcher.ts\nfunction createMatchers(selector, matchesName) {\n  const results = [];\n  const tokenizer = newTokenizer(selector);\n  let token = tokenizer.next();\n  while (token !== null) {\n    let priority = 0;\n    if (token.length === 2 && token.charAt(1) === \":\") {\n      switch (token.charAt(0)) {\n        case \"R\":\n          priority = 1;\n          break;\n        case \"L\":\n          priority = -1;\n          break;\n        default:\n          console.log(`Unknown priority ${token} in scope selector`);\n      }\n      token = tokenizer.next();\n    }\n    let matcher = parseConjunction();\n    results.push({ matcher, priority });\n    if (token !== \",\") {\n      break;\n    }\n    token = tokenizer.next();\n  }\n  return results;\n  function parseOperand() {\n    if (token === \"-\") {\n      token = tokenizer.next();\n      const expressionToNegate = parseOperand();\n      return (matcherInput) => !!expressionToNegate && !expressionToNegate(matcherInput);\n    }\n    if (token === \"(\") {\n      token = tokenizer.next();\n      const expressionInParents = parseInnerExpression();\n      if (token === \")\") {\n        token = tokenizer.next();\n      }\n      return expressionInParents;\n    }\n    if (isIdentifier(token)) {\n      const identifiers = [];\n      do {\n        identifiers.push(token);\n        token = tokenizer.next();\n      } while (isIdentifier(token));\n      return (matcherInput) => matchesName(identifiers, matcherInput);\n    }\n    return null;\n  }\n  function parseConjunction() {\n    const matchers = [];\n    let matcher = parseOperand();\n    while (matcher) {\n      matchers.push(matcher);\n      matcher = parseOperand();\n    }\n    return (matcherInput) => matchers.every((matcher2) => matcher2(matcherInput));\n  }\n  function parseInnerExpression() {\n    const matchers = [];\n    let matcher = parseConjunction();\n    while (matcher) {\n      matchers.push(matcher);\n      if (token === \"|\" || token === \",\") {\n        do {\n          token = tokenizer.next();\n        } while (token === \"|\" || token === \",\");\n      } else {\n        break;\n      }\n      matcher = parseConjunction();\n    }\n    return (matcherInput) => matchers.some((matcher2) => matcher2(matcherInput));\n  }\n}\nfunction isIdentifier(token) {\n  return !!token && !!token.match(/[\\w\\.:]+/);\n}\nfunction newTokenizer(input) {\n  let regex = /([LR]:|[\\w\\.:][\\w\\.:\\-]*|[\\,\\|\\-\\(\\)])/g;\n  let match = regex.exec(input);\n  return {\n    next: () => {\n      if (!match) {\n        return null;\n      }\n      const res = match[0];\n      match = regex.exec(input);\n      return res;\n    }\n  };\n}\n\n// src/onigLib.ts\nvar FindOption = /* @__PURE__ */ ((FindOption2) => {\n  FindOption2[FindOption2[\"None\"] = 0] = \"None\";\n  FindOption2[FindOption2[\"NotBeginString\"] = 1] = \"NotBeginString\";\n  FindOption2[FindOption2[\"NotEndString\"] = 2] = \"NotEndString\";\n  FindOption2[FindOption2[\"NotBeginPosition\"] = 4] = \"NotBeginPosition\";\n  FindOption2[FindOption2[\"DebugCall\"] = 8] = \"DebugCall\";\n  return FindOption2;\n})(FindOption || {});\nfunction disposeOnigString(str) {\n  if (typeof str.dispose === \"function\") {\n    str.dispose();\n  }\n}\n\n// src/grammar/grammarDependencies.ts\nvar TopLevelRuleReference = class {\n  constructor(scopeName) {\n    this.scopeName = scopeName;\n  }\n  toKey() {\n    return this.scopeName;\n  }\n};\nvar TopLevelRepositoryRuleReference = class {\n  constructor(scopeName, ruleName) {\n    this.scopeName = scopeName;\n    this.ruleName = ruleName;\n  }\n  toKey() {\n    return `${this.scopeName}#${this.ruleName}`;\n  }\n};\nvar ExternalReferenceCollector = class {\n  _references = [];\n  _seenReferenceKeys = /* @__PURE__ */ new Set();\n  get references() {\n    return this._references;\n  }\n  visitedRule = /* @__PURE__ */ new Set();\n  add(reference) {\n    const key = reference.toKey();\n    if (this._seenReferenceKeys.has(key)) {\n      return;\n    }\n    this._seenReferenceKeys.add(key);\n    this._references.push(reference);\n  }\n};\nvar ScopeDependencyProcessor = class {\n  constructor(repo, initialScopeName) {\n    this.repo = repo;\n    this.initialScopeName = initialScopeName;\n    this.seenFullScopeRequests.add(this.initialScopeName);\n    this.Q = [new TopLevelRuleReference(this.initialScopeName)];\n  }\n  seenFullScopeRequests = /* @__PURE__ */ new Set();\n  seenPartialScopeRequests = /* @__PURE__ */ new Set();\n  Q;\n  processQueue() {\n    const q = this.Q;\n    this.Q = [];\n    const deps = new ExternalReferenceCollector();\n    for (const dep of q) {\n      collectReferencesOfReference(dep, this.initialScopeName, this.repo, deps);\n    }\n    for (const dep of deps.references) {\n      if (dep instanceof TopLevelRuleReference) {\n        if (this.seenFullScopeRequests.has(dep.scopeName)) {\n          continue;\n        }\n        this.seenFullScopeRequests.add(dep.scopeName);\n        this.Q.push(dep);\n      } else {\n        if (this.seenFullScopeRequests.has(dep.scopeName)) {\n          continue;\n        }\n        if (this.seenPartialScopeRequests.has(dep.toKey())) {\n          continue;\n        }\n        this.seenPartialScopeRequests.add(dep.toKey());\n        this.Q.push(dep);\n      }\n    }\n  }\n};\nfunction collectReferencesOfReference(reference, baseGrammarScopeName, repo, result) {\n  const selfGrammar = repo.lookup(reference.scopeName);\n  if (!selfGrammar) {\n    if (reference.scopeName === baseGrammarScopeName) {\n      throw new Error(`No grammar provided for <${baseGrammarScopeName}>`);\n    }\n    return;\n  }\n  const baseGrammar = repo.lookup(baseGrammarScopeName);\n  if (reference instanceof TopLevelRuleReference) {\n    collectExternalReferencesInTopLevelRule({ baseGrammar, selfGrammar }, result);\n  } else {\n    collectExternalReferencesInTopLevelRepositoryRule(\n      reference.ruleName,\n      { baseGrammar, selfGrammar, repository: selfGrammar.repository },\n      result\n    );\n  }\n  const injections = repo.injections(reference.scopeName);\n  if (injections) {\n    for (const injection of injections) {\n      result.add(new TopLevelRuleReference(injection));\n    }\n  }\n}\nfunction collectExternalReferencesInTopLevelRepositoryRule(ruleName, context, result) {\n  if (context.repository && context.repository[ruleName]) {\n    const rule = context.repository[ruleName];\n    collectExternalReferencesInRules([rule], context, result);\n  }\n}\nfunction collectExternalReferencesInTopLevelRule(context, result) {\n  if (context.selfGrammar.patterns && Array.isArray(context.selfGrammar.patterns)) {\n    collectExternalReferencesInRules(\n      context.selfGrammar.patterns,\n      { ...context, repository: context.selfGrammar.repository },\n      result\n    );\n  }\n  if (context.selfGrammar.injections) {\n    collectExternalReferencesInRules(\n      Object.values(context.selfGrammar.injections),\n      { ...context, repository: context.selfGrammar.repository },\n      result\n    );\n  }\n}\nfunction collectExternalReferencesInRules(rules, context, result) {\n  for (const rule of rules) {\n    if (result.visitedRule.has(rule)) {\n      continue;\n    }\n    result.visitedRule.add(rule);\n    const patternRepository = rule.repository ? mergeObjects({}, context.repository, rule.repository) : context.repository;\n    if (Array.isArray(rule.patterns)) {\n      collectExternalReferencesInRules(rule.patterns, { ...context, repository: patternRepository }, result);\n    }\n    const include = rule.include;\n    if (!include) {\n      continue;\n    }\n    const reference = parseInclude(include);\n    switch (reference.kind) {\n      case 0 /* Base */:\n        collectExternalReferencesInTopLevelRule({ ...context, selfGrammar: context.baseGrammar }, result);\n        break;\n      case 1 /* Self */:\n        collectExternalReferencesInTopLevelRule(context, result);\n        break;\n      case 2 /* RelativeReference */:\n        collectExternalReferencesInTopLevelRepositoryRule(reference.ruleName, { ...context, repository: patternRepository }, result);\n        break;\n      case 3 /* TopLevelReference */:\n      case 4 /* TopLevelRepositoryReference */:\n        const selfGrammar = reference.scopeName === context.selfGrammar.scopeName ? context.selfGrammar : reference.scopeName === context.baseGrammar.scopeName ? context.baseGrammar : void 0;\n        if (selfGrammar) {\n          const newContext = { baseGrammar: context.baseGrammar, selfGrammar, repository: patternRepository };\n          if (reference.kind === 4 /* TopLevelRepositoryReference */) {\n            collectExternalReferencesInTopLevelRepositoryRule(reference.ruleName, newContext, result);\n          } else {\n            collectExternalReferencesInTopLevelRule(newContext, result);\n          }\n        } else {\n          if (reference.kind === 4 /* TopLevelRepositoryReference */) {\n            result.add(new TopLevelRepositoryRuleReference(reference.scopeName, reference.ruleName));\n          } else {\n            result.add(new TopLevelRuleReference(reference.scopeName));\n          }\n        }\n        break;\n    }\n  }\n}\nvar BaseReference = class {\n  kind = 0 /* Base */;\n};\nvar SelfReference = class {\n  kind = 1 /* Self */;\n};\nvar RelativeReference = class {\n  constructor(ruleName) {\n    this.ruleName = ruleName;\n  }\n  kind = 2 /* RelativeReference */;\n};\nvar TopLevelReference = class {\n  constructor(scopeName) {\n    this.scopeName = scopeName;\n  }\n  kind = 3 /* TopLevelReference */;\n};\nvar TopLevelRepositoryReference = class {\n  constructor(scopeName, ruleName) {\n    this.scopeName = scopeName;\n    this.ruleName = ruleName;\n  }\n  kind = 4 /* TopLevelRepositoryReference */;\n};\nfunction parseInclude(include) {\n  if (include === \"$base\") {\n    return new BaseReference();\n  } else if (include === \"$self\") {\n    return new SelfReference();\n  }\n  const indexOfSharp = include.indexOf(\"#\");\n  if (indexOfSharp === -1) {\n    return new TopLevelReference(include);\n  } else if (indexOfSharp === 0) {\n    return new RelativeReference(include.substring(1));\n  } else {\n    const scopeName = include.substring(0, indexOfSharp);\n    const ruleName = include.substring(indexOfSharp + 1);\n    return new TopLevelRepositoryReference(scopeName, ruleName);\n  }\n}\n\n// src/rule.ts\nvar HAS_BACK_REFERENCES = /\\\\(\\d+)/;\nvar BACK_REFERENCING_END = /\\\\(\\d+)/g;\nvar ruleIdSymbol = Symbol(\"RuleId\");\nvar endRuleId = -1;\nvar whileRuleId = -2;\nfunction ruleIdFromNumber(id) {\n  return id;\n}\nfunction ruleIdToNumber(id) {\n  return id;\n}\nvar Rule = class {\n  $location;\n  id;\n  _nameIsCapturing;\n  _name;\n  _contentNameIsCapturing;\n  _contentName;\n  constructor($location, id, name, contentName) {\n    this.$location = $location;\n    this.id = id;\n    this._name = name || null;\n    this._nameIsCapturing = RegexSource.hasCaptures(this._name);\n    this._contentName = contentName || null;\n    this._contentNameIsCapturing = RegexSource.hasCaptures(this._contentName);\n  }\n  get debugName() {\n    const location = this.$location ? `${basename(this.$location.filename)}:${this.$location.line}` : \"unknown\";\n    return `${this.constructor.name}#${this.id} @ ${location}`;\n  }\n  getName(lineText, captureIndices) {\n    if (!this._nameIsCapturing || this._name === null || lineText === null || captureIndices === null) {\n      return this._name;\n    }\n    return RegexSource.replaceCaptures(this._name, lineText, captureIndices);\n  }\n  getContentName(lineText, captureIndices) {\n    if (!this._contentNameIsCapturing || this._contentName === null) {\n      return this._contentName;\n    }\n    return RegexSource.replaceCaptures(this._contentName, lineText, captureIndices);\n  }\n};\nvar CaptureRule = class extends Rule {\n  retokenizeCapturedWithRuleId;\n  constructor($location, id, name, contentName, retokenizeCapturedWithRuleId) {\n    super($location, id, name, contentName);\n    this.retokenizeCapturedWithRuleId = retokenizeCapturedWithRuleId;\n  }\n  dispose() {\n  }\n  collectPatterns(grammar, out) {\n    throw new Error(\"Not supported!\");\n  }\n  compile(grammar, endRegexSource) {\n    throw new Error(\"Not supported!\");\n  }\n  compileAG(grammar, endRegexSource, allowA, allowG) {\n    throw new Error(\"Not supported!\");\n  }\n};\nvar MatchRule = class extends Rule {\n  _match;\n  captures;\n  _cachedCompiledPatterns;\n  constructor($location, id, name, match, captures) {\n    super($location, id, name, null);\n    this._match = new RegExpSource(match, this.id);\n    this.captures = captures;\n    this._cachedCompiledPatterns = null;\n  }\n  dispose() {\n    if (this._cachedCompiledPatterns) {\n      this._cachedCompiledPatterns.dispose();\n      this._cachedCompiledPatterns = null;\n    }\n  }\n  get debugMatchRegExp() {\n    return `${this._match.source}`;\n  }\n  collectPatterns(grammar, out) {\n    out.push(this._match);\n  }\n  compile(grammar, endRegexSource) {\n    return this._getCachedCompiledPatterns(grammar).compile(grammar);\n  }\n  compileAG(grammar, endRegexSource, allowA, allowG) {\n    return this._getCachedCompiledPatterns(grammar).compileAG(grammar, allowA, allowG);\n  }\n  _getCachedCompiledPatterns(grammar) {\n    if (!this._cachedCompiledPatterns) {\n      this._cachedCompiledPatterns = new RegExpSourceList();\n      this.collectPatterns(grammar, this._cachedCompiledPatterns);\n    }\n    return this._cachedCompiledPatterns;\n  }\n};\nvar IncludeOnlyRule = class extends Rule {\n  hasMissingPatterns;\n  patterns;\n  _cachedCompiledPatterns;\n  constructor($location, id, name, contentName, patterns) {\n    super($location, id, name, contentName);\n    this.patterns = patterns.patterns;\n    this.hasMissingPatterns = patterns.hasMissingPatterns;\n    this._cachedCompiledPatterns = null;\n  }\n  dispose() {\n    if (this._cachedCompiledPatterns) {\n      this._cachedCompiledPatterns.dispose();\n      this._cachedCompiledPatterns = null;\n    }\n  }\n  collectPatterns(grammar, out) {\n    for (const pattern of this.patterns) {\n      const rule = grammar.getRule(pattern);\n      rule.collectPatterns(grammar, out);\n    }\n  }\n  compile(grammar, endRegexSource) {\n    return this._getCachedCompiledPatterns(grammar).compile(grammar);\n  }\n  compileAG(grammar, endRegexSource, allowA, allowG) {\n    return this._getCachedCompiledPatterns(grammar).compileAG(grammar, allowA, allowG);\n  }\n  _getCachedCompiledPatterns(grammar) {\n    if (!this._cachedCompiledPatterns) {\n      this._cachedCompiledPatterns = new RegExpSourceList();\n      this.collectPatterns(grammar, this._cachedCompiledPatterns);\n    }\n    return this._cachedCompiledPatterns;\n  }\n};\nvar BeginEndRule = class extends Rule {\n  _begin;\n  beginCaptures;\n  _end;\n  endHasBackReferences;\n  endCaptures;\n  applyEndPatternLast;\n  hasMissingPatterns;\n  patterns;\n  _cachedCompiledPatterns;\n  constructor($location, id, name, contentName, begin, beginCaptures, end, endCaptures, applyEndPatternLast, patterns) {\n    super($location, id, name, contentName);\n    this._begin = new RegExpSource(begin, this.id);\n    this.beginCaptures = beginCaptures;\n    this._end = new RegExpSource(end ? end : \"\\uFFFF\", -1);\n    this.endHasBackReferences = this._end.hasBackReferences;\n    this.endCaptures = endCaptures;\n    this.applyEndPatternLast = applyEndPatternLast || false;\n    this.patterns = patterns.patterns;\n    this.hasMissingPatterns = patterns.hasMissingPatterns;\n    this._cachedCompiledPatterns = null;\n  }\n  dispose() {\n    if (this._cachedCompiledPatterns) {\n      this._cachedCompiledPatterns.dispose();\n      this._cachedCompiledPatterns = null;\n    }\n  }\n  get debugBeginRegExp() {\n    return `${this._begin.source}`;\n  }\n  get debugEndRegExp() {\n    return `${this._end.source}`;\n  }\n  getEndWithResolvedBackReferences(lineText, captureIndices) {\n    return this._end.resolveBackReferences(lineText, captureIndices);\n  }\n  collectPatterns(grammar, out) {\n    out.push(this._begin);\n  }\n  compile(grammar, endRegexSource) {\n    return this._getCachedCompiledPatterns(grammar, endRegexSource).compile(grammar);\n  }\n  compileAG(grammar, endRegexSource, allowA, allowG) {\n    return this._getCachedCompiledPatterns(grammar, endRegexSource).compileAG(grammar, allowA, allowG);\n  }\n  _getCachedCompiledPatterns(grammar, endRegexSource) {\n    if (!this._cachedCompiledPatterns) {\n      this._cachedCompiledPatterns = new RegExpSourceList();\n      for (const pattern of this.patterns) {\n        const rule = grammar.getRule(pattern);\n        rule.collectPatterns(grammar, this._cachedCompiledPatterns);\n      }\n      if (this.applyEndPatternLast) {\n        this._cachedCompiledPatterns.push(this._end.hasBackReferences ? this._end.clone() : this._end);\n      } else {\n        this._cachedCompiledPatterns.unshift(this._end.hasBackReferences ? this._end.clone() : this._end);\n      }\n    }\n    if (this._end.hasBackReferences) {\n      if (this.applyEndPatternLast) {\n        this._cachedCompiledPatterns.setSource(this._cachedCompiledPatterns.length() - 1, endRegexSource);\n      } else {\n        this._cachedCompiledPatterns.setSource(0, endRegexSource);\n      }\n    }\n    return this._cachedCompiledPatterns;\n  }\n};\nvar BeginWhileRule = class extends Rule {\n  _begin;\n  beginCaptures;\n  whileCaptures;\n  _while;\n  whileHasBackReferences;\n  hasMissingPatterns;\n  patterns;\n  _cachedCompiledPatterns;\n  _cachedCompiledWhilePatterns;\n  constructor($location, id, name, contentName, begin, beginCaptures, _while, whileCaptures, patterns) {\n    super($location, id, name, contentName);\n    this._begin = new RegExpSource(begin, this.id);\n    this.beginCaptures = beginCaptures;\n    this.whileCaptures = whileCaptures;\n    this._while = new RegExpSource(_while, whileRuleId);\n    this.whileHasBackReferences = this._while.hasBackReferences;\n    this.patterns = patterns.patterns;\n    this.hasMissingPatterns = patterns.hasMissingPatterns;\n    this._cachedCompiledPatterns = null;\n    this._cachedCompiledWhilePatterns = null;\n  }\n  dispose() {\n    if (this._cachedCompiledPatterns) {\n      this._cachedCompiledPatterns.dispose();\n      this._cachedCompiledPatterns = null;\n    }\n    if (this._cachedCompiledWhilePatterns) {\n      this._cachedCompiledWhilePatterns.dispose();\n      this._cachedCompiledWhilePatterns = null;\n    }\n  }\n  get debugBeginRegExp() {\n    return `${this._begin.source}`;\n  }\n  get debugWhileRegExp() {\n    return `${this._while.source}`;\n  }\n  getWhileWithResolvedBackReferences(lineText, captureIndices) {\n    return this._while.resolveBackReferences(lineText, captureIndices);\n  }\n  collectPatterns(grammar, out) {\n    out.push(this._begin);\n  }\n  compile(grammar, endRegexSource) {\n    return this._getCachedCompiledPatterns(grammar).compile(grammar);\n  }\n  compileAG(grammar, endRegexSource, allowA, allowG) {\n    return this._getCachedCompiledPatterns(grammar).compileAG(grammar, allowA, allowG);\n  }\n  _getCachedCompiledPatterns(grammar) {\n    if (!this._cachedCompiledPatterns) {\n      this._cachedCompiledPatterns = new RegExpSourceList();\n      for (const pattern of this.patterns) {\n        const rule = grammar.getRule(pattern);\n        rule.collectPatterns(grammar, this._cachedCompiledPatterns);\n      }\n    }\n    return this._cachedCompiledPatterns;\n  }\n  compileWhile(grammar, endRegexSource) {\n    return this._getCachedCompiledWhilePatterns(grammar, endRegexSource).compile(grammar);\n  }\n  compileWhileAG(grammar, endRegexSource, allowA, allowG) {\n    return this._getCachedCompiledWhilePatterns(grammar, endRegexSource).compileAG(grammar, allowA, allowG);\n  }\n  _getCachedCompiledWhilePatterns(grammar, endRegexSource) {\n    if (!this._cachedCompiledWhilePatterns) {\n      this._cachedCompiledWhilePatterns = new RegExpSourceList();\n      this._cachedCompiledWhilePatterns.push(this._while.hasBackReferences ? this._while.clone() : this._while);\n    }\n    if (this._while.hasBackReferences) {\n      this._cachedCompiledWhilePatterns.setSource(0, endRegexSource ? endRegexSource : \"\\uFFFF\");\n    }\n    return this._cachedCompiledWhilePatterns;\n  }\n};\nvar RuleFactory = class _RuleFactory {\n  static createCaptureRule(helper, $location, name, contentName, retokenizeCapturedWithRuleId) {\n    return helper.registerRule((id) => {\n      return new CaptureRule($location, id, name, contentName, retokenizeCapturedWithRuleId);\n    });\n  }\n  static getCompiledRuleId(desc, helper, repository) {\n    if (!desc.id) {\n      helper.registerRule((id) => {\n        desc.id = id;\n        if (desc.match) {\n          return new MatchRule(\n            desc.$vscodeTextmateLocation,\n            desc.id,\n            desc.name,\n            desc.match,\n            _RuleFactory._compileCaptures(desc.captures, helper, repository)\n          );\n        }\n        if (typeof desc.begin === \"undefined\") {\n          if (desc.repository) {\n            repository = mergeObjects({}, repository, desc.repository);\n          }\n          let patterns = desc.patterns;\n          if (typeof patterns === \"undefined\" && desc.include) {\n            patterns = [{ include: desc.include }];\n          }\n          return new IncludeOnlyRule(\n            desc.$vscodeTextmateLocation,\n            desc.id,\n            desc.name,\n            desc.contentName,\n            _RuleFactory._compilePatterns(patterns, helper, repository)\n          );\n        }\n        if (desc.while) {\n          return new BeginWhileRule(\n            desc.$vscodeTextmateLocation,\n            desc.id,\n            desc.name,\n            desc.contentName,\n            desc.begin,\n            _RuleFactory._compileCaptures(desc.beginCaptures || desc.captures, helper, repository),\n            desc.while,\n            _RuleFactory._compileCaptures(desc.whileCaptures || desc.captures, helper, repository),\n            _RuleFactory._compilePatterns(desc.patterns, helper, repository)\n          );\n        }\n        return new BeginEndRule(\n          desc.$vscodeTextmateLocation,\n          desc.id,\n          desc.name,\n          desc.contentName,\n          desc.begin,\n          _RuleFactory._compileCaptures(desc.beginCaptures || desc.captures, helper, repository),\n          desc.end,\n          _RuleFactory._compileCaptures(desc.endCaptures || desc.captures, helper, repository),\n          desc.applyEndPatternLast,\n          _RuleFactory._compilePatterns(desc.patterns, helper, repository)\n        );\n      });\n    }\n    return desc.id;\n  }\n  static _compileCaptures(captures, helper, repository) {\n    let r = [];\n    if (captures) {\n      let maximumCaptureId = 0;\n      for (const captureId in captures) {\n        if (captureId === \"$vscodeTextmateLocation\") {\n          continue;\n        }\n        const numericCaptureId = parseInt(captureId, 10);\n        if (numericCaptureId > maximumCaptureId) {\n          maximumCaptureId = numericCaptureId;\n        }\n      }\n      for (let i = 0; i <= maximumCaptureId; i++) {\n        r[i] = null;\n      }\n      for (const captureId in captures) {\n        if (captureId === \"$vscodeTextmateLocation\") {\n          continue;\n        }\n        const numericCaptureId = parseInt(captureId, 10);\n        let retokenizeCapturedWithRuleId = 0;\n        if (captures[captureId].patterns) {\n          retokenizeCapturedWithRuleId = _RuleFactory.getCompiledRuleId(captures[captureId], helper, repository);\n        }\n        r[numericCaptureId] = _RuleFactory.createCaptureRule(helper, captures[captureId].$vscodeTextmateLocation, captures[captureId].name, captures[captureId].contentName, retokenizeCapturedWithRuleId);\n      }\n    }\n    return r;\n  }\n  static _compilePatterns(patterns, helper, repository) {\n    let r = [];\n    if (patterns) {\n      for (let i = 0, len = patterns.length; i < len; i++) {\n        const pattern = patterns[i];\n        let ruleId = -1;\n        if (pattern.include) {\n          const reference = parseInclude(pattern.include);\n          switch (reference.kind) {\n            case 0 /* Base */:\n            case 1 /* Self */:\n              ruleId = _RuleFactory.getCompiledRuleId(repository[pattern.include], helper, repository);\n              break;\n            case 2 /* RelativeReference */:\n              let localIncludedRule = repository[reference.ruleName];\n              if (localIncludedRule) {\n                ruleId = _RuleFactory.getCompiledRuleId(localIncludedRule, helper, repository);\n              } else {\n              }\n              break;\n            case 3 /* TopLevelReference */:\n            case 4 /* TopLevelRepositoryReference */:\n              const externalGrammarName = reference.scopeName;\n              const externalGrammarInclude = reference.kind === 4 /* TopLevelRepositoryReference */ ? reference.ruleName : null;\n              const externalGrammar = helper.getExternalGrammar(externalGrammarName, repository);\n              if (externalGrammar) {\n                if (externalGrammarInclude) {\n                  let externalIncludedRule = externalGrammar.repository[externalGrammarInclude];\n                  if (externalIncludedRule) {\n                    ruleId = _RuleFactory.getCompiledRuleId(externalIncludedRule, helper, externalGrammar.repository);\n                  } else {\n                  }\n                } else {\n                  ruleId = _RuleFactory.getCompiledRuleId(externalGrammar.repository.$self, helper, externalGrammar.repository);\n                }\n              } else {\n              }\n              break;\n          }\n        } else {\n          ruleId = _RuleFactory.getCompiledRuleId(pattern, helper, repository);\n        }\n        if (ruleId !== -1) {\n          const rule = helper.getRule(ruleId);\n          let skipRule = false;\n          if (rule instanceof IncludeOnlyRule || rule instanceof BeginEndRule || rule instanceof BeginWhileRule) {\n            if (rule.hasMissingPatterns && rule.patterns.length === 0) {\n              skipRule = true;\n            }\n          }\n          if (skipRule) {\n            continue;\n          }\n          r.push(ruleId);\n        }\n      }\n    }\n    return {\n      patterns: r,\n      hasMissingPatterns: (patterns ? patterns.length : 0) !== r.length\n    };\n  }\n};\nvar RegExpSource = class _RegExpSource {\n  source;\n  ruleId;\n  hasAnchor;\n  hasBackReferences;\n  _anchorCache;\n  constructor(regExpSource, ruleId) {\n    if (regExpSource && typeof regExpSource === \"string\") {\n      const len = regExpSource.length;\n      let lastPushedPos = 0;\n      let output = [];\n      let hasAnchor = false;\n      for (let pos = 0; pos < len; pos++) {\n        const ch = regExpSource.charAt(pos);\n        if (ch === \"\\\\\") {\n          if (pos + 1 < len) {\n            const nextCh = regExpSource.charAt(pos + 1);\n            if (nextCh === \"z\") {\n              output.push(regExpSource.substring(lastPushedPos, pos));\n              output.push(\"$(?!\\\\n)(?<!\\\\n)\");\n              lastPushedPos = pos + 2;\n            } else if (nextCh === \"A\" || nextCh === \"G\") {\n              hasAnchor = true;\n            }\n            pos++;\n          }\n        }\n      }\n      this.hasAnchor = hasAnchor;\n      if (lastPushedPos === 0) {\n        this.source = regExpSource;\n      } else {\n        output.push(regExpSource.substring(lastPushedPos, len));\n        this.source = output.join(\"\");\n      }\n    } else {\n      this.hasAnchor = false;\n      this.source = regExpSource;\n    }\n    if (this.hasAnchor) {\n      this._anchorCache = this._buildAnchorCache();\n    } else {\n      this._anchorCache = null;\n    }\n    this.ruleId = ruleId;\n    if (typeof this.source === \"string\") {\n      this.hasBackReferences = HAS_BACK_REFERENCES.test(this.source);\n    } else {\n      this.hasBackReferences = false;\n    }\n  }\n  clone() {\n    return new _RegExpSource(this.source, this.ruleId);\n  }\n  setSource(newSource) {\n    if (this.source === newSource) {\n      return;\n    }\n    this.source = newSource;\n    if (this.hasAnchor) {\n      this._anchorCache = this._buildAnchorCache();\n    }\n  }\n  resolveBackReferences(lineText, captureIndices) {\n    if (typeof this.source !== \"string\") {\n      throw new Error(\"This method should only be called if the source is a string\");\n    }\n    let capturedValues = captureIndices.map((capture) => {\n      return lineText.substring(capture.start, capture.end);\n    });\n    BACK_REFERENCING_END.lastIndex = 0;\n    return this.source.replace(BACK_REFERENCING_END, (match, g1) => {\n      return escapeRegExpCharacters(capturedValues[parseInt(g1, 10)] || \"\");\n    });\n  }\n  _buildAnchorCache() {\n    if (typeof this.source !== \"string\") {\n      throw new Error(\"This method should only be called if the source is a string\");\n    }\n    let A0_G0_result = [];\n    let A0_G1_result = [];\n    let A1_G0_result = [];\n    let A1_G1_result = [];\n    let pos, len, ch, nextCh;\n    for (pos = 0, len = this.source.length; pos < len; pos++) {\n      ch = this.source.charAt(pos);\n      A0_G0_result[pos] = ch;\n      A0_G1_result[pos] = ch;\n      A1_G0_result[pos] = ch;\n      A1_G1_result[pos] = ch;\n      if (ch === \"\\\\\") {\n        if (pos + 1 < len) {\n          nextCh = this.source.charAt(pos + 1);\n          if (nextCh === \"A\") {\n            A0_G0_result[pos + 1] = \"\\uFFFF\";\n            A0_G1_result[pos + 1] = \"\\uFFFF\";\n            A1_G0_result[pos + 1] = \"A\";\n            A1_G1_result[pos + 1] = \"A\";\n          } else if (nextCh === \"G\") {\n            A0_G0_result[pos + 1] = \"\\uFFFF\";\n            A0_G1_result[pos + 1] = \"G\";\n            A1_G0_result[pos + 1] = \"\\uFFFF\";\n            A1_G1_result[pos + 1] = \"G\";\n          } else {\n            A0_G0_result[pos + 1] = nextCh;\n            A0_G1_result[pos + 1] = nextCh;\n            A1_G0_result[pos + 1] = nextCh;\n            A1_G1_result[pos + 1] = nextCh;\n          }\n          pos++;\n        }\n      }\n    }\n    return {\n      A0_G0: A0_G0_result.join(\"\"),\n      A0_G1: A0_G1_result.join(\"\"),\n      A1_G0: A1_G0_result.join(\"\"),\n      A1_G1: A1_G1_result.join(\"\")\n    };\n  }\n  resolveAnchors(allowA, allowG) {\n    if (!this.hasAnchor || !this._anchorCache || typeof this.source !== \"string\") {\n      return this.source;\n    }\n    if (allowA) {\n      if (allowG) {\n        return this._anchorCache.A1_G1;\n      } else {\n        return this._anchorCache.A1_G0;\n      }\n    } else {\n      if (allowG) {\n        return this._anchorCache.A0_G1;\n      } else {\n        return this._anchorCache.A0_G0;\n      }\n    }\n  }\n};\nvar RegExpSourceList = class {\n  _items;\n  _hasAnchors;\n  _cached;\n  _anchorCache;\n  constructor() {\n    this._items = [];\n    this._hasAnchors = false;\n    this._cached = null;\n    this._anchorCache = {\n      A0_G0: null,\n      A0_G1: null,\n      A1_G0: null,\n      A1_G1: null\n    };\n  }\n  dispose() {\n    this._disposeCaches();\n  }\n  _disposeCaches() {\n    if (this._cached) {\n      this._cached.dispose();\n      this._cached = null;\n    }\n    if (this._anchorCache.A0_G0) {\n      this._anchorCache.A0_G0.dispose();\n      this._anchorCache.A0_G0 = null;\n    }\n    if (this._anchorCache.A0_G1) {\n      this._anchorCache.A0_G1.dispose();\n      this._anchorCache.A0_G1 = null;\n    }\n    if (this._anchorCache.A1_G0) {\n      this._anchorCache.A1_G0.dispose();\n      this._anchorCache.A1_G0 = null;\n    }\n    if (this._anchorCache.A1_G1) {\n      this._anchorCache.A1_G1.dispose();\n      this._anchorCache.A1_G1 = null;\n    }\n  }\n  push(item) {\n    this._items.push(item);\n    this._hasAnchors = this._hasAnchors || item.hasAnchor;\n  }\n  unshift(item) {\n    this._items.unshift(item);\n    this._hasAnchors = this._hasAnchors || item.hasAnchor;\n  }\n  length() {\n    return this._items.length;\n  }\n  setSource(index, newSource) {\n    if (this._items[index].source !== newSource) {\n      this._disposeCaches();\n      this._items[index].setSource(newSource);\n    }\n  }\n  compile(onigLib) {\n    if (!this._cached) {\n      let regExps = this._items.map((e) => e.source);\n      this._cached = new CompiledRule(onigLib, regExps, this._items.map((e) => e.ruleId));\n    }\n    return this._cached;\n  }\n  compileAG(onigLib, allowA, allowG) {\n    if (!this._hasAnchors) {\n      return this.compile(onigLib);\n    } else {\n      if (allowA) {\n        if (allowG) {\n          if (!this._anchorCache.A1_G1) {\n            this._anchorCache.A1_G1 = this._resolveAnchors(onigLib, allowA, allowG);\n          }\n          return this._anchorCache.A1_G1;\n        } else {\n          if (!this._anchorCache.A1_G0) {\n            this._anchorCache.A1_G0 = this._resolveAnchors(onigLib, allowA, allowG);\n          }\n          return this._anchorCache.A1_G0;\n        }\n      } else {\n        if (allowG) {\n          if (!this._anchorCache.A0_G1) {\n            this._anchorCache.A0_G1 = this._resolveAnchors(onigLib, allowA, allowG);\n          }\n          return this._anchorCache.A0_G1;\n        } else {\n          if (!this._anchorCache.A0_G0) {\n            this._anchorCache.A0_G0 = this._resolveAnchors(onigLib, allowA, allowG);\n          }\n          return this._anchorCache.A0_G0;\n        }\n      }\n    }\n  }\n  _resolveAnchors(onigLib, allowA, allowG) {\n    let regExps = this._items.map((e) => e.resolveAnchors(allowA, allowG));\n    return new CompiledRule(onigLib, regExps, this._items.map((e) => e.ruleId));\n  }\n};\nvar CompiledRule = class {\n  constructor(onigLib, regExps, rules) {\n    this.regExps = regExps;\n    this.rules = rules;\n    this.scanner = onigLib.createOnigScanner(regExps);\n  }\n  scanner;\n  dispose() {\n    if (typeof this.scanner.dispose === \"function\") {\n      this.scanner.dispose();\n    }\n  }\n  toString() {\n    const r = [];\n    for (let i = 0, len = this.rules.length; i < len; i++) {\n      r.push(\"   - \" + this.rules[i] + \": \" + this.regExps[i]);\n    }\n    return r.join(\"\\n\");\n  }\n  findNextMatchSync(string, startPosition, options) {\n    const result = this.scanner.findNextMatchSync(string, startPosition, options);\n    if (!result) {\n      return null;\n    }\n    return {\n      ruleId: this.rules[result.index],\n      captureIndices: result.captureIndices\n    };\n  }\n};\n\n// src/grammar/basicScopesAttributeProvider.ts\nvar BasicScopeAttributes = class {\n  constructor(languageId, tokenType) {\n    this.languageId = languageId;\n    this.tokenType = tokenType;\n  }\n};\nvar BasicScopeAttributesProvider = class _BasicScopeAttributesProvider {\n  _defaultAttributes;\n  _embeddedLanguagesMatcher;\n  constructor(initialLanguageId, embeddedLanguages) {\n    this._defaultAttributes = new BasicScopeAttributes(initialLanguageId, 8 /* NotSet */);\n    this._embeddedLanguagesMatcher = new ScopeMatcher(Object.entries(embeddedLanguages || {}));\n  }\n  getDefaultAttributes() {\n    return this._defaultAttributes;\n  }\n  getBasicScopeAttributes(scopeName) {\n    if (scopeName === null) {\n      return _BasicScopeAttributesProvider._NULL_SCOPE_METADATA;\n    }\n    return this._getBasicScopeAttributes.get(scopeName);\n  }\n  static _NULL_SCOPE_METADATA = new BasicScopeAttributes(0, 0);\n  _getBasicScopeAttributes = new CachedFn((scopeName) => {\n    const languageId = this._scopeToLanguage(scopeName);\n    const standardTokenType = this._toStandardTokenType(scopeName);\n    return new BasicScopeAttributes(languageId, standardTokenType);\n  });\n  /**\n   * Given a produced TM scope, return the language that token describes or null if unknown.\n   * e.g. source.html => html, source.css.embedded.html => css, punctuation.definition.tag.html => null\n   */\n  _scopeToLanguage(scope) {\n    return this._embeddedLanguagesMatcher.match(scope) || 0;\n  }\n  _toStandardTokenType(scopeName) {\n    const m = scopeName.match(_BasicScopeAttributesProvider.STANDARD_TOKEN_TYPE_REGEXP);\n    if (!m) {\n      return 8 /* NotSet */;\n    }\n    switch (m[1]) {\n      case \"comment\":\n        return 1 /* Comment */;\n      case \"string\":\n        return 2 /* String */;\n      case \"regex\":\n        return 3 /* RegEx */;\n      case \"meta.embedded\":\n        return 0 /* Other */;\n    }\n    throw new Error(\"Unexpected match for standard token type!\");\n  }\n  static STANDARD_TOKEN_TYPE_REGEXP = /\\b(comment|string|regex|meta\\.embedded)\\b/;\n};\nvar ScopeMatcher = class {\n  values;\n  scopesRegExp;\n  constructor(values) {\n    if (values.length === 0) {\n      this.values = null;\n      this.scopesRegExp = null;\n    } else {\n      this.values = new Map(values);\n      const escapedScopes = values.map(\n        ([scopeName, value]) => escapeRegExpCharacters(scopeName)\n      );\n      escapedScopes.sort();\n      escapedScopes.reverse();\n      this.scopesRegExp = new RegExp(\n        `^((${escapedScopes.join(\")|(\")}))($|\\\\.)`,\n        \"\"\n      );\n    }\n  }\n  match(scope) {\n    if (!this.scopesRegExp) {\n      return void 0;\n    }\n    const m = scope.match(this.scopesRegExp);\n    if (!m) {\n      return void 0;\n    }\n    return this.values.get(m[1]);\n  }\n};\n\n// src/debug.ts\nvar DebugFlags = {\n  InDebugMode: typeof process !== \"undefined\" && !!process.env[\"VSCODE_TEXTMATE_DEBUG\"]\n};\nvar UseOnigurumaFindOptions = false;\n\n// src/grammar/tokenizeString.ts\nvar TokenizeStringResult = class {\n  constructor(stack, stoppedEarly) {\n    this.stack = stack;\n    this.stoppedEarly = stoppedEarly;\n  }\n};\nfunction _tokenizeString(grammar, lineText, isFirstLine, linePos, stack, lineTokens, checkWhileConditions, timeLimit) {\n  const lineLength = lineText.content.length;\n  let STOP = false;\n  let anchorPosition = -1;\n  if (checkWhileConditions) {\n    const whileCheckResult = _checkWhileConditions(\n      grammar,\n      lineText,\n      isFirstLine,\n      linePos,\n      stack,\n      lineTokens\n    );\n    stack = whileCheckResult.stack;\n    linePos = whileCheckResult.linePos;\n    isFirstLine = whileCheckResult.isFirstLine;\n    anchorPosition = whileCheckResult.anchorPosition;\n  }\n  const startTime = Date.now();\n  while (!STOP) {\n    if (timeLimit !== 0) {\n      const elapsedTime = Date.now() - startTime;\n      if (elapsedTime > timeLimit) {\n        return new TokenizeStringResult(stack, true);\n      }\n    }\n    scanNext();\n  }\n  return new TokenizeStringResult(stack, false);\n  function scanNext() {\n    if (false) {\n      console.log(\"\");\n      console.log(\n        `@@scanNext ${linePos}: |${lineText.content.substr(linePos).replace(/\\n$/, \"\\\\n\")}|`\n      );\n    }\n    const r = matchRuleOrInjections(\n      grammar,\n      lineText,\n      isFirstLine,\n      linePos,\n      stack,\n      anchorPosition\n    );\n    if (!r) {\n      lineTokens.produce(stack, lineLength);\n      STOP = true;\n      return;\n    }\n    const captureIndices = r.captureIndices;\n    const matchedRuleId = r.matchedRuleId;\n    const hasAdvanced = captureIndices && captureIndices.length > 0 ? captureIndices[0].end > linePos : false;\n    if (matchedRuleId === endRuleId) {\n      const poppedRule = stack.getRule(grammar);\n      if (false) {\n        console.log(\n          \"  popping \" + poppedRule.debugName + \" - \" + poppedRule.debugEndRegExp\n        );\n      }\n      lineTokens.produce(stack, captureIndices[0].start);\n      stack = stack.withContentNameScopesList(stack.nameScopesList);\n      handleCaptures(\n        grammar,\n        lineText,\n        isFirstLine,\n        stack,\n        lineTokens,\n        poppedRule.endCaptures,\n        captureIndices\n      );\n      lineTokens.produce(stack, captureIndices[0].end);\n      const popped = stack;\n      stack = stack.parent;\n      anchorPosition = popped.getAnchorPos();\n      if (!hasAdvanced && popped.getEnterPos() === linePos) {\n        if (false) {\n          console.error(\n            \"[1] - Grammar is in an endless loop - Grammar pushed & popped a rule without advancing\"\n          );\n        }\n        stack = popped;\n        lineTokens.produce(stack, lineLength);\n        STOP = true;\n        return;\n      }\n    } else {\n      const _rule = grammar.getRule(matchedRuleId);\n      lineTokens.produce(stack, captureIndices[0].start);\n      const beforePush = stack;\n      const scopeName = _rule.getName(lineText.content, captureIndices);\n      const nameScopesList = stack.contentNameScopesList.pushAttributed(\n        scopeName,\n        grammar\n      );\n      stack = stack.push(\n        matchedRuleId,\n        linePos,\n        anchorPosition,\n        captureIndices[0].end === lineLength,\n        null,\n        nameScopesList,\n        nameScopesList\n      );\n      if (_rule instanceof BeginEndRule) {\n        const pushedRule = _rule;\n        if (false) {\n          console.log(\n            \"  pushing \" + pushedRule.debugName + \" - \" + pushedRule.debugBeginRegExp\n          );\n        }\n        handleCaptures(\n          grammar,\n          lineText,\n          isFirstLine,\n          stack,\n          lineTokens,\n          pushedRule.beginCaptures,\n          captureIndices\n        );\n        lineTokens.produce(stack, captureIndices[0].end);\n        anchorPosition = captureIndices[0].end;\n        const contentName = pushedRule.getContentName(\n          lineText.content,\n          captureIndices\n        );\n        const contentNameScopesList = nameScopesList.pushAttributed(\n          contentName,\n          grammar\n        );\n        stack = stack.withContentNameScopesList(contentNameScopesList);\n        if (pushedRule.endHasBackReferences) {\n          stack = stack.withEndRule(\n            pushedRule.getEndWithResolvedBackReferences(\n              lineText.content,\n              captureIndices\n            )\n          );\n        }\n        if (!hasAdvanced && beforePush.hasSameRuleAs(stack)) {\n          if (false) {\n            console.error(\n              \"[2] - Grammar is in an endless loop - Grammar pushed the same rule without advancing\"\n            );\n          }\n          stack = stack.pop();\n          lineTokens.produce(stack, lineLength);\n          STOP = true;\n          return;\n        }\n      } else if (_rule instanceof BeginWhileRule) {\n        const pushedRule = _rule;\n        if (false) {\n          console.log(\"  pushing \" + pushedRule.debugName);\n        }\n        handleCaptures(\n          grammar,\n          lineText,\n          isFirstLine,\n          stack,\n          lineTokens,\n          pushedRule.beginCaptures,\n          captureIndices\n        );\n        lineTokens.produce(stack, captureIndices[0].end);\n        anchorPosition = captureIndices[0].end;\n        const contentName = pushedRule.getContentName(\n          lineText.content,\n          captureIndices\n        );\n        const contentNameScopesList = nameScopesList.pushAttributed(\n          contentName,\n          grammar\n        );\n        stack = stack.withContentNameScopesList(contentNameScopesList);\n        if (pushedRule.whileHasBackReferences) {\n          stack = stack.withEndRule(\n            pushedRule.getWhileWithResolvedBackReferences(\n              lineText.content,\n              captureIndices\n            )\n          );\n        }\n        if (!hasAdvanced && beforePush.hasSameRuleAs(stack)) {\n          if (false) {\n            console.error(\n              \"[3] - Grammar is in an endless loop - Grammar pushed the same rule without advancing\"\n            );\n          }\n          stack = stack.pop();\n          lineTokens.produce(stack, lineLength);\n          STOP = true;\n          return;\n        }\n      } else {\n        const matchingRule = _rule;\n        if (false) {\n          console.log(\n            \"  matched \" + matchingRule.debugName + \" - \" + matchingRule.debugMatchRegExp\n          );\n        }\n        handleCaptures(\n          grammar,\n          lineText,\n          isFirstLine,\n          stack,\n          lineTokens,\n          matchingRule.captures,\n          captureIndices\n        );\n        lineTokens.produce(stack, captureIndices[0].end);\n        stack = stack.pop();\n        if (!hasAdvanced) {\n          if (false) {\n            console.error(\n              \"[4] - Grammar is in an endless loop - Grammar is not advancing, nor is it pushing/popping\"\n            );\n          }\n          stack = stack.safePop();\n          lineTokens.produce(stack, lineLength);\n          STOP = true;\n          return;\n        }\n      }\n    }\n    if (captureIndices[0].end > linePos) {\n      linePos = captureIndices[0].end;\n      isFirstLine = false;\n    }\n  }\n}\nfunction _checkWhileConditions(grammar, lineText, isFirstLine, linePos, stack, lineTokens) {\n  let anchorPosition = stack.beginRuleCapturedEOL ? 0 : -1;\n  const whileRules = [];\n  for (let node = stack; node; node = node.pop()) {\n    const nodeRule = node.getRule(grammar);\n    if (nodeRule instanceof BeginWhileRule) {\n      whileRules.push({\n        rule: nodeRule,\n        stack: node\n      });\n    }\n  }\n  for (let whileRule = whileRules.pop(); whileRule; whileRule = whileRules.pop()) {\n    const { ruleScanner, findOptions } = prepareRuleWhileSearch(whileRule.rule, grammar, whileRule.stack.endRule, isFirstLine, linePos === anchorPosition);\n    const r = ruleScanner.findNextMatchSync(lineText, linePos, findOptions);\n    if (false) {\n      console.log(\"  scanning for while rule\");\n      console.log(ruleScanner.toString());\n    }\n    if (r) {\n      const matchedRuleId = r.ruleId;\n      if (matchedRuleId !== whileRuleId) {\n        stack = whileRule.stack.pop();\n        break;\n      }\n      if (r.captureIndices && r.captureIndices.length) {\n        lineTokens.produce(whileRule.stack, r.captureIndices[0].start);\n        handleCaptures(grammar, lineText, isFirstLine, whileRule.stack, lineTokens, whileRule.rule.whileCaptures, r.captureIndices);\n        lineTokens.produce(whileRule.stack, r.captureIndices[0].end);\n        anchorPosition = r.captureIndices[0].end;\n        if (r.captureIndices[0].end > linePos) {\n          linePos = r.captureIndices[0].end;\n          isFirstLine = false;\n        }\n      }\n    } else {\n      if (false) {\n        console.log(\"  popping \" + whileRule.rule.debugName + \" - \" + whileRule.rule.debugWhileRegExp);\n      }\n      stack = whileRule.stack.pop();\n      break;\n    }\n  }\n  return { stack, linePos, anchorPosition, isFirstLine };\n}\nfunction matchRuleOrInjections(grammar, lineText, isFirstLine, linePos, stack, anchorPosition) {\n  const matchResult = matchRule(grammar, lineText, isFirstLine, linePos, stack, anchorPosition);\n  const injections = grammar.getInjections();\n  if (injections.length === 0) {\n    return matchResult;\n  }\n  const injectionResult = matchInjections(injections, grammar, lineText, isFirstLine, linePos, stack, anchorPosition);\n  if (!injectionResult) {\n    return matchResult;\n  }\n  if (!matchResult) {\n    return injectionResult;\n  }\n  const matchResultScore = matchResult.captureIndices[0].start;\n  const injectionResultScore = injectionResult.captureIndices[0].start;\n  if (injectionResultScore < matchResultScore || injectionResult.priorityMatch && injectionResultScore === matchResultScore) {\n    return injectionResult;\n  }\n  return matchResult;\n}\nfunction matchRule(grammar, lineText, isFirstLine, linePos, stack, anchorPosition) {\n  const rule = stack.getRule(grammar);\n  const { ruleScanner, findOptions } = prepareRuleSearch(rule, grammar, stack.endRule, isFirstLine, linePos === anchorPosition);\n  const r = ruleScanner.findNextMatchSync(lineText, linePos, findOptions);\n  if (r) {\n    return {\n      captureIndices: r.captureIndices,\n      matchedRuleId: r.ruleId\n    };\n  }\n  return null;\n}\nfunction matchInjections(injections, grammar, lineText, isFirstLine, linePos, stack, anchorPosition) {\n  let bestMatchRating = Number.MAX_VALUE;\n  let bestMatchCaptureIndices = null;\n  let bestMatchRuleId;\n  let bestMatchResultPriority = 0;\n  const scopes = stack.contentNameScopesList.getScopeNames();\n  for (let i = 0, len = injections.length; i < len; i++) {\n    const injection = injections[i];\n    if (!injection.matcher(scopes)) {\n      continue;\n    }\n    const rule = grammar.getRule(injection.ruleId);\n    const { ruleScanner, findOptions } = prepareRuleSearch(rule, grammar, null, isFirstLine, linePos === anchorPosition);\n    const matchResult = ruleScanner.findNextMatchSync(lineText, linePos, findOptions);\n    if (!matchResult) {\n      continue;\n    }\n    if (false) {\n      console.log(`  matched injection: ${injection.debugSelector}`);\n      console.log(ruleScanner.toString());\n    }\n    const matchRating = matchResult.captureIndices[0].start;\n    if (matchRating >= bestMatchRating) {\n      continue;\n    }\n    bestMatchRating = matchRating;\n    bestMatchCaptureIndices = matchResult.captureIndices;\n    bestMatchRuleId = matchResult.ruleId;\n    bestMatchResultPriority = injection.priority;\n    if (bestMatchRating === linePos) {\n      break;\n    }\n  }\n  if (bestMatchCaptureIndices) {\n    return {\n      priorityMatch: bestMatchResultPriority === -1,\n      captureIndices: bestMatchCaptureIndices,\n      matchedRuleId: bestMatchRuleId\n    };\n  }\n  return null;\n}\nfunction prepareRuleSearch(rule, grammar, endRegexSource, allowA, allowG) {\n  if (UseOnigurumaFindOptions) {\n    const ruleScanner2 = rule.compile(grammar, endRegexSource);\n    const findOptions = getFindOptions(allowA, allowG);\n    return { ruleScanner: ruleScanner2, findOptions };\n  }\n  const ruleScanner = rule.compileAG(grammar, endRegexSource, allowA, allowG);\n  return { ruleScanner, findOptions: 0 /* None */ };\n}\nfunction prepareRuleWhileSearch(rule, grammar, endRegexSource, allowA, allowG) {\n  if (UseOnigurumaFindOptions) {\n    const ruleScanner2 = rule.compileWhile(grammar, endRegexSource);\n    const findOptions = getFindOptions(allowA, allowG);\n    return { ruleScanner: ruleScanner2, findOptions };\n  }\n  const ruleScanner = rule.compileWhileAG(grammar, endRegexSource, allowA, allowG);\n  return { ruleScanner, findOptions: 0 /* None */ };\n}\nfunction getFindOptions(allowA, allowG) {\n  let options = 0 /* None */;\n  if (!allowA) {\n    options |= 1 /* NotBeginString */;\n  }\n  if (!allowG) {\n    options |= 4 /* NotBeginPosition */;\n  }\n  return options;\n}\nfunction handleCaptures(grammar, lineText, isFirstLine, stack, lineTokens, captures, captureIndices) {\n  if (captures.length === 0) {\n    return;\n  }\n  const lineTextContent = lineText.content;\n  const len = Math.min(captures.length, captureIndices.length);\n  const localStack = [];\n  const maxEnd = captureIndices[0].end;\n  for (let i = 0; i < len; i++) {\n    const captureRule = captures[i];\n    if (captureRule === null) {\n      continue;\n    }\n    const captureIndex = captureIndices[i];\n    if (captureIndex.length === 0) {\n      continue;\n    }\n    if (captureIndex.start > maxEnd) {\n      break;\n    }\n    while (localStack.length > 0 && localStack[localStack.length - 1].endPos <= captureIndex.start) {\n      lineTokens.produceFromScopes(localStack[localStack.length - 1].scopes, localStack[localStack.length - 1].endPos);\n      localStack.pop();\n    }\n    if (localStack.length > 0) {\n      lineTokens.produceFromScopes(localStack[localStack.length - 1].scopes, captureIndex.start);\n    } else {\n      lineTokens.produce(stack, captureIndex.start);\n    }\n    if (captureRule.retokenizeCapturedWithRuleId) {\n      const scopeName = captureRule.getName(lineTextContent, captureIndices);\n      const nameScopesList = stack.contentNameScopesList.pushAttributed(scopeName, grammar);\n      const contentName = captureRule.getContentName(lineTextContent, captureIndices);\n      const contentNameScopesList = nameScopesList.pushAttributed(contentName, grammar);\n      const stackClone = stack.push(captureRule.retokenizeCapturedWithRuleId, captureIndex.start, -1, false, null, nameScopesList, contentNameScopesList);\n      const onigSubStr = grammar.createOnigString(lineTextContent.substring(0, captureIndex.end));\n      _tokenizeString(\n        grammar,\n        onigSubStr,\n        isFirstLine && captureIndex.start === 0,\n        captureIndex.start,\n        stackClone,\n        lineTokens,\n        false,\n        /* no time limit */\n        0\n      );\n      disposeOnigString(onigSubStr);\n      continue;\n    }\n    const captureRuleScopeName = captureRule.getName(lineTextContent, captureIndices);\n    if (captureRuleScopeName !== null) {\n      const base = localStack.length > 0 ? localStack[localStack.length - 1].scopes : stack.contentNameScopesList;\n      const captureRuleScopesList = base.pushAttributed(captureRuleScopeName, grammar);\n      localStack.push(new LocalStackElement(captureRuleScopesList, captureIndex.end));\n    }\n  }\n  while (localStack.length > 0) {\n    lineTokens.produceFromScopes(localStack[localStack.length - 1].scopes, localStack[localStack.length - 1].endPos);\n    localStack.pop();\n  }\n}\nvar LocalStackElement = class {\n  scopes;\n  endPos;\n  constructor(scopes, endPos) {\n    this.scopes = scopes;\n    this.endPos = endPos;\n  }\n};\n\n// src/grammar/grammar.ts\nfunction createGrammar(scopeName, grammar, initialLanguage, embeddedLanguages, tokenTypes, balancedBracketSelectors, grammarRepository, onigLib) {\n  return new Grammar(\n    scopeName,\n    grammar,\n    initialLanguage,\n    embeddedLanguages,\n    tokenTypes,\n    balancedBracketSelectors,\n    grammarRepository,\n    onigLib\n  );\n}\nfunction collectInjections(result, selector, rule, ruleFactoryHelper, grammar) {\n  const matchers = createMatchers(selector, nameMatcher);\n  const ruleId = RuleFactory.getCompiledRuleId(rule, ruleFactoryHelper, grammar.repository);\n  for (const matcher of matchers) {\n    result.push({\n      debugSelector: selector,\n      matcher: matcher.matcher,\n      ruleId,\n      grammar,\n      priority: matcher.priority\n    });\n  }\n}\nfunction nameMatcher(identifers, scopes) {\n  if (scopes.length < identifers.length) {\n    return false;\n  }\n  let lastIndex = 0;\n  return identifers.every((identifier) => {\n    for (let i = lastIndex; i < scopes.length; i++) {\n      if (scopesAreMatching(scopes[i], identifier)) {\n        lastIndex = i + 1;\n        return true;\n      }\n    }\n    return false;\n  });\n}\nfunction scopesAreMatching(thisScopeName, scopeName) {\n  if (!thisScopeName) {\n    return false;\n  }\n  if (thisScopeName === scopeName) {\n    return true;\n  }\n  const len = scopeName.length;\n  return thisScopeName.length > len && thisScopeName.substr(0, len) === scopeName && thisScopeName[len] === \".\";\n}\nvar Grammar = class {\n  constructor(_rootScopeName, grammar, initialLanguage, embeddedLanguages, tokenTypes, balancedBracketSelectors, grammarRepository, _onigLib) {\n    this._rootScopeName = _rootScopeName;\n    this.balancedBracketSelectors = balancedBracketSelectors;\n    this._onigLib = _onigLib;\n    this._basicScopeAttributesProvider = new BasicScopeAttributesProvider(\n      initialLanguage,\n      embeddedLanguages\n    );\n    this._rootId = -1;\n    this._lastRuleId = 0;\n    this._ruleId2desc = [null];\n    this._includedGrammars = {};\n    this._grammarRepository = grammarRepository;\n    this._grammar = initGrammar(grammar, null);\n    this._injections = null;\n    this._tokenTypeMatchers = [];\n    if (tokenTypes) {\n      for (const selector of Object.keys(tokenTypes)) {\n        const matchers = createMatchers(selector, nameMatcher);\n        for (const matcher of matchers) {\n          this._tokenTypeMatchers.push({\n            matcher: matcher.matcher,\n            type: tokenTypes[selector]\n          });\n        }\n      }\n    }\n  }\n  _rootId;\n  _lastRuleId;\n  _ruleId2desc;\n  _includedGrammars;\n  _grammarRepository;\n  _grammar;\n  _injections;\n  _basicScopeAttributesProvider;\n  _tokenTypeMatchers;\n  get themeProvider() {\n    return this._grammarRepository;\n  }\n  dispose() {\n    for (const rule of this._ruleId2desc) {\n      if (rule) {\n        rule.dispose();\n      }\n    }\n  }\n  createOnigScanner(sources) {\n    return this._onigLib.createOnigScanner(sources);\n  }\n  createOnigString(sources) {\n    return this._onigLib.createOnigString(sources);\n  }\n  getMetadataForScope(scope) {\n    return this._basicScopeAttributesProvider.getBasicScopeAttributes(scope);\n  }\n  _collectInjections() {\n    const grammarRepository = {\n      lookup: (scopeName2) => {\n        if (scopeName2 === this._rootScopeName) {\n          return this._grammar;\n        }\n        return this.getExternalGrammar(scopeName2);\n      },\n      injections: (scopeName2) => {\n        return this._grammarRepository.injections(scopeName2);\n      }\n    };\n    const result = [];\n    const scopeName = this._rootScopeName;\n    const grammar = grammarRepository.lookup(scopeName);\n    if (grammar) {\n      const rawInjections = grammar.injections;\n      if (rawInjections) {\n        for (let expression in rawInjections) {\n          collectInjections(\n            result,\n            expression,\n            rawInjections[expression],\n            this,\n            grammar\n          );\n        }\n      }\n      const injectionScopeNames = this._grammarRepository.injections(scopeName);\n      if (injectionScopeNames) {\n        injectionScopeNames.forEach((injectionScopeName) => {\n          const injectionGrammar = this.getExternalGrammar(injectionScopeName);\n          if (injectionGrammar) {\n            const selector = injectionGrammar.injectionSelector;\n            if (selector) {\n              collectInjections(\n                result,\n                selector,\n                injectionGrammar,\n                this,\n                injectionGrammar\n              );\n            }\n          }\n        });\n      }\n    }\n    result.sort((i1, i2) => i1.priority - i2.priority);\n    return result;\n  }\n  getInjections() {\n    if (this._injections === null) {\n      this._injections = this._collectInjections();\n    }\n    return this._injections;\n  }\n  registerRule(factory) {\n    const id = ++this._lastRuleId;\n    const result = factory(ruleIdFromNumber(id));\n    this._ruleId2desc[id] = result;\n    return result;\n  }\n  getRule(ruleId) {\n    return this._ruleId2desc[ruleIdToNumber(ruleId)];\n  }\n  getExternalGrammar(scopeName, repository) {\n    if (this._includedGrammars[scopeName]) {\n      return this._includedGrammars[scopeName];\n    } else if (this._grammarRepository) {\n      const rawIncludedGrammar = this._grammarRepository.lookup(scopeName);\n      if (rawIncludedGrammar) {\n        this._includedGrammars[scopeName] = initGrammar(\n          rawIncludedGrammar,\n          repository && repository.$base\n        );\n        return this._includedGrammars[scopeName];\n      }\n    }\n    return void 0;\n  }\n  tokenizeLine(lineText, prevState, timeLimit = 0) {\n    const r = this._tokenize(lineText, prevState, false, timeLimit);\n    return {\n      tokens: r.lineTokens.getResult(r.ruleStack, r.lineLength),\n      ruleStack: r.ruleStack,\n      stoppedEarly: r.stoppedEarly\n    };\n  }\n  tokenizeLine2(lineText, prevState, timeLimit = 0) {\n    const r = this._tokenize(lineText, prevState, true, timeLimit);\n    return {\n      tokens: r.lineTokens.getBinaryResult(r.ruleStack, r.lineLength),\n      ruleStack: r.ruleStack,\n      stoppedEarly: r.stoppedEarly\n    };\n  }\n  _tokenize(lineText, prevState, emitBinaryTokens, timeLimit) {\n    if (this._rootId === -1) {\n      this._rootId = RuleFactory.getCompiledRuleId(\n        this._grammar.repository.$self,\n        this,\n        this._grammar.repository\n      );\n      this.getInjections();\n    }\n    let isFirstLine;\n    if (!prevState || prevState === StateStackImpl.NULL) {\n      isFirstLine = true;\n      const rawDefaultMetadata = this._basicScopeAttributesProvider.getDefaultAttributes();\n      const defaultStyle = this.themeProvider.getDefaults();\n      const defaultMetadata = EncodedTokenMetadata.set(\n        0,\n        rawDefaultMetadata.languageId,\n        rawDefaultMetadata.tokenType,\n        null,\n        defaultStyle.fontStyle,\n        defaultStyle.foregroundId,\n        defaultStyle.backgroundId\n      );\n      const rootScopeName = this.getRule(this._rootId).getName(\n        null,\n        null\n      );\n      let scopeList;\n      if (rootScopeName) {\n        scopeList = AttributedScopeStack.createRootAndLookUpScopeName(\n          rootScopeName,\n          defaultMetadata,\n          this\n        );\n      } else {\n        scopeList = AttributedScopeStack.createRoot(\n          \"unknown\",\n          defaultMetadata\n        );\n      }\n      prevState = new StateStackImpl(\n        null,\n        this._rootId,\n        -1,\n        -1,\n        false,\n        null,\n        scopeList,\n        scopeList\n      );\n    } else {\n      isFirstLine = false;\n      prevState.reset();\n    }\n    lineText = lineText + \"\\n\";\n    const onigLineText = this.createOnigString(lineText);\n    const lineLength = onigLineText.content.length;\n    const lineTokens = new LineTokens(\n      emitBinaryTokens,\n      lineText,\n      this._tokenTypeMatchers,\n      this.balancedBracketSelectors\n    );\n    const r = _tokenizeString(\n      this,\n      onigLineText,\n      isFirstLine,\n      0,\n      prevState,\n      lineTokens,\n      true,\n      timeLimit\n    );\n    disposeOnigString(onigLineText);\n    return {\n      lineLength,\n      lineTokens,\n      ruleStack: r.stack,\n      stoppedEarly: r.stoppedEarly\n    };\n  }\n};\nfunction initGrammar(grammar, base) {\n  grammar = clone(grammar);\n  grammar.repository = grammar.repository || {};\n  grammar.repository.$self = {\n    $vscodeTextmateLocation: grammar.$vscodeTextmateLocation,\n    patterns: grammar.patterns,\n    name: grammar.scopeName\n  };\n  grammar.repository.$base = base || grammar.repository.$self;\n  return grammar;\n}\nvar AttributedScopeStack = class _AttributedScopeStack {\n  /**\n   * Invariant:\n   * ```\n   * if (parent && !scopePath.extends(parent.scopePath)) {\n   * \tthrow new Error();\n   * }\n   * ```\n   */\n  constructor(parent, scopePath, tokenAttributes) {\n    this.parent = parent;\n    this.scopePath = scopePath;\n    this.tokenAttributes = tokenAttributes;\n  }\n  static fromExtension(namesScopeList, contentNameScopesList) {\n    let current = namesScopeList;\n    let scopeNames = namesScopeList?.scopePath ?? null;\n    for (const frame of contentNameScopesList) {\n      scopeNames = ScopeStack.push(scopeNames, frame.scopeNames);\n      current = new _AttributedScopeStack(current, scopeNames, frame.encodedTokenAttributes);\n    }\n    return current;\n  }\n  static createRoot(scopeName, tokenAttributes) {\n    return new _AttributedScopeStack(null, new ScopeStack(null, scopeName), tokenAttributes);\n  }\n  static createRootAndLookUpScopeName(scopeName, tokenAttributes, grammar) {\n    const rawRootMetadata = grammar.getMetadataForScope(scopeName);\n    const scopePath = new ScopeStack(null, scopeName);\n    const rootStyle = grammar.themeProvider.themeMatch(scopePath);\n    const resolvedTokenAttributes = _AttributedScopeStack.mergeAttributes(\n      tokenAttributes,\n      rawRootMetadata,\n      rootStyle\n    );\n    return new _AttributedScopeStack(null, scopePath, resolvedTokenAttributes);\n  }\n  get scopeName() {\n    return this.scopePath.scopeName;\n  }\n  toString() {\n    return this.getScopeNames().join(\" \");\n  }\n  equals(other) {\n    return _AttributedScopeStack.equals(this, other);\n  }\n  static equals(a, b) {\n    do {\n      if (a === b) {\n        return true;\n      }\n      if (!a && !b) {\n        return true;\n      }\n      if (!a || !b) {\n        return false;\n      }\n      if (a.scopeName !== b.scopeName || a.tokenAttributes !== b.tokenAttributes) {\n        return false;\n      }\n      a = a.parent;\n      b = b.parent;\n    } while (true);\n  }\n  static mergeAttributes(existingTokenAttributes, basicScopeAttributes, styleAttributes) {\n    let fontStyle = -1 /* NotSet */;\n    let foreground = 0;\n    let background = 0;\n    if (styleAttributes !== null) {\n      fontStyle = styleAttributes.fontStyle;\n      foreground = styleAttributes.foregroundId;\n      background = styleAttributes.backgroundId;\n    }\n    return EncodedTokenMetadata.set(\n      existingTokenAttributes,\n      basicScopeAttributes.languageId,\n      basicScopeAttributes.tokenType,\n      null,\n      fontStyle,\n      foreground,\n      background\n    );\n  }\n  pushAttributed(scopePath, grammar) {\n    if (scopePath === null) {\n      return this;\n    }\n    if (scopePath.indexOf(\" \") === -1) {\n      return _AttributedScopeStack._pushAttributed(this, scopePath, grammar);\n    }\n    const scopes = scopePath.split(/ /g);\n    let result = this;\n    for (const scope of scopes) {\n      result = _AttributedScopeStack._pushAttributed(result, scope, grammar);\n    }\n    return result;\n  }\n  static _pushAttributed(target, scopeName, grammar) {\n    const rawMetadata = grammar.getMetadataForScope(scopeName);\n    const newPath = target.scopePath.push(scopeName);\n    const scopeThemeMatchResult = grammar.themeProvider.themeMatch(newPath);\n    const metadata = _AttributedScopeStack.mergeAttributes(\n      target.tokenAttributes,\n      rawMetadata,\n      scopeThemeMatchResult\n    );\n    return new _AttributedScopeStack(target, newPath, metadata);\n  }\n  getScopeNames() {\n    return this.scopePath.getSegments();\n  }\n  getExtensionIfDefined(base) {\n    const result = [];\n    let self = this;\n    while (self && self !== base) {\n      result.push({\n        encodedTokenAttributes: self.tokenAttributes,\n        scopeNames: self.scopePath.getExtensionIfDefined(self.parent?.scopePath ?? null)\n      });\n      self = self.parent;\n    }\n    return self === base ? result.reverse() : void 0;\n  }\n};\nvar StateStackImpl = class _StateStackImpl {\n  /**\n   * Invariant:\n   * ```\n   * if (contentNameScopesList !== nameScopesList && contentNameScopesList?.parent !== nameScopesList) {\n   * \tthrow new Error();\n   * }\n   * if (this.parent && !nameScopesList.extends(this.parent.contentNameScopesList)) {\n   * \tthrow new Error();\n   * }\n   * ```\n   */\n  constructor(parent, ruleId, enterPos, anchorPos, beginRuleCapturedEOL, endRule, nameScopesList, contentNameScopesList) {\n    this.parent = parent;\n    this.ruleId = ruleId;\n    this.beginRuleCapturedEOL = beginRuleCapturedEOL;\n    this.endRule = endRule;\n    this.nameScopesList = nameScopesList;\n    this.contentNameScopesList = contentNameScopesList;\n    this.depth = this.parent ? this.parent.depth + 1 : 1;\n    this._enterPos = enterPos;\n    this._anchorPos = anchorPos;\n  }\n  _stackElementBrand = void 0;\n  // TODO remove me\n  static NULL = new _StateStackImpl(\n    null,\n    0,\n    0,\n    0,\n    false,\n    null,\n    null,\n    null\n  );\n  /**\n   * The position on the current line where this state was pushed.\n   * This is relevant only while tokenizing a line, to detect endless loops.\n   * Its value is meaningless across lines.\n   */\n  _enterPos;\n  /**\n   * The captured anchor position when this stack element was pushed.\n   * This is relevant only while tokenizing a line, to restore the anchor position when popping.\n   * Its value is meaningless across lines.\n   */\n  _anchorPos;\n  /**\n   * The depth of the stack.\n   */\n  depth;\n  equals(other) {\n    if (other === null) {\n      return false;\n    }\n    return _StateStackImpl._equals(this, other);\n  }\n  static _equals(a, b) {\n    if (a === b) {\n      return true;\n    }\n    if (!this._structuralEquals(a, b)) {\n      return false;\n    }\n    return AttributedScopeStack.equals(a.contentNameScopesList, b.contentNameScopesList);\n  }\n  /**\n   * A structural equals check. Does not take into account `scopes`.\n   */\n  static _structuralEquals(a, b) {\n    do {\n      if (a === b) {\n        return true;\n      }\n      if (!a && !b) {\n        return true;\n      }\n      if (!a || !b) {\n        return false;\n      }\n      if (a.depth !== b.depth || a.ruleId !== b.ruleId || a.endRule !== b.endRule) {\n        return false;\n      }\n      a = a.parent;\n      b = b.parent;\n    } while (true);\n  }\n  clone() {\n    return this;\n  }\n  static _reset(el) {\n    while (el) {\n      el._enterPos = -1;\n      el._anchorPos = -1;\n      el = el.parent;\n    }\n  }\n  reset() {\n    _StateStackImpl._reset(this);\n  }\n  pop() {\n    return this.parent;\n  }\n  safePop() {\n    if (this.parent) {\n      return this.parent;\n    }\n    return this;\n  }\n  push(ruleId, enterPos, anchorPos, beginRuleCapturedEOL, endRule, nameScopesList, contentNameScopesList) {\n    return new _StateStackImpl(\n      this,\n      ruleId,\n      enterPos,\n      anchorPos,\n      beginRuleCapturedEOL,\n      endRule,\n      nameScopesList,\n      contentNameScopesList\n    );\n  }\n  getEnterPos() {\n    return this._enterPos;\n  }\n  getAnchorPos() {\n    return this._anchorPos;\n  }\n  getRule(grammar) {\n    return grammar.getRule(this.ruleId);\n  }\n  toString() {\n    const r = [];\n    this._writeString(r, 0);\n    return \"[\" + r.join(\",\") + \"]\";\n  }\n  _writeString(res, outIndex) {\n    if (this.parent) {\n      outIndex = this.parent._writeString(res, outIndex);\n    }\n    res[outIndex++] = `(${this.ruleId}, ${this.nameScopesList?.toString()}, ${this.contentNameScopesList?.toString()})`;\n    return outIndex;\n  }\n  withContentNameScopesList(contentNameScopeStack) {\n    if (this.contentNameScopesList === contentNameScopeStack) {\n      return this;\n    }\n    return this.parent.push(\n      this.ruleId,\n      this._enterPos,\n      this._anchorPos,\n      this.beginRuleCapturedEOL,\n      this.endRule,\n      this.nameScopesList,\n      contentNameScopeStack\n    );\n  }\n  withEndRule(endRule) {\n    if (this.endRule === endRule) {\n      return this;\n    }\n    return new _StateStackImpl(\n      this.parent,\n      this.ruleId,\n      this._enterPos,\n      this._anchorPos,\n      this.beginRuleCapturedEOL,\n      endRule,\n      this.nameScopesList,\n      this.contentNameScopesList\n    );\n  }\n  // Used to warn of endless loops\n  hasSameRuleAs(other) {\n    let el = this;\n    while (el && el._enterPos === other._enterPos) {\n      if (el.ruleId === other.ruleId) {\n        return true;\n      }\n      el = el.parent;\n    }\n    return false;\n  }\n  toStateStackFrame() {\n    return {\n      ruleId: ruleIdToNumber(this.ruleId),\n      beginRuleCapturedEOL: this.beginRuleCapturedEOL,\n      endRule: this.endRule,\n      nameScopesList: this.nameScopesList?.getExtensionIfDefined(this.parent?.nameScopesList ?? null) ?? [],\n      contentNameScopesList: this.contentNameScopesList?.getExtensionIfDefined(this.nameScopesList) ?? []\n    };\n  }\n  static pushFrame(self, frame) {\n    const namesScopeList = AttributedScopeStack.fromExtension(self?.nameScopesList ?? null, frame.nameScopesList);\n    return new _StateStackImpl(\n      self,\n      ruleIdFromNumber(frame.ruleId),\n      frame.enterPos ?? -1,\n      frame.anchorPos ?? -1,\n      frame.beginRuleCapturedEOL,\n      frame.endRule,\n      namesScopeList,\n      AttributedScopeStack.fromExtension(namesScopeList, frame.contentNameScopesList)\n    );\n  }\n};\nvar BalancedBracketSelectors = class {\n  balancedBracketScopes;\n  unbalancedBracketScopes;\n  allowAny = false;\n  constructor(balancedBracketScopes, unbalancedBracketScopes) {\n    this.balancedBracketScopes = balancedBracketScopes.flatMap(\n      (selector) => {\n        if (selector === \"*\") {\n          this.allowAny = true;\n          return [];\n        }\n        return createMatchers(selector, nameMatcher).map((m) => m.matcher);\n      }\n    );\n    this.unbalancedBracketScopes = unbalancedBracketScopes.flatMap(\n      (selector) => createMatchers(selector, nameMatcher).map((m) => m.matcher)\n    );\n  }\n  get matchesAlways() {\n    return this.allowAny && this.unbalancedBracketScopes.length === 0;\n  }\n  get matchesNever() {\n    return this.balancedBracketScopes.length === 0 && !this.allowAny;\n  }\n  match(scopes) {\n    for (const excluder of this.unbalancedBracketScopes) {\n      if (excluder(scopes)) {\n        return false;\n      }\n    }\n    for (const includer of this.balancedBracketScopes) {\n      if (includer(scopes)) {\n        return true;\n      }\n    }\n    return this.allowAny;\n  }\n};\nvar LineTokens = class {\n  constructor(emitBinaryTokens, lineText, tokenTypeOverrides, balancedBracketSelectors) {\n    this.balancedBracketSelectors = balancedBracketSelectors;\n    this._emitBinaryTokens = emitBinaryTokens;\n    this._tokenTypeOverrides = tokenTypeOverrides;\n    if (false) {\n      this._lineText = lineText;\n    } else {\n      this._lineText = null;\n    }\n    this._tokens = [];\n    this._binaryTokens = [];\n    this._lastTokenEndIndex = 0;\n  }\n  _emitBinaryTokens;\n  /**\n   * defined only if `false`.\n   */\n  _lineText;\n  /**\n   * used only if `_emitBinaryTokens` is false.\n   */\n  _tokens;\n  /**\n   * used only if `_emitBinaryTokens` is true.\n   */\n  _binaryTokens;\n  _lastTokenEndIndex;\n  _tokenTypeOverrides;\n  produce(stack, endIndex) {\n    this.produceFromScopes(stack.contentNameScopesList, endIndex);\n  }\n  produceFromScopes(scopesList, endIndex) {\n    if (this._lastTokenEndIndex >= endIndex) {\n      return;\n    }\n    if (this._emitBinaryTokens) {\n      let metadata = scopesList?.tokenAttributes ?? 0;\n      let containsBalancedBrackets = false;\n      if (this.balancedBracketSelectors?.matchesAlways) {\n        containsBalancedBrackets = true;\n      }\n      if (this._tokenTypeOverrides.length > 0 || this.balancedBracketSelectors && !this.balancedBracketSelectors.matchesAlways && !this.balancedBracketSelectors.matchesNever) {\n        const scopes2 = scopesList?.getScopeNames() ?? [];\n        for (const tokenType of this._tokenTypeOverrides) {\n          if (tokenType.matcher(scopes2)) {\n            metadata = EncodedTokenMetadata.set(\n              metadata,\n              0,\n              toOptionalTokenType(tokenType.type),\n              null,\n              -1 /* NotSet */,\n              0,\n              0\n            );\n          }\n        }\n        if (this.balancedBracketSelectors) {\n          containsBalancedBrackets = this.balancedBracketSelectors.match(scopes2);\n        }\n      }\n      if (containsBalancedBrackets) {\n        metadata = EncodedTokenMetadata.set(\n          metadata,\n          0,\n          8 /* NotSet */,\n          containsBalancedBrackets,\n          -1 /* NotSet */,\n          0,\n          0\n        );\n      }\n      if (this._binaryTokens.length > 0 && this._binaryTokens[this._binaryTokens.length - 1] === metadata) {\n        this._lastTokenEndIndex = endIndex;\n        return;\n      }\n      this._binaryTokens.push(this._lastTokenEndIndex);\n      this._binaryTokens.push(metadata);\n      this._lastTokenEndIndex = endIndex;\n      return;\n    }\n    const scopes = scopesList?.getScopeNames() ?? [];\n    this._tokens.push({\n      startIndex: this._lastTokenEndIndex,\n      endIndex,\n      // value: lineText.substring(lastTokenEndIndex, endIndex),\n      scopes\n    });\n    this._lastTokenEndIndex = endIndex;\n  }\n  getResult(stack, lineLength) {\n    if (this._tokens.length > 0 && this._tokens[this._tokens.length - 1].startIndex === lineLength - 1) {\n      this._tokens.pop();\n    }\n    if (this._tokens.length === 0) {\n      this._lastTokenEndIndex = -1;\n      this.produce(stack, lineLength);\n      this._tokens[this._tokens.length - 1].startIndex = 0;\n    }\n    return this._tokens;\n  }\n  getBinaryResult(stack, lineLength) {\n    if (this._binaryTokens.length > 0 && this._binaryTokens[this._binaryTokens.length - 2] === lineLength - 1) {\n      this._binaryTokens.pop();\n      this._binaryTokens.pop();\n    }\n    if (this._binaryTokens.length === 0) {\n      this._lastTokenEndIndex = -1;\n      this.produce(stack, lineLength);\n      this._binaryTokens[this._binaryTokens.length - 2] = 0;\n    }\n    const result = new Uint32Array(this._binaryTokens.length);\n    for (let i = 0, len = this._binaryTokens.length; i < len; i++) {\n      result[i] = this._binaryTokens[i];\n    }\n    return result;\n  }\n};\n\n// src/registry.ts\nvar SyncRegistry = class {\n  constructor(theme, _onigLib) {\n    this._onigLib = _onigLib;\n    this._theme = theme;\n  }\n  _grammars = /* @__PURE__ */ new Map();\n  _rawGrammars = /* @__PURE__ */ new Map();\n  _injectionGrammars = /* @__PURE__ */ new Map();\n  _theme;\n  dispose() {\n    for (const grammar of this._grammars.values()) {\n      grammar.dispose();\n    }\n  }\n  setTheme(theme) {\n    this._theme = theme;\n  }\n  getColorMap() {\n    return this._theme.getColorMap();\n  }\n  /**\n   * Add `grammar` to registry and return a list of referenced scope names\n   */\n  addGrammar(grammar, injectionScopeNames) {\n    this._rawGrammars.set(grammar.scopeName, grammar);\n    if (injectionScopeNames) {\n      this._injectionGrammars.set(grammar.scopeName, injectionScopeNames);\n    }\n  }\n  /**\n   * Lookup a raw grammar.\n   */\n  lookup(scopeName) {\n    return this._rawGrammars.get(scopeName);\n  }\n  /**\n   * Returns the injections for the given grammar\n   */\n  injections(targetScope) {\n    return this._injectionGrammars.get(targetScope);\n  }\n  /**\n   * Get the default theme settings\n   */\n  getDefaults() {\n    return this._theme.getDefaults();\n  }\n  /**\n   * Match a scope in the theme.\n   */\n  themeMatch(scopePath) {\n    return this._theme.match(scopePath);\n  }\n  /**\n   * Lookup a grammar.\n   */\n  grammarForScopeName(scopeName, initialLanguage, embeddedLanguages, tokenTypes, balancedBracketSelectors) {\n    if (!this._grammars.has(scopeName)) {\n      let rawGrammar = this._rawGrammars.get(scopeName);\n      if (!rawGrammar) {\n        return null;\n      }\n      this._grammars.set(scopeName, createGrammar(\n        scopeName,\n        rawGrammar,\n        initialLanguage,\n        embeddedLanguages,\n        tokenTypes,\n        balancedBracketSelectors,\n        this,\n        this._onigLib\n      ));\n    }\n    return this._grammars.get(scopeName);\n  }\n};\n\n// src/index.ts\nvar Registry = class {\n  _options;\n  _syncRegistry;\n  _ensureGrammarCache;\n  constructor(options) {\n    this._options = options;\n    this._syncRegistry = new SyncRegistry(\n      Theme.createFromRawTheme(options.theme, options.colorMap),\n      options.onigLib\n    );\n    this._ensureGrammarCache = /* @__PURE__ */ new Map();\n  }\n  dispose() {\n    this._syncRegistry.dispose();\n  }\n  /**\n   * Change the theme. Once called, no previous `ruleStack` should be used anymore.\n   */\n  setTheme(theme, colorMap) {\n    this._syncRegistry.setTheme(Theme.createFromRawTheme(theme, colorMap));\n  }\n  /**\n   * Returns a lookup array for color ids.\n   */\n  getColorMap() {\n    return this._syncRegistry.getColorMap();\n  }\n  /**\n   * Load the grammar for `scopeName` and all referenced included grammars asynchronously.\n   * Please do not use language id 0.\n   */\n  loadGrammarWithEmbeddedLanguages(initialScopeName, initialLanguage, embeddedLanguages) {\n    return this.loadGrammarWithConfiguration(initialScopeName, initialLanguage, { embeddedLanguages });\n  }\n  /**\n   * Load the grammar for `scopeName` and all referenced included grammars asynchronously.\n   * Please do not use language id 0.\n   */\n  loadGrammarWithConfiguration(initialScopeName, initialLanguage, configuration) {\n    return this._loadGrammar(\n      initialScopeName,\n      initialLanguage,\n      configuration.embeddedLanguages,\n      configuration.tokenTypes,\n      new BalancedBracketSelectors(\n        configuration.balancedBracketSelectors || [],\n        configuration.unbalancedBracketSelectors || []\n      )\n    );\n  }\n  /**\n   * Load the grammar for `scopeName` and all referenced included grammars asynchronously.\n   */\n  loadGrammar(initialScopeName) {\n    return this._loadGrammar(initialScopeName, 0, null, null, null);\n  }\n  _loadGrammar(initialScopeName, initialLanguage, embeddedLanguages, tokenTypes, balancedBracketSelectors) {\n    const dependencyProcessor = new ScopeDependencyProcessor(this._syncRegistry, initialScopeName);\n    while (dependencyProcessor.Q.length > 0) {\n      dependencyProcessor.Q.map((request) => this._loadSingleGrammar(request.scopeName));\n      dependencyProcessor.processQueue();\n    }\n    return this._grammarForScopeName(\n      initialScopeName,\n      initialLanguage,\n      embeddedLanguages,\n      tokenTypes,\n      balancedBracketSelectors\n    );\n  }\n  _loadSingleGrammar(scopeName) {\n    if (!this._ensureGrammarCache.has(scopeName)) {\n      this._doLoadSingleGrammar(scopeName);\n      this._ensureGrammarCache.set(scopeName, true);\n    }\n  }\n  _doLoadSingleGrammar(scopeName) {\n    const grammar = this._options.loadGrammar(scopeName);\n    if (grammar) {\n      const injections = typeof this._options.getInjections === \"function\" ? this._options.getInjections(scopeName) : void 0;\n      this._syncRegistry.addGrammar(grammar, injections);\n    }\n  }\n  /**\n   * Adds a rawGrammar.\n   */\n  addGrammar(rawGrammar, injections = [], initialLanguage = 0, embeddedLanguages = null) {\n    this._syncRegistry.addGrammar(rawGrammar, injections);\n    return this._grammarForScopeName(rawGrammar.scopeName, initialLanguage, embeddedLanguages);\n  }\n  /**\n   * Get the grammar for `scopeName`. The grammar must first be created via `loadGrammar` or `addGrammar`.\n   */\n  _grammarForScopeName(scopeName, initialLanguage = 0, embeddedLanguages = null, tokenTypes = null, balancedBracketSelectors = null) {\n    return this._syncRegistry.grammarForScopeName(\n      scopeName,\n      initialLanguage,\n      embeddedLanguages,\n      tokenTypes,\n      balancedBracketSelectors\n    );\n  }\n};\nvar INITIAL = StateStackImpl.NULL;\nexport {\n  EncodedTokenMetadata,\n  FindOption,\n  FontStyle,\n  INITIAL,\n  Registry,\n  Theme,\n  disposeOnigString\n};\n", "import { ShikiError as ShikiError$1 } from '@shikijs/types';\nexport * from '@shikijs/types';\nimport { FontStyle, INITIAL, EncodedTokenMetadata, Registry as Registry$1, Theme } from '@shikijs/vscode-textmate';\nimport { toHtml } from 'hast-util-to-html';\n\nfunction resolveColorReplacements(theme, options) {\n  const replacements = typeof theme === \"string\" ? {} : { ...theme.colorReplacements };\n  const themeName = typeof theme === \"string\" ? theme : theme.name;\n  for (const [key, value] of Object.entries(options?.colorReplacements || {})) {\n    if (typeof value === \"string\")\n      replacements[key] = value;\n    else if (key === themeName)\n      Object.assign(replacements, value);\n  }\n  return replacements;\n}\nfunction applyColorReplacements(color, replacements) {\n  if (!color)\n    return color;\n  return replacements?.[color?.toLowerCase()] || color;\n}\n\nfunction toArray(x) {\n  return Array.isArray(x) ? x : [x];\n}\nasync function normalizeGetter(p) {\n  return Promise.resolve(typeof p === \"function\" ? p() : p).then((r) => r.default || r);\n}\nfunction isPlainLang(lang) {\n  return !lang || [\"plaintext\", \"txt\", \"text\", \"plain\"].includes(lang);\n}\nfunction isSpecialLang(lang) {\n  return lang === \"ansi\" || isPlainLang(lang);\n}\nfunction isNoneTheme(theme) {\n  return theme === \"none\";\n}\nfunction isSpecialTheme(theme) {\n  return isNoneTheme(theme);\n}\n\nfunction addClassToHast(node, className) {\n  if (!className)\n    return node;\n  node.properties ||= {};\n  node.properties.class ||= [];\n  if (typeof node.properties.class === \"string\")\n    node.properties.class = node.properties.class.split(/\\s+/g);\n  if (!Array.isArray(node.properties.class))\n    node.properties.class = [];\n  const targets = Array.isArray(className) ? className : className.split(/\\s+/g);\n  for (const c of targets) {\n    if (c && !node.properties.class.includes(c))\n      node.properties.class.push(c);\n  }\n  return node;\n}\n\nfunction splitLines(code, preserveEnding = false) {\n  if (code.length === 0) {\n    return [[\"\", 0]];\n  }\n  const parts = code.split(/(\\r?\\n)/g);\n  let index = 0;\n  const lines = [];\n  for (let i = 0; i < parts.length; i += 2) {\n    const line = preserveEnding ? parts[i] + (parts[i + 1] || \"\") : parts[i];\n    lines.push([line, index]);\n    index += parts[i].length;\n    index += parts[i + 1]?.length || 0;\n  }\n  return lines;\n}\nfunction createPositionConverter(code) {\n  const lines = splitLines(code, true).map(([line]) => line);\n  function indexToPos(index) {\n    if (index === code.length) {\n      return {\n        line: lines.length - 1,\n        character: lines[lines.length - 1].length\n      };\n    }\n    let character = index;\n    let line = 0;\n    for (const lineText of lines) {\n      if (character < lineText.length)\n        break;\n      character -= lineText.length;\n      line++;\n    }\n    return { line, character };\n  }\n  function posToIndex(line, character) {\n    let index = 0;\n    for (let i = 0; i < line; i++)\n      index += lines[i].length;\n    index += character;\n    return index;\n  }\n  return {\n    lines,\n    indexToPos,\n    posToIndex\n  };\n}\nfunction guessEmbeddedLanguages(code, _lang, highlighter) {\n  const langs = /* @__PURE__ */ new Set();\n  for (const match of code.matchAll(/:?lang=[\"']([^\"']+)[\"']/g)) {\n    const lang = match[1].toLowerCase().trim();\n    if (lang)\n      langs.add(lang);\n  }\n  for (const match of code.matchAll(/(?:```|~~~)([\\w-]+)/g)) {\n    const lang = match[1].toLowerCase().trim();\n    if (lang)\n      langs.add(lang);\n  }\n  for (const match of code.matchAll(/\\\\begin\\{([\\w-]+)\\}/g)) {\n    const lang = match[1].toLowerCase().trim();\n    if (lang)\n      langs.add(lang);\n  }\n  for (const match of code.matchAll(/<script\\s+(?:type|lang)=[\"']([^\"']+)[\"']/gi)) {\n    const fullType = match[1].toLowerCase().trim();\n    const lang = fullType.includes(\"/\") ? fullType.split(\"/\").pop() : fullType;\n    if (lang)\n      langs.add(lang);\n  }\n  if (!highlighter)\n    return Array.from(langs);\n  const bundle = highlighter.getBundledLanguages();\n  return Array.from(langs).filter((l) => l && bundle[l]);\n}\n\nconst DEFAULT_COLOR_LIGHT_DARK = \"light-dark()\";\nconst COLOR_KEYS = [\"color\", \"background-color\"];\n\nfunction splitToken(token, offsets) {\n  let lastOffset = 0;\n  const tokens = [];\n  for (const offset of offsets) {\n    if (offset > lastOffset) {\n      tokens.push({\n        ...token,\n        content: token.content.slice(lastOffset, offset),\n        offset: token.offset + lastOffset\n      });\n    }\n    lastOffset = offset;\n  }\n  if (lastOffset < token.content.length) {\n    tokens.push({\n      ...token,\n      content: token.content.slice(lastOffset),\n      offset: token.offset + lastOffset\n    });\n  }\n  return tokens;\n}\nfunction splitTokens(tokens, breakpoints) {\n  const sorted = Array.from(breakpoints instanceof Set ? breakpoints : new Set(breakpoints)).sort((a, b) => a - b);\n  if (!sorted.length)\n    return tokens;\n  return tokens.map((line) => {\n    return line.flatMap((token) => {\n      const breakpointsInToken = sorted.filter((i) => token.offset < i && i < token.offset + token.content.length).map((i) => i - token.offset).sort((a, b) => a - b);\n      if (!breakpointsInToken.length)\n        return token;\n      return splitToken(token, breakpointsInToken);\n    });\n  });\n}\nfunction flatTokenVariants(merged, variantsOrder, cssVariablePrefix, defaultColor, colorsRendering = \"css-vars\") {\n  const token = {\n    content: merged.content,\n    explanation: merged.explanation,\n    offset: merged.offset\n  };\n  const styles = variantsOrder.map((t) => getTokenStyleObject(merged.variants[t]));\n  const styleKeys = new Set(styles.flatMap((t) => Object.keys(t)));\n  const mergedStyles = {};\n  const varKey = (idx, key) => {\n    const keyName = key === \"color\" ? \"\" : key === \"background-color\" ? \"-bg\" : `-${key}`;\n    return cssVariablePrefix + variantsOrder[idx] + (key === \"color\" ? \"\" : keyName);\n  };\n  styles.forEach((cur, idx) => {\n    for (const key of styleKeys) {\n      const value = cur[key] || \"inherit\";\n      if (idx === 0 && defaultColor && COLOR_KEYS.includes(key)) {\n        if (defaultColor === DEFAULT_COLOR_LIGHT_DARK && styles.length > 1) {\n          const lightIndex = variantsOrder.findIndex((t) => t === \"light\");\n          const darkIndex = variantsOrder.findIndex((t) => t === \"dark\");\n          if (lightIndex === -1 || darkIndex === -1)\n            throw new ShikiError$1('When using `defaultColor: \"light-dark()\"`, you must provide both `light` and `dark` themes');\n          const lightValue = styles[lightIndex][key] || \"inherit\";\n          const darkValue = styles[darkIndex][key] || \"inherit\";\n          mergedStyles[key] = `light-dark(${lightValue}, ${darkValue})`;\n          if (colorsRendering === \"css-vars\")\n            mergedStyles[varKey(idx, key)] = value;\n        } else {\n          mergedStyles[key] = value;\n        }\n      } else {\n        if (colorsRendering === \"css-vars\")\n          mergedStyles[varKey(idx, key)] = value;\n      }\n    }\n  });\n  token.htmlStyle = mergedStyles;\n  return token;\n}\nfunction getTokenStyleObject(token) {\n  const styles = {};\n  if (token.color)\n    styles.color = token.color;\n  if (token.bgColor)\n    styles[\"background-color\"] = token.bgColor;\n  if (token.fontStyle) {\n    if (token.fontStyle & FontStyle.Italic)\n      styles[\"font-style\"] = \"italic\";\n    if (token.fontStyle & FontStyle.Bold)\n      styles[\"font-weight\"] = \"bold\";\n    const decorations = [];\n    if (token.fontStyle & FontStyle.Underline)\n      decorations.push(\"underline\");\n    if (token.fontStyle & FontStyle.Strikethrough)\n      decorations.push(\"line-through\");\n    if (decorations.length)\n      styles[\"text-decoration\"] = decorations.join(\" \");\n  }\n  return styles;\n}\nfunction stringifyTokenStyle(token) {\n  if (typeof token === \"string\")\n    return token;\n  return Object.entries(token).map(([key, value]) => `${key}:${value}`).join(\";\");\n}\n\nconst _grammarStateMap = /* @__PURE__ */ new WeakMap();\nfunction setLastGrammarStateToMap(keys, state) {\n  _grammarStateMap.set(keys, state);\n}\nfunction getLastGrammarStateFromMap(keys) {\n  return _grammarStateMap.get(keys);\n}\nclass GrammarState {\n  /**\n   * Theme to Stack mapping\n   */\n  _stacks = {};\n  lang;\n  get themes() {\n    return Object.keys(this._stacks);\n  }\n  get theme() {\n    return this.themes[0];\n  }\n  get _stack() {\n    return this._stacks[this.theme];\n  }\n  /**\n   * Static method to create a initial grammar state.\n   */\n  static initial(lang, themes) {\n    return new GrammarState(\n      Object.fromEntries(toArray(themes).map((theme) => [theme, INITIAL])),\n      lang\n    );\n  }\n  constructor(...args) {\n    if (args.length === 2) {\n      const [stacksMap, lang] = args;\n      this.lang = lang;\n      this._stacks = stacksMap;\n    } else {\n      const [stack, lang, theme] = args;\n      this.lang = lang;\n      this._stacks = { [theme]: stack };\n    }\n  }\n  /**\n   * Get the internal stack object.\n   * @internal\n   */\n  getInternalStack(theme = this.theme) {\n    return this._stacks[theme];\n  }\n  getScopes(theme = this.theme) {\n    return getScopes(this._stacks[theme]);\n  }\n  toJSON() {\n    return {\n      lang: this.lang,\n      theme: this.theme,\n      themes: this.themes,\n      scopes: this.getScopes()\n    };\n  }\n}\nfunction getScopes(stack) {\n  const scopes = [];\n  const visited = /* @__PURE__ */ new Set();\n  function pushScope(stack2) {\n    if (visited.has(stack2))\n      return;\n    visited.add(stack2);\n    const name = stack2?.nameScopesList?.scopeName;\n    if (name)\n      scopes.push(name);\n    if (stack2.parent)\n      pushScope(stack2.parent);\n  }\n  pushScope(stack);\n  return scopes;\n}\nfunction getGrammarStack(state, theme) {\n  if (!(state instanceof GrammarState))\n    throw new ShikiError$1(\"Invalid grammar state\");\n  return state.getInternalStack(theme);\n}\n\nfunction transformerDecorations() {\n  const map = /* @__PURE__ */ new WeakMap();\n  function getContext(shiki) {\n    if (!map.has(shiki.meta)) {\n      let normalizePosition = function(p) {\n        if (typeof p === \"number\") {\n          if (p < 0 || p > shiki.source.length)\n            throw new ShikiError$1(`Invalid decoration offset: ${p}. Code length: ${shiki.source.length}`);\n          return {\n            ...converter.indexToPos(p),\n            offset: p\n          };\n        } else {\n          const line = converter.lines[p.line];\n          if (line === void 0)\n            throw new ShikiError$1(`Invalid decoration position ${JSON.stringify(p)}. Lines length: ${converter.lines.length}`);\n          let character = p.character;\n          if (character < 0)\n            character = line.length + character;\n          if (character < 0 || character > line.length)\n            throw new ShikiError$1(`Invalid decoration position ${JSON.stringify(p)}. Line ${p.line} length: ${line.length}`);\n          return {\n            ...p,\n            character,\n            offset: converter.posToIndex(p.line, character)\n          };\n        }\n      };\n      const converter = createPositionConverter(shiki.source);\n      const decorations = (shiki.options.decorations || []).map((d) => ({\n        ...d,\n        start: normalizePosition(d.start),\n        end: normalizePosition(d.end)\n      }));\n      verifyIntersections(decorations);\n      map.set(shiki.meta, {\n        decorations,\n        converter,\n        source: shiki.source\n      });\n    }\n    return map.get(shiki.meta);\n  }\n  return {\n    name: \"shiki:decorations\",\n    tokens(tokens) {\n      if (!this.options.decorations?.length)\n        return;\n      const ctx = getContext(this);\n      const breakpoints = ctx.decorations.flatMap((d) => [d.start.offset, d.end.offset]);\n      const splitted = splitTokens(tokens, breakpoints);\n      return splitted;\n    },\n    code(codeEl) {\n      if (!this.options.decorations?.length)\n        return;\n      const ctx = getContext(this);\n      const lines = Array.from(codeEl.children).filter((i) => i.type === \"element\" && i.tagName === \"span\");\n      if (lines.length !== ctx.converter.lines.length)\n        throw new ShikiError$1(`Number of lines in code element (${lines.length}) does not match the number of lines in the source (${ctx.converter.lines.length}). Failed to apply decorations.`);\n      function applyLineSection(line, start, end, decoration) {\n        const lineEl = lines[line];\n        let text = \"\";\n        let startIndex = -1;\n        let endIndex = -1;\n        if (start === 0)\n          startIndex = 0;\n        if (end === 0)\n          endIndex = 0;\n        if (end === Number.POSITIVE_INFINITY)\n          endIndex = lineEl.children.length;\n        if (startIndex === -1 || endIndex === -1) {\n          for (let i = 0; i < lineEl.children.length; i++) {\n            text += stringify(lineEl.children[i]);\n            if (startIndex === -1 && text.length === start)\n              startIndex = i + 1;\n            if (endIndex === -1 && text.length === end)\n              endIndex = i + 1;\n          }\n        }\n        if (startIndex === -1)\n          throw new ShikiError$1(`Failed to find start index for decoration ${JSON.stringify(decoration.start)}`);\n        if (endIndex === -1)\n          throw new ShikiError$1(`Failed to find end index for decoration ${JSON.stringify(decoration.end)}`);\n        const children = lineEl.children.slice(startIndex, endIndex);\n        if (!decoration.alwaysWrap && children.length === lineEl.children.length) {\n          applyDecoration(lineEl, decoration, \"line\");\n        } else if (!decoration.alwaysWrap && children.length === 1 && children[0].type === \"element\") {\n          applyDecoration(children[0], decoration, \"token\");\n        } else {\n          const wrapper = {\n            type: \"element\",\n            tagName: \"span\",\n            properties: {},\n            children\n          };\n          applyDecoration(wrapper, decoration, \"wrapper\");\n          lineEl.children.splice(startIndex, children.length, wrapper);\n        }\n      }\n      function applyLine(line, decoration) {\n        lines[line] = applyDecoration(lines[line], decoration, \"line\");\n      }\n      function applyDecoration(el, decoration, type) {\n        const properties = decoration.properties || {};\n        const transform = decoration.transform || ((i) => i);\n        el.tagName = decoration.tagName || \"span\";\n        el.properties = {\n          ...el.properties,\n          ...properties,\n          class: el.properties.class\n        };\n        if (decoration.properties?.class)\n          addClassToHast(el, decoration.properties.class);\n        el = transform(el, type) || el;\n        return el;\n      }\n      const lineApplies = [];\n      const sorted = ctx.decorations.sort((a, b) => b.start.offset - a.start.offset || a.end.offset - b.end.offset);\n      for (const decoration of sorted) {\n        const { start, end } = decoration;\n        if (start.line === end.line) {\n          applyLineSection(start.line, start.character, end.character, decoration);\n        } else if (start.line < end.line) {\n          applyLineSection(start.line, start.character, Number.POSITIVE_INFINITY, decoration);\n          for (let i = start.line + 1; i < end.line; i++)\n            lineApplies.unshift(() => applyLine(i, decoration));\n          applyLineSection(end.line, 0, end.character, decoration);\n        }\n      }\n      lineApplies.forEach((i) => i());\n    }\n  };\n}\nfunction verifyIntersections(items) {\n  for (let i = 0; i < items.length; i++) {\n    const foo = items[i];\n    if (foo.start.offset > foo.end.offset)\n      throw new ShikiError$1(`Invalid decoration range: ${JSON.stringify(foo.start)} - ${JSON.stringify(foo.end)}`);\n    for (let j = i + 1; j < items.length; j++) {\n      const bar = items[j];\n      const isFooHasBarStart = foo.start.offset <= bar.start.offset && bar.start.offset < foo.end.offset;\n      const isFooHasBarEnd = foo.start.offset < bar.end.offset && bar.end.offset <= foo.end.offset;\n      const isBarHasFooStart = bar.start.offset <= foo.start.offset && foo.start.offset < bar.end.offset;\n      const isBarHasFooEnd = bar.start.offset < foo.end.offset && foo.end.offset <= bar.end.offset;\n      if (isFooHasBarStart || isFooHasBarEnd || isBarHasFooStart || isBarHasFooEnd) {\n        if (isFooHasBarStart && isFooHasBarEnd)\n          continue;\n        if (isBarHasFooStart && isBarHasFooEnd)\n          continue;\n        if (isBarHasFooStart && foo.start.offset === foo.end.offset)\n          continue;\n        if (isFooHasBarEnd && bar.start.offset === bar.end.offset)\n          continue;\n        throw new ShikiError$1(`Decorations ${JSON.stringify(foo.start)} and ${JSON.stringify(bar.start)} intersect.`);\n      }\n    }\n  }\n}\nfunction stringify(el) {\n  if (el.type === \"text\")\n    return el.value;\n  if (el.type === \"element\")\n    return el.children.map(stringify).join(\"\");\n  return \"\";\n}\n\nconst builtInTransformers = [\n  /* @__PURE__ */ transformerDecorations()\n];\nfunction getTransformers(options) {\n  const transformers = sortTransformersByEnforcement(options.transformers || []);\n  return [\n    ...transformers.pre,\n    ...transformers.normal,\n    ...transformers.post,\n    ...builtInTransformers\n  ];\n}\nfunction sortTransformersByEnforcement(transformers) {\n  const pre = [];\n  const post = [];\n  const normal = [];\n  for (const transformer of transformers) {\n    switch (transformer.enforce) {\n      case \"pre\":\n        pre.push(transformer);\n        break;\n      case \"post\":\n        post.push(transformer);\n        break;\n      default:\n        normal.push(transformer);\n    }\n  }\n  return { pre, post, normal };\n}\n\n// src/colors.ts\nvar namedColors = [\n  \"black\",\n  \"red\",\n  \"green\",\n  \"yellow\",\n  \"blue\",\n  \"magenta\",\n  \"cyan\",\n  \"white\",\n  \"brightBlack\",\n  \"brightRed\",\n  \"brightGreen\",\n  \"brightYellow\",\n  \"brightBlue\",\n  \"brightMagenta\",\n  \"brightCyan\",\n  \"brightWhite\"\n];\n\n// src/decorations.ts\nvar decorations = {\n  1: \"bold\",\n  2: \"dim\",\n  3: \"italic\",\n  4: \"underline\",\n  7: \"reverse\",\n  8: \"hidden\",\n  9: \"strikethrough\"\n};\n\n// src/parser.ts\nfunction findSequence(value, position) {\n  const nextEscape = value.indexOf(\"\\x1B\", position);\n  if (nextEscape !== -1) {\n    if (value[nextEscape + 1] === \"[\") {\n      const nextClose = value.indexOf(\"m\", nextEscape);\n      if (nextClose !== -1) {\n        return {\n          sequence: value.substring(nextEscape + 2, nextClose).split(\";\"),\n          startPosition: nextEscape,\n          position: nextClose + 1\n        };\n      }\n    }\n  }\n  return {\n    position: value.length\n  };\n}\nfunction parseColor(sequence) {\n  const colorMode = sequence.shift();\n  if (colorMode === \"2\") {\n    const rgb = sequence.splice(0, 3).map((x) => Number.parseInt(x));\n    if (rgb.length !== 3 || rgb.some((x) => Number.isNaN(x)))\n      return;\n    return {\n      type: \"rgb\",\n      rgb\n    };\n  } else if (colorMode === \"5\") {\n    const index = sequence.shift();\n    if (index) {\n      return { type: \"table\", index: Number(index) };\n    }\n  }\n}\nfunction parseSequence(sequence) {\n  const commands = [];\n  while (sequence.length > 0) {\n    const code = sequence.shift();\n    if (!code)\n      continue;\n    const codeInt = Number.parseInt(code);\n    if (Number.isNaN(codeInt))\n      continue;\n    if (codeInt === 0) {\n      commands.push({ type: \"resetAll\" });\n    } else if (codeInt <= 9) {\n      const decoration = decorations[codeInt];\n      if (decoration) {\n        commands.push({\n          type: \"setDecoration\",\n          value: decorations[codeInt]\n        });\n      }\n    } else if (codeInt <= 29) {\n      const decoration = decorations[codeInt - 20];\n      if (decoration) {\n        commands.push({\n          type: \"resetDecoration\",\n          value: decoration\n        });\n        if (decoration === \"dim\") {\n          commands.push({\n            type: \"resetDecoration\",\n            value: \"bold\"\n          });\n        }\n      }\n    } else if (codeInt <= 37) {\n      commands.push({\n        type: \"setForegroundColor\",\n        value: { type: \"named\", name: namedColors[codeInt - 30] }\n      });\n    } else if (codeInt === 38) {\n      const color = parseColor(sequence);\n      if (color) {\n        commands.push({\n          type: \"setForegroundColor\",\n          value: color\n        });\n      }\n    } else if (codeInt === 39) {\n      commands.push({\n        type: \"resetForegroundColor\"\n      });\n    } else if (codeInt <= 47) {\n      commands.push({\n        type: \"setBackgroundColor\",\n        value: { type: \"named\", name: namedColors[codeInt - 40] }\n      });\n    } else if (codeInt === 48) {\n      const color = parseColor(sequence);\n      if (color) {\n        commands.push({\n          type: \"setBackgroundColor\",\n          value: color\n        });\n      }\n    } else if (codeInt === 49) {\n      commands.push({\n        type: \"resetBackgroundColor\"\n      });\n    } else if (codeInt === 53) {\n      commands.push({\n        type: \"setDecoration\",\n        value: \"overline\"\n      });\n    } else if (codeInt === 55) {\n      commands.push({\n        type: \"resetDecoration\",\n        value: \"overline\"\n      });\n    } else if (codeInt >= 90 && codeInt <= 97) {\n      commands.push({\n        type: \"setForegroundColor\",\n        value: { type: \"named\", name: namedColors[codeInt - 90 + 8] }\n      });\n    } else if (codeInt >= 100 && codeInt <= 107) {\n      commands.push({\n        type: \"setBackgroundColor\",\n        value: { type: \"named\", name: namedColors[codeInt - 100 + 8] }\n      });\n    }\n  }\n  return commands;\n}\nfunction createAnsiSequenceParser() {\n  let foreground = null;\n  let background = null;\n  let decorations2 = /* @__PURE__ */ new Set();\n  return {\n    parse(value) {\n      const tokens = [];\n      let position = 0;\n      do {\n        const findResult = findSequence(value, position);\n        const text = findResult.sequence ? value.substring(position, findResult.startPosition) : value.substring(position);\n        if (text.length > 0) {\n          tokens.push({\n            value: text,\n            foreground,\n            background,\n            decorations: new Set(decorations2)\n          });\n        }\n        if (findResult.sequence) {\n          const commands = parseSequence(findResult.sequence);\n          for (const styleToken of commands) {\n            if (styleToken.type === \"resetAll\") {\n              foreground = null;\n              background = null;\n              decorations2.clear();\n            } else if (styleToken.type === \"resetForegroundColor\") {\n              foreground = null;\n            } else if (styleToken.type === \"resetBackgroundColor\") {\n              background = null;\n            } else if (styleToken.type === \"resetDecoration\") {\n              decorations2.delete(styleToken.value);\n            }\n          }\n          for (const styleToken of commands) {\n            if (styleToken.type === \"setForegroundColor\") {\n              foreground = styleToken.value;\n            } else if (styleToken.type === \"setBackgroundColor\") {\n              background = styleToken.value;\n            } else if (styleToken.type === \"setDecoration\") {\n              decorations2.add(styleToken.value);\n            }\n          }\n        }\n        position = findResult.position;\n      } while (position < value.length);\n      return tokens;\n    }\n  };\n}\n\n// src/palette.ts\nvar defaultNamedColorsMap = {\n  black: \"#000000\",\n  red: \"#bb0000\",\n  green: \"#00bb00\",\n  yellow: \"#bbbb00\",\n  blue: \"#0000bb\",\n  magenta: \"#ff00ff\",\n  cyan: \"#00bbbb\",\n  white: \"#eeeeee\",\n  brightBlack: \"#555555\",\n  brightRed: \"#ff5555\",\n  brightGreen: \"#00ff00\",\n  brightYellow: \"#ffff55\",\n  brightBlue: \"#5555ff\",\n  brightMagenta: \"#ff55ff\",\n  brightCyan: \"#55ffff\",\n  brightWhite: \"#ffffff\"\n};\nfunction createColorPalette(namedColorsMap = defaultNamedColorsMap) {\n  function namedColor(name) {\n    return namedColorsMap[name];\n  }\n  function rgbColor(rgb) {\n    return `#${rgb.map((x) => Math.max(0, Math.min(x, 255)).toString(16).padStart(2, \"0\")).join(\"\")}`;\n  }\n  let colorTable;\n  function getColorTable() {\n    if (colorTable) {\n      return colorTable;\n    }\n    colorTable = [];\n    for (let i = 0; i < namedColors.length; i++) {\n      colorTable.push(namedColor(namedColors[i]));\n    }\n    let levels = [0, 95, 135, 175, 215, 255];\n    for (let r = 0; r < 6; r++) {\n      for (let g = 0; g < 6; g++) {\n        for (let b = 0; b < 6; b++) {\n          colorTable.push(rgbColor([levels[r], levels[g], levels[b]]));\n        }\n      }\n    }\n    let level = 8;\n    for (let i = 0; i < 24; i++, level += 10) {\n      colorTable.push(rgbColor([level, level, level]));\n    }\n    return colorTable;\n  }\n  function tableColor(index) {\n    return getColorTable()[index];\n  }\n  function value(color) {\n    switch (color.type) {\n      case \"named\":\n        return namedColor(color.name);\n      case \"rgb\":\n        return rgbColor(color.rgb);\n      case \"table\":\n        return tableColor(color.index);\n    }\n  }\n  return {\n    value\n  };\n}\n\nconst defaultAnsiColors = {\n  black: \"#000000\",\n  red: \"#cd3131\",\n  green: \"#0DBC79\",\n  yellow: \"#E5E510\",\n  blue: \"#2472C8\",\n  magenta: \"#BC3FBC\",\n  cyan: \"#11A8CD\",\n  white: \"#E5E5E5\",\n  brightBlack: \"#666666\",\n  brightRed: \"#F14C4C\",\n  brightGreen: \"#23D18B\",\n  brightYellow: \"#F5F543\",\n  brightBlue: \"#3B8EEA\",\n  brightMagenta: \"#D670D6\",\n  brightCyan: \"#29B8DB\",\n  brightWhite: \"#FFFFFF\"\n};\nfunction tokenizeAnsiWithTheme(theme, fileContents, options) {\n  const colorReplacements = resolveColorReplacements(theme, options);\n  const lines = splitLines(fileContents);\n  const ansiPalette = Object.fromEntries(\n    namedColors.map((name) => {\n      const key = `terminal.ansi${name[0].toUpperCase()}${name.substring(1)}`;\n      const themeColor = theme.colors?.[key];\n      return [name, themeColor || defaultAnsiColors[name]];\n    })\n  );\n  const colorPalette = createColorPalette(ansiPalette);\n  const parser = createAnsiSequenceParser();\n  return lines.map(\n    (line) => parser.parse(line[0]).map((token) => {\n      let color;\n      let bgColor;\n      if (token.decorations.has(\"reverse\")) {\n        color = token.background ? colorPalette.value(token.background) : theme.bg;\n        bgColor = token.foreground ? colorPalette.value(token.foreground) : theme.fg;\n      } else {\n        color = token.foreground ? colorPalette.value(token.foreground) : theme.fg;\n        bgColor = token.background ? colorPalette.value(token.background) : void 0;\n      }\n      color = applyColorReplacements(color, colorReplacements);\n      bgColor = applyColorReplacements(bgColor, colorReplacements);\n      if (token.decorations.has(\"dim\"))\n        color = dimColor(color);\n      let fontStyle = FontStyle.None;\n      if (token.decorations.has(\"bold\"))\n        fontStyle |= FontStyle.Bold;\n      if (token.decorations.has(\"italic\"))\n        fontStyle |= FontStyle.Italic;\n      if (token.decorations.has(\"underline\"))\n        fontStyle |= FontStyle.Underline;\n      if (token.decorations.has(\"strikethrough\"))\n        fontStyle |= FontStyle.Strikethrough;\n      return {\n        content: token.value,\n        offset: line[1],\n        // TODO: more accurate offset? might need to fork ansi-sequence-parser\n        color,\n        bgColor,\n        fontStyle\n      };\n    })\n  );\n}\nfunction dimColor(color) {\n  const hexMatch = color.match(/#([0-9a-f]{3,8})/i);\n  if (hexMatch) {\n    const hex = hexMatch[1];\n    if (hex.length === 8) {\n      const alpha = Math.round(Number.parseInt(hex.slice(6, 8), 16) / 2).toString(16).padStart(2, \"0\");\n      return `#${hex.slice(0, 6)}${alpha}`;\n    } else if (hex.length === 6) {\n      return `#${hex}80`;\n    } else if (hex.length === 4) {\n      const r = hex[0];\n      const g = hex[1];\n      const b = hex[2];\n      const a = hex[3];\n      const alpha = Math.round(Number.parseInt(`${a}${a}`, 16) / 2).toString(16).padStart(2, \"0\");\n      return `#${r}${r}${g}${g}${b}${b}${alpha}`;\n    } else if (hex.length === 3) {\n      const r = hex[0];\n      const g = hex[1];\n      const b = hex[2];\n      return `#${r}${r}${g}${g}${b}${b}80`;\n    }\n  }\n  const cssVarMatch = color.match(/var\\((--[\\w-]+-ansi-[\\w-]+)\\)/);\n  if (cssVarMatch)\n    return `var(${cssVarMatch[1]}-dim)`;\n  return color;\n}\n\nfunction codeToTokensBase(internal, code, options = {}) {\n  const {\n    theme: themeName = internal.getLoadedThemes()[0]\n  } = options;\n  const lang = internal.resolveLangAlias(options.lang || \"text\");\n  if (isPlainLang(lang) || isNoneTheme(themeName))\n    return splitLines(code).map((line) => [{ content: line[0], offset: line[1] }]);\n  const { theme, colorMap } = internal.setTheme(themeName);\n  if (lang === \"ansi\")\n    return tokenizeAnsiWithTheme(theme, code, options);\n  const _grammar = internal.getLanguage(options.lang || \"text\");\n  if (options.grammarState) {\n    if (options.grammarState.lang !== _grammar.name) {\n      throw new ShikiError$1(`Grammar state language \"${options.grammarState.lang}\" does not match highlight language \"${_grammar.name}\"`);\n    }\n    if (!options.grammarState.themes.includes(theme.name)) {\n      throw new ShikiError$1(`Grammar state themes \"${options.grammarState.themes}\" do not contain highlight theme \"${theme.name}\"`);\n    }\n  }\n  return tokenizeWithTheme(code, _grammar, theme, colorMap, options);\n}\nfunction getLastGrammarState(...args) {\n  if (args.length === 2) {\n    return getLastGrammarStateFromMap(args[1]);\n  }\n  const [internal, code, options = {}] = args;\n  const {\n    lang = \"text\",\n    theme: themeName = internal.getLoadedThemes()[0]\n  } = options;\n  if (isPlainLang(lang) || isNoneTheme(themeName))\n    throw new ShikiError$1(\"Plain language does not have grammar state\");\n  if (lang === \"ansi\")\n    throw new ShikiError$1(\"ANSI language does not have grammar state\");\n  const { theme, colorMap } = internal.setTheme(themeName);\n  const _grammar = internal.getLanguage(lang);\n  return new GrammarState(\n    _tokenizeWithTheme(code, _grammar, theme, colorMap, options).stateStack,\n    _grammar.name,\n    theme.name\n  );\n}\nfunction tokenizeWithTheme(code, grammar, theme, colorMap, options) {\n  const result = _tokenizeWithTheme(code, grammar, theme, colorMap, options);\n  const grammarState = new GrammarState(\n    result.stateStack,\n    grammar.name,\n    theme.name\n  );\n  setLastGrammarStateToMap(result.tokens, grammarState);\n  return result.tokens;\n}\nfunction _tokenizeWithTheme(code, grammar, theme, colorMap, options) {\n  const colorReplacements = resolveColorReplacements(theme, options);\n  const {\n    tokenizeMaxLineLength = 0,\n    tokenizeTimeLimit = 500\n  } = options;\n  const lines = splitLines(code);\n  let stateStack = options.grammarState ? getGrammarStack(options.grammarState, theme.name) ?? INITIAL : options.grammarContextCode != null ? _tokenizeWithTheme(\n    options.grammarContextCode,\n    grammar,\n    theme,\n    colorMap,\n    {\n      ...options,\n      grammarState: void 0,\n      grammarContextCode: void 0\n    }\n  ).stateStack : INITIAL;\n  let actual = [];\n  const final = [];\n  for (let i = 0, len = lines.length; i < len; i++) {\n    const [line, lineOffset] = lines[i];\n    if (line === \"\") {\n      actual = [];\n      final.push([]);\n      continue;\n    }\n    if (tokenizeMaxLineLength > 0 && line.length >= tokenizeMaxLineLength) {\n      actual = [];\n      final.push([{\n        content: line,\n        offset: lineOffset,\n        color: \"\",\n        fontStyle: 0\n      }]);\n      continue;\n    }\n    let resultWithScopes;\n    let tokensWithScopes;\n    let tokensWithScopesIndex;\n    if (options.includeExplanation) {\n      resultWithScopes = grammar.tokenizeLine(line, stateStack, tokenizeTimeLimit);\n      tokensWithScopes = resultWithScopes.tokens;\n      tokensWithScopesIndex = 0;\n    }\n    const result = grammar.tokenizeLine2(line, stateStack, tokenizeTimeLimit);\n    const tokensLength = result.tokens.length / 2;\n    for (let j = 0; j < tokensLength; j++) {\n      const startIndex = result.tokens[2 * j];\n      const nextStartIndex = j + 1 < tokensLength ? result.tokens[2 * j + 2] : line.length;\n      if (startIndex === nextStartIndex)\n        continue;\n      const metadata = result.tokens[2 * j + 1];\n      const color = applyColorReplacements(\n        colorMap[EncodedTokenMetadata.getForeground(metadata)],\n        colorReplacements\n      );\n      const fontStyle = EncodedTokenMetadata.getFontStyle(metadata);\n      const token = {\n        content: line.substring(startIndex, nextStartIndex),\n        offset: lineOffset + startIndex,\n        color,\n        fontStyle\n      };\n      if (options.includeExplanation) {\n        const themeSettingsSelectors = [];\n        if (options.includeExplanation !== \"scopeName\") {\n          for (const setting of theme.settings) {\n            let selectors;\n            switch (typeof setting.scope) {\n              case \"string\":\n                selectors = setting.scope.split(/,/).map((scope) => scope.trim());\n                break;\n              case \"object\":\n                selectors = setting.scope;\n                break;\n              default:\n                continue;\n            }\n            themeSettingsSelectors.push({\n              settings: setting,\n              selectors: selectors.map((selector) => selector.split(/ /))\n            });\n          }\n        }\n        token.explanation = [];\n        let offset = 0;\n        while (startIndex + offset < nextStartIndex) {\n          const tokenWithScopes = tokensWithScopes[tokensWithScopesIndex];\n          const tokenWithScopesText = line.substring(\n            tokenWithScopes.startIndex,\n            tokenWithScopes.endIndex\n          );\n          offset += tokenWithScopesText.length;\n          token.explanation.push({\n            content: tokenWithScopesText,\n            scopes: options.includeExplanation === \"scopeName\" ? explainThemeScopesNameOnly(\n              tokenWithScopes.scopes\n            ) : explainThemeScopesFull(\n              themeSettingsSelectors,\n              tokenWithScopes.scopes\n            )\n          });\n          tokensWithScopesIndex += 1;\n        }\n      }\n      actual.push(token);\n    }\n    final.push(actual);\n    actual = [];\n    stateStack = result.ruleStack;\n  }\n  return {\n    tokens: final,\n    stateStack\n  };\n}\nfunction explainThemeScopesNameOnly(scopes) {\n  return scopes.map((scope) => ({ scopeName: scope }));\n}\nfunction explainThemeScopesFull(themeSelectors, scopes) {\n  const result = [];\n  for (let i = 0, len = scopes.length; i < len; i++) {\n    const scope = scopes[i];\n    result[i] = {\n      scopeName: scope,\n      themeMatches: explainThemeScope(themeSelectors, scope, scopes.slice(0, i))\n    };\n  }\n  return result;\n}\nfunction matchesOne(selector, scope) {\n  return selector === scope || scope.substring(0, selector.length) === selector && scope[selector.length] === \".\";\n}\nfunction matches(selectors, scope, parentScopes) {\n  if (!matchesOne(selectors[selectors.length - 1], scope))\n    return false;\n  let selectorParentIndex = selectors.length - 2;\n  let parentIndex = parentScopes.length - 1;\n  while (selectorParentIndex >= 0 && parentIndex >= 0) {\n    if (matchesOne(selectors[selectorParentIndex], parentScopes[parentIndex]))\n      selectorParentIndex -= 1;\n    parentIndex -= 1;\n  }\n  if (selectorParentIndex === -1)\n    return true;\n  return false;\n}\nfunction explainThemeScope(themeSettingsSelectors, scope, parentScopes) {\n  const result = [];\n  for (const { selectors, settings } of themeSettingsSelectors) {\n    for (const selectorPieces of selectors) {\n      if (matches(selectorPieces, scope, parentScopes)) {\n        result.push(settings);\n        break;\n      }\n    }\n  }\n  return result;\n}\n\nfunction codeToTokensWithThemes(internal, code, options) {\n  const themes = Object.entries(options.themes).filter((i) => i[1]).map((i) => ({ color: i[0], theme: i[1] }));\n  const themedTokens = themes.map((t) => {\n    const tokens2 = codeToTokensBase(internal, code, {\n      ...options,\n      theme: t.theme\n    });\n    const state = getLastGrammarStateFromMap(tokens2);\n    const theme = typeof t.theme === \"string\" ? t.theme : t.theme.name;\n    return {\n      tokens: tokens2,\n      state,\n      theme\n    };\n  });\n  const tokens = syncThemesTokenization(\n    ...themedTokens.map((i) => i.tokens)\n  );\n  const mergedTokens = tokens[0].map(\n    (line, lineIdx) => line.map((_token, tokenIdx) => {\n      const mergedToken = {\n        content: _token.content,\n        variants: {},\n        offset: _token.offset\n      };\n      if (\"includeExplanation\" in options && options.includeExplanation) {\n        mergedToken.explanation = _token.explanation;\n      }\n      tokens.forEach((t, themeIdx) => {\n        const {\n          content: _,\n          explanation: __,\n          offset: ___,\n          ...styles\n        } = t[lineIdx][tokenIdx];\n        mergedToken.variants[themes[themeIdx].color] = styles;\n      });\n      return mergedToken;\n    })\n  );\n  const mergedGrammarState = themedTokens[0].state ? new GrammarState(\n    Object.fromEntries(themedTokens.map((s) => [s.theme, s.state?.getInternalStack(s.theme)])),\n    themedTokens[0].state.lang\n  ) : void 0;\n  if (mergedGrammarState)\n    setLastGrammarStateToMap(mergedTokens, mergedGrammarState);\n  return mergedTokens;\n}\nfunction syncThemesTokenization(...themes) {\n  const outThemes = themes.map(() => []);\n  const count = themes.length;\n  for (let i = 0; i < themes[0].length; i++) {\n    const lines = themes.map((t) => t[i]);\n    const outLines = outThemes.map(() => []);\n    outThemes.forEach((t, i2) => t.push(outLines[i2]));\n    const indexes = lines.map(() => 0);\n    const current = lines.map((l) => l[0]);\n    while (current.every((t) => t)) {\n      const minLength = Math.min(...current.map((t) => t.content.length));\n      for (let n = 0; n < count; n++) {\n        const token = current[n];\n        if (token.content.length === minLength) {\n          outLines[n].push(token);\n          indexes[n] += 1;\n          current[n] = lines[n][indexes[n]];\n        } else {\n          outLines[n].push({\n            ...token,\n            content: token.content.slice(0, minLength)\n          });\n          current[n] = {\n            ...token,\n            content: token.content.slice(minLength),\n            offset: token.offset + minLength\n          };\n        }\n      }\n    }\n  }\n  return outThemes;\n}\n\nfunction codeToTokens(internal, code, options) {\n  let bg;\n  let fg;\n  let tokens;\n  let themeName;\n  let rootStyle;\n  let grammarState;\n  if (\"themes\" in options) {\n    const {\n      defaultColor = \"light\",\n      cssVariablePrefix = \"--shiki-\",\n      colorsRendering = \"css-vars\"\n    } = options;\n    const themes = Object.entries(options.themes).filter((i) => i[1]).map((i) => ({ color: i[0], theme: i[1] })).sort((a, b) => a.color === defaultColor ? -1 : b.color === defaultColor ? 1 : 0);\n    if (themes.length === 0)\n      throw new ShikiError$1(\"`themes` option must not be empty\");\n    const themeTokens = codeToTokensWithThemes(\n      internal,\n      code,\n      options\n    );\n    grammarState = getLastGrammarStateFromMap(themeTokens);\n    if (defaultColor && DEFAULT_COLOR_LIGHT_DARK !== defaultColor && !themes.find((t) => t.color === defaultColor))\n      throw new ShikiError$1(`\\`themes\\` option must contain the defaultColor key \\`${defaultColor}\\``);\n    const themeRegs = themes.map((t) => internal.getTheme(t.theme));\n    const themesOrder = themes.map((t) => t.color);\n    tokens = themeTokens.map((line) => line.map((token) => flatTokenVariants(token, themesOrder, cssVariablePrefix, defaultColor, colorsRendering)));\n    if (grammarState)\n      setLastGrammarStateToMap(tokens, grammarState);\n    const themeColorReplacements = themes.map((t) => resolveColorReplacements(t.theme, options));\n    fg = mapThemeColors(themes, themeRegs, themeColorReplacements, cssVariablePrefix, defaultColor, \"fg\", colorsRendering);\n    bg = mapThemeColors(themes, themeRegs, themeColorReplacements, cssVariablePrefix, defaultColor, \"bg\", colorsRendering);\n    themeName = `shiki-themes ${themeRegs.map((t) => t.name).join(\" \")}`;\n    rootStyle = defaultColor ? void 0 : [fg, bg].join(\";\");\n  } else if (\"theme\" in options) {\n    const colorReplacements = resolveColorReplacements(options.theme, options);\n    tokens = codeToTokensBase(\n      internal,\n      code,\n      options\n    );\n    const _theme = internal.getTheme(options.theme);\n    bg = applyColorReplacements(_theme.bg, colorReplacements);\n    fg = applyColorReplacements(_theme.fg, colorReplacements);\n    themeName = _theme.name;\n    grammarState = getLastGrammarStateFromMap(tokens);\n  } else {\n    throw new ShikiError$1(\"Invalid options, either `theme` or `themes` must be provided\");\n  }\n  return {\n    tokens,\n    fg,\n    bg,\n    themeName,\n    rootStyle,\n    grammarState\n  };\n}\nfunction mapThemeColors(themes, themeRegs, themeColorReplacements, cssVariablePrefix, defaultColor, property, colorsRendering) {\n  return themes.map((t, idx) => {\n    const value = applyColorReplacements(themeRegs[idx][property], themeColorReplacements[idx]) || \"inherit\";\n    const cssVar = `${cssVariablePrefix + t.color}${property === \"bg\" ? \"-bg\" : \"\"}:${value}`;\n    if (idx === 0 && defaultColor) {\n      if (defaultColor === DEFAULT_COLOR_LIGHT_DARK && themes.length > 1) {\n        const lightIndex = themes.findIndex((t2) => t2.color === \"light\");\n        const darkIndex = themes.findIndex((t2) => t2.color === \"dark\");\n        if (lightIndex === -1 || darkIndex === -1)\n          throw new ShikiError$1('When using `defaultColor: \"light-dark()\"`, you must provide both `light` and `dark` themes');\n        const lightValue = applyColorReplacements(themeRegs[lightIndex][property], themeColorReplacements[lightIndex]) || \"inherit\";\n        const darkValue = applyColorReplacements(themeRegs[darkIndex][property], themeColorReplacements[darkIndex]) || \"inherit\";\n        return `light-dark(${lightValue}, ${darkValue});${cssVar}`;\n      }\n      return value;\n    }\n    if (colorsRendering === \"css-vars\") {\n      return cssVar;\n    }\n    return null;\n  }).filter((i) => !!i).join(\";\");\n}\n\nfunction codeToHast(internal, code, options, transformerContext = {\n  meta: {},\n  options,\n  codeToHast: (_code, _options) => codeToHast(internal, _code, _options),\n  codeToTokens: (_code, _options) => codeToTokens(internal, _code, _options)\n}) {\n  let input = code;\n  for (const transformer of getTransformers(options))\n    input = transformer.preprocess?.call(transformerContext, input, options) || input;\n  let {\n    tokens,\n    fg,\n    bg,\n    themeName,\n    rootStyle,\n    grammarState\n  } = codeToTokens(internal, input, options);\n  const {\n    mergeWhitespaces = true,\n    mergeSameStyleTokens = false\n  } = options;\n  if (mergeWhitespaces === true)\n    tokens = mergeWhitespaceTokens(tokens);\n  else if (mergeWhitespaces === \"never\")\n    tokens = splitWhitespaceTokens(tokens);\n  if (mergeSameStyleTokens) {\n    tokens = mergeAdjacentStyledTokens(tokens);\n  }\n  const contextSource = {\n    ...transformerContext,\n    get source() {\n      return input;\n    }\n  };\n  for (const transformer of getTransformers(options))\n    tokens = transformer.tokens?.call(contextSource, tokens) || tokens;\n  return tokensToHast(\n    tokens,\n    {\n      ...options,\n      fg,\n      bg,\n      themeName,\n      rootStyle: options.rootStyle === false ? false : options.rootStyle ?? rootStyle\n    },\n    contextSource,\n    grammarState\n  );\n}\nfunction tokensToHast(tokens, options, transformerContext, grammarState = getLastGrammarStateFromMap(tokens)) {\n  const transformers = getTransformers(options);\n  const lines = [];\n  const root = {\n    type: \"root\",\n    children: []\n  };\n  const {\n    structure = \"classic\",\n    tabindex = \"0\"\n  } = options;\n  const properties = {\n    class: `shiki ${options.themeName || \"\"}`\n  };\n  if (options.rootStyle !== false) {\n    if (options.rootStyle != null)\n      properties.style = options.rootStyle;\n    else\n      properties.style = `background-color:${options.bg};color:${options.fg}`;\n  }\n  if (tabindex !== false && tabindex != null)\n    properties.tabindex = tabindex.toString();\n  for (const [key, value] of Object.entries(options.meta || {})) {\n    if (!key.startsWith(\"_\"))\n      properties[key] = value;\n  }\n  let preNode = {\n    type: \"element\",\n    tagName: \"pre\",\n    properties,\n    children: [],\n    data: options.data\n  };\n  let codeNode = {\n    type: \"element\",\n    tagName: \"code\",\n    properties: {},\n    children: lines\n  };\n  const lineNodes = [];\n  const context = {\n    ...transformerContext,\n    structure,\n    addClassToHast,\n    get source() {\n      return transformerContext.source;\n    },\n    get tokens() {\n      return tokens;\n    },\n    get options() {\n      return options;\n    },\n    get root() {\n      return root;\n    },\n    get pre() {\n      return preNode;\n    },\n    get code() {\n      return codeNode;\n    },\n    get lines() {\n      return lineNodes;\n    }\n  };\n  tokens.forEach((line, idx) => {\n    if (idx) {\n      if (structure === \"inline\")\n        root.children.push({ type: \"element\", tagName: \"br\", properties: {}, children: [] });\n      else if (structure === \"classic\")\n        lines.push({ type: \"text\", value: \"\\n\" });\n    }\n    let lineNode = {\n      type: \"element\",\n      tagName: \"span\",\n      properties: { class: \"line\" },\n      children: []\n    };\n    let col = 0;\n    for (const token of line) {\n      let tokenNode = {\n        type: \"element\",\n        tagName: \"span\",\n        properties: {\n          ...token.htmlAttrs\n        },\n        children: [{ type: \"text\", value: token.content }]\n      };\n      const style = stringifyTokenStyle(token.htmlStyle || getTokenStyleObject(token));\n      if (style)\n        tokenNode.properties.style = style;\n      for (const transformer of transformers)\n        tokenNode = transformer?.span?.call(context, tokenNode, idx + 1, col, lineNode, token) || tokenNode;\n      if (structure === \"inline\")\n        root.children.push(tokenNode);\n      else if (structure === \"classic\")\n        lineNode.children.push(tokenNode);\n      col += token.content.length;\n    }\n    if (structure === \"classic\") {\n      for (const transformer of transformers)\n        lineNode = transformer?.line?.call(context, lineNode, idx + 1) || lineNode;\n      lineNodes.push(lineNode);\n      lines.push(lineNode);\n    } else if (structure === \"inline\") {\n      lineNodes.push(lineNode);\n    }\n  });\n  if (structure === \"classic\") {\n    for (const transformer of transformers)\n      codeNode = transformer?.code?.call(context, codeNode) || codeNode;\n    preNode.children.push(codeNode);\n    for (const transformer of transformers)\n      preNode = transformer?.pre?.call(context, preNode) || preNode;\n    root.children.push(preNode);\n  } else if (structure === \"inline\") {\n    const syntheticLines = [];\n    let currentLine = {\n      type: \"element\",\n      tagName: \"span\",\n      properties: { class: \"line\" },\n      children: []\n    };\n    for (const child of root.children) {\n      if (child.type === \"element\" && child.tagName === \"br\") {\n        syntheticLines.push(currentLine);\n        currentLine = {\n          type: \"element\",\n          tagName: \"span\",\n          properties: { class: \"line\" },\n          children: []\n        };\n      } else if (child.type === \"element\" || child.type === \"text\") {\n        currentLine.children.push(child);\n      }\n    }\n    syntheticLines.push(currentLine);\n    const syntheticCode = {\n      type: \"element\",\n      tagName: \"code\",\n      properties: {},\n      children: syntheticLines\n    };\n    let transformedCode = syntheticCode;\n    for (const transformer of transformers)\n      transformedCode = transformer?.code?.call(context, transformedCode) || transformedCode;\n    root.children = [];\n    for (let i = 0; i < transformedCode.children.length; i++) {\n      if (i > 0)\n        root.children.push({ type: \"element\", tagName: \"br\", properties: {}, children: [] });\n      const line = transformedCode.children[i];\n      if (line.type === \"element\")\n        root.children.push(...line.children);\n    }\n  }\n  let result = root;\n  for (const transformer of transformers)\n    result = transformer?.root?.call(context, result) || result;\n  if (grammarState)\n    setLastGrammarStateToMap(result, grammarState);\n  return result;\n}\nfunction mergeWhitespaceTokens(tokens) {\n  return tokens.map((line) => {\n    const newLine = [];\n    let carryOnContent = \"\";\n    let firstOffset;\n    line.forEach((token, idx) => {\n      const isDecorated = token.fontStyle && (token.fontStyle & FontStyle.Underline || token.fontStyle & FontStyle.Strikethrough);\n      const couldMerge = !isDecorated;\n      if (couldMerge && token.content.match(/^\\s+$/) && line[idx + 1]) {\n        if (firstOffset === void 0)\n          firstOffset = token.offset;\n        carryOnContent += token.content;\n      } else {\n        if (carryOnContent) {\n          if (couldMerge) {\n            newLine.push({\n              ...token,\n              offset: firstOffset,\n              content: carryOnContent + token.content\n            });\n          } else {\n            newLine.push(\n              {\n                content: carryOnContent,\n                offset: firstOffset\n              },\n              token\n            );\n          }\n          firstOffset = void 0;\n          carryOnContent = \"\";\n        } else {\n          newLine.push(token);\n        }\n      }\n    });\n    return newLine;\n  });\n}\nfunction splitWhitespaceTokens(tokens) {\n  return tokens.map((line) => {\n    return line.flatMap((token) => {\n      if (token.content.match(/^\\s+$/))\n        return token;\n      const match = token.content.match(/^(\\s*)(.*?)(\\s*)$/);\n      if (!match)\n        return token;\n      const [, leading, content, trailing] = match;\n      if (!leading && !trailing)\n        return token;\n      const expanded = [{\n        ...token,\n        offset: token.offset + leading.length,\n        content\n      }];\n      if (leading) {\n        expanded.unshift({\n          content: leading,\n          offset: token.offset\n        });\n      }\n      if (trailing) {\n        expanded.push({\n          content: trailing,\n          offset: token.offset + leading.length + content.length\n        });\n      }\n      return expanded;\n    });\n  });\n}\nfunction mergeAdjacentStyledTokens(tokens) {\n  return tokens.map((line) => {\n    const newLine = [];\n    for (const token of line) {\n      if (newLine.length === 0) {\n        newLine.push({ ...token });\n        continue;\n      }\n      const prevToken = newLine[newLine.length - 1];\n      const prevStyle = stringifyTokenStyle(prevToken.htmlStyle || getTokenStyleObject(prevToken));\n      const currentStyle = stringifyTokenStyle(token.htmlStyle || getTokenStyleObject(token));\n      const isPrevDecorated = prevToken.fontStyle && (prevToken.fontStyle & FontStyle.Underline || prevToken.fontStyle & FontStyle.Strikethrough);\n      const isDecorated = token.fontStyle && (token.fontStyle & FontStyle.Underline || token.fontStyle & FontStyle.Strikethrough);\n      if (!isPrevDecorated && !isDecorated && prevStyle === currentStyle) {\n        prevToken.content += token.content;\n      } else {\n        newLine.push({ ...token });\n      }\n    }\n    return newLine;\n  });\n}\n\nconst hastToHtml = toHtml;\nfunction codeToHtml(internal, code, options) {\n  const context = {\n    meta: {},\n    options,\n    codeToHast: (_code, _options) => codeToHast(internal, _code, _options),\n    codeToTokens: (_code, _options) => codeToTokens(internal, _code, _options)\n  };\n  let result = hastToHtml(codeToHast(internal, code, options, context));\n  for (const transformer of getTransformers(options))\n    result = transformer.postprocess?.call(context, result, options) || result;\n  return result;\n}\n\nconst VSCODE_FALLBACK_EDITOR_FG = { light: \"#333333\", dark: \"#bbbbbb\" };\nconst VSCODE_FALLBACK_EDITOR_BG = { light: \"#fffffe\", dark: \"#1e1e1e\" };\nconst RESOLVED_KEY = \"__shiki_resolved\";\nfunction normalizeTheme(rawTheme) {\n  if (rawTheme?.[RESOLVED_KEY])\n    return rawTheme;\n  const theme = {\n    ...rawTheme\n  };\n  if (theme.tokenColors && !theme.settings) {\n    theme.settings = theme.tokenColors;\n    delete theme.tokenColors;\n  }\n  theme.type ||= \"dark\";\n  theme.colorReplacements = { ...theme.colorReplacements };\n  theme.settings ||= [];\n  let { bg, fg } = theme;\n  if (!bg || !fg) {\n    const globalSetting = theme.settings ? theme.settings.find((s) => !s.name && !s.scope) : void 0;\n    if (globalSetting?.settings?.foreground)\n      fg = globalSetting.settings.foreground;\n    if (globalSetting?.settings?.background)\n      bg = globalSetting.settings.background;\n    if (!fg && theme?.colors?.[\"editor.foreground\"])\n      fg = theme.colors[\"editor.foreground\"];\n    if (!bg && theme?.colors?.[\"editor.background\"])\n      bg = theme.colors[\"editor.background\"];\n    if (!fg)\n      fg = theme.type === \"light\" ? VSCODE_FALLBACK_EDITOR_FG.light : VSCODE_FALLBACK_EDITOR_FG.dark;\n    if (!bg)\n      bg = theme.type === \"light\" ? VSCODE_FALLBACK_EDITOR_BG.light : VSCODE_FALLBACK_EDITOR_BG.dark;\n    theme.fg = fg;\n    theme.bg = bg;\n  }\n  if (!(theme.settings[0] && theme.settings[0].settings && !theme.settings[0].scope)) {\n    theme.settings.unshift({\n      settings: {\n        foreground: theme.fg,\n        background: theme.bg\n      }\n    });\n  }\n  let replacementCount = 0;\n  const replacementMap = /* @__PURE__ */ new Map();\n  function getReplacementColor(value) {\n    if (replacementMap.has(value))\n      return replacementMap.get(value);\n    replacementCount += 1;\n    const hex = `#${replacementCount.toString(16).padStart(8, \"0\").toLowerCase()}`;\n    if (theme.colorReplacements?.[`#${hex}`])\n      return getReplacementColor(value);\n    replacementMap.set(value, hex);\n    return hex;\n  }\n  theme.settings = theme.settings.map((setting) => {\n    const replaceFg = setting.settings?.foreground && !setting.settings.foreground.startsWith(\"#\");\n    const replaceBg = setting.settings?.background && !setting.settings.background.startsWith(\"#\");\n    if (!replaceFg && !replaceBg)\n      return setting;\n    const clone = {\n      ...setting,\n      settings: {\n        ...setting.settings\n      }\n    };\n    if (replaceFg) {\n      const replacement = getReplacementColor(setting.settings.foreground);\n      theme.colorReplacements[replacement] = setting.settings.foreground;\n      clone.settings.foreground = replacement;\n    }\n    if (replaceBg) {\n      const replacement = getReplacementColor(setting.settings.background);\n      theme.colorReplacements[replacement] = setting.settings.background;\n      clone.settings.background = replacement;\n    }\n    return clone;\n  });\n  for (const key of Object.keys(theme.colors || {})) {\n    if (key === \"editor.foreground\" || key === \"editor.background\" || key.startsWith(\"terminal.ansi\")) {\n      if (!theme.colors[key]?.startsWith(\"#\")) {\n        const replacement = getReplacementColor(theme.colors[key]);\n        theme.colorReplacements[replacement] = theme.colors[key];\n        theme.colors[key] = replacement;\n      }\n    }\n  }\n  Object.defineProperty(theme, RESOLVED_KEY, {\n    enumerable: false,\n    writable: false,\n    value: true\n  });\n  return theme;\n}\n\nasync function resolveLangs(langs) {\n  return Array.from(new Set((await Promise.all(\n    langs.filter((l) => !isSpecialLang(l)).map(async (lang) => await normalizeGetter(lang).then((r) => Array.isArray(r) ? r : [r]))\n  )).flat()));\n}\nasync function resolveThemes(themes) {\n  const resolved = await Promise.all(\n    themes.map(\n      async (theme) => isSpecialTheme(theme) ? null : normalizeTheme(await normalizeGetter(theme))\n    )\n  );\n  return resolved.filter((i) => !!i);\n}\n\nlet _emitDeprecation = 3;\nlet _emitError = false;\nfunction enableDeprecationWarnings(emitDeprecation = true, emitError = false) {\n  _emitDeprecation = emitDeprecation;\n  _emitError = emitError;\n}\nfunction warnDeprecated(message, version = 3) {\n  if (!_emitDeprecation)\n    return;\n  if (typeof _emitDeprecation === \"number\" && version > _emitDeprecation)\n    return;\n  if (_emitError) {\n    throw new Error(`[SHIKI DEPRECATE]: ${message}`);\n  } else {\n    console.trace(`[SHIKI DEPRECATE]: ${message}`);\n  }\n}\n\nclass ShikiError extends Error {\n  constructor(message) {\n    super(message);\n    this.name = \"ShikiError\";\n  }\n}\n\nfunction resolveLangAlias(name, alias) {\n  if (!alias)\n    return name;\n  if (alias[name]) {\n    const resolved = /* @__PURE__ */ new Set([name]);\n    while (alias[name]) {\n      name = alias[name];\n      if (resolved.has(name))\n        throw new ShikiError(`Circular alias \\`${Array.from(resolved).join(\" -> \")} -> ${name}\\``);\n      resolved.add(name);\n    }\n  }\n  return name;\n}\n\nclass Registry extends Registry$1 {\n  constructor(_resolver, _themes, _langs, _alias = {}) {\n    super(_resolver);\n    this._resolver = _resolver;\n    this._themes = _themes;\n    this._langs = _langs;\n    this._alias = _alias;\n    this._themes.map((t) => this.loadTheme(t));\n    this.loadLanguages(this._langs);\n  }\n  _resolvedThemes = /* @__PURE__ */ new Map();\n  _resolvedGrammars = /* @__PURE__ */ new Map();\n  _langMap = /* @__PURE__ */ new Map();\n  _langGraph = /* @__PURE__ */ new Map();\n  _textmateThemeCache = /* @__PURE__ */ new WeakMap();\n  _loadedThemesCache = null;\n  _loadedLanguagesCache = null;\n  getTheme(theme) {\n    if (typeof theme === \"string\")\n      return this._resolvedThemes.get(theme);\n    else\n      return this.loadTheme(theme);\n  }\n  loadTheme(theme) {\n    const _theme = normalizeTheme(theme);\n    if (_theme.name) {\n      this._resolvedThemes.set(_theme.name, _theme);\n      this._loadedThemesCache = null;\n    }\n    return _theme;\n  }\n  getLoadedThemes() {\n    if (!this._loadedThemesCache)\n      this._loadedThemesCache = [...this._resolvedThemes.keys()];\n    return this._loadedThemesCache;\n  }\n  // Override and re-implement this method to cache the textmate themes as `TextMateTheme.createFromRawTheme`\n  // is expensive. Themes can switch often especially for dual-theme support.\n  //\n  // The parent class also accepts `colorMap` as the second parameter, but since we don't use that,\n  // we omit here so it's easier to cache the themes.\n  setTheme(theme) {\n    let textmateTheme = this._textmateThemeCache.get(theme);\n    if (!textmateTheme) {\n      textmateTheme = Theme.createFromRawTheme(theme);\n      this._textmateThemeCache.set(theme, textmateTheme);\n    }\n    this._syncRegistry.setTheme(textmateTheme);\n  }\n  getGrammar(name) {\n    name = resolveLangAlias(name, this._alias);\n    return this._resolvedGrammars.get(name);\n  }\n  loadLanguage(lang) {\n    if (this.getGrammar(lang.name))\n      return;\n    const embeddedLazilyBy = new Set(\n      [...this._langMap.values()].filter((i) => i.embeddedLangsLazy?.includes(lang.name))\n    );\n    this._resolver.addLanguage(lang);\n    const grammarConfig = {\n      balancedBracketSelectors: lang.balancedBracketSelectors || [\"*\"],\n      unbalancedBracketSelectors: lang.unbalancedBracketSelectors || []\n    };\n    this._syncRegistry._rawGrammars.set(lang.scopeName, lang);\n    const g = this.loadGrammarWithConfiguration(lang.scopeName, 1, grammarConfig);\n    g.name = lang.name;\n    this._resolvedGrammars.set(lang.name, g);\n    if (lang.aliases) {\n      lang.aliases.forEach((alias) => {\n        this._alias[alias] = lang.name;\n      });\n    }\n    this._loadedLanguagesCache = null;\n    if (embeddedLazilyBy.size) {\n      for (const e of embeddedLazilyBy) {\n        this._resolvedGrammars.delete(e.name);\n        this._loadedLanguagesCache = null;\n        this._syncRegistry?._injectionGrammars?.delete(e.scopeName);\n        this._syncRegistry?._grammars?.delete(e.scopeName);\n        this.loadLanguage(this._langMap.get(e.name));\n      }\n    }\n  }\n  dispose() {\n    super.dispose();\n    this._resolvedThemes.clear();\n    this._resolvedGrammars.clear();\n    this._langMap.clear();\n    this._langGraph.clear();\n    this._loadedThemesCache = null;\n  }\n  loadLanguages(langs) {\n    for (const lang of langs)\n      this.resolveEmbeddedLanguages(lang);\n    const langsGraphArray = Array.from(this._langGraph.entries());\n    const missingLangs = langsGraphArray.filter(([_, lang]) => !lang);\n    if (missingLangs.length) {\n      const dependents = langsGraphArray.filter(([_, lang]) => {\n        if (!lang)\n          return false;\n        const embedded = lang.embeddedLanguages || lang.embeddedLangs;\n        return embedded?.some((l) => missingLangs.map(([name]) => name).includes(l));\n      }).filter((lang) => !missingLangs.includes(lang));\n      throw new ShikiError(`Missing languages ${missingLangs.map(([name]) => `\\`${name}\\``).join(\", \")}, required by ${dependents.map(([name]) => `\\`${name}\\``).join(\", \")}`);\n    }\n    for (const [_, lang] of langsGraphArray)\n      this._resolver.addLanguage(lang);\n    for (const [_, lang] of langsGraphArray)\n      this.loadLanguage(lang);\n  }\n  getLoadedLanguages() {\n    if (!this._loadedLanguagesCache) {\n      this._loadedLanguagesCache = [\n        .../* @__PURE__ */ new Set([...this._resolvedGrammars.keys(), ...Object.keys(this._alias)])\n      ];\n    }\n    return this._loadedLanguagesCache;\n  }\n  resolveEmbeddedLanguages(lang) {\n    this._langMap.set(lang.name, lang);\n    this._langGraph.set(lang.name, lang);\n    const embedded = lang.embeddedLanguages ?? lang.embeddedLangs;\n    if (embedded) {\n      for (const embeddedLang of embedded)\n        this._langGraph.set(embeddedLang, this._langMap.get(embeddedLang));\n    }\n  }\n}\n\nclass Resolver {\n  _langs = /* @__PURE__ */ new Map();\n  _scopeToLang = /* @__PURE__ */ new Map();\n  _injections = /* @__PURE__ */ new Map();\n  _onigLib;\n  constructor(engine, langs) {\n    this._onigLib = {\n      createOnigScanner: (patterns) => engine.createScanner(patterns),\n      createOnigString: (s) => engine.createString(s)\n    };\n    langs.forEach((i) => this.addLanguage(i));\n  }\n  get onigLib() {\n    return this._onigLib;\n  }\n  getLangRegistration(langIdOrAlias) {\n    return this._langs.get(langIdOrAlias);\n  }\n  loadGrammar(scopeName) {\n    return this._scopeToLang.get(scopeName);\n  }\n  addLanguage(l) {\n    this._langs.set(l.name, l);\n    if (l.aliases) {\n      l.aliases.forEach((a) => {\n        this._langs.set(a, l);\n      });\n    }\n    this._scopeToLang.set(l.scopeName, l);\n    if (l.injectTo) {\n      l.injectTo.forEach((i) => {\n        if (!this._injections.get(i))\n          this._injections.set(i, []);\n        this._injections.get(i).push(l.scopeName);\n      });\n    }\n  }\n  getInjections(scopeName) {\n    const scopeParts = scopeName.split(\".\");\n    let injections = [];\n    for (let i = 1; i <= scopeParts.length; i++) {\n      const subScopeName = scopeParts.slice(0, i).join(\".\");\n      injections = [...injections, ...this._injections.get(subScopeName) || []];\n    }\n    return injections;\n  }\n}\n\nlet instancesCount = 0;\nfunction createShikiInternalSync(options) {\n  instancesCount += 1;\n  if (options.warnings !== false && instancesCount >= 10 && instancesCount % 10 === 0)\n    console.warn(`[Shiki] ${instancesCount} instances have been created. Shiki is supposed to be used as a singleton, consider refactoring your code to cache your highlighter instance; Or call \\`highlighter.dispose()\\` to release unused instances.`);\n  let isDisposed = false;\n  if (!options.engine)\n    throw new ShikiError(\"`engine` option is required for synchronous mode\");\n  const langs = (options.langs || []).flat(1);\n  const themes = (options.themes || []).flat(1).map(normalizeTheme);\n  const resolver = new Resolver(options.engine, langs);\n  const _registry = new Registry(resolver, themes, langs, options.langAlias);\n  let _lastTheme;\n  function resolveLangAlias$1(name) {\n    return resolveLangAlias(name, options.langAlias);\n  }\n  function getLanguage(name) {\n    ensureNotDisposed();\n    const _lang = _registry.getGrammar(typeof name === \"string\" ? name : name.name);\n    if (!_lang)\n      throw new ShikiError(`Language \\`${name}\\` not found, you may need to load it first`);\n    return _lang;\n  }\n  function getTheme(name) {\n    if (name === \"none\")\n      return { bg: \"\", fg: \"\", name: \"none\", settings: [], type: \"dark\" };\n    ensureNotDisposed();\n    const _theme = _registry.getTheme(name);\n    if (!_theme)\n      throw new ShikiError(`Theme \\`${name}\\` not found, you may need to load it first`);\n    return _theme;\n  }\n  function setTheme(name) {\n    ensureNotDisposed();\n    const theme = getTheme(name);\n    if (_lastTheme !== name) {\n      _registry.setTheme(theme);\n      _lastTheme = name;\n    }\n    const colorMap = _registry.getColorMap();\n    return {\n      theme,\n      colorMap\n    };\n  }\n  function getLoadedThemes() {\n    ensureNotDisposed();\n    return _registry.getLoadedThemes();\n  }\n  function getLoadedLanguages() {\n    ensureNotDisposed();\n    return _registry.getLoadedLanguages();\n  }\n  function loadLanguageSync(...langs2) {\n    ensureNotDisposed();\n    _registry.loadLanguages(langs2.flat(1));\n  }\n  async function loadLanguage(...langs2) {\n    return loadLanguageSync(await resolveLangs(langs2));\n  }\n  function loadThemeSync(...themes2) {\n    ensureNotDisposed();\n    for (const theme of themes2.flat(1)) {\n      _registry.loadTheme(theme);\n    }\n  }\n  async function loadTheme(...themes2) {\n    ensureNotDisposed();\n    return loadThemeSync(await resolveThemes(themes2));\n  }\n  function ensureNotDisposed() {\n    if (isDisposed)\n      throw new ShikiError(\"Shiki instance has been disposed\");\n  }\n  function dispose() {\n    if (isDisposed)\n      return;\n    isDisposed = true;\n    _registry.dispose();\n    instancesCount -= 1;\n  }\n  return {\n    setTheme,\n    getTheme,\n    getLanguage,\n    getLoadedThemes,\n    getLoadedLanguages,\n    resolveLangAlias: resolveLangAlias$1,\n    loadLanguage,\n    loadLanguageSync,\n    loadTheme,\n    loadThemeSync,\n    dispose,\n    [Symbol.dispose]: dispose\n  };\n}\n\nasync function createShikiInternal(options) {\n  if (!options.engine) {\n    warnDeprecated(\"`engine` option is required. Use `createOnigurumaEngine` or `createJavaScriptRegexEngine` to create an engine.\");\n  }\n  const [\n    themes,\n    langs,\n    engine\n  ] = await Promise.all([\n    resolveThemes(options.themes || []),\n    resolveLangs(options.langs || []),\n    options.engine\n  ]);\n  return createShikiInternalSync({\n    ...options,\n    themes,\n    langs,\n    engine\n  });\n}\n\nasync function createHighlighterCore(options) {\n  const internal = await createShikiInternal(options);\n  return {\n    getLastGrammarState: (...args) => getLastGrammarState(internal, ...args),\n    codeToTokensBase: (code, options2) => codeToTokensBase(internal, code, options2),\n    codeToTokensWithThemes: (code, options2) => codeToTokensWithThemes(internal, code, options2),\n    codeToTokens: (code, options2) => codeToTokens(internal, code, options2),\n    codeToHast: (code, options2) => codeToHast(internal, code, options2),\n    codeToHtml: (code, options2) => codeToHtml(internal, code, options2),\n    getBundledLanguages: () => ({}),\n    getBundledThemes: () => ({}),\n    ...internal,\n    getInternalContext: () => internal\n  };\n}\nfunction createHighlighterCoreSync(options) {\n  const internal = createShikiInternalSync(options);\n  return {\n    getLastGrammarState: (...args) => getLastGrammarState(internal, ...args),\n    codeToTokensBase: (code, options2) => codeToTokensBase(internal, code, options2),\n    codeToTokensWithThemes: (code, options2) => codeToTokensWithThemes(internal, code, options2),\n    codeToTokens: (code, options2) => codeToTokens(internal, code, options2),\n    codeToHast: (code, options2) => codeToHast(internal, code, options2),\n    codeToHtml: (code, options2) => codeToHtml(internal, code, options2),\n    getBundledLanguages: () => ({}),\n    getBundledThemes: () => ({}),\n    ...internal,\n    getInternalContext: () => internal\n  };\n}\nfunction makeSingletonHighlighterCore(createHighlighter) {\n  let _shiki;\n  async function getSingletonHighlighterCore2(options) {\n    if (!_shiki) {\n      _shiki = createHighlighter({\n        ...options,\n        themes: options.themes || [],\n        langs: options.langs || []\n      });\n      return _shiki;\n    } else {\n      const s = await _shiki;\n      await Promise.all([\n        s.loadTheme(...options.themes || []),\n        s.loadLanguage(...options.langs || [])\n      ]);\n      return s;\n    }\n  }\n  return getSingletonHighlighterCore2;\n}\nconst getSingletonHighlighterCore = /* @__PURE__ */ makeSingletonHighlighterCore(createHighlighterCore);\n\nfunction createBundledHighlighter(options) {\n  const bundledLanguages = options.langs;\n  const bundledThemes = options.themes;\n  const engine = options.engine;\n  async function createHighlighter(options2) {\n    function resolveLang(lang) {\n      if (typeof lang === \"string\") {\n        lang = options2.langAlias?.[lang] || lang;\n        if (isSpecialLang(lang))\n          return [];\n        const bundle = bundledLanguages[lang];\n        if (!bundle)\n          throw new ShikiError$1(`Language \\`${lang}\\` is not included in this bundle. You may want to load it from external source.`);\n        return bundle;\n      }\n      return lang;\n    }\n    function resolveTheme(theme) {\n      if (isSpecialTheme(theme))\n        return \"none\";\n      if (typeof theme === \"string\") {\n        const bundle = bundledThemes[theme];\n        if (!bundle)\n          throw new ShikiError$1(`Theme \\`${theme}\\` is not included in this bundle. You may want to load it from external source.`);\n        return bundle;\n      }\n      return theme;\n    }\n    const _themes = (options2.themes ?? []).map((i) => resolveTheme(i));\n    const langs = (options2.langs ?? []).map((i) => resolveLang(i));\n    const core = await createHighlighterCore({\n      engine: options2.engine ?? engine(),\n      ...options2,\n      themes: _themes,\n      langs\n    });\n    return {\n      ...core,\n      loadLanguage(...langs2) {\n        return core.loadLanguage(...langs2.map(resolveLang));\n      },\n      loadTheme(...themes) {\n        return core.loadTheme(...themes.map(resolveTheme));\n      },\n      getBundledLanguages() {\n        return bundledLanguages;\n      },\n      getBundledThemes() {\n        return bundledThemes;\n      }\n    };\n  }\n  return createHighlighter;\n}\nfunction makeSingletonHighlighter(createHighlighter) {\n  let _shiki;\n  async function getSingletonHighlighter(options = {}) {\n    if (!_shiki) {\n      _shiki = createHighlighter({\n        ...options,\n        themes: [],\n        langs: []\n      });\n      const s = await _shiki;\n      await Promise.all([\n        s.loadTheme(...options.themes || []),\n        s.loadLanguage(...options.langs || [])\n      ]);\n      return s;\n    } else {\n      const s = await _shiki;\n      await Promise.all([\n        s.loadTheme(...options.themes || []),\n        s.loadLanguage(...options.langs || [])\n      ]);\n      return s;\n    }\n  }\n  return getSingletonHighlighter;\n}\nfunction createSingletonShorthands(createHighlighter, config) {\n  const getSingletonHighlighter = makeSingletonHighlighter(createHighlighter);\n  async function get(code, options) {\n    const shiki = await getSingletonHighlighter({\n      langs: [options.lang],\n      themes: \"theme\" in options ? [options.theme] : Object.values(options.themes)\n    });\n    const langs = await config?.guessEmbeddedLanguages?.(code, options.lang, shiki);\n    if (langs) {\n      await shiki.loadLanguage(...langs);\n    }\n    return shiki;\n  }\n  return {\n    getSingletonHighlighter(options) {\n      return getSingletonHighlighter(options);\n    },\n    async codeToHtml(code, options) {\n      const shiki = await get(code, options);\n      return shiki.codeToHtml(code, options);\n    },\n    async codeToHast(code, options) {\n      const shiki = await get(code, options);\n      return shiki.codeToHast(code, options);\n    },\n    async codeToTokens(code, options) {\n      const shiki = await get(code, options);\n      return shiki.codeToTokens(code, options);\n    },\n    async codeToTokensBase(code, options) {\n      const shiki = await get(code, options);\n      return shiki.codeToTokensBase(code, options);\n    },\n    async codeToTokensWithThemes(code, options) {\n      const shiki = await get(code, options);\n      return shiki.codeToTokensWithThemes(code, options);\n    },\n    async getLastGrammarState(code, options) {\n      const shiki = await getSingletonHighlighter({\n        langs: [options.lang],\n        themes: [options.theme]\n      });\n      return shiki.getLastGrammarState(code, options);\n    }\n  };\n}\nconst createdBundledHighlighter = createBundledHighlighter;\n\nfunction createCssVariablesTheme(options = {}) {\n  const {\n    name = \"css-variables\",\n    variablePrefix = \"--shiki-\",\n    fontStyle = true\n  } = options;\n  const variable = (name2) => {\n    if (options.variableDefaults?.[name2])\n      return `var(${variablePrefix}${name2}, ${options.variableDefaults[name2]})`;\n    return `var(${variablePrefix}${name2})`;\n  };\n  const theme = {\n    name,\n    type: \"dark\",\n    colors: {\n      \"editor.foreground\": variable(\"foreground\"),\n      \"editor.background\": variable(\"background\"),\n      \"terminal.ansiBlack\": variable(\"ansi-black\"),\n      \"terminal.ansiRed\": variable(\"ansi-red\"),\n      \"terminal.ansiGreen\": variable(\"ansi-green\"),\n      \"terminal.ansiYellow\": variable(\"ansi-yellow\"),\n      \"terminal.ansiBlue\": variable(\"ansi-blue\"),\n      \"terminal.ansiMagenta\": variable(\"ansi-magenta\"),\n      \"terminal.ansiCyan\": variable(\"ansi-cyan\"),\n      \"terminal.ansiWhite\": variable(\"ansi-white\"),\n      \"terminal.ansiBrightBlack\": variable(\"ansi-bright-black\"),\n      \"terminal.ansiBrightRed\": variable(\"ansi-bright-red\"),\n      \"terminal.ansiBrightGreen\": variable(\"ansi-bright-green\"),\n      \"terminal.ansiBrightYellow\": variable(\"ansi-bright-yellow\"),\n      \"terminal.ansiBrightBlue\": variable(\"ansi-bright-blue\"),\n      \"terminal.ansiBrightMagenta\": variable(\"ansi-bright-magenta\"),\n      \"terminal.ansiBrightCyan\": variable(\"ansi-bright-cyan\"),\n      \"terminal.ansiBrightWhite\": variable(\"ansi-bright-white\")\n    },\n    tokenColors: [\n      {\n        scope: [\n          \"keyword.operator.accessor\",\n          \"meta.group.braces.round.function.arguments\",\n          \"meta.template.expression\",\n          \"markup.fenced_code meta.embedded.block\"\n        ],\n        settings: {\n          foreground: variable(\"foreground\")\n        }\n      },\n      {\n        scope: \"emphasis\",\n        settings: {\n          fontStyle: \"italic\"\n        }\n      },\n      {\n        scope: [\"strong\", \"markup.heading.markdown\", \"markup.bold.markdown\"],\n        settings: {\n          fontStyle: \"bold\"\n        }\n      },\n      {\n        scope: [\"markup.italic.markdown\"],\n        settings: {\n          fontStyle: \"italic\"\n        }\n      },\n      {\n        scope: \"meta.link.inline.markdown\",\n        settings: {\n          fontStyle: \"underline\",\n          foreground: variable(\"token-link\")\n        }\n      },\n      {\n        scope: [\"string\", \"markup.fenced_code\", \"markup.inline\"],\n        settings: {\n          foreground: variable(\"token-string\")\n        }\n      },\n      {\n        scope: [\"comment\", \"string.quoted.docstring.multi\"],\n        settings: {\n          foreground: variable(\"token-comment\")\n        }\n      },\n      {\n        scope: [\n          \"constant.numeric\",\n          \"constant.language\",\n          \"constant.other.placeholder\",\n          \"constant.character.format.placeholder\",\n          \"variable.language.this\",\n          \"variable.other.object\",\n          \"variable.other.class\",\n          \"variable.other.constant\",\n          \"meta.property-name\",\n          \"meta.property-value\",\n          \"support\"\n        ],\n        settings: {\n          foreground: variable(\"token-constant\")\n        }\n      },\n      {\n        scope: [\n          \"keyword\",\n          \"storage.modifier\",\n          \"storage.type\",\n          \"storage.control.clojure\",\n          \"entity.name.function.clojure\",\n          \"entity.name.tag.yaml\",\n          \"support.function.node\",\n          \"support.type.property-name.json\",\n          \"punctuation.separator.key-value\",\n          \"punctuation.definition.template-expression\"\n        ],\n        settings: {\n          foreground: variable(\"token-keyword\")\n        }\n      },\n      {\n        scope: \"variable.parameter.function\",\n        settings: {\n          foreground: variable(\"token-parameter\")\n        }\n      },\n      {\n        scope: [\n          \"support.function\",\n          \"entity.name.type\",\n          \"entity.other.inherited-class\",\n          \"meta.function-call\",\n          \"meta.instance.constructor\",\n          \"entity.other.attribute-name\",\n          \"entity.name.function\",\n          \"constant.keyword.clojure\"\n        ],\n        settings: {\n          foreground: variable(\"token-function\")\n        }\n      },\n      {\n        scope: [\n          \"entity.name.tag\",\n          \"string.quoted\",\n          \"string.regexp\",\n          \"string.interpolated\",\n          \"string.template\",\n          \"string.unquoted.plain.out.yaml\",\n          \"keyword.other.template\"\n        ],\n        settings: {\n          foreground: variable(\"token-string-expression\")\n        }\n      },\n      {\n        scope: [\n          \"punctuation.definition.arguments\",\n          \"punctuation.definition.dict\",\n          \"punctuation.separator\",\n          \"meta.function-call.arguments\"\n        ],\n        settings: {\n          foreground: variable(\"token-punctuation\")\n        }\n      },\n      {\n        // [Custom] Markdown links\n        scope: [\n          \"markup.underline.link\",\n          \"punctuation.definition.metadata.markdown\"\n        ],\n        settings: {\n          foreground: variable(\"token-link\")\n        }\n      },\n      {\n        // [Custom] Markdown list\n        scope: [\"beginning.punctuation.definition.list.markdown\"],\n        settings: {\n          foreground: variable(\"token-string\")\n        }\n      },\n      {\n        // [Custom] Markdown punctuation definition brackets\n        scope: [\n          \"punctuation.definition.string.begin.markdown\",\n          \"punctuation.definition.string.end.markdown\",\n          \"string.other.link.title.markdown\",\n          \"string.other.link.description.markdown\"\n        ],\n        settings: {\n          foreground: variable(\"token-keyword\")\n        }\n      },\n      {\n        // [Custom] Diff\n        scope: [\n          \"markup.inserted\",\n          \"meta.diff.header.to-file\",\n          \"punctuation.definition.inserted\"\n        ],\n        settings: {\n          foreground: variable(\"token-inserted\")\n        }\n      },\n      {\n        scope: [\n          \"markup.deleted\",\n          \"meta.diff.header.from-file\",\n          \"punctuation.definition.deleted\"\n        ],\n        settings: {\n          foreground: variable(\"token-deleted\")\n        }\n      },\n      {\n        scope: [\n          \"markup.changed\",\n          \"punctuation.definition.changed\"\n        ],\n        settings: {\n          foreground: variable(\"token-changed\")\n        }\n      }\n    ]\n  };\n  if (!fontStyle) {\n    theme.tokenColors = theme.tokenColors?.map((tokenColor) => {\n      if (tokenColor.settings?.fontStyle)\n        delete tokenColor.settings.fontStyle;\n      return tokenColor;\n    });\n  }\n  return theme;\n}\n\nexport { addClassToHast, applyColorReplacements, codeToHast, codeToHtml, codeToTokens, codeToTokensBase, codeToTokensWithThemes, createBundledHighlighter, createCssVariablesTheme, createHighlighterCore, createHighlighterCoreSync, createPositionConverter, createShikiInternal, createShikiInternalSync, createSingletonShorthands, createdBundledHighlighter, enableDeprecationWarnings, flatTokenVariants, getSingletonHighlighterCore, getTokenStyleObject, guessEmbeddedLanguages, hastToHtml, isNoneTheme, isPlainLang, isSpecialLang, isSpecialTheme, makeSingletonHighlighter, makeSingletonHighlighterCore, normalizeGetter, normalizeTheme, resolveColorReplacements, splitLines, splitToken, splitTokens, stringifyTokenStyle, toArray, tokenizeAnsiWithTheme, tokenizeWithTheme, tokensToHast, transformerDecorations, warnDeprecated };\n", "const bundledLanguagesInfo = [\n  {\n    \"id\": \"abap\",\n    \"name\": \"ABAP\",\n    \"import\": (() => import('@shikijs/langs/abap'))\n  },\n  {\n    \"id\": \"actionscript-3\",\n    \"name\": \"ActionScript\",\n    \"import\": (() => import('@shikijs/langs/actionscript-3'))\n  },\n  {\n    \"id\": \"ada\",\n    \"name\": \"Ada\",\n    \"import\": (() => import('@shikijs/langs/ada'))\n  },\n  {\n    \"id\": \"angular-html\",\n    \"name\": \"Angular HTML\",\n    \"import\": (() => import('@shikijs/langs/angular-html'))\n  },\n  {\n    \"id\": \"angular-ts\",\n    \"name\": \"Angular TypeScript\",\n    \"import\": (() => import('@shikijs/langs/angular-ts'))\n  },\n  {\n    \"id\": \"apache\",\n    \"name\": \"Apache Conf\",\n    \"import\": (() => import('@shikijs/langs/apache'))\n  },\n  {\n    \"id\": \"apex\",\n    \"name\": \"Apex\",\n    \"import\": (() => import('@shikijs/langs/apex'))\n  },\n  {\n    \"id\": \"apl\",\n    \"name\": \"APL\",\n    \"import\": (() => import('@shikijs/langs/apl'))\n  },\n  {\n    \"id\": \"applescript\",\n    \"name\": \"AppleScript\",\n    \"import\": (() => import('@shikijs/langs/applescript'))\n  },\n  {\n    \"id\": \"ara\",\n    \"name\": \"Ara\",\n    \"import\": (() => import('@shikijs/langs/ara'))\n  },\n  {\n    \"id\": \"asciidoc\",\n    \"name\": \"AsciiDoc\",\n    \"aliases\": [\n      \"adoc\"\n    ],\n    \"import\": (() => import('@shikijs/langs/asciidoc'))\n  },\n  {\n    \"id\": \"asm\",\n    \"name\": \"Assembly\",\n    \"import\": (() => import('@shikijs/langs/asm'))\n  },\n  {\n    \"id\": \"astro\",\n    \"name\": \"Astro\",\n    \"import\": (() => import('@shikijs/langs/astro'))\n  },\n  {\n    \"id\": \"awk\",\n    \"name\": \"AWK\",\n    \"import\": (() => import('@shikijs/langs/awk'))\n  },\n  {\n    \"id\": \"ballerina\",\n    \"name\": \"Ballerina\",\n    \"import\": (() => import('@shikijs/langs/ballerina'))\n  },\n  {\n    \"id\": \"bat\",\n    \"name\": \"Batch File\",\n    \"aliases\": [\n      \"batch\"\n    ],\n    \"import\": (() => import('@shikijs/langs/bat'))\n  },\n  {\n    \"id\": \"beancount\",\n    \"name\": \"Beancount\",\n    \"import\": (() => import('@shikijs/langs/beancount'))\n  },\n  {\n    \"id\": \"berry\",\n    \"name\": \"Berry\",\n    \"aliases\": [\n      \"be\"\n    ],\n    \"import\": (() => import('@shikijs/langs/berry'))\n  },\n  {\n    \"id\": \"bibtex\",\n    \"name\": \"BibTeX\",\n    \"import\": (() => import('@shikijs/langs/bibtex'))\n  },\n  {\n    \"id\": \"bicep\",\n    \"name\": \"Bicep\",\n    \"import\": (() => import('@shikijs/langs/bicep'))\n  },\n  {\n    \"id\": \"bird2\",\n    \"name\": \"BIRD2 Configuration\",\n    \"aliases\": [\n      \"bird\"\n    ],\n    \"import\": (() => import('@shikijs/langs/bird2'))\n  },\n  {\n    \"id\": \"blade\",\n    \"name\": \"Blade\",\n    \"import\": (() => import('@shikijs/langs/blade'))\n  },\n  {\n    \"id\": \"bsl\",\n    \"name\": \"1C (Enterprise)\",\n    \"aliases\": [\n      \"1c\"\n    ],\n    \"import\": (() => import('@shikijs/langs/bsl'))\n  },\n  {\n    \"id\": \"c\",\n    \"name\": \"C\",\n    \"import\": (() => import('@shikijs/langs/c'))\n  },\n  {\n    \"id\": \"c3\",\n    \"name\": \"C3\",\n    \"import\": (() => import('@shikijs/langs/c3'))\n  },\n  {\n    \"id\": \"cadence\",\n    \"name\": \"Cadence\",\n    \"aliases\": [\n      \"cdc\"\n    ],\n    \"import\": (() => import('@shikijs/langs/cadence'))\n  },\n  {\n    \"id\": \"cairo\",\n    \"name\": \"Cairo\",\n    \"import\": (() => import('@shikijs/langs/cairo'))\n  },\n  {\n    \"id\": \"clarity\",\n    \"name\": \"Clarity\",\n    \"import\": (() => import('@shikijs/langs/clarity'))\n  },\n  {\n    \"id\": \"clojure\",\n    \"name\": \"Clojure\",\n    \"aliases\": [\n      \"clj\"\n    ],\n    \"import\": (() => import('@shikijs/langs/clojure'))\n  },\n  {\n    \"id\": \"cmake\",\n    \"name\": \"CMake\",\n    \"import\": (() => import('@shikijs/langs/cmake'))\n  },\n  {\n    \"id\": \"cobol\",\n    \"name\": \"COBOL\",\n    \"import\": (() => import('@shikijs/langs/cobol'))\n  },\n  {\n    \"id\": \"codeowners\",\n    \"name\": \"CODEOWNERS\",\n    \"import\": (() => import('@shikijs/langs/codeowners'))\n  },\n  {\n    \"id\": \"codeql\",\n    \"name\": \"CodeQL\",\n    \"aliases\": [\n      \"ql\"\n    ],\n    \"import\": (() => import('@shikijs/langs/codeql'))\n  },\n  {\n    \"id\": \"coffee\",\n    \"name\": \"CoffeeScript\",\n    \"aliases\": [\n      \"coffeescript\"\n    ],\n    \"import\": (() => import('@shikijs/langs/coffee'))\n  },\n  {\n    \"id\": \"common-lisp\",\n    \"name\": \"Common Lisp\",\n    \"aliases\": [\n      \"lisp\"\n    ],\n    \"import\": (() => import('@shikijs/langs/common-lisp'))\n  },\n  {\n    \"id\": \"coq\",\n    \"name\": \"Coq\",\n    \"import\": (() => import('@shikijs/langs/coq'))\n  },\n  {\n    \"id\": \"cpp\",\n    \"name\": \"C++\",\n    \"aliases\": [\n      \"c++\"\n    ],\n    \"import\": (() => import('@shikijs/langs/cpp'))\n  },\n  {\n    \"id\": \"crystal\",\n    \"name\": \"Crystal\",\n    \"import\": (() => import('@shikijs/langs/crystal'))\n  },\n  {\n    \"id\": \"csharp\",\n    \"name\": \"C#\",\n    \"aliases\": [\n      \"c#\",\n      \"cs\"\n    ],\n    \"import\": (() => import('@shikijs/langs/csharp'))\n  },\n  {\n    \"id\": \"css\",\n    \"name\": \"CSS\",\n    \"import\": (() => import('@shikijs/langs/css'))\n  },\n  {\n    \"id\": \"csv\",\n    \"name\": \"CSV\",\n    \"import\": (() => import('@shikijs/langs/csv'))\n  },\n  {\n    \"id\": \"cue\",\n    \"name\": \"CUE\",\n    \"import\": (() => import('@shikijs/langs/cue'))\n  },\n  {\n    \"id\": \"cypher\",\n    \"name\": \"Cypher\",\n    \"aliases\": [\n      \"cql\"\n    ],\n    \"import\": (() => import('@shikijs/langs/cypher'))\n  },\n  {\n    \"id\": \"d\",\n    \"name\": \"D\",\n    \"import\": (() => import('@shikijs/langs/d'))\n  },\n  {\n    \"id\": \"dart\",\n    \"name\": \"Dart\",\n    \"import\": (() => import('@shikijs/langs/dart'))\n  },\n  {\n    \"id\": \"dax\",\n    \"name\": \"DAX\",\n    \"import\": (() => import('@shikijs/langs/dax'))\n  },\n  {\n    \"id\": \"desktop\",\n    \"name\": \"Desktop\",\n    \"import\": (() => import('@shikijs/langs/desktop'))\n  },\n  {\n    \"id\": \"diff\",\n    \"name\": \"Diff\",\n    \"import\": (() => import('@shikijs/langs/diff'))\n  },\n  {\n    \"id\": \"docker\",\n    \"name\": \"Dockerfile\",\n    \"aliases\": [\n      \"dockerfile\"\n    ],\n    \"import\": (() => import('@shikijs/langs/docker'))\n  },\n  {\n    \"id\": \"dotenv\",\n    \"name\": \"dotEnv\",\n    \"import\": (() => import('@shikijs/langs/dotenv'))\n  },\n  {\n    \"id\": \"dream-maker\",\n    \"name\": \"Dream Maker\",\n    \"import\": (() => import('@shikijs/langs/dream-maker'))\n  },\n  {\n    \"id\": \"edge\",\n    \"name\": \"Edge\",\n    \"import\": (() => import('@shikijs/langs/edge'))\n  },\n  {\n    \"id\": \"elixir\",\n    \"name\": \"Elixir\",\n    \"import\": (() => import('@shikijs/langs/elixir'))\n  },\n  {\n    \"id\": \"elm\",\n    \"name\": \"Elm\",\n    \"import\": (() => import('@shikijs/langs/elm'))\n  },\n  {\n    \"id\": \"emacs-lisp\",\n    \"name\": \"Emacs Lisp\",\n    \"aliases\": [\n      \"elisp\"\n    ],\n    \"import\": (() => import('@shikijs/langs/emacs-lisp'))\n  },\n  {\n    \"id\": \"erb\",\n    \"name\": \"ERB\",\n    \"import\": (() => import('@shikijs/langs/erb'))\n  },\n  {\n    \"id\": \"erlang\",\n    \"name\": \"Erlang\",\n    \"aliases\": [\n      \"erl\"\n    ],\n    \"import\": (() => import('@shikijs/langs/erlang'))\n  },\n  {\n    \"id\": \"fennel\",\n    \"name\": \"Fennel\",\n    \"import\": (() => import('@shikijs/langs/fennel'))\n  },\n  {\n    \"id\": \"fish\",\n    \"name\": \"Fish\",\n    \"import\": (() => import('@shikijs/langs/fish'))\n  },\n  {\n    \"id\": \"fluent\",\n    \"name\": \"Fluent\",\n    \"aliases\": [\n      \"ftl\"\n    ],\n    \"import\": (() => import('@shikijs/langs/fluent'))\n  },\n  {\n    \"id\": \"fortran-fixed-form\",\n    \"name\": \"Fortran (Fixed Form)\",\n    \"aliases\": [\n      \"f\",\n      \"for\",\n      \"f77\"\n    ],\n    \"import\": (() => import('@shikijs/langs/fortran-fixed-form'))\n  },\n  {\n    \"id\": \"fortran-free-form\",\n    \"name\": \"Fortran (Free Form)\",\n    \"aliases\": [\n      \"f90\",\n      \"f95\",\n      \"f03\",\n      \"f08\",\n      \"f18\"\n    ],\n    \"import\": (() => import('@shikijs/langs/fortran-free-form'))\n  },\n  {\n    \"id\": \"fsharp\",\n    \"name\": \"F#\",\n    \"aliases\": [\n      \"f#\",\n      \"fs\"\n    ],\n    \"import\": (() => import('@shikijs/langs/fsharp'))\n  },\n  {\n    \"id\": \"gdresource\",\n    \"name\": \"GDResource\",\n    \"aliases\": [\n      \"tscn\",\n      \"tres\"\n    ],\n    \"import\": (() => import('@shikijs/langs/gdresource'))\n  },\n  {\n    \"id\": \"gdscript\",\n    \"name\": \"GDScript\",\n    \"aliases\": [\n      \"gd\"\n    ],\n    \"import\": (() => import('@shikijs/langs/gdscript'))\n  },\n  {\n    \"id\": \"gdshader\",\n    \"name\": \"GDShader\",\n    \"import\": (() => import('@shikijs/langs/gdshader'))\n  },\n  {\n    \"id\": \"genie\",\n    \"name\": \"Genie\",\n    \"import\": (() => import('@shikijs/langs/genie'))\n  },\n  {\n    \"id\": \"gherkin\",\n    \"name\": \"Gherkin\",\n    \"import\": (() => import('@shikijs/langs/gherkin'))\n  },\n  {\n    \"id\": \"git-commit\",\n    \"name\": \"Git Commit Message\",\n    \"import\": (() => import('@shikijs/langs/git-commit'))\n  },\n  {\n    \"id\": \"git-rebase\",\n    \"name\": \"Git Rebase Message\",\n    \"import\": (() => import('@shikijs/langs/git-rebase'))\n  },\n  {\n    \"id\": \"gleam\",\n    \"name\": \"Gleam\",\n    \"import\": (() => import('@shikijs/langs/gleam'))\n  },\n  {\n    \"id\": \"glimmer-js\",\n    \"name\": \"Glimmer JS\",\n    \"aliases\": [\n      \"gjs\"\n    ],\n    \"import\": (() => import('@shikijs/langs/glimmer-js'))\n  },\n  {\n    \"id\": \"glimmer-ts\",\n    \"name\": \"Glimmer TS\",\n    \"aliases\": [\n      \"gts\"\n    ],\n    \"import\": (() => import('@shikijs/langs/glimmer-ts'))\n  },\n  {\n    \"id\": \"glsl\",\n    \"name\": \"GLSL\",\n    \"import\": (() => import('@shikijs/langs/glsl'))\n  },\n  {\n    \"id\": \"gn\",\n    \"name\": \"GN\",\n    \"import\": (() => import('@shikijs/langs/gn'))\n  },\n  {\n    \"id\": \"gnuplot\",\n    \"name\": \"Gnuplot\",\n    \"import\": (() => import('@shikijs/langs/gnuplot'))\n  },\n  {\n    \"id\": \"go\",\n    \"name\": \"Go\",\n    \"import\": (() => import('@shikijs/langs/go'))\n  },\n  {\n    \"id\": \"graphql\",\n    \"name\": \"GraphQL\",\n    \"aliases\": [\n      \"gql\"\n    ],\n    \"import\": (() => import('@shikijs/langs/graphql'))\n  },\n  {\n    \"id\": \"groovy\",\n    \"name\": \"Groovy\",\n    \"import\": (() => import('@shikijs/langs/groovy'))\n  },\n  {\n    \"id\": \"hack\",\n    \"name\": \"Hack\",\n    \"import\": (() => import('@shikijs/langs/hack'))\n  },\n  {\n    \"id\": \"haml\",\n    \"name\": \"Ruby Haml\",\n    \"import\": (() => import('@shikijs/langs/haml'))\n  },\n  {\n    \"id\": \"handlebars\",\n    \"name\": \"Handlebars\",\n    \"aliases\": [\n      \"hbs\"\n    ],\n    \"import\": (() => import('@shikijs/langs/handlebars'))\n  },\n  {\n    \"id\": \"haskell\",\n    \"name\": \"Haskell\",\n    \"aliases\": [\n      \"hs\"\n    ],\n    \"import\": (() => import('@shikijs/langs/haskell'))\n  },\n  {\n    \"id\": \"haxe\",\n    \"name\": \"Haxe\",\n    \"import\": (() => import('@shikijs/langs/haxe'))\n  },\n  {\n    \"id\": \"hcl\",\n    \"name\": \"HashiCorp HCL\",\n    \"import\": (() => import('@shikijs/langs/hcl'))\n  },\n  {\n    \"id\": \"hjson\",\n    \"name\": \"Hjson\",\n    \"import\": (() => import('@shikijs/langs/hjson'))\n  },\n  {\n    \"id\": \"hlsl\",\n    \"name\": \"HLSL\",\n    \"import\": (() => import('@shikijs/langs/hlsl'))\n  },\n  {\n    \"id\": \"html\",\n    \"name\": \"HTML\",\n    \"import\": (() => import('@shikijs/langs/html'))\n  },\n  {\n    \"id\": \"html-derivative\",\n    \"name\": \"HTML (Derivative)\",\n    \"import\": (() => import('@shikijs/langs/html-derivative'))\n  },\n  {\n    \"id\": \"http\",\n    \"name\": \"HTTP\",\n    \"import\": (() => import('@shikijs/langs/http'))\n  },\n  {\n    \"id\": \"hurl\",\n    \"name\": \"Hurl\",\n    \"import\": (() => import('@shikijs/langs/hurl'))\n  },\n  {\n    \"id\": \"hxml\",\n    \"name\": \"HXML\",\n    \"import\": (() => import('@shikijs/langs/hxml'))\n  },\n  {\n    \"id\": \"hy\",\n    \"name\": \"Hy\",\n    \"import\": (() => import('@shikijs/langs/hy'))\n  },\n  {\n    \"id\": \"imba\",\n    \"name\": \"Imba\",\n    \"import\": (() => import('@shikijs/langs/imba'))\n  },\n  {\n    \"id\": \"ini\",\n    \"name\": \"INI\",\n    \"aliases\": [\n      \"properties\"\n    ],\n    \"import\": (() => import('@shikijs/langs/ini'))\n  },\n  {\n    \"id\": \"java\",\n    \"name\": \"Java\",\n    \"import\": (() => import('@shikijs/langs/java'))\n  },\n  {\n    \"id\": \"javascript\",\n    \"name\": \"JavaScript\",\n    \"aliases\": [\n      \"js\",\n      \"cjs\",\n      \"mjs\"\n    ],\n    \"import\": (() => import('@shikijs/langs/javascript'))\n  },\n  {\n    \"id\": \"jinja\",\n    \"name\": \"Jinja\",\n    \"import\": (() => import('@shikijs/langs/jinja'))\n  },\n  {\n    \"id\": \"jison\",\n    \"name\": \"Jison\",\n    \"import\": (() => import('@shikijs/langs/jison'))\n  },\n  {\n    \"id\": \"json\",\n    \"name\": \"JSON\",\n    \"import\": (() => import('@shikijs/langs/json'))\n  },\n  {\n    \"id\": \"json5\",\n    \"name\": \"JSON5\",\n    \"import\": (() => import('@shikijs/langs/json5'))\n  },\n  {\n    \"id\": \"jsonc\",\n    \"name\": \"JSON with Comments\",\n    \"import\": (() => import('@shikijs/langs/jsonc'))\n  },\n  {\n    \"id\": \"jsonl\",\n    \"name\": \"JSON Lines\",\n    \"import\": (() => import('@shikijs/langs/jsonl'))\n  },\n  {\n    \"id\": \"jsonnet\",\n    \"name\": \"Jsonnet\",\n    \"import\": (() => import('@shikijs/langs/jsonnet'))\n  },\n  {\n    \"id\": \"jssm\",\n    \"name\": \"JSSM\",\n    \"aliases\": [\n      \"fsl\"\n    ],\n    \"import\": (() => import('@shikijs/langs/jssm'))\n  },\n  {\n    \"id\": \"jsx\",\n    \"name\": \"JSX\",\n    \"import\": (() => import('@shikijs/langs/jsx'))\n  },\n  {\n    \"id\": \"julia\",\n    \"name\": \"Julia\",\n    \"aliases\": [\n      \"jl\"\n    ],\n    \"import\": (() => import('@shikijs/langs/julia'))\n  },\n  {\n    \"id\": \"just\",\n    \"name\": \"Just\",\n    \"import\": (() => import('@shikijs/langs/just'))\n  },\n  {\n    \"id\": \"kdl\",\n    \"name\": \"KDL\",\n    \"import\": (() => import('@shikijs/langs/kdl'))\n  },\n  {\n    \"id\": \"kotlin\",\n    \"name\": \"Kotlin\",\n    \"aliases\": [\n      \"kt\",\n      \"kts\"\n    ],\n    \"import\": (() => import('@shikijs/langs/kotlin'))\n  },\n  {\n    \"id\": \"kusto\",\n    \"name\": \"Kusto\",\n    \"aliases\": [\n      \"kql\"\n    ],\n    \"import\": (() => import('@shikijs/langs/kusto'))\n  },\n  {\n    \"id\": \"latex\",\n    \"name\": \"LaTeX\",\n    \"import\": (() => import('@shikijs/langs/latex'))\n  },\n  {\n    \"id\": \"lean\",\n    \"name\": \"Lean 4\",\n    \"aliases\": [\n      \"lean4\"\n    ],\n    \"import\": (() => import('@shikijs/langs/lean'))\n  },\n  {\n    \"id\": \"less\",\n    \"name\": \"Less\",\n    \"import\": (() => import('@shikijs/langs/less'))\n  },\n  {\n    \"id\": \"liquid\",\n    \"name\": \"Liquid\",\n    \"import\": (() => import('@shikijs/langs/liquid'))\n  },\n  {\n    \"id\": \"llvm\",\n    \"name\": \"LLVM IR\",\n    \"import\": (() => import('@shikijs/langs/llvm'))\n  },\n  {\n    \"id\": \"log\",\n    \"name\": \"Log file\",\n    \"import\": (() => import('@shikijs/langs/log'))\n  },\n  {\n    \"id\": \"logo\",\n    \"name\": \"Logo\",\n    \"import\": (() => import('@shikijs/langs/logo'))\n  },\n  {\n    \"id\": \"lua\",\n    \"name\": \"Lua\",\n    \"import\": (() => import('@shikijs/langs/lua'))\n  },\n  {\n    \"id\": \"luau\",\n    \"name\": \"Luau\",\n    \"import\": (() => import('@shikijs/langs/luau'))\n  },\n  {\n    \"id\": \"make\",\n    \"name\": \"Makefile\",\n    \"aliases\": [\n      \"makefile\"\n    ],\n    \"import\": (() => import('@shikijs/langs/make'))\n  },\n  {\n    \"id\": \"markdown\",\n    \"name\": \"Markdown\",\n    \"aliases\": [\n      \"md\"\n    ],\n    \"import\": (() => import('@shikijs/langs/markdown'))\n  },\n  {\n    \"id\": \"marko\",\n    \"name\": \"Marko\",\n    \"import\": (() => import('@shikijs/langs/marko'))\n  },\n  {\n    \"id\": \"matlab\",\n    \"name\": \"MATLAB\",\n    \"import\": (() => import('@shikijs/langs/matlab'))\n  },\n  {\n    \"id\": \"mdc\",\n    \"name\": \"MDC\",\n    \"import\": (() => import('@shikijs/langs/mdc'))\n  },\n  {\n    \"id\": \"mdx\",\n    \"name\": \"MDX\",\n    \"import\": (() => import('@shikijs/langs/mdx'))\n  },\n  {\n    \"id\": \"mermaid\",\n    \"name\": \"Mermaid\",\n    \"aliases\": [\n      \"mmd\"\n    ],\n    \"import\": (() => import('@shikijs/langs/mermaid'))\n  },\n  {\n    \"id\": \"mipsasm\",\n    \"name\": \"MIPS Assembly\",\n    \"aliases\": [\n      \"mips\"\n    ],\n    \"import\": (() => import('@shikijs/langs/mipsasm'))\n  },\n  {\n    \"id\": \"mojo\",\n    \"name\": \"Mojo\",\n    \"import\": (() => import('@shikijs/langs/mojo'))\n  },\n  {\n    \"id\": \"moonbit\",\n    \"name\": \"MoonBit\",\n    \"aliases\": [\n      \"mbt\",\n      \"mbti\"\n    ],\n    \"import\": (() => import('@shikijs/langs/moonbit'))\n  },\n  {\n    \"id\": \"move\",\n    \"name\": \"Move\",\n    \"import\": (() => import('@shikijs/langs/move'))\n  },\n  {\n    \"id\": \"narrat\",\n    \"name\": \"Narrat Language\",\n    \"aliases\": [\n      \"nar\"\n    ],\n    \"import\": (() => import('@shikijs/langs/narrat'))\n  },\n  {\n    \"id\": \"nextflow\",\n    \"name\": \"Nextflow\",\n    \"aliases\": [\n      \"nf\"\n    ],\n    \"import\": (() => import('@shikijs/langs/nextflow'))\n  },\n  {\n    \"id\": \"nextflow-groovy\",\n    \"name\": \"nextflow-groovy\",\n    \"import\": (() => import('@shikijs/langs/nextflow-groovy'))\n  },\n  {\n    \"id\": \"nginx\",\n    \"name\": \"Nginx\",\n    \"import\": (() => import('@shikijs/langs/nginx'))\n  },\n  {\n    \"id\": \"nim\",\n    \"name\": \"Nim\",\n    \"import\": (() => import('@shikijs/langs/nim'))\n  },\n  {\n    \"id\": \"nix\",\n    \"name\": \"Nix\",\n    \"import\": (() => import('@shikijs/langs/nix'))\n  },\n  {\n    \"id\": \"nushell\",\n    \"name\": \"nushell\",\n    \"aliases\": [\n      \"nu\"\n    ],\n    \"import\": (() => import('@shikijs/langs/nushell'))\n  },\n  {\n    \"id\": \"objective-c\",\n    \"name\": \"Objective-C\",\n    \"aliases\": [\n      \"objc\"\n    ],\n    \"import\": (() => import('@shikijs/langs/objective-c'))\n  },\n  {\n    \"id\": \"objective-cpp\",\n    \"name\": \"Objective-C++\",\n    \"import\": (() => import('@shikijs/langs/objective-cpp'))\n  },\n  {\n    \"id\": \"ocaml\",\n    \"name\": \"OCaml\",\n    \"import\": (() => import('@shikijs/langs/ocaml'))\n  },\n  {\n    \"id\": \"odin\",\n    \"name\": \"Odin\",\n    \"import\": (() => import('@shikijs/langs/odin'))\n  },\n  {\n    \"id\": \"openscad\",\n    \"name\": \"OpenSCAD\",\n    \"aliases\": [\n      \"scad\"\n    ],\n    \"import\": (() => import('@shikijs/langs/openscad'))\n  },\n  {\n    \"id\": \"pascal\",\n    \"name\": \"Pascal\",\n    \"import\": (() => import('@shikijs/langs/pascal'))\n  },\n  {\n    \"id\": \"perl\",\n    \"name\": \"Perl\",\n    \"import\": (() => import('@shikijs/langs/perl'))\n  },\n  {\n    \"id\": \"php\",\n    \"name\": \"PHP\",\n    \"import\": (() => import('@shikijs/langs/php'))\n  },\n  {\n    \"id\": \"pkl\",\n    \"name\": \"Pkl\",\n    \"import\": (() => import('@shikijs/langs/pkl'))\n  },\n  {\n    \"id\": \"plsql\",\n    \"name\": \"PL/SQL\",\n    \"import\": (() => import('@shikijs/langs/plsql'))\n  },\n  {\n    \"id\": \"po\",\n    \"name\": \"Gettext PO\",\n    \"aliases\": [\n      \"pot\",\n      \"potx\"\n    ],\n    \"import\": (() => import('@shikijs/langs/po'))\n  },\n  {\n    \"id\": \"polar\",\n    \"name\": \"Polar\",\n    \"import\": (() => import('@shikijs/langs/polar'))\n  },\n  {\n    \"id\": \"postcss\",\n    \"name\": \"PostCSS\",\n    \"import\": (() => import('@shikijs/langs/postcss'))\n  },\n  {\n    \"id\": \"powerquery\",\n    \"name\": \"PowerQuery\",\n    \"import\": (() => import('@shikijs/langs/powerquery'))\n  },\n  {\n    \"id\": \"powershell\",\n    \"name\": \"PowerShell\",\n    \"aliases\": [\n      \"ps\",\n      \"ps1\"\n    ],\n    \"import\": (() => import('@shikijs/langs/powershell'))\n  },\n  {\n    \"id\": \"prisma\",\n    \"name\": \"Prisma\",\n    \"import\": (() => import('@shikijs/langs/prisma'))\n  },\n  {\n    \"id\": \"prolog\",\n    \"name\": \"Prolog\",\n    \"import\": (() => import('@shikijs/langs/prolog'))\n  },\n  {\n    \"id\": \"proto\",\n    \"name\": \"Protocol Buffer 3\",\n    \"aliases\": [\n      \"protobuf\"\n    ],\n    \"import\": (() => import('@shikijs/langs/proto'))\n  },\n  {\n    \"id\": \"pug\",\n    \"name\": \"Pug\",\n    \"aliases\": [\n      \"jade\"\n    ],\n    \"import\": (() => import('@shikijs/langs/pug'))\n  },\n  {\n    \"id\": \"puppet\",\n    \"name\": \"Puppet\",\n    \"import\": (() => import('@shikijs/langs/puppet'))\n  },\n  {\n    \"id\": \"purescript\",\n    \"name\": \"PureScript\",\n    \"import\": (() => import('@shikijs/langs/purescript'))\n  },\n  {\n    \"id\": \"python\",\n    \"name\": \"Python\",\n    \"aliases\": [\n      \"py\"\n    ],\n    \"import\": (() => import('@shikijs/langs/python'))\n  },\n  {\n    \"id\": \"qml\",\n    \"name\": \"QML\",\n    \"import\": (() => import('@shikijs/langs/qml'))\n  },\n  {\n    \"id\": \"qmldir\",\n    \"name\": \"QML Directory\",\n    \"import\": (() => import('@shikijs/langs/qmldir'))\n  },\n  {\n    \"id\": \"qss\",\n    \"name\": \"Qt Style Sheets\",\n    \"import\": (() => import('@shikijs/langs/qss'))\n  },\n  {\n    \"id\": \"r\",\n    \"name\": \"R\",\n    \"import\": (() => import('@shikijs/langs/r'))\n  },\n  {\n    \"id\": \"racket\",\n    \"name\": \"Racket\",\n    \"import\": (() => import('@shikijs/langs/racket'))\n  },\n  {\n    \"id\": \"raku\",\n    \"name\": \"Raku\",\n    \"aliases\": [\n      \"perl6\"\n    ],\n    \"import\": (() => import('@shikijs/langs/raku'))\n  },\n  {\n    \"id\": \"razor\",\n    \"name\": \"ASP.NET Razor\",\n    \"import\": (() => import('@shikijs/langs/razor'))\n  },\n  {\n    \"id\": \"reg\",\n    \"name\": \"Windows Registry Script\",\n    \"import\": (() => import('@shikijs/langs/reg'))\n  },\n  {\n    \"id\": \"regexp\",\n    \"name\": \"RegExp\",\n    \"aliases\": [\n      \"regex\"\n    ],\n    \"import\": (() => import('@shikijs/langs/regexp'))\n  },\n  {\n    \"id\": \"rel\",\n    \"name\": \"Rel\",\n    \"import\": (() => import('@shikijs/langs/rel'))\n  },\n  {\n    \"id\": \"riscv\",\n    \"name\": \"RISC-V\",\n    \"import\": (() => import('@shikijs/langs/riscv'))\n  },\n  {\n    \"id\": \"ron\",\n    \"name\": \"RON\",\n    \"import\": (() => import('@shikijs/langs/ron'))\n  },\n  {\n    \"id\": \"rosmsg\",\n    \"name\": \"ROS Interface\",\n    \"import\": (() => import('@shikijs/langs/rosmsg'))\n  },\n  {\n    \"id\": \"rst\",\n    \"name\": \"reStructuredText\",\n    \"import\": (() => import('@shikijs/langs/rst'))\n  },\n  {\n    \"id\": \"ruby\",\n    \"name\": \"Ruby\",\n    \"aliases\": [\n      \"rb\"\n    ],\n    \"import\": (() => import('@shikijs/langs/ruby'))\n  },\n  {\n    \"id\": \"rust\",\n    \"name\": \"Rust\",\n    \"aliases\": [\n      \"rs\"\n    ],\n    \"import\": (() => import('@shikijs/langs/rust'))\n  },\n  {\n    \"id\": \"sas\",\n    \"name\": \"SAS\",\n    \"import\": (() => import('@shikijs/langs/sas'))\n  },\n  {\n    \"id\": \"sass\",\n    \"name\": \"Sass\",\n    \"import\": (() => import('@shikijs/langs/sass'))\n  },\n  {\n    \"id\": \"scala\",\n    \"name\": \"Scala\",\n    \"import\": (() => import('@shikijs/langs/scala'))\n  },\n  {\n    \"id\": \"scheme\",\n    \"name\": \"Scheme\",\n    \"import\": (() => import('@shikijs/langs/scheme'))\n  },\n  {\n    \"id\": \"scss\",\n    \"name\": \"SCSS\",\n    \"import\": (() => import('@shikijs/langs/scss'))\n  },\n  {\n    \"id\": \"sdbl\",\n    \"name\": \"1C (Query)\",\n    \"aliases\": [\n      \"1c-query\"\n    ],\n    \"import\": (() => import('@shikijs/langs/sdbl'))\n  },\n  {\n    \"id\": \"shaderlab\",\n    \"name\": \"ShaderLab\",\n    \"aliases\": [\n      \"shader\"\n    ],\n    \"import\": (() => import('@shikijs/langs/shaderlab'))\n  },\n  {\n    \"id\": \"shellscript\",\n    \"name\": \"Shell\",\n    \"aliases\": [\n      \"bash\",\n      \"sh\",\n      \"shell\",\n      \"zsh\"\n    ],\n    \"import\": (() => import('@shikijs/langs/shellscript'))\n  },\n  {\n    \"id\": \"shellsession\",\n    \"name\": \"Shell Session\",\n    \"aliases\": [\n      \"console\"\n    ],\n    \"import\": (() => import('@shikijs/langs/shellsession'))\n  },\n  {\n    \"id\": \"smalltalk\",\n    \"name\": \"Smalltalk\",\n    \"import\": (() => import('@shikijs/langs/smalltalk'))\n  },\n  {\n    \"id\": \"solidity\",\n    \"name\": \"Solidity\",\n    \"import\": (() => import('@shikijs/langs/solidity'))\n  },\n  {\n    \"id\": \"soy\",\n    \"name\": \"Closure Templates\",\n    \"aliases\": [\n      \"closure-templates\"\n    ],\n    \"import\": (() => import('@shikijs/langs/soy'))\n  },\n  {\n    \"id\": \"sparql\",\n    \"name\": \"SPARQL\",\n    \"import\": (() => import('@shikijs/langs/sparql'))\n  },\n  {\n    \"id\": \"splunk\",\n    \"name\": \"Splunk Query Language\",\n    \"aliases\": [\n      \"spl\"\n    ],\n    \"import\": (() => import('@shikijs/langs/splunk'))\n  },\n  {\n    \"id\": \"sql\",\n    \"name\": \"SQL\",\n    \"import\": (() => import('@shikijs/langs/sql'))\n  },\n  {\n    \"id\": \"ssh-config\",\n    \"name\": \"SSH Config\",\n    \"import\": (() => import('@shikijs/langs/ssh-config'))\n  },\n  {\n    \"id\": \"stata\",\n    \"name\": \"Stata\",\n    \"import\": (() => import('@shikijs/langs/stata'))\n  },\n  {\n    \"id\": \"stylus\",\n    \"name\": \"Stylus\",\n    \"aliases\": [\n      \"styl\"\n    ],\n    \"import\": (() => import('@shikijs/langs/stylus'))\n  },\n  {\n    \"id\": \"surrealql\",\n    \"name\": \"SurrealQL\",\n    \"aliases\": [\n      \"surql\"\n    ],\n    \"import\": (() => import('@shikijs/langs/surrealql'))\n  },\n  {\n    \"id\": \"svelte\",\n    \"name\": \"Svelte\",\n    \"import\": (() => import('@shikijs/langs/svelte'))\n  },\n  {\n    \"id\": \"swift\",\n    \"name\": \"Swift\",\n    \"import\": (() => import('@shikijs/langs/swift'))\n  },\n  {\n    \"id\": \"system-verilog\",\n    \"name\": \"SystemVerilog\",\n    \"import\": (() => import('@shikijs/langs/system-verilog'))\n  },\n  {\n    \"id\": \"systemd\",\n    \"name\": \"Systemd Units\",\n    \"import\": (() => import('@shikijs/langs/systemd'))\n  },\n  {\n    \"id\": \"talonscript\",\n    \"name\": \"TalonScript\",\n    \"aliases\": [\n      \"talon\"\n    ],\n    \"import\": (() => import('@shikijs/langs/talonscript'))\n  },\n  {\n    \"id\": \"tasl\",\n    \"name\": \"Tasl\",\n    \"import\": (() => import('@shikijs/langs/tasl'))\n  },\n  {\n    \"id\": \"tcl\",\n    \"name\": \"Tcl\",\n    \"import\": (() => import('@shikijs/langs/tcl'))\n  },\n  {\n    \"id\": \"templ\",\n    \"name\": \"Templ\",\n    \"import\": (() => import('@shikijs/langs/templ'))\n  },\n  {\n    \"id\": \"terraform\",\n    \"name\": \"Terraform\",\n    \"aliases\": [\n      \"tf\",\n      \"tfvars\"\n    ],\n    \"import\": (() => import('@shikijs/langs/terraform'))\n  },\n  {\n    \"id\": \"tex\",\n    \"name\": \"TeX\",\n    \"import\": (() => import('@shikijs/langs/tex'))\n  },\n  {\n    \"id\": \"toml\",\n    \"name\": \"TOML\",\n    \"import\": (() => import('@shikijs/langs/toml'))\n  },\n  {\n    \"id\": \"ts-tags\",\n    \"name\": \"TypeScript with Tags\",\n    \"aliases\": [\n      \"lit\"\n    ],\n    \"import\": (() => import('@shikijs/langs/ts-tags'))\n  },\n  {\n    \"id\": \"tsv\",\n    \"name\": \"TSV\",\n    \"import\": (() => import('@shikijs/langs/tsv'))\n  },\n  {\n    \"id\": \"tsx\",\n    \"name\": \"TSX\",\n    \"import\": (() => import('@shikijs/langs/tsx'))\n  },\n  {\n    \"id\": \"turtle\",\n    \"name\": \"Turtle\",\n    \"import\": (() => import('@shikijs/langs/turtle'))\n  },\n  {\n    \"id\": \"twig\",\n    \"name\": \"Twig\",\n    \"import\": (() => import('@shikijs/langs/twig'))\n  },\n  {\n    \"id\": \"typescript\",\n    \"name\": \"TypeScript\",\n    \"aliases\": [\n      \"ts\",\n      \"cts\",\n      \"mts\"\n    ],\n    \"import\": (() => import('@shikijs/langs/typescript'))\n  },\n  {\n    \"id\": \"typespec\",\n    \"name\": \"TypeSpec\",\n    \"aliases\": [\n      \"tsp\"\n    ],\n    \"import\": (() => import('@shikijs/langs/typespec'))\n  },\n  {\n    \"id\": \"typst\",\n    \"name\": \"Typst\",\n    \"aliases\": [\n      \"typ\"\n    ],\n    \"import\": (() => import('@shikijs/langs/typst'))\n  },\n  {\n    \"id\": \"v\",\n    \"name\": \"V\",\n    \"import\": (() => import('@shikijs/langs/v'))\n  },\n  {\n    \"id\": \"vala\",\n    \"name\": \"Vala\",\n    \"import\": (() => import('@shikijs/langs/vala'))\n  },\n  {\n    \"id\": \"vb\",\n    \"name\": \"Visual Basic\",\n    \"aliases\": [\n      \"cmd\"\n    ],\n    \"import\": (() => import('@shikijs/langs/vb'))\n  },\n  {\n    \"id\": \"verilog\",\n    \"name\": \"Verilog\",\n    \"import\": (() => import('@shikijs/langs/verilog'))\n  },\n  {\n    \"id\": \"vhdl\",\n    \"name\": \"VHDL\",\n    \"import\": (() => import('@shikijs/langs/vhdl'))\n  },\n  {\n    \"id\": \"viml\",\n    \"name\": \"Vim Script\",\n    \"aliases\": [\n      \"vim\",\n      \"vimscript\"\n    ],\n    \"import\": (() => import('@shikijs/langs/viml'))\n  },\n  {\n    \"id\": \"vue\",\n    \"name\": \"Vue\",\n    \"import\": (() => import('@shikijs/langs/vue'))\n  },\n  {\n    \"id\": \"vue-html\",\n    \"name\": \"Vue HTML\",\n    \"import\": (() => import('@shikijs/langs/vue-html'))\n  },\n  {\n    \"id\": \"vue-vine\",\n    \"name\": \"Vue Vine\",\n    \"import\": (() => import('@shikijs/langs/vue-vine'))\n  },\n  {\n    \"id\": \"vyper\",\n    \"name\": \"Vyper\",\n    \"aliases\": [\n      \"vy\"\n    ],\n    \"import\": (() => import('@shikijs/langs/vyper'))\n  },\n  {\n    \"id\": \"wasm\",\n    \"name\": \"WebAssembly\",\n    \"import\": (() => import('@shikijs/langs/wasm'))\n  },\n  {\n    \"id\": \"wenyan\",\n    \"name\": \"Wenyan\",\n    \"aliases\": [\n      \"\\u6587\\u8A00\"\n    ],\n    \"import\": (() => import('@shikijs/langs/wenyan'))\n  },\n  {\n    \"id\": \"wgsl\",\n    \"name\": \"WGSL\",\n    \"import\": (() => import('@shikijs/langs/wgsl'))\n  },\n  {\n    \"id\": \"wikitext\",\n    \"name\": \"Wikitext\",\n    \"aliases\": [\n      \"mediawiki\",\n      \"wiki\"\n    ],\n    \"import\": (() => import('@shikijs/langs/wikitext'))\n  },\n  {\n    \"id\": \"wit\",\n    \"name\": \"WebAssembly Interface Types\",\n    \"import\": (() => import('@shikijs/langs/wit'))\n  },\n  {\n    \"id\": \"wolfram\",\n    \"name\": \"Wolfram\",\n    \"aliases\": [\n      \"wl\"\n    ],\n    \"import\": (() => import('@shikijs/langs/wolfram'))\n  },\n  {\n    \"id\": \"xml\",\n    \"name\": \"XML\",\n    \"import\": (() => import('@shikijs/langs/xml'))\n  },\n  {\n    \"id\": \"xsl\",\n    \"name\": \"XSL\",\n    \"import\": (() => import('@shikijs/langs/xsl'))\n  },\n  {\n    \"id\": \"yaml\",\n    \"name\": \"YAML\",\n    \"aliases\": [\n      \"yml\"\n    ],\n    \"import\": (() => import('@shikijs/langs/yaml'))\n  },\n  {\n    \"id\": \"zenscript\",\n    \"name\": \"ZenScript\",\n    \"import\": (() => import('@shikijs/langs/zenscript'))\n  },\n  {\n    \"id\": \"zig\",\n    \"name\": \"Zig\",\n    \"import\": (() => import('@shikijs/langs/zig'))\n  }\n];\nconst bundledLanguagesBase = Object.fromEntries(bundledLanguagesInfo.map((i) => [i.id, i.import]));\nconst bundledLanguagesAlias = Object.fromEntries(bundledLanguagesInfo.flatMap((i) => i.aliases?.map((a) => [a, i.import]) || []));\nconst bundledLanguages = {\n  ...bundledLanguagesBase,\n  ...bundledLanguagesAlias\n};\n\nexport { bundledLanguages, bundledLanguagesAlias, bundledLanguagesBase, bundledLanguagesInfo };\n", "const bundledThemesInfo = [\n  {\n    \"id\": \"andromeeda\",\n    \"displayName\": \"Andromeeda\",\n    \"type\": \"dark\",\n    \"import\": (() => import('@shikijs/themes/andromeeda'))\n  },\n  {\n    \"id\": \"aurora-x\",\n    \"displayName\": \"Aurora X\",\n    \"type\": \"dark\",\n    \"import\": (() => import('@shikijs/themes/aurora-x'))\n  },\n  {\n    \"id\": \"ayu-dark\",\n    \"displayName\": \"Ayu Dark\",\n    \"type\": \"dark\",\n    \"import\": (() => import('@shikijs/themes/ayu-dark'))\n  },\n  {\n    \"id\": \"ayu-light\",\n    \"displayName\": \"Ayu Light\",\n    \"type\": \"light\",\n    \"import\": (() => import('@shikijs/themes/ayu-light'))\n  },\n  {\n    \"id\": \"ayu-mirage\",\n    \"displayName\": \"Ayu Mirage\",\n    \"type\": \"dark\",\n    \"import\": (() => import('@shikijs/themes/ayu-mirage'))\n  },\n  {\n    \"id\": \"catppuccin-frappe\",\n    \"displayName\": \"Catppuccin Frapp\\xE9\",\n    \"type\": \"dark\",\n    \"import\": (() => import('@shikijs/themes/catppuccin-frappe'))\n  },\n  {\n    \"id\": \"catppuccin-latte\",\n    \"displayName\": \"Catppuccin Latte\",\n    \"type\": \"light\",\n    \"import\": (() => import('@shikijs/themes/catppuccin-latte'))\n  },\n  {\n    \"id\": \"catppuccin-macchiato\",\n    \"displayName\": \"Catppuccin Macchiato\",\n    \"type\": \"dark\",\n    \"import\": (() => import('@shikijs/themes/catppuccin-macchiato'))\n  },\n  {\n    \"id\": \"catppuccin-mocha\",\n    \"displayName\": \"Catppuccin Mocha\",\n    \"type\": \"dark\",\n    \"import\": (() => import('@shikijs/themes/catppuccin-mocha'))\n  },\n  {\n    \"id\": \"dark-plus\",\n    \"displayName\": \"Dark Plus\",\n    \"type\": \"dark\",\n    \"import\": (() => import('@shikijs/themes/dark-plus'))\n  },\n  {\n    \"id\": \"dracula\",\n    \"displayName\": \"Dracula Theme\",\n    \"type\": \"dark\",\n    \"import\": (() => import('@shikijs/themes/dracula'))\n  },\n  {\n    \"id\": \"dracula-soft\",\n    \"displayName\": \"Dracula Theme Soft\",\n    \"type\": \"dark\",\n    \"import\": (() => import('@shikijs/themes/dracula-soft'))\n  },\n  {\n    \"id\": \"everforest-dark\",\n    \"displayName\": \"Everforest Dark\",\n    \"type\": \"dark\",\n    \"import\": (() => import('@shikijs/themes/everforest-dark'))\n  },\n  {\n    \"id\": \"everforest-light\",\n    \"displayName\": \"Everforest Light\",\n    \"type\": \"light\",\n    \"import\": (() => import('@shikijs/themes/everforest-light'))\n  },\n  {\n    \"id\": \"github-dark\",\n    \"displayName\": \"GitHub Dark\",\n    \"type\": \"dark\",\n    \"import\": (() => import('@shikijs/themes/github-dark'))\n  },\n  {\n    \"id\": \"github-dark-default\",\n    \"displayName\": \"GitHub Dark Default\",\n    \"type\": \"dark\",\n    \"import\": (() => import('@shikijs/themes/github-dark-default'))\n  },\n  {\n    \"id\": \"github-dark-dimmed\",\n    \"displayName\": \"GitHub Dark Dimmed\",\n    \"type\": \"dark\",\n    \"import\": (() => import('@shikijs/themes/github-dark-dimmed'))\n  },\n  {\n    \"id\": \"github-dark-high-contrast\",\n    \"displayName\": \"GitHub Dark High Contrast\",\n    \"type\": \"dark\",\n    \"import\": (() => import('@shikijs/themes/github-dark-high-contrast'))\n  },\n  {\n    \"id\": \"github-light\",\n    \"displayName\": \"GitHub Light\",\n    \"type\": \"light\",\n    \"import\": (() => import('@shikijs/themes/github-light'))\n  },\n  {\n    \"id\": \"github-light-default\",\n    \"displayName\": \"GitHub Light Default\",\n    \"type\": \"light\",\n    \"import\": (() => import('@shikijs/themes/github-light-default'))\n  },\n  {\n    \"id\": \"github-light-high-contrast\",\n    \"displayName\": \"GitHub Light High Contrast\",\n    \"type\": \"light\",\n    \"import\": (() => import('@shikijs/themes/github-light-high-contrast'))\n  },\n  {\n    \"id\": \"gruvbox-dark-hard\",\n    \"displayName\": \"Gruvbox Dark Hard\",\n    \"type\": \"dark\",\n    \"import\": (() => import('@shikijs/themes/gruvbox-dark-hard'))\n  },\n  {\n    \"id\": \"gruvbox-dark-medium\",\n    \"displayName\": \"Gruvbox Dark Medium\",\n    \"type\": \"dark\",\n    \"import\": (() => import('@shikijs/themes/gruvbox-dark-medium'))\n  },\n  {\n    \"id\": \"gruvbox-dark-soft\",\n    \"displayName\": \"Gruvbox Dark Soft\",\n    \"type\": \"dark\",\n    \"import\": (() => import('@shikijs/themes/gruvbox-dark-soft'))\n  },\n  {\n    \"id\": \"gruvbox-light-hard\",\n    \"displayName\": \"Gruvbox Light Hard\",\n    \"type\": \"light\",\n    \"import\": (() => import('@shikijs/themes/gruvbox-light-hard'))\n  },\n  {\n    \"id\": \"gruvbox-light-medium\",\n    \"displayName\": \"Gruvbox Light Medium\",\n    \"type\": \"light\",\n    \"import\": (() => import('@shikijs/themes/gruvbox-light-medium'))\n  },\n  {\n    \"id\": \"gruvbox-light-soft\",\n    \"displayName\": \"Gruvbox Light Soft\",\n    \"type\": \"light\",\n    \"import\": (() => import('@shikijs/themes/gruvbox-light-soft'))\n  },\n  {\n    \"id\": \"horizon\",\n    \"displayName\": \"Horizon\",\n    \"type\": \"dark\",\n    \"import\": (() => import('@shikijs/themes/horizon'))\n  },\n  {\n    \"id\": \"horizon-bright\",\n    \"displayName\": \"Horizon Bright\",\n    \"type\": \"dark\",\n    \"import\": (() => import('@shikijs/themes/horizon-bright'))\n  },\n  {\n    \"id\": \"houston\",\n    \"displayName\": \"Houston\",\n    \"type\": \"dark\",\n    \"import\": (() => import('@shikijs/themes/houston'))\n  },\n  {\n    \"id\": \"kanagawa-dragon\",\n    \"displayName\": \"Kanagawa Dragon\",\n    \"type\": \"dark\",\n    \"import\": (() => import('@shikijs/themes/kanagawa-dragon'))\n  },\n  {\n    \"id\": \"kanagawa-lotus\",\n    \"displayName\": \"Kanagawa Lotus\",\n    \"type\": \"light\",\n    \"import\": (() => import('@shikijs/themes/kanagawa-lotus'))\n  },\n  {\n    \"id\": \"kanagawa-wave\",\n    \"displayName\": \"Kanagawa Wave\",\n    \"type\": \"dark\",\n    \"import\": (() => import('@shikijs/themes/kanagawa-wave'))\n  },\n  {\n    \"id\": \"laserwave\",\n    \"displayName\": \"LaserWave\",\n    \"type\": \"dark\",\n    \"import\": (() => import('@shikijs/themes/laserwave'))\n  },\n  {\n    \"id\": \"light-plus\",\n    \"displayName\": \"Light Plus\",\n    \"type\": \"light\",\n    \"import\": (() => import('@shikijs/themes/light-plus'))\n  },\n  {\n    \"id\": \"material-theme\",\n    \"displayName\": \"Material Theme\",\n    \"type\": \"dark\",\n    \"import\": (() => import('@shikijs/themes/material-theme'))\n  },\n  {\n    \"id\": \"material-theme-darker\",\n    \"displayName\": \"Material Theme Darker\",\n    \"type\": \"dark\",\n    \"import\": (() => import('@shikijs/themes/material-theme-darker'))\n  },\n  {\n    \"id\": \"material-theme-lighter\",\n    \"displayName\": \"Material Theme Lighter\",\n    \"type\": \"light\",\n    \"import\": (() => import('@shikijs/themes/material-theme-lighter'))\n  },\n  {\n    \"id\": \"material-theme-ocean\",\n    \"displayName\": \"Material Theme Ocean\",\n    \"type\": \"dark\",\n    \"import\": (() => import('@shikijs/themes/material-theme-ocean'))\n  },\n  {\n    \"id\": \"material-theme-palenight\",\n    \"displayName\": \"Material Theme Palenight\",\n    \"type\": \"dark\",\n    \"import\": (() => import('@shikijs/themes/material-theme-palenight'))\n  },\n  {\n    \"id\": \"min-dark\",\n    \"displayName\": \"Min Dark\",\n    \"type\": \"dark\",\n    \"import\": (() => import('@shikijs/themes/min-dark'))\n  },\n  {\n    \"id\": \"min-light\",\n    \"displayName\": \"Min Light\",\n    \"type\": \"light\",\n    \"import\": (() => import('@shikijs/themes/min-light'))\n  },\n  {\n    \"id\": \"monokai\",\n    \"displayName\": \"Monokai\",\n    \"type\": \"dark\",\n    \"import\": (() => import('@shikijs/themes/monokai'))\n  },\n  {\n    \"id\": \"night-owl\",\n    \"displayName\": \"Night Owl\",\n    \"type\": \"dark\",\n    \"import\": (() => import('@shikijs/themes/night-owl'))\n  },\n  {\n    \"id\": \"night-owl-light\",\n    \"displayName\": \"Night Owl Light\",\n    \"type\": \"light\",\n    \"import\": (() => import('@shikijs/themes/night-owl-light'))\n  },\n  {\n    \"id\": \"nord\",\n    \"displayName\": \"Nord\",\n    \"type\": \"dark\",\n    \"import\": (() => import('@shikijs/themes/nord'))\n  },\n  {\n    \"id\": \"one-dark-pro\",\n    \"displayName\": \"One Dark Pro\",\n    \"type\": \"dark\",\n    \"import\": (() => import('@shikijs/themes/one-dark-pro'))\n  },\n  {\n    \"id\": \"one-light\",\n    \"displayName\": \"One Light\",\n    \"type\": \"light\",\n    \"import\": (() => import('@shikijs/themes/one-light'))\n  },\n  {\n    \"id\": \"plastic\",\n    \"displayName\": \"Plastic\",\n    \"type\": \"dark\",\n    \"import\": (() => import('@shikijs/themes/plastic'))\n  },\n  {\n    \"id\": \"poimandres\",\n    \"displayName\": \"Poimandres\",\n    \"type\": \"dark\",\n    \"import\": (() => import('@shikijs/themes/poimandres'))\n  },\n  {\n    \"id\": \"red\",\n    \"displayName\": \"Red\",\n    \"type\": \"dark\",\n    \"import\": (() => import('@shikijs/themes/red'))\n  },\n  {\n    \"id\": \"rose-pine\",\n    \"displayName\": \"Ros\\xE9 Pine\",\n    \"type\": \"dark\",\n    \"import\": (() => import('@shikijs/themes/rose-pine'))\n  },\n  {\n    \"id\": \"rose-pine-dawn\",\n    \"displayName\": \"Ros\\xE9 Pine Dawn\",\n    \"type\": \"light\",\n    \"import\": (() => import('@shikijs/themes/rose-pine-dawn'))\n  },\n  {\n    \"id\": \"rose-pine-moon\",\n    \"displayName\": \"Ros\\xE9 Pine Moon\",\n    \"type\": \"dark\",\n    \"import\": (() => import('@shikijs/themes/rose-pine-moon'))\n  },\n  {\n    \"id\": \"slack-dark\",\n    \"displayName\": \"Slack Dark\",\n    \"type\": \"dark\",\n    \"import\": (() => import('@shikijs/themes/slack-dark'))\n  },\n  {\n    \"id\": \"slack-ochin\",\n    \"displayName\": \"Slack Ochin\",\n    \"type\": \"light\",\n    \"import\": (() => import('@shikijs/themes/slack-ochin'))\n  },\n  {\n    \"id\": \"snazzy-light\",\n    \"displayName\": \"Snazzy Light\",\n    \"type\": \"light\",\n    \"import\": (() => import('@shikijs/themes/snazzy-light'))\n  },\n  {\n    \"id\": \"solarized-dark\",\n    \"displayName\": \"Solarized Dark\",\n    \"type\": \"dark\",\n    \"import\": (() => import('@shikijs/themes/solarized-dark'))\n  },\n  {\n    \"id\": \"solarized-light\",\n    \"displayName\": \"Solarized Light\",\n    \"type\": \"light\",\n    \"import\": (() => import('@shikijs/themes/solarized-light'))\n  },\n  {\n    \"id\": \"synthwave-84\",\n    \"displayName\": \"Synthwave '84\",\n    \"type\": \"dark\",\n    \"import\": (() => import('@shikijs/themes/synthwave-84'))\n  },\n  {\n    \"id\": \"tokyo-night\",\n    \"displayName\": \"Tokyo Night\",\n    \"type\": \"dark\",\n    \"import\": (() => import('@shikijs/themes/tokyo-night'))\n  },\n  {\n    \"id\": \"vesper\",\n    \"displayName\": \"Vesper\",\n    \"type\": \"dark\",\n    \"import\": (() => import('@shikijs/themes/vesper'))\n  },\n  {\n    \"id\": \"vitesse-black\",\n    \"displayName\": \"Vitesse Black\",\n    \"type\": \"dark\",\n    \"import\": (() => import('@shikijs/themes/vitesse-black'))\n  },\n  {\n    \"id\": \"vitesse-dark\",\n    \"displayName\": \"Vitesse Dark\",\n    \"type\": \"dark\",\n    \"import\": (() => import('@shikijs/themes/vitesse-dark'))\n  },\n  {\n    \"id\": \"vitesse-light\",\n    \"displayName\": \"Vitesse Light\",\n    \"type\": \"light\",\n    \"import\": (() => import('@shikijs/themes/vitesse-light'))\n  }\n];\nconst bundledThemes = Object.fromEntries(bundledThemesInfo.map((i) => [i.id, i.import]));\n\nexport { bundledThemes, bundledThemesInfo };\n", "class ShikiError extends Error {\n  constructor(message) {\n    super(message);\n    this.name = \"ShikiError\";\n  }\n}\n\nfunction getHeapMax() {\n  return 2147483648;\n}\nfunction _emscripten_get_now() {\n  return typeof performance !== \"undefined\" ? performance.now() : Date.now();\n}\nconst alignUp = (x, multiple) => x + (multiple - x % multiple) % multiple;\nasync function main(init) {\n  let wasmMemory;\n  let buffer;\n  const binding = {};\n  function updateGlobalBufferAndViews(buf) {\n    buffer = buf;\n    binding.HEAPU8 = new Uint8Array(buf);\n    binding.HEAPU32 = new Uint32Array(buf);\n  }\n  function _emscripten_memcpy_big(dest, src, num) {\n    binding.HEAPU8.copyWithin(dest, src, src + num);\n  }\n  function emscripten_realloc_buffer(size) {\n    try {\n      wasmMemory.grow(size - buffer.byteLength + 65535 >>> 16);\n      updateGlobalBufferAndViews(wasmMemory.buffer);\n      return 1;\n    } catch {\n    }\n  }\n  function _emscripten_resize_heap(requestedSize) {\n    const oldSize = binding.HEAPU8.length;\n    requestedSize = requestedSize >>> 0;\n    const maxHeapSize = getHeapMax();\n    if (requestedSize > maxHeapSize)\n      return false;\n    for (let cutDown = 1; cutDown <= 4; cutDown *= 2) {\n      let overGrownHeapSize = oldSize * (1 + 0.2 / cutDown);\n      overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296);\n      const newSize = Math.min(maxHeapSize, alignUp(Math.max(requestedSize, overGrownHeapSize), 65536));\n      const replacement = emscripten_realloc_buffer(newSize);\n      if (replacement)\n        return true;\n    }\n    return false;\n  }\n  const UTF8Decoder = typeof TextDecoder != \"undefined\" ? new TextDecoder(\"utf8\") : void 0;\n  function UTF8ArrayToString(heapOrArray, idx, maxBytesToRead = 1024) {\n    const endIdx = idx + maxBytesToRead;\n    let endPtr = idx;\n    while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr;\n    if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) {\n      return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr));\n    }\n    let str = \"\";\n    while (idx < endPtr) {\n      let u0 = heapOrArray[idx++];\n      if (!(u0 & 128)) {\n        str += String.fromCharCode(u0);\n        continue;\n      }\n      const u1 = heapOrArray[idx++] & 63;\n      if ((u0 & 224) === 192) {\n        str += String.fromCharCode((u0 & 31) << 6 | u1);\n        continue;\n      }\n      const u2 = heapOrArray[idx++] & 63;\n      if ((u0 & 240) === 224) {\n        u0 = (u0 & 15) << 12 | u1 << 6 | u2;\n      } else {\n        u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | heapOrArray[idx++] & 63;\n      }\n      if (u0 < 65536) {\n        str += String.fromCharCode(u0);\n      } else {\n        const ch = u0 - 65536;\n        str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023);\n      }\n    }\n    return str;\n  }\n  function UTF8ToString(ptr, maxBytesToRead) {\n    return ptr ? UTF8ArrayToString(binding.HEAPU8, ptr, maxBytesToRead) : \"\";\n  }\n  const asmLibraryArg = {\n    emscripten_get_now: _emscripten_get_now,\n    emscripten_memcpy_big: _emscripten_memcpy_big,\n    emscripten_resize_heap: _emscripten_resize_heap,\n    fd_write: () => 0\n  };\n  async function createWasm() {\n    const info = {\n      env: asmLibraryArg,\n      wasi_snapshot_preview1: asmLibraryArg\n    };\n    const exports$1 = await init(info);\n    wasmMemory = exports$1.memory;\n    updateGlobalBufferAndViews(wasmMemory.buffer);\n    Object.assign(binding, exports$1);\n    binding.UTF8ToString = UTF8ToString;\n  }\n  await createWasm();\n  return binding;\n}\n\nvar __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\nlet onigBinding = null;\nfunction throwLastOnigError(onigBinding2) {\n  throw new ShikiError(onigBinding2.UTF8ToString(onigBinding2.getLastOnigError()));\n}\nclass UtfString {\n  constructor(str) {\n    __publicField(this, \"utf16Length\");\n    __publicField(this, \"utf8Length\");\n    __publicField(this, \"utf16Value\");\n    __publicField(this, \"utf8Value\");\n    __publicField(this, \"utf16OffsetToUtf8\");\n    __publicField(this, \"utf8OffsetToUtf16\");\n    const utf16Length = str.length;\n    const utf8Length = UtfString._utf8ByteLength(str);\n    const computeIndicesMapping = utf8Length !== utf16Length;\n    const utf16OffsetToUtf8 = computeIndicesMapping ? new Uint32Array(utf16Length + 1) : null;\n    if (computeIndicesMapping)\n      utf16OffsetToUtf8[utf16Length] = utf8Length;\n    const utf8OffsetToUtf16 = computeIndicesMapping ? new Uint32Array(utf8Length + 1) : null;\n    if (computeIndicesMapping)\n      utf8OffsetToUtf16[utf8Length] = utf16Length;\n    const utf8Value = new Uint8Array(utf8Length);\n    let i8 = 0;\n    for (let i16 = 0; i16 < utf16Length; i16++) {\n      const charCode = str.charCodeAt(i16);\n      let codePoint = charCode;\n      let wasSurrogatePair = false;\n      if (charCode >= 55296 && charCode <= 56319) {\n        if (i16 + 1 < utf16Length) {\n          const nextCharCode = str.charCodeAt(i16 + 1);\n          if (nextCharCode >= 56320 && nextCharCode <= 57343) {\n            codePoint = (charCode - 55296 << 10) + 65536 | nextCharCode - 56320;\n            wasSurrogatePair = true;\n          }\n        }\n      }\n      if (computeIndicesMapping) {\n        utf16OffsetToUtf8[i16] = i8;\n        if (wasSurrogatePair)\n          utf16OffsetToUtf8[i16 + 1] = i8;\n        if (codePoint <= 127) {\n          utf8OffsetToUtf16[i8 + 0] = i16;\n        } else if (codePoint <= 2047) {\n          utf8OffsetToUtf16[i8 + 0] = i16;\n          utf8OffsetToUtf16[i8 + 1] = i16;\n        } else if (codePoint <= 65535) {\n          utf8OffsetToUtf16[i8 + 0] = i16;\n          utf8OffsetToUtf16[i8 + 1] = i16;\n          utf8OffsetToUtf16[i8 + 2] = i16;\n        } else {\n          utf8OffsetToUtf16[i8 + 0] = i16;\n          utf8OffsetToUtf16[i8 + 1] = i16;\n          utf8OffsetToUtf16[i8 + 2] = i16;\n          utf8OffsetToUtf16[i8 + 3] = i16;\n        }\n      }\n      if (codePoint <= 127) {\n        utf8Value[i8++] = codePoint;\n      } else if (codePoint <= 2047) {\n        utf8Value[i8++] = 192 | (codePoint & 1984) >>> 6;\n        utf8Value[i8++] = 128 | (codePoint & 63) >>> 0;\n      } else if (codePoint <= 65535) {\n        utf8Value[i8++] = 224 | (codePoint & 61440) >>> 12;\n        utf8Value[i8++] = 128 | (codePoint & 4032) >>> 6;\n        utf8Value[i8++] = 128 | (codePoint & 63) >>> 0;\n      } else {\n        utf8Value[i8++] = 240 | (codePoint & 1835008) >>> 18;\n        utf8Value[i8++] = 128 | (codePoint & 258048) >>> 12;\n        utf8Value[i8++] = 128 | (codePoint & 4032) >>> 6;\n        utf8Value[i8++] = 128 | (codePoint & 63) >>> 0;\n      }\n      if (wasSurrogatePair)\n        i16++;\n    }\n    this.utf16Length = utf16Length;\n    this.utf8Length = utf8Length;\n    this.utf16Value = str;\n    this.utf8Value = utf8Value;\n    this.utf16OffsetToUtf8 = utf16OffsetToUtf8;\n    this.utf8OffsetToUtf16 = utf8OffsetToUtf16;\n  }\n  static _utf8ByteLength(str) {\n    let result = 0;\n    for (let i = 0, len = str.length; i < len; i++) {\n      const charCode = str.charCodeAt(i);\n      let codepoint = charCode;\n      let wasSurrogatePair = false;\n      if (charCode >= 55296 && charCode <= 56319) {\n        if (i + 1 < len) {\n          const nextCharCode = str.charCodeAt(i + 1);\n          if (nextCharCode >= 56320 && nextCharCode <= 57343) {\n            codepoint = (charCode - 55296 << 10) + 65536 | nextCharCode - 56320;\n            wasSurrogatePair = true;\n          }\n        }\n      }\n      if (codepoint <= 127)\n        result += 1;\n      else if (codepoint <= 2047)\n        result += 2;\n      else if (codepoint <= 65535)\n        result += 3;\n      else\n        result += 4;\n      if (wasSurrogatePair)\n        i++;\n    }\n    return result;\n  }\n  createString(onigBinding2) {\n    const result = onigBinding2.omalloc(this.utf8Length);\n    onigBinding2.HEAPU8.set(this.utf8Value, result);\n    return result;\n  }\n}\nconst _OnigString = class _OnigString {\n  constructor(str) {\n    __publicField(this, \"id\", ++_OnigString.LAST_ID);\n    __publicField(this, \"_onigBinding\");\n    __publicField(this, \"content\");\n    __publicField(this, \"utf16Length\");\n    __publicField(this, \"utf8Length\");\n    __publicField(this, \"utf16OffsetToUtf8\");\n    __publicField(this, \"utf8OffsetToUtf16\");\n    __publicField(this, \"ptr\");\n    if (!onigBinding)\n      throw new ShikiError(\"Must invoke loadWasm first.\");\n    this._onigBinding = onigBinding;\n    this.content = str;\n    const utfString = new UtfString(str);\n    this.utf16Length = utfString.utf16Length;\n    this.utf8Length = utfString.utf8Length;\n    this.utf16OffsetToUtf8 = utfString.utf16OffsetToUtf8;\n    this.utf8OffsetToUtf16 = utfString.utf8OffsetToUtf16;\n    if (this.utf8Length < 1e4 && !_OnigString._sharedPtrInUse) {\n      if (!_OnigString._sharedPtr)\n        _OnigString._sharedPtr = onigBinding.omalloc(1e4);\n      _OnigString._sharedPtrInUse = true;\n      onigBinding.HEAPU8.set(utfString.utf8Value, _OnigString._sharedPtr);\n      this.ptr = _OnigString._sharedPtr;\n    } else {\n      this.ptr = utfString.createString(onigBinding);\n    }\n  }\n  convertUtf8OffsetToUtf16(utf8Offset) {\n    if (this.utf8OffsetToUtf16) {\n      if (utf8Offset < 0)\n        return 0;\n      if (utf8Offset > this.utf8Length)\n        return this.utf16Length;\n      return this.utf8OffsetToUtf16[utf8Offset];\n    }\n    return utf8Offset;\n  }\n  convertUtf16OffsetToUtf8(utf16Offset) {\n    if (this.utf16OffsetToUtf8) {\n      if (utf16Offset < 0)\n        return 0;\n      if (utf16Offset > this.utf16Length)\n        return this.utf8Length;\n      return this.utf16OffsetToUtf8[utf16Offset];\n    }\n    return utf16Offset;\n  }\n  dispose() {\n    if (this.ptr === _OnigString._sharedPtr)\n      _OnigString._sharedPtrInUse = false;\n    else\n      this._onigBinding.ofree(this.ptr);\n  }\n};\n__publicField(_OnigString, \"LAST_ID\", 0);\n__publicField(_OnigString, \"_sharedPtr\", 0);\n// a pointer to a string of 10000 bytes\n__publicField(_OnigString, \"_sharedPtrInUse\", false);\nlet OnigString = _OnigString;\nclass OnigScanner {\n  constructor(patterns) {\n    __publicField(this, \"_onigBinding\");\n    __publicField(this, \"_ptr\");\n    if (!onigBinding)\n      throw new ShikiError(\"Must invoke loadWasm first.\");\n    const strPtrsArr = [];\n    const strLenArr = [];\n    for (let i = 0, len = patterns.length; i < len; i++) {\n      const utfString = new UtfString(patterns[i]);\n      strPtrsArr[i] = utfString.createString(onigBinding);\n      strLenArr[i] = utfString.utf8Length;\n    }\n    const strPtrsPtr = onigBinding.omalloc(4 * patterns.length);\n    onigBinding.HEAPU32.set(strPtrsArr, strPtrsPtr / 4);\n    const strLenPtr = onigBinding.omalloc(4 * patterns.length);\n    onigBinding.HEAPU32.set(strLenArr, strLenPtr / 4);\n    const scannerPtr = onigBinding.createOnigScanner(strPtrsPtr, strLenPtr, patterns.length);\n    for (let i = 0, len = patterns.length; i < len; i++)\n      onigBinding.ofree(strPtrsArr[i]);\n    onigBinding.ofree(strLenPtr);\n    onigBinding.ofree(strPtrsPtr);\n    if (scannerPtr === 0)\n      throwLastOnigError(onigBinding);\n    this._onigBinding = onigBinding;\n    this._ptr = scannerPtr;\n  }\n  dispose() {\n    this._onigBinding.freeOnigScanner(this._ptr);\n  }\n  findNextMatchSync(string, startPosition, arg) {\n    let options = 0 /* None */;\n    if (typeof arg === \"number\") {\n      options = arg;\n    }\n    if (typeof string === \"string\") {\n      string = new OnigString(string);\n      const result = this._findNextMatchSync(string, startPosition, false, options);\n      string.dispose();\n      return result;\n    }\n    return this._findNextMatchSync(string, startPosition, false, options);\n  }\n  _findNextMatchSync(string, startPosition, debugCall, options) {\n    const onigBinding2 = this._onigBinding;\n    const resultPtr = onigBinding2.findNextOnigScannerMatch(this._ptr, string.id, string.ptr, string.utf8Length, string.convertUtf16OffsetToUtf8(startPosition), options);\n    if (resultPtr === 0) {\n      return null;\n    }\n    const HEAPU32 = onigBinding2.HEAPU32;\n    let offset = resultPtr / 4;\n    const index = HEAPU32[offset++];\n    const count = HEAPU32[offset++];\n    const captureIndices = [];\n    for (let i = 0; i < count; i++) {\n      const beg = string.convertUtf8OffsetToUtf16(HEAPU32[offset++]);\n      const end = string.convertUtf8OffsetToUtf16(HEAPU32[offset++]);\n      captureIndices[i] = {\n        start: beg,\n        end,\n        length: end - beg\n      };\n    }\n    return {\n      index,\n      captureIndices\n    };\n  }\n}\nfunction isInstantiatorOptionsObject(dataOrOptions) {\n  return typeof dataOrOptions.instantiator === \"function\";\n}\nfunction isInstantiatorModule(dataOrOptions) {\n  return typeof dataOrOptions.default === \"function\";\n}\nfunction isDataOptionsObject(dataOrOptions) {\n  return typeof dataOrOptions.data !== \"undefined\";\n}\nfunction isResponse(dataOrOptions) {\n  return typeof Response !== \"undefined\" && dataOrOptions instanceof Response;\n}\nfunction isArrayBuffer(data) {\n  return typeof ArrayBuffer !== \"undefined\" && (data instanceof ArrayBuffer || ArrayBuffer.isView(data)) || typeof Buffer !== \"undefined\" && Buffer.isBuffer?.(data) || typeof SharedArrayBuffer !== \"undefined\" && data instanceof SharedArrayBuffer || typeof Uint32Array !== \"undefined\" && data instanceof Uint32Array;\n}\nlet initPromise;\nfunction loadWasm(options) {\n  if (initPromise)\n    return initPromise;\n  async function _load() {\n    onigBinding = await main(async (info) => {\n      let instance = options;\n      instance = await instance;\n      if (typeof instance === \"function\")\n        instance = await instance(info);\n      if (typeof instance === \"function\")\n        instance = await instance(info);\n      if (isInstantiatorOptionsObject(instance)) {\n        instance = await instance.instantiator(info);\n      } else if (isInstantiatorModule(instance)) {\n        instance = await instance.default(info);\n      } else {\n        if (isDataOptionsObject(instance))\n          instance = instance.data;\n        if (isResponse(instance)) {\n          if (typeof WebAssembly.instantiateStreaming === \"function\")\n            instance = await _makeResponseStreamingLoader(instance)(info);\n          else\n            instance = await _makeResponseNonStreamingLoader(instance)(info);\n        } else if (isArrayBuffer(instance)) {\n          instance = await _makeArrayBufferLoader(instance)(info);\n        } else if (instance instanceof WebAssembly.Module) {\n          instance = await _makeArrayBufferLoader(instance)(info);\n        } else if (\"default\" in instance && instance.default instanceof WebAssembly.Module) {\n          instance = await _makeArrayBufferLoader(instance.default)(info);\n        }\n      }\n      if (\"instance\" in instance)\n        instance = instance.instance;\n      if (\"exports\" in instance)\n        instance = instance.exports;\n      return instance;\n    });\n  }\n  initPromise = _load();\n  return initPromise;\n}\nfunction _makeArrayBufferLoader(data) {\n  return (importObject) => WebAssembly.instantiate(data, importObject);\n}\nfunction _makeResponseStreamingLoader(data) {\n  return (importObject) => WebAssembly.instantiateStreaming(data, importObject);\n}\nfunction _makeResponseNonStreamingLoader(data) {\n  return async (importObject) => {\n    const arrayBuffer = await data.arrayBuffer();\n    return WebAssembly.instantiate(arrayBuffer, importObject);\n  };\n}\n\nlet _defaultWasmLoader;\nfunction setDefaultWasmLoader(_loader) {\n  _defaultWasmLoader = _loader;\n}\nfunction getDefaultWasmLoader() {\n  return _defaultWasmLoader;\n}\nasync function createOnigurumaEngine(options) {\n  if (options)\n    await loadWasm(options);\n  return {\n    createScanner(patterns) {\n      return new OnigScanner(patterns.map((p) => typeof p === \"string\" ? p : p.source));\n    },\n    createString(s) {\n      return new OnigString(s);\n    }\n  };\n}\n\nexport { createOnigurumaEngine, getDefaultWasmLoader, loadWasm, setDefaultWasmLoader };\n", "import { createSingletonShorthands, guessEmbeddedLanguages, createBundledHighlighter } from '@shikijs/core';\nexport * from '@shikijs/core';\nimport { bundledLanguages } from './langs.mjs';\nexport { bundledLanguagesAlias, bundledLanguagesBase, bundledLanguagesInfo } from './langs.mjs';\nimport { bundledThemes } from './themes.mjs';\nexport { bundledThemesInfo } from './themes.mjs';\nimport { createOnigurumaEngine } from '@shikijs/engine-oniguruma';\n\nconst createHighlighter = /* @__PURE__ */ createBundledHighlighter({\n  langs: bundledLanguages,\n  themes: bundledThemes,\n  engine: () => createOnigurumaEngine(import('shiki/wasm'))\n});\nconst {\n  codeToHtml,\n  codeToHast,\n  codeToTokens,\n  codeToTokensBase,\n  codeToTokensWithThemes,\n  getSingletonHighlighter,\n  getLastGrammarState\n} = /* @__PURE__ */ createSingletonShorthands(\n  createHighlighter,\n  { guessEmbeddedLanguages }\n);\n\nexport { bundledLanguages, bundledThemes, codeToHast, codeToHtml, codeToTokens, codeToTokensBase, codeToTokensWithThemes, createHighlighter, getLastGrammarState, getSingletonHighlighter };\n", "import \"AgentChatCodePatch.styles_1jnurlf.wyw.css\"; import { cx } from \"@linaria/core\";\nimport * as commonStyles from \"./AgentChat.common.styles.ts\";\nexport const codeCard = \"codeCard_ckx4nzl\";\nexport const header = \"header_homz862\";\nexport const divider = \"divider_djz1zg3\";\nexport const headerIcon = \"headerIcon_hody5ej\";\nexport const fileName = cx(commonStyles.title, \"fileName_f1gvzsf7\");\nexport const fileNameExtension = \"fileNameExtension_f22ktxp\";\nexport const lines = \"lines_li8awxu\";\nexport const diffPre = \"diffPre_d11rveex\";\nexport const diffCodeBlock = \"diffCodeBlock_dl0plrt\";\nexport const diffLine = \"diffLine_d1dmc48a\";\nexport const diffLineAdd = \"diffLineAdd_dlt52os\";\nexport const diffLineRemove = \"diffLineRemove_d12vzan7\";\nexport const diffGutter = \"diffGutter_d1z0zz5h\";\nexport const diffGutterAdd = \"diffGutterAdd_d1olgdp6\";\nexport const diffGutterRemove = \"diffGutterRemove_ducq2q9\";\nexport const diffCode = \"diffCode_desoouu\";", "import \"AgentErrorCard.styles_gcbgfc.wyw.css\"; export const card = \"card_c1szj2xq\";\nexport const wrapText = \"wrapText_ww7s07w\";", "import type { SVGProps } from \"react\"\n\nexport function IconAgentWarning(props: SVGProps<SVGSVGElement>) {\n\treturn (\n\t\t<svg\n\t\t\trole=\"presentation\"\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\twidth=\"12\"\n\t\t\theight=\"12\"\n\t\t\tviewBox=\"0 0 12 12\"\n\t\t\tfill=\"none\"\n\t\t\t{...props}\n\t\t>\n\t\t\t<g stroke=\"currentColor\" strokeWidth=\"1.5\">\n\t\t\t\t<path fill=\"currentColor\" fillOpacity={0.2} d=\"M5.75 1a5 5 0 1 1-.001 10.001A5 5 0 0 1 5.75 1Z\" />\n\t\t\t\t<path fill=\"transparent\" strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5.75 5.75v-2\" />\n\t\t\t\t<path fill=\"transparent\" strokeLinecap=\"round\" d=\"M5.75 8h0\" />\n\t\t\t</g>\n\t\t</svg>\n\t)\n}\n", "import { Button } from \"@framerjs/fresco\"\nimport { cx } from \"@linaria/core\"\nimport { AgentRow } from \"app/agent/components/AgentRow/AgentRow.tsx\"\nimport * as commonStyles from \"./AgentChat.common.styles.ts\"\nimport * as agentChatTaskStyles from \"./AgentChatTask.styles.ts\"\nimport * as styles from \"./AgentErrorCard.styles.ts\"\nimport { IconAgentWarning } from \"./IconAgentWarning.tsx\"\n\nexport interface AgentErrorCardProps {\n\ttitle: string\n\tmessage: string\n\tactionLabel?: string\n\tonLabelClick?: () => void\n}\n\nexport function AgentErrorCard({ title, message, actionLabel, onLabelClick }: AgentErrorCardProps) {\n\treturn (\n\t\t<div className={cx(agentChatTaskStyles.card, styles.card)}>\n\t\t\t<div className={agentChatTaskStyles.content}>\n\t\t\t\t<div className={agentChatTaskStyles.header}>\n\t\t\t\t\t<div className={agentChatTaskStyles.icon}>\n\t\t\t\t\t\t<IconAgentWarning />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className={commonStyles.title}>{title}</div>\n\t\t\t\t</div>\n\t\t\t\t<AgentRow.Text className={cx(agentChatTaskStyles.message, agentChatTaskStyles.logColor, styles.wrapText)}>\n\t\t\t\t\t{message}\n\t\t\t\t</AgentRow.Text>\n\t\t\t</div>\n\t\t\t{actionLabel && onLabelClick && (\n\t\t\t\t<Button className={commonStyles.actionButton} onClick={onLabelClick}>\n\t\t\t\t\t{actionLabel}\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n", "import { assertNever } from \"@framerjs/shared\"\nimport type { AgentRequestAbortedReason } from \"app/ai/agents/types.ts\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport { isNumber, isString } from \"utils/typeChecks.ts\"\nimport { InlineAgentChatCard } from \"./AgentChatTask.tsx\"\nimport { AgentErrorCard } from \"./AgentErrorCard.tsx\"\nimport { IconAgentWarning } from \"./IconAgentWarning.tsx\"\n\nconst miscErrorTitles = {\n\t\"credit-limit-reached\": \"Out of credits\",\n\t\"ai-disabled\": \"AI Features Disabled\",\n\t\"user-stopped\": \"Generation Stopped\",\n\t\"queue-interrupted\": \"Generation Interrupted\",\n\tunknown: \"Generation Interrupted\",\n} as const\n\ninterface ErrorDisplay {\n\ttitle: string\n\tmessage: string\n}\n\nfunction getErrorDisplay(code: string | number | undefined, message: string | undefined): ErrorDisplay {\n\tconst numericCode = isNumber(code) ? code : isString(code) ? parseInt(code, 10) : undefined\n\n\tif (numericCode === 503 || messageContains(message, \"overloaded\")) {\n\t\treturn {\n\t\t\ttitle: \"Model Overloaded\",\n\t\t\tmessage: \"The model is at capacity. Try again or switch to a different model.\",\n\t\t}\n\t}\n\n\tif (numericCode === 429 || messageContains(message, \"rate limit\")) {\n\t\treturn {\n\t\t\ttitle: \"Rate Limited\",\n\t\t\tmessage: \"Too many requests. Wait a moment before retrying.\",\n\t\t}\n\t}\n\n\tif (numericCode === 502) {\n\t\treturn {\n\t\t\ttitle: \"Provider Unavailable\",\n\t\t\tmessage: \"The AI provider is temporarily unavailable. Try again or switch to a different model.\",\n\t\t}\n\t}\n\n\tif (numericCode === 408 || messageContains(message, \"timeout\") || messageContains(message, \"timed out\")) {\n\t\treturn {\n\t\t\ttitle: \"Request Timed Out\",\n\t\t\tmessage: \"Please try again. If the problem persists, use a different model or contact support.\",\n\t\t}\n\t}\n\n\tif (\n\t\tmessageContains(message, \"content filter\") ||\n\t\tmessageContains(message, \"moderation\") ||\n\t\tmessageContains(message, \"content management policy\")\n\t) {\n\t\treturn {\n\t\t\ttitle: \"Content Filtered\",\n\t\t\tmessage: \"The request was filtered by the model's safety system. Try rephrasing your prompt.\",\n\t\t}\n\t}\n\n\tif (numericCode === 401 || numericCode === 403) {\n\t\treturn {\n\t\t\ttitle: \"Authentication Error\",\n\t\t\tmessage: \"Your session might have expired. Please reload the page and try again.\",\n\t\t}\n\t}\n\n\tif (!numericCode && messageContains(message, \"network error\")) {\n\t\treturn {\n\t\t\ttitle: \"Connection Error\",\n\t\t\tmessage: \"Could not reach the AI service. Check your internet connection and try again.\",\n\t\t}\n\t}\n\n\treturn {\n\t\ttitle: \"Generation Error\",\n\t\tmessage: \"Something went wrong. Please try again.\",\n\t}\n}\n\nfunction messageContains(message: string | undefined, substring: string): boolean {\n\tif (!message) return false\n\treturn message.toLowerCase().includes(substring)\n}\n\ninterface AgentChatErrorProps {\n\terror: AgentRequestAbortedReason\n\tonRetry?: () => void\n}\n\nexport function AgentChatError({ error, onRetry }: AgentChatErrorProps) {\n\tswitch (error.reason) {\n\t\tcase \"error\": {\n\t\t\tconst { title, message } = getErrorDisplay(error.code, error.message)\n\t\t\treturn (\n\t\t\t\t<AgentErrorCard\n\t\t\t\t\ttitle={title}\n\t\t\t\t\tmessage={message}\n\t\t\t\t\tactionLabel={onRetry ? Dictionary.TryAgain : undefined}\n\t\t\t\t\tonLabelClick={onRetry}\n\t\t\t\t/>\n\t\t\t)\n\t\t}\n\t\tcase \"credit-limit-reached\":\n\t\tcase \"ai-disabled\":\n\t\tcase \"user-stopped\":\n\t\tcase \"queue-interrupted\":\n\t\tcase \"unknown\":\n\t\t\treturn (\n\t\t\t\t<InlineAgentChatCard\n\t\t\t\t\ticon={<IconAgentWarning />}\n\t\t\t\t\ttitle={miscErrorTitles[error.reason]}\n\t\t\t\t\tlabel={onRetry ? Dictionary.Resume : undefined}\n\t\t\t\t\tonLabelClick={onRetry}\n\t\t\t\t/>\n\t\t\t)\n\t\tdefault:\n\t\t\tassertNever(error, \"Unknown agent error reason\")\n\t}\n}\n", "import { IconAgent, IconInputDropdown } from \"@framerjs/fresco\"\nimport { dimensions } from \"@framerjs/fresco/tokens\"\nimport { hasContourOverride } from \"app/ai/contourOverride.ts\"\nimport { LanguageModel } from \"app/ai/languageModels.ts\"\nimport { modelCreditMultiplier, modelCreditMultiplierLabel, modelDescription, modelNames } from \"app/ai/models.ts\"\nimport { useExperimentIsOn } from \"app/experiments.ts\"\nimport type { MenuItemOptions } from \"app/menu.ts\"\nimport { EngineChange } from \"document/EngineChanges.ts\"\nimport engine from \"document/engine.ts\"\nimport { useEngineState } from \"document/useEngineState.ts\"\nimport { cx } from \"library/modules/cx.ts\"\nimport { memo, startTransition } from \"react\"\nimport { isUndefined } from \"utils/typeChecks.ts\"\nimport { AgentRow } from \"../AgentRow/AgentRow.tsx\"\nimport * as styles from \"./ModelPicker.styles.ts\"\nimport { defaultModels } from \"./models.ts\"\n\nconst menuOffset = 15\nconst searchInputSeparatorHeight = 1\n\ninterface ModelPickerProps {\n\tmodels?: readonly LanguageModel[]\n\tselected: LanguageModel\n\tshouldShowAgentIcon?: boolean\n\tonModelChange: (model: LanguageModel) => void\n}\n\nexport const ModelPicker = memo(function ModelPicker({\n\tmodels,\n\tselected,\n\tshouldShowAgentIcon = true,\n\tonModelChange,\n}: ModelPickerProps) {\n\tconst advancedControlsEnabled = useExperimentIsOn(\"advancedAgentControls\")\n\tconst usableModels = models ?? defaultModels\n\tconst contourOverride = useEngineState(\n\t\t() => engine.stores.persistedUserDefaults.contourOverride,\n\t\t[],\n\t\t[EngineChange.UserDefaultsStore],\n\t\t{ deepEqual: true },\n\t)\n\tconst contourLabelSuffix = hasContourOverride(contourOverride) ? \"*\" : \"\"\n\n\tfunction getModelLabel(model: LanguageModel): string {\n\t\tif (model === LanguageModel.Contour) return `${modelNames[model]}${contourLabelSuffix}`\n\t\treturn modelNames[model]\n\t}\n\n\tfunction handleClick(event: React.MouseEvent<HTMLButtonElement>) {\n\t\tconst bounds = event.currentTarget.getBoundingClientRect()\n\n\t\tconst sortedModels = [...usableModels].sort(\n\t\t\t(a, b) => (modelCreditMultiplier(a) ?? Infinity) - (modelCreditMultiplier(b) ?? Infinity),\n\t\t)\n\n\t\tconst modelItems: MenuItemOptions[] = sortedModels.map(model => {\n\t\t\tconst multiplier = modelCreditMultiplierLabel(model)\n\t\t\tconst description = modelDescription(model)\n\n\t\t\treturn {\n\t\t\t\tlabel: getModelLabel(model),\n\t\t\t\tchecked: model === selected,\n\t\t\t\tbadge: multiplier,\n\t\t\t\tbadgeClassName: styles.multiplierLabel,\n\t\t\t\ttooltip: !isUndefined(description) && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<span className={styles.tooltipModelName}>{description.name}</span>{\" \"}\n\t\t\t\t\t\t<span className={styles.tooltipBody}>{description.body}</span>\n\t\t\t\t\t</>\n\t\t\t\t),\n\t\t\t\tclick: () => startTransition(() => onModelChange(model)),\n\t\t\t}\n\t\t})\n\n\t\tconst resolvedMenuPlacement = resolveMenuPlacement(bounds, modelItems.length, advancedControlsEnabled)\n\t\tconst menuItems: MenuItemOptions[] = modelItems\n\n\t\tengine.stores.contextMenuStore.show(menuItems, {\n\t\t\tlocation: {\n\t\t\t\tx: bounds.left - 6,\n\t\t\t\ty: resolvedMenuPlacement === \"top-start\" ? bounds.top - menuOffset : bounds.bottom + menuOffset,\n\t\t\t},\n\t\t\tplacement: resolvedMenuPlacement,\n\t\t\tsearchable: advancedControlsEnabled,\n\t\t})\n\t}\n\n\treturn (\n\t\t<button type=\"button\" onClick={handleClick} aria-haspopup=\"listbox\" className={styles.button}>\n\t\t\t{shouldShowAgentIcon && (\n\t\t\t\t<AgentRow.Icon>\n\t\t\t\t\t<IconAgent />\n\t\t\t\t</AgentRow.Icon>\n\t\t\t)}\n\t\t\t<span className={styles.title}>{getModelLabel(selected)}</span>\n\t\t\t<div className={cx(styles.chevron)}>\n\t\t\t\t<IconInputDropdown />\n\t\t\t</div>\n\t\t</button>\n\t)\n})\n\n/**\n * Resolves the menu placement based on the bounds of the button and the number of items in the menu.\n * It uses an \"estimate\" of the menu height to determine the placement.\n */\nfunction resolveMenuPlacement(bounds: DOMRect, itemCount: number, hasSearch: boolean): \"bottom-start\" | \"top-start\" {\n\tconst searchInputHeight = hasSearch\n\t\t? dimensions.values.contentItemHeight + dimensions.values.menuPadding + searchInputSeparatorHeight\n\t\t: 0\n\tconst menuHeight =\n\t\titemCount * dimensions.values.contentItemHeight +\n\t\tdimensions.values.menuPadding * 2 +\n\t\tdimensions.values.menuGap * 2 +\n\t\tsearchInputHeight\n\n\tconst spaceBelow = window.innerHeight - bounds.bottom\n\tconst spaceAbove = bounds.top\n\tif (spaceBelow >= menuHeight + menuOffset) return \"bottom-start\"\n\tif (spaceAbove >= menuHeight + menuOffset) return \"top-start\"\n\treturn \"bottom-start\"\n}\n", "import \"ModelPicker.styles_19x3h8q.wyw.css\"; export const multiplierLabel = \"multiplierLabel_m1wbmpu0\";\nexport const tooltipModelName = \"tooltipModelName_tv1f5wm\";\nexport const tooltipBody = \"tooltipBody_tpj3wfx\";\nexport const button = \"button_bykvysu\";\nexport const title = \"title_t1mu83lj\";\nexport const chevron = \"chevron_c1gb5cco\";", "import type { SVGProps } from \"react\"\n\nconst agentChatIconSize = 19.5\n\ntype AgentChatIconProps = SVGProps<SVGSVGElement>\n\ninterface IconAgentChatStopProps extends AgentChatIconProps {\n\tfillColor?: string\n}\n\nexport function IconAgentChatSelect(props: AgentChatIconProps) {\n\treturn (\n\t\t<svg\n\t\t\trole=\"presentation\"\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\twidth={agentChatIconSize}\n\t\t\theight={agentChatIconSize}\n\t\t\tfill=\"none\"\n\t\t\taria-hidden=\"true\"\n\t\t\tfocusable=\"false\"\n\t\t\t{...props}\n\t\t>\n\t\t\t<path\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\tfillOpacity={0.2}\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\td=\"M5.785 5.426a.5.5 0 0 0-.61.61l2.297 8.896a.5.5 0 0 0 .925.11l2.224-4.17 4.17-2.225a.5.5 0 0 0-.11-.925Z\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n\nexport function IconAgentChatPlus(props: AgentChatIconProps) {\n\treturn (\n\t\t<svg\n\t\t\trole=\"presentation\"\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\twidth={agentChatIconSize}\n\t\t\theight={agentChatIconSize}\n\t\t\tfill=\"none\"\n\t\t\taria-hidden=\"true\"\n\t\t\tfocusable=\"false\"\n\t\t\t{...props}\n\t\t>\n\t\t\t<g fill=\"transparent\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"1.5\">\n\t\t\t\t<path d=\"M9.75 4.75v10\" />\n\t\t\t\t<path d=\"M4.75 9.75h10\" />\n\t\t\t</g>\n\t\t</svg>\n\t)\n}\n\nexport function IconAgentChatSend(props: AgentChatIconProps) {\n\treturn (\n\t\t<svg\n\t\t\trole=\"presentation\"\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\twidth={agentChatIconSize}\n\t\t\theight={agentChatIconSize}\n\t\t\tfill=\"none\"\n\t\t\taria-hidden=\"true\"\n\t\t\tfocusable=\"false\"\n\t\t\t{...props}\n\t\t>\n\t\t\t<path\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\td=\"m4.75 9.5 4.293-4.293a1 1 0 0 1 1.414 0L14.75 9.5M9.75 6.253v8.5\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n\nexport function IconAgentChatStop({ fillColor = \"currentColor\", ...props }: IconAgentChatStopProps) {\n\treturn (\n\t\t<svg\n\t\t\trole=\"presentation\"\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\twidth={agentChatIconSize}\n\t\t\theight={agentChatIconSize}\n\t\t\tfill=\"none\"\n\t\t\taria-hidden=\"true\"\n\t\t\tfocusable=\"false\"\n\t\t\t{...props}\n\t\t>\n\t\t\t<path\n\t\t\t\td=\"M4.75 5.75C4.75 5.198 5.198 4.75 5.75 4.75H13.75C14.302 4.75 14.75 5.198 14.75 5.75V13.75C14.75 14.302 14.302 14.75 13.75 14.75H5.75C5.198 14.75 4.75 14.302 4.75 13.75Z\"\n\t\t\t\tfill={fillColor}\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n", "import { Stack } from \"@framerjs/fresco\"\nimport { colors } from \"@framerjs/fresco/tokens\"\nimport { cx } from \"@linaria/core\"\nimport { getActionAccelerator } from \"app/AppAccelerators.ts\"\nimport type { LanguageModel } from \"app/ai/languageModels.ts\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport { useExperimentIsOn } from \"app/experiments.ts\"\nimport { ToolbarTooltip, useToolbarTooltipVariant } from \"document/components/chrome/projectbar/ToolbarTooltip.tsx\"\nimport type React from \"react\"\nimport { getAcceleratorTokenSeparator, getAcceleratorTokens } from \"web/pages/project/lib/getAcceleratorLabel.ts\"\nimport * as agentButtonStyles from \"../AgentButton/AgentButton.styles.ts\"\nimport { AgentButton } from \"../AgentButton/AgentButton.tsx\"\nimport { AgentRow } from \"../AgentRow/AgentRow.tsx\"\nimport { ModelPicker } from \"../ModelPicker/ModelPicker.tsx\"\nimport { allModels, allModelsWithoutOpenAI, defaultModelsWithOpenAI } from \"../ModelPicker/models.ts\"\nimport { IconAgentChatPlus, IconAgentChatSelect, IconAgentChatSend, IconAgentChatStop } from \"./AgentChatIcons.tsx\"\nimport * as styles from \"./AgentFooter.styles.ts\"\n\ntype AgentFooterVariant = \"modal\" | \"chat\"\n\nconst contextLabel = Dictionary.Select\nconst addLabel = Dictionary.Add\nconst sendLabel = Dictionary.Send\nconst stopLabel = Dictionary.Stop\n\ninterface AgentFooterProps {\n\tclassName?: string\n\tvariant?: AgentFooterVariant\n\tmodel: LanguageModel\n\tcanSubmit: boolean\n\tisDragging: boolean\n\tcanAddMore: boolean\n\tonAddAttachment: () => void\n\tonModelChange: (model: LanguageModel) => void\n\t/** Optional. Will render the stop button instead of submit button if provided. */\n\tonStop?: () => void\n\tonSubmit: () => void\n\tonSelectMode?: () => void\n\tisSelectionMode?: boolean\n}\n\ninterface AgentButtonTooltipProps {\n\tchildren: React.ReactNode\n\tenabled: boolean\n\ttext: string\n\tshortcut?: string\n}\n\nexport function AgentFooter({\n\tvariant = \"modal\",\n\tmodel,\n\tonModelChange,\n\tcanSubmit,\n\tonSubmit,\n\tonStop,\n\tisDragging,\n\tcanAddMore,\n\tonAddAttachment,\n\tonSelectMode,\n\tisSelectionMode,\n\tclassName,\n}: AgentFooterProps) {\n\tconst isChat = variant === \"chat\"\n\tconst addButtonVariant = isChat ? \"clean\" : isDragging ? \"primary\" : \"outline\"\n\tconst submitButtonVariant = isChat ? \"clean\" : \"secondary\"\n\tconst showAdvancedControls = useExperimentIsOn(\"advancedAgentControls\")\n\tconst showOpenAIModels = useExperimentIsOn(\"agentUseOpenAIResponsesAPI\")\n\tconst modelPickerModels = resolveModelPickerModels(showAdvancedControls, showOpenAIModels)\n\tconst tooltipVariant = useToolbarTooltipVariant()\n\tconst shouldUseToolbarTooltip = isChat && tooltipVariant === \"toolbar\"\n\tconst contextAccelerator = getActionAccelerator(\"toolAgentPanel\")\n\tconst contextShortcut = contextAccelerator\n\t\t? getAcceleratorTokens(contextAccelerator).join(getAcceleratorTokenSeparator())\n\t\t: undefined\n\n\treturn (\n\t\t<AgentRow.Item className={cx(styles.footer, className)}>\n\t\t\t<Stack direction=\"row\" gap={8} className={styles.modelPickerContainer}>\n\t\t\t\t<ModelPicker\n\t\t\t\t\tmodels={modelPickerModels}\n\t\t\t\t\tselected={model}\n\t\t\t\t\tshouldShowAgentIcon={variant === \"modal\"}\n\t\t\t\t\tonModelChange={onModelChange}\n\t\t\t\t/>\n\t\t\t</Stack>\n\n\t\t\t<Stack direction=\"row\" gap={5}>\n\t\t\t\t{isChat && onSelectMode && (\n\t\t\t\t\t<AgentButtonTooltip enabled={shouldUseToolbarTooltip} text={contextLabel} shortcut={contextShortcut}>\n\t\t\t\t\t\t<AgentButton\n\t\t\t\t\t\t\tvariant=\"clean\"\n\t\t\t\t\t\t\tclassName={cx(\n\t\t\t\t\t\t\t\tagentButtonStyles.sharedIconColors,\n\t\t\t\t\t\t\t\tstyles.chatIconButton,\n\t\t\t\t\t\t\t\tisSelectionMode && styles.active,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\taria-label={contextLabel}\n\t\t\t\t\t\t\t// Do it on mousedown so it triggers before the input blurs (which exit the tool)\n\t\t\t\t\t\t\tonMouseDown={onSelectMode}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<IconAgentChatSelect />\n\t\t\t\t\t\t</AgentButton>\n\t\t\t\t\t</AgentButtonTooltip>\n\t\t\t\t)}\n\n\t\t\t\t<AgentButtonTooltip enabled={shouldUseToolbarTooltip} text={addLabel}>\n\t\t\t\t\t<AgentButton\n\t\t\t\t\t\tclassName={cx(isChat && agentButtonStyles.sharedIconColors, isChat && styles.chatIconButton)}\n\t\t\t\t\t\tvariant={addButtonVariant}\n\t\t\t\t\t\taria-label={addLabel}\n\t\t\t\t\t\tonClick={onAddAttachment}\n\t\t\t\t\t\tdisabled={!canAddMore}\n\t\t\t\t\t>\n\t\t\t\t\t\t<IconAgentChatPlus />\n\t\t\t\t\t</AgentButton>\n\t\t\t\t</AgentButtonTooltip>\n\t\t\t\t{onStop ? (\n\t\t\t\t\t<AgentButtonTooltip enabled={shouldUseToolbarTooltip} text={stopLabel}>\n\t\t\t\t\t\t<AgentButton\n\t\t\t\t\t\t\tclassName={cx(\n\t\t\t\t\t\t\t\tisChat && agentButtonStyles.sharedIconColors,\n\t\t\t\t\t\t\t\tisChat && styles.chatIconButton,\n\t\t\t\t\t\t\t\tstyles.active,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tvariant=\"clean\"\n\t\t\t\t\t\t\taria-label={stopLabel}\n\t\t\t\t\t\t\tonClick={onStop}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<IconAgentChatStop fillColor={colors.agentButtonChatStopFill} />\n\t\t\t\t\t\t</AgentButton>\n\t\t\t\t\t</AgentButtonTooltip>\n\t\t\t\t) : (\n\t\t\t\t\t<AgentButtonTooltip enabled={shouldUseToolbarTooltip} text={sendLabel}>\n\t\t\t\t\t\t<AgentButton\n\t\t\t\t\t\t\tclassName={cx(\n\t\t\t\t\t\t\t\tisChat && agentButtonStyles.sharedIconColors,\n\t\t\t\t\t\t\t\tisChat && styles.chatIconButton,\n\t\t\t\t\t\t\t\tcanSubmit && styles.active,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tvariant={submitButtonVariant}\n\t\t\t\t\t\t\taria-label={sendLabel}\n\t\t\t\t\t\t\tonClick={onSubmit}\n\t\t\t\t\t\t\tdisabled={!canSubmit}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<IconAgentChatSend />\n\t\t\t\t\t\t</AgentButton>\n\t\t\t\t\t</AgentButtonTooltip>\n\t\t\t\t)}\n\t\t\t</Stack>\n\t\t</AgentRow.Item>\n\t)\n}\n\nfunction resolveModelPickerModels(\n\tshowAdvancedControls: boolean,\n\tshowOpenAIModels: boolean,\n): readonly LanguageModel[] | undefined {\n\tif (showAdvancedControls) {\n\t\treturn showOpenAIModels ? allModels : allModelsWithoutOpenAI\n\t}\n\n\treturn showOpenAIModels ? defaultModelsWithOpenAI : undefined\n}\n\nfunction AgentButtonTooltip({ children, enabled, text, shortcut }: AgentButtonTooltipProps) {\n\treturn (\n\t\t<ToolbarTooltip\n\t\t\tenabled={enabled}\n\t\t\ttext={text}\n\t\t\tshortcut={shortcut}\n\t\t\tcolorVariant=\"lighter\"\n\t\t\tdirection=\"bottom\"\n\t\t\toffsetDelta={1}\n\t\t>\n\t\t\t{children}\n\t\t</ToolbarTooltip>\n\t)\n}\n", "import { cx } from \"@linaria/core\"\nimport type { AgentInputEditorAPI } from \"app/agent/editor/useAgentInputEditorView.ts\"\nimport { useLayoutEffect, useRef } from \"react\"\nimport * as styles from \"./AgentInput.styles.ts\"\n\ninterface AgentInputProps {\n\tclassName?: string\n\tid?: string\n\teditorAPI: AgentInputEditorAPI\n\tautoFocus?: boolean\n}\n\nexport function AgentInput({ className, id, editorAPI, autoFocus = false }: AgentInputProps) {\n\tconst containerRef = useRef<HTMLDivElement>(null)\n\n\tconst { editorView, focus } = editorAPI\n\n\tuseLayoutEffect(() => {\n\t\tconst container = containerRef.current\n\t\tif (!container) return\n\n\t\tconst { dom } = editorView\n\t\tcontainer.appendChild(dom)\n\n\t\tif (autoFocus) {\n\t\t\t// Defer focus to next animation frame to avoid triggering engine state changes\n\t\t\t// during React's synchronous rendering phase\n\t\t\trequestAnimationFrame(() => focus())\n\t\t}\n\t}, [editorView, focus, autoFocus])\n\n\treturn (\n\t\t<div\n\t\t\tref={containerRef}\n\t\t\tid={id}\n\t\t\tclassName={cx(styles.inputBase, styles.input, className)}\n\t\t\trole=\"textbox\"\n\t\t\ttabIndex={0}\n\t\t/>\n\t)\n}\n", "import \"AgentInput.styles_1u8vsnn.wyw.css\"; export const inputBase = \"inputBase_ijvkoy6\";\nexport const inputLineHeight = 1.4;\nexport const input = \"input_in2xmas\";", "import { Popover, useViewportResize } from \"@framerjs/fresco\"\nimport {\n\tPopoverComboBoxListSection,\n\tpopoverComboBoxAttachToDefaults,\n} from \"@framerjs/fresco/components/PopoverComboBox.shared\"\nimport type { ComboBoxListItem } from \"@framerjs/fresco/components/utils/useComboBox\"\nimport { filterList, flattenList, nextSelectableItemAndIndex } from \"@framerjs/fresco/components/utils/useComboBox\"\nimport { useEffect, useInsertionEffect, useMemo, useState } from \"react\"\nimport type { SuggestKeyCommandsRef } from \"../../editor/suggestPlugin.ts\"\nimport * as styles from \"./AgentSuggestionPopover.styles.ts\"\n\ninterface Props {\n\titems: readonly ComboBoxListItem[]\n\tquery: string\n\tanchorElement: HTMLElement\n\t/** DOM id applied to the listbox. The editor's `aria-controls` must match this id. */\n\tlistboxId: string\n\tcommandsRef: SuggestKeyCommandsRef\n\tonSelect: (value: string) => void\n\tonDismiss: () => void\n}\n\nexport function AgentSuggestionPopover({\n\titems,\n\tquery,\n\tanchorElement,\n\tlistboxId,\n\tcommandsRef,\n\tonSelect,\n\tonDismiss,\n}: Props) {\n\tconst [highlightedIndex, setHighlightedIndex] = useState(0)\n\n\t// Filter + flatten using fresco's pure helpers. When query is empty we show everything.\n\t// `ComboBoxListBox` expects a fully flattened list (sections interleaved with their options),\n\t// not a tree \u2014 passing the sectioned result here would render empty section headers only.\n\tconst flatList = useMemo(() => {\n\t\tconst normalizedQuery = query.trim().toLocaleLowerCase().replace(/^\\//u, \"\")\n\t\tconst tokens = new Set(normalizedQuery.split(\" \").filter(Boolean))\n\t\tconst matches = filterList(\n\t\t\titems,\n\t\t\tnormalizedQuery,\n\t\t\ttokens,\n\t\t\t/* sortByRelevance */ true,\n\t\t\t/* sortSectionsByRelevance */ false,\n\t\t\t/* searchItemValue */ true,\n\t\t\t/* showAll */ normalizedQuery.length === 0,\n\t\t)\n\t\treturn flattenList(matches)\n\t}, [items, query])\n\n\tconst hasMatches = flatList.length > 0\n\n\t// Reset highlight when the list changes \u2014 prefer the first selectable option.\n\tuseEffect(() => {\n\t\tconst { index } = nextSelectableItemAndIndex(-1, flatList, false, false)\n\t\tsetHighlightedIndex(index >= 0 ? index : 0)\n\t}, [flatList])\n\n\t// Register navigation/select/dismiss with the editor's keymap plugin. The plugin runs before\n\t// ProseMirror's base keymap, so we can consume Arrow/Escape and optionally fall through on\n\t// Enter/Tab when there's nothing selectable (lets the editor submit instead of swallowing it).\n\tuseInsertionEffect(() => {\n\t\tif (!hasMatches) {\n\t\t\tcommandsRef.current = null\n\t\t\treturn\n\t\t}\n\t\tcommandsRef.current = {\n\t\t\tonNavigate: (direction, repeat) => {\n\t\t\t\tconst { index } = nextSelectableItemAndIndex(highlightedIndex, flatList, direction === \"up\", !repeat)\n\t\t\t\tif (index >= 0) setHighlightedIndex(index)\n\t\t\t},\n\t\t\tonSelect: () => {\n\t\t\t\tconst item = flatList[highlightedIndex]\n\t\t\t\tif (item?.type !== \"option\") return false\n\t\t\t\tonSelect(item.value)\n\t\t\t\treturn true\n\t\t\t},\n\t\t\tonDismiss,\n\t\t}\n\t\treturn () => {\n\t\t\tcommandsRef.current = null\n\t\t}\n\t}, [commandsRef, flatList, highlightedIndex, onSelect, onDismiss, hasMatches])\n\n\tuseViewportResize(onDismiss, hasMatches)\n\n\tif (!hasMatches) return null\n\n\treturn (\n\t\t<Popover\n\t\t\tanchor={anchorElement}\n\t\t\talignSelf=\"start\"\n\t\t\tfocusTrapEnabled={false}\n\t\t\tbackdropEnabled={false}\n\t\t\tanimateAppear={false}\n\t\t\tshowArrow={false}\n\t\t\tattachTo={popoverComboBoxAttachToDefaults}\n\t\t\toffset={{ x: 0, y: 8 }}\n\t\t\tonClose={onDismiss}\n\t\t\tclassName={styles.popover}\n\t\t>\n\t\t\t<PopoverComboBoxListSection\n\t\t\t\tlistBoxId={listboxId}\n\t\t\t\tshowList\n\t\t\t\tdisplayItems={flatList}\n\t\t\t\tflatList={flatList}\n\t\t\t\thighlightedIndex={highlightedIndex}\n\t\t\t\tscrollToIndex={highlightedIndex}\n\t\t\t\tscrollToAlignment=\"nearest-edge\"\n\t\t\t\tstickySectionHeaders\n\t\t\t\tisOpen\n\t\t\t\tnoSearchResultsEnabled={false}\n\t\t\t\tonSelect={value => {\n\t\t\t\t\tif (value) onSelect(value)\n\t\t\t\t}}\n\t\t\t\tonHighlight={(_value, index) => {\n\t\t\t\t\tif (index >= 0) setHighlightedIndex(index)\n\t\t\t\t}}\n\t\t\t/>\n\t\t</Popover>\n\t)\n}\n", "import \"AgentSuggestionPopover.styles_6vg6bj.wyw.css\"; export const popover = \"popover_p1xvf4qd\";", "import type { CanvasTree } from \"../../CanvasTree.ts\"\nimport type { EntityFolderNode } from \"../EntityFolderNode.ts\"\nimport type { EntityTypeRootNode } from \"../EntityTypeRootNode.ts\"\nimport type { NodeID } from \"../NodeID.ts\"\nimport { isEntityFolderNode, isEntityReferenceNode } from \"./nodeCheck.ts\"\n\nfunction collectOrderedReferenceIds(\n\tnode: EntityTypeRootNode | EntityFolderNode,\n\tallowedIds: ReadonlySet<NodeID>,\n\tresult: NodeID[],\n) {\n\tfor (const child of node.children) {\n\t\tif (isEntityFolderNode(child)) {\n\t\t\tcollectOrderedReferenceIds(child, allowedIds, result)\n\t\t\tcontinue\n\t\t}\n\n\t\tif (!isEntityReferenceNode(child)) continue\n\t\tif (!allowedIds.has(child.referenceId)) continue\n\t\tresult.push(child.referenceId)\n\t}\n}\n\nexport function getNodeIdsInEntityReferenceOrder(\n\ttree: CanvasTree,\n\tentityRootNode: EntityTypeRootNode | null | undefined,\n\tnodeIds: readonly NodeID[],\n): readonly NodeID[] {\n\tif (!entityRootNode) return nodeIds\n\n\tconst allowedIds = new Set(nodeIds)\n\tconst orderedIds: NodeID[] = []\n\n\tcollectOrderedReferenceIds(entityRootNode, allowedIds, orderedIds)\n\n\tconst referencedIds = new Set(orderedIds)\n\tfor (const nodeId of nodeIds) {\n\t\tif (referencedIds.has(nodeId)) continue\n\t\tif (!tree.has(nodeId)) continue\n\t\torderedIds.push(nodeId)\n\t}\n\n\treturn orderedIds\n}\n", "import \"suggestionItems.styles_x811f2.wyw.css\"; export const textStyleIcon = \"textStyleIcon_t12sxtom\";\nexport const colorSwatchIcon = \"colorSwatchIcon_c1fmpnyb\";", "import type { ComboBoxListItem } from \"@framerjs/fresco/components/utils/useComboBox\"\nimport type { VekterEngine } from \"document/VekterEngine.ts\"\nimport type { CanvasTree } from \"document/models/CanvasTree/index.ts\"\nimport type { ComponentType } from \"react\"\nimport type {\n\tAgentInputTag,\n\tColorStyleTagSegment,\n\tComponentTagSegment,\n\tContextTagSegment,\n\tDesignPageTagSegment,\n\tLayoutTemplateTagSegment,\n\tLinkStyleTagSegment,\n\tPageTagSegment,\n\tSkillTagSegment,\n\tTextStyleTagSegment,\n} from \"../../editor/agentInputSchema.ts\"\n\nimport { agentSkillDirectives, formatAgentSkillLabel } from \"app/agent/skillDirectives.ts\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport { IconAgentCMS } from \"document/components/chrome/agentPanel/components/IconAgentCMS.tsx\"\nimport { IconAgentComponent } from \"document/components/chrome/agentPanel/components/IconAgentComponent.tsx\"\nimport { IconAgentHome } from \"document/components/chrome/agentPanel/components/IconAgentHome.tsx\"\nimport { IconAgentPage } from \"document/components/chrome/agentPanel/components/IconAgentPage.tsx\"\nimport { IconAgentAssetLayoutTemplate } from \"document/components/chrome/assets/IconAgentAssetLayoutTemplate.tsx\"\nimport { PresetIcon } from \"document/components/chrome/presetsPanel/PresetIcon.tsx\"\nimport { ColorTokenPreview } from \"document/components/chrome/shared/ColorPicker/tokens/ColorPickerTokenRowPreview.tsx\"\nimport { getWebPagePath } from \"document/components/utils/getWebPagePath.ts\"\nimport { pagePathLabel } from \"document/components/utils/pathToName.ts\"\nimport { ColorStyleTokenListNode } from \"document/models/CanvasTree/nodes/ColorStyleTokenListNode.ts\"\nimport { getContentManagementNode } from \"document/models/CanvasTree/nodes/ContentManagementNode.utils.ts\"\nimport {\n\tColorEntityTypeRootNode,\n\tComponentEntityTypeRootNode,\n\tLayoutTemplateEntityTypeRootNode,\n\tLinkEntityTypeRootNode,\n\tTextEntityTypeRootNode,\n} from \"document/models/CanvasTree/nodes/EntityTypeRootNode.ts\"\nimport { PresetsListNode } from \"document/models/CanvasTree/nodes/PresetsListNode.ts\"\nimport { getRouteSegmentRootNode } from \"document/models/CanvasTree/nodes/RouteSegmentRootNode.utils.ts\"\nimport { getNodeIdsInEntityReferenceOrder } from \"document/models/CanvasTree/nodes/utils/entityReferenceOrder.ts\"\nimport {\n\tisCollectionNode,\n\tisColorStyleTokenNode,\n\tisLayoutTemplateNode,\n\tisLinkStylePresetNode,\n\tisSmartComponentNode,\n\tisTextStylePresetNode,\n\tisWebPageNode,\n} from \"document/models/CanvasTree/nodes/utils/nodeCheck.ts\"\nimport { useDarkMode } from \"web/lib/useDarkMode.ts\"\nimport { createCmsCollectionTagSegment } from \"../../editor/agentInputSchema.ts\"\nimport * as styles from \"./suggestionItems.styles.ts\"\n\n/**\n * Result of one `getContextItems` / `skillItems` lookup: the sectioned option tree to render\n * in the combo box, plus a `resolve` that takes an option's opaque `value` back to the concrete\n * tag the editor should insert.\n *\n * The resolver is keyed by the searchable option value. Each value includes an opaque running\n * counter so option ids stay collision-free even when titles or aliases repeat.\n */\ninterface BuiltSuggestionItems<TTag extends AgentInputTag> {\n\titems: readonly ComboBoxListItem[]\n\tresolve: (value: string) => TTag | undefined\n}\n\ninterface SuggestionEntry<TTag extends AgentInputTag> {\n\ttag: TTag\n\ttitle: string\n\tsubtitle?: string\n\tsearchAliases?: readonly string[]\n\ticon?: ComponentType\n}\n\nfunction createSuggestionValue(entry: SuggestionEntry<AgentInputTag>, resolverIndex: number): string {\n\treturn [entry.title, ...(entry.searchAliases ?? []), `s${resolverIndex}`].join(\" \")\n}\n\nfunction buildSuggestionItems<TTag extends AgentInputTag>(\n\tsections: readonly {\n\t\tsectionValue: string\n\t\ttitle: string\n\t\tentries: readonly SuggestionEntry<TTag>[]\n\t}[],\n): BuiltSuggestionItems<TTag> {\n\tconst resolver = new Map<string, TTag>()\n\tconst items: ComboBoxListItem[] = sections.flatMap(section => {\n\t\tif (section.entries.length === 0) return []\n\n\t\treturn [\n\t\t\t{\n\t\t\t\ttype: \"section\" as const,\n\t\t\t\tvalue: section.sectionValue,\n\t\t\t\ttitle: section.title,\n\t\t\t\titems: section.entries.map(entry => {\n\t\t\t\t\tconst value = createSuggestionValue(entry, resolver.size)\n\t\t\t\t\tresolver.set(value, entry.tag)\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: \"option\" as const,\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\ttitle: entry.title,\n\t\t\t\t\t\tsubtitle: entry.subtitle,\n\t\t\t\t\t\ticon: entry.icon,\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t},\n\t\t]\n\t})\n\n\treturn {\n\t\titems,\n\t\tresolve: value => resolver.get(value),\n\t}\n}\n\n// Skill directives are static, so the suggestion list can be built once at module load.\nexport const skillItems: BuiltSuggestionItems<SkillTagSegment> = buildSuggestionItems<SkillTagSegment>([\n\t{\n\t\tsectionValue: \"skills\",\n\t\ttitle: \"Skills\",\n\t\tentries: agentSkillDirectives.map(skill => {\n\t\t\tconst searchAliases = \"aliases\" in skill ? skill.aliases : []\n\t\t\treturn {\n\t\t\t\ttag: {\n\t\t\t\t\ttype: \"skill\",\n\t\t\t\t\tskillId: skill.id,\n\t\t\t\t\tlabel: formatAgentSkillLabel(skill.id),\n\t\t\t\t\tinstruction: skill.instruction,\n\t\t\t\t},\n\t\t\t\ttitle: formatAgentSkillLabel(skill.id),\n\t\t\t\tsubtitle: skill.description,\n\t\t\t\tsearchAliases,\n\t\t\t}\n\t\t}),\n\t},\n])\n\nfunction ColorSwatchIcon({ light, dark }: { light?: string; dark?: string }) {\n\tconst { isDarkMode } = useDarkMode()\n\treturn <ColorTokenPreview value={isDarkMode && dark ? dark : light} size=\"small\" className={styles.colorSwatchIcon} />\n}\n\nfunction getWebPageSuggestionEntries(tree: CanvasTree): readonly SuggestionEntry<PageTagSegment>[] {\n\tconst pageEntries: SuggestionEntry<PageTagSegment>[] = []\n\n\t// Only list pages that have a route segment (excludes orphan web pages).\n\tfor (const pageId of getRouteSegmentRootNode(tree).getWebPageIdToRawPathMap(tree).keys()) {\n\t\tconst page = tree.getNodeWithTrait(pageId, isWebPageNode)\n\t\tif (!page) continue\n\t\tconst path = getWebPagePath(tree, page)\n\t\tif (!path) continue\n\t\tconst name = pagePathLabel(path)\n\t\tpageEntries.push({\n\t\t\ttag: { type: \"page\", pageId: page.id, path, name } as const,\n\t\t\ttitle: name,\n\t\t\ticon: path === \"/\" ? IconAgentHome : IconAgentPage,\n\t\t})\n\t}\n\n\treturn pageEntries\n}\n\nfunction getDesignPageSuggestionEntries(engine: VekterEngine): readonly SuggestionEntry<DesignPageTagSegment>[] {\n\tconst designPageEntries: SuggestionEntry<DesignPageTagSegment>[] = []\n\n\tfor (const page of engine.stores.scopeStore.getDesignPageNodes()) {\n\t\tconst name = page.resolveValue(\"name\")\n\t\tif (!name) continue\n\n\t\tdesignPageEntries.push({\n\t\t\ttag: { type: \"designPage\", pageId: page.id, name } as const,\n\t\t\ttitle: name,\n\t\t\ticon: IconAgentPage,\n\t\t})\n\t}\n\n\treturn designPageEntries\n}\n\nfunction getLayoutTemplateSuggestionEntries(\n\tengine: VekterEngine,\n): readonly SuggestionEntry<LayoutTemplateTagSegment>[] {\n\tconst layoutTemplates = engine.stores.scopeStore.getLayoutTemplateNodes()\n\tconst orderedIds = getNodeIdsInEntityReferenceOrder(\n\t\tengine.tree,\n\t\tLayoutTemplateEntityTypeRootNode.get(engine.tree),\n\t\tlayoutTemplates.map(node => node.id),\n\t)\n\n\treturn orderedIds.flatMap(nodeId => {\n\t\tconst node = engine.tree.get(nodeId)\n\t\tif (!isLayoutTemplateNode(node)) return []\n\t\tconst name = node.resolveValue(\"name\")\n\t\tif (!name) return []\n\t\treturn {\n\t\t\ttag: { type: \"layoutTemplate\", pageId: node.id, name } as const,\n\t\t\ttitle: name,\n\t\t\ticon: IconAgentAssetLayoutTemplate,\n\t\t}\n\t})\n}\n\nfunction getComponentSuggestionEntries(engine: VekterEngine): readonly SuggestionEntry<ComponentTagSegment>[] {\n\tconst components = engine.stores.scopeStore.getSmartComponentNodes()\n\tconst orderedIds = getNodeIdsInEntityReferenceOrder(\n\t\tengine.tree,\n\t\tComponentEntityTypeRootNode.get(engine.tree),\n\t\tcomponents.map(node => node.id),\n\t)\n\n\treturn orderedIds.flatMap(nodeId => {\n\t\tconst node = engine.tree.get(nodeId)\n\t\tif (!isSmartComponentNode(node)) return []\n\t\tconst name = node.resolveValue(\"name\")\n\t\tif (!name) return []\n\t\treturn {\n\t\t\ttag: { type: \"component\", componentId: node.id, name } as const,\n\t\t\ttitle: name,\n\t\t\ticon: IconAgentComponent,\n\t\t}\n\t})\n}\n\nfunction getTextStyleSuggestionEntries(engine: VekterEngine): readonly SuggestionEntry<TextStyleTagSegment>[] {\n\tconst presets = PresetsListNode.get(engine.tree)\n\tconst orderedIds = getNodeIdsInEntityReferenceOrder(\n\t\tengine.tree,\n\t\tTextEntityTypeRootNode.get(engine.tree),\n\t\tpresets?.getTextStylePresets().map(node => node.id) ?? [],\n\t)\n\treturn orderedIds.flatMap(nodeId => {\n\t\tconst node = engine.tree.get(nodeId)\n\t\tif (!isTextStylePresetNode(node)) return []\n\t\tconst name = node.getName()\n\t\tif (!name) return []\n\t\treturn {\n\t\t\ttag: { type: \"textStyle\", styleId: node.id, name } as const,\n\t\t\ttitle: name,\n\t\t\ticon: () => <PresetIcon icon={node.tag} color=\"currentColor\" className={styles.textStyleIcon} />,\n\t\t}\n\t})\n}\n\nfunction getLinkStyleSuggestionEntries(engine: VekterEngine): readonly SuggestionEntry<LinkStyleTagSegment>[] {\n\tconst presets = PresetsListNode.get(engine.tree)\n\tconst orderedIds = getNodeIdsInEntityReferenceOrder(\n\t\tengine.tree,\n\t\tLinkEntityTypeRootNode.get(engine.tree),\n\t\tpresets?.getLinkStylePresets().map(node => node.id) ?? [],\n\t)\n\treturn orderedIds.flatMap(nodeId => {\n\t\tconst node = engine.tree.get(nodeId)\n\t\tif (!isLinkStylePresetNode(node)) return []\n\t\tconst name = node.getName()\n\t\tif (!name) return []\n\t\treturn {\n\t\t\ttag: { type: \"linkStyle\", styleId: node.id, name } as const,\n\t\t\ttitle: name,\n\t\t\ticon: () => <PresetIcon icon=\"a\" color=\"currentColor\" className={styles.textStyleIcon} />,\n\t\t}\n\t})\n}\n\nfunction getColorStyleSuggestionEntries(engine: VekterEngine): readonly SuggestionEntry<ColorStyleTagSegment>[] {\n\tconst tokens = ColorStyleTokenListNode.getTokenNodes(engine.tree)\n\tconst orderedIds = getNodeIdsInEntityReferenceOrder(\n\t\tengine.tree,\n\t\tColorEntityTypeRootNode.get(engine.tree),\n\t\ttokens.map(node => node.id),\n\t)\n\treturn orderedIds.flatMap(nodeId => {\n\t\tconst node = engine.tree.get(nodeId)\n\t\tif (!isColorStyleTokenNode(node)) return []\n\t\tconst name = node.resolveValue(\"name\")\n\t\tif (!name) return []\n\t\treturn {\n\t\t\ttag: { type: \"colorStyle\", styleId: node.id, name, color: node.light } as const,\n\t\t\ttitle: name,\n\t\t\ticon: () => <ColorSwatchIcon light={node.light} dark={node.dark} />,\n\t\t}\n\t})\n}\n\n// Context items are derived from the canvas tree, so we cache and bust whenever\n// `engine.tree.root.update` advances (its update counter increments on every tree mutation).\nlet contextItemsCache: { update: number; result: BuiltSuggestionItems<ContextTagSegment> } | undefined\n\nexport function getContextItems(engine: VekterEngine): BuiltSuggestionItems<ContextTagSegment> {\n\tconst update = engine.tree.root.update\n\tif (contextItemsCache?.update === update) return contextItemsCache.result\n\n\tconst result = buildContextItems(engine)\n\tcontextItemsCache = { update, result }\n\treturn result\n}\n\nexport const testing = {\n\tclearContextItemsCache() {\n\t\tcontextItemsCache = undefined\n\t},\n}\n\nfunction buildContextItems(engine: VekterEngine): BuiltSuggestionItems<ContextTagSegment> {\n\tconst cms = getContentManagementNode(engine.tree)?.loaded\n\treturn buildSuggestionItems<ContextTagSegment>([\n\t\t{\n\t\t\tsectionValue: \"designPages\",\n\t\t\ttitle: Dictionary.Design,\n\t\t\tentries: getDesignPageSuggestionEntries(engine),\n\t\t},\n\t\t{\n\t\t\tsectionValue: \"pages\",\n\t\t\ttitle: Dictionary.Pages,\n\t\t\tentries: getWebPageSuggestionEntries(engine.tree),\n\t\t},\n\t\t{\n\t\t\tsectionValue: \"collections\",\n\t\t\ttitle: Dictionary.Collections,\n\t\t\tentries: (cms?.children ?? []).filter(isCollectionNode).flatMap(col => {\n\t\t\t\tconst name = col.resolveValue(\"name\")\n\t\t\t\tif (!name) return []\n\t\t\t\treturn [{ tag: createCmsCollectionTagSegment(col.id, name), title: name, icon: IconAgentCMS }]\n\t\t\t}),\n\t\t},\n\t\t{\n\t\t\tsectionValue: \"layoutTemplates\",\n\t\t\ttitle: Dictionary.Templates,\n\t\t\tentries: getLayoutTemplateSuggestionEntries(engine),\n\t\t},\n\t\t{\n\t\t\tsectionValue: \"components\",\n\t\t\ttitle: Dictionary.Components,\n\t\t\tentries: getComponentSuggestionEntries(engine),\n\t\t},\n\t\t{\n\t\t\tsectionValue: \"textStyles\",\n\t\t\ttitle: \"Text Styles\",\n\t\t\tentries: getTextStyleSuggestionEntries(engine),\n\t\t},\n\t\t{\n\t\t\tsectionValue: \"linkStyles\",\n\t\t\ttitle: \"Link Styles\",\n\t\t\tentries: getLinkStyleSuggestionEntries(engine),\n\t\t},\n\t\t{\n\t\t\tsectionValue: \"colorStyles\",\n\t\t\ttitle: \"Color Styles\",\n\t\t\tentries: getColorStyleSuggestionEntries(engine),\n\t\t},\n\t])\n}\n", "import type { EditorState, Transaction } from \"prosemirror-state\"\n\ntype Dispatch = (tr: Transaction) => void\n\n// ProseMirror's baseKeymap delegates simple character deletion to the browser's\n// native contenteditable behavior. This breaks at the boundary between text and\n// inline atom node views (e.g. layer tags, mentions) whose wrapper is\n// contentEditable=\"false\": the browser can't reliably position the caret or\n// fire the correct input events there. These commands bypass native editing by\n// performing the delete on the ProseMirror document model directly.\n\n/**\n * Computes the range for a single-character delete at the current selection.\n * With a range selection, returns the selection bounds.\n * With a collapsed cursor, returns one position forward or backward.\n * Returns null when there is nothing to delete (e.g. cursor at document boundary).\n *\n * Characters outside the BMP (emoji, etc.) occupy two UTF-16 code units\n * (a surrogate pair) and therefore two ProseMirror positions. When the adjacent\n * content is a text node whose boundary character is part of a surrogate pair,\n * the range spans 2 positions so the whole character is deleted.\n */\nexport function getCharDeleteRange(\n\tstate: EditorState,\n\tdirection: \"forward\" | \"backward\",\n): { from: number; to: number } | null {\n\tconst { from, to } = state.selection\n\n\tif (from !== to) return { from, to }\n\n\tconst $pos = state.doc.resolve(from)\n\n\tif (direction === \"forward\") {\n\t\tif (from >= state.doc.content.size) return null\n\t\tconst nodeAfter = $pos.nodeAfter\n\t\tconst charSize = nodeAfter?.isText && nodeAfter.text && isHighSurrogate(nodeAfter.text.charCodeAt(0)) ? 2 : 1\n\t\treturn { from, to: Math.min(state.doc.content.size, from + charSize) }\n\t}\n\n\tif (from <= 0) return null\n\n\tconst nodeBefore = $pos.nodeBefore\n\tconst charSize =\n\t\tnodeBefore?.isText && nodeBefore.text && isLowSurrogate(nodeBefore.text.charCodeAt(nodeBefore.text.length - 1))\n\t\t\t? 2\n\t\t\t: 1\n\treturn { from: Math.max(0, from - charSize), to: from }\n}\n\nfunction isHighSurrogate(code: number): boolean {\n\treturn code >= 0xd800 && code <= 0xdbff\n}\n\nfunction isLowSurrogate(code: number): boolean {\n\treturn code >= 0xdc00 && code <= 0xdfff\n}\n\nexport function deleteCharBackward(state: EditorState, dispatch?: Dispatch): boolean {\n\tconst range = getCharDeleteRange(state, \"backward\")\n\tif (!range) return false\n\tconst transaction = state.tr.delete(range.from, range.to)\n\tif (transaction.doc.eq(state.doc)) return false\n\tif (!dispatch) return true\n\tdispatch(transaction.scrollIntoView())\n\treturn true\n}\n\nexport function deleteCharForward(state: EditorState, dispatch?: Dispatch): boolean {\n\tconst range = getCharDeleteRange(state, \"forward\")\n\tif (!range) return false\n\tconst transaction = state.tr.delete(range.from, range.to)\n\tif (transaction.doc.eq(state.doc)) return false\n\tif (!dispatch) return true\n\tdispatch(transaction.scrollIntoView())\n\treturn true\n}\n", "import type { PersistedEditorState } from \"document/stores/AgentStore.ts\"\nimport { Fragment, type Node as ProseMirrorNode, Slice } from \"prosemirror-model\"\nimport { EditorState, Plugin, type Transaction } from \"prosemirror-state\"\nimport { EditorView } from \"prosemirror-view\"\nimport { deleteCharBackward, deleteCharForward } from \"prosemirror/deleteCharCommand.ts\"\nimport type { ProseMirror } from \"prosemirror/loader.ts\"\nimport { useImportProseMirror } from \"prosemirror/loader.ts\"\nimport { useCallback, useEffect, useInsertionEffect, useMemo, useRef, useState } from \"react\"\nimport { isString } from \"utils/typeChecks.ts\"\nimport {\n\tcreateCmsSelectionTagNodeView,\n\tcreateComponentTagNodeView,\n\tcreateColorStyleTagNodeView,\n\tcreateDesignPageTagNodeView,\n\tcreateFileAttachmentTagNodeView,\n\tcreateLayerTagNodeView,\n\tcreateLinkStyleTagNodeView,\n\tcreateLayoutTemplateTagNodeView,\n\tcreatePageTagNodeView,\n\tcreateSkillTagNodeView,\n\tcreateTextStyleTagNodeView,\n} from \"./TagNodeView.tsx\"\nimport {\n\tcreateTagNode,\n\tgetCmsTagAttrs,\n\tgetFileAttachmentTagAttrs,\n\tgetLayerTagAttrs,\n\tgetLayerTagReferences,\n\tschema,\n} from \"./agentInputSchema.ts\"\nimport type { AgentInputSegment, AgentInputTag } from \"./agentInputSchema.ts\"\nimport {\n\tagentSuggestKeyPlugin,\n\tagentSuggestPlugin,\n\ttype SuggestKeyCommands,\n\ttype SuggestKeyCommandsRef,\n\ttype SuggestionState,\n} from \"./suggestPlugin.ts\"\nimport type { HistoryEntry, MessageHistoryNavigator } from \"./useMessageHistoryNavigator.ts\"\nimport { isAgentInputEmpty, serializeToSegments, isValidAgentInput } from \"./utils/input.ts\"\nimport { insertOrReplaceTagAtSelection } from \"./utils/tagInsertion.ts\"\n\ninterface CallbackRef {\n\tcurrent: (() => void) | undefined\n}\n\ninterface OnSubmitRef {\n\tcurrent: (parts: readonly AgentInputSegment[]) => boolean\n}\n\ninterface HistoryNavigatorRef {\n\tcurrent: MessageHistoryNavigator | undefined\n}\n\nexport interface InsertTagOptions {\n\t/**\n\t * When provided, replaces exactly this range with a fresh pill (used for the `@`-/`/`-trigger\n\t * popover so the typed query is swapped for the chosen tag). When omitted, inserts at the\n\t * current selection and merges adjacent tags of the same kind where that makes sense\n\t * (see `insertOrReplaceTagAtSelection`).\n\t */\n\treplaceRange?: { from: number; to: number }\n}\n\nexport interface AgentInputEditorAPI {\n\teditorView: EditorView\n\tinsertTag: (tag: AgentInputTag, options?: InsertTagOptions) => void\n\tinsertFileAttachment: (id: string, fileName: string) => void\n\tsetContent: (segments: readonly AgentInputSegment[]) => void\n\tfocus: () => void\n\tgetTextContent: () => string\n\tsubmit: () => boolean\n\tupdateStateFrom: (fromState: PersistedEditorState | undefined) => void\n\tisValid: boolean\n\t/**\n\t * Populated by the suggestion popover so the editor's keymap plugin can intercept navigation\n\t * keys while a popover is open. Writing `null` releases the keys back to the editor.\n\t */\n\tsuggestionKeyCommandsRef: SuggestKeyCommandsRef\n}\n\ninterface OnFilePasteRef {\n\tcurrent: ((files: File[]) => void) | undefined\n}\n\ninterface UseAgentInputEditorViewOptions {\n\t/** If an existing editor state (via EditorState.toJSON()) is provided , it will be used instead\nof creating a new one. */\n\tfromEditorState?: PersistedEditorState\n\tplaceholder?: string\n\tonSubmit: (parts: readonly AgentInputSegment[]) => boolean\n\tonEscape: () => void\n\thistoryNavigator?: MessageHistoryNavigator\n\tclearOnSubmit?: boolean\n\thasImages?: boolean\n\tisUploadingImages?: boolean\n\tonFilePaste?: (files: File[]) => void\n\tonFocus?: () => void\n\tonBlur?: () => void\n\tonEmptySubmit?: () => void\n\tonChange?: () => void\n\tonSuggestionChange?: (suggestion: SuggestionState | null) => void\n\tonFileAttachmentRemove?: (attachmentId: string) => void\n}\n\nfunction placeholderPlugin(placeholderText: string) {\n\treturn new Plugin({\n\t\tview(editorView) {\n\t\t\tconst dom = editorView.dom\n\n\t\t\tdom.setAttribute(\"data-placeholder\", placeholderText)\n\t\t\tupdatePlaceholder(editorView)\n\n\t\t\treturn {\n\t\t\t\tupdate(view) {\n\t\t\t\t\tupdatePlaceholder(view)\n\t\t\t\t},\n\t\t\t\tdestroy() {\n\t\t\t\t\tdom.removeAttribute(\"data-placeholder\")\n\t\t\t\t\tdom.classList.remove(\"has-placeholder\")\n\t\t\t\t},\n\t\t\t}\n\t\t},\n\t})\n}\n\nfunction updatePlaceholder(view: EditorView) {\n\tconst { doc } = view.state\n\tconst dom = view.dom\n\tconst isEmpty = isAgentInputEmpty(doc)\n\n\tif (isEmpty) {\n\t\tdom.classList.add(\"has-placeholder\")\n\t} else {\n\t\tdom.classList.remove(\"has-placeholder\")\n\t}\n}\n\nconst windowsNewlineRegex = /\\r\\n?/gu\n\nexport function hasStructuredAgentInputContent(slice: Slice): boolean {\n\tlet hasStructuredContent = false\n\tslice.content.descendants(node => {\n\t\tif (!node.isText && node.isAtom) {\n\t\t\thasStructuredContent = true\n\t\t\treturn false\n\t\t}\n\t\treturn true\n\t})\n\treturn hasStructuredContent\n}\n\n/**\n * Builds ProseMirror paragraph nodes from segments, splitting on newlines.\n */\nfunction buildParagraphsFromSegments(segments: readonly AgentInputSegment[]): ProseMirrorNode[] {\n\tconst paragraphs: ProseMirrorNode[] = []\n\tlet currentInlineNodes: ProseMirrorNode[] = []\n\n\tconst flushParagraph = () => {\n\t\tparagraphs.push(schema.nodes.paragraph.create(null, currentInlineNodes.length > 0 ? currentInlineNodes : null))\n\t\tcurrentInlineNodes = []\n\t}\n\n\tfor (const segment of segments) {\n\t\tif (isString(segment)) {\n\t\t\tconst parts = segment.split(\"\\n\")\n\t\t\tfor (let i = 0; i < parts.length; i++) {\n\t\t\t\tif (i > 0) flushParagraph()\n\t\t\t\tconst part = parts[i]\n\t\t\t\tif (part) currentInlineNodes.push(schema.text(part))\n\t\t\t}\n\t\t} else if (segment.type === \"fileAttachment\") {\n\t\t\t// Show file pills in past messages for reference. attachmentId is empty because\n\t\t\t// the actual file has already been sent; this pill is display-only.\n\t\t\tcurrentInlineNodes.push(schema.nodes.fileAttachment.create({ attachmentId: \"\", fileName: segment.fileName }))\n\t\t} else {\n\t\t\tcurrentInlineNodes.push(createTagNode(segment))\n\t\t}\n\t}\n\n\tflushParagraph()\n\treturn paragraphs\n}\n\nexport function parseAgentInputClipboardText(text: string): Slice {\n\tconst paragraphs = text\n\t\t.replace(windowsNewlineRegex, \"\\n\")\n\t\t.split(\"\\n\")\n\t\t.map(line => {\n\t\t\tconst content = line ? schema.text(line) : null\n\t\t\treturn schema.nodes.paragraph.create(null, content)\n\t\t})\n\n\treturn new Slice(Fragment.from(paragraphs), 1, 1)\n}\n\ninterface AgentInputTextPasteView {\n\tstate: EditorState\n\tdispatch: (transaction: Transaction) => void\n}\n\nexport function pasteAgentInputClipboardText(\n\teditorView: AgentInputTextPasteView,\n\tevent: ClipboardEvent,\n\tparsedSlice: Slice,\n): boolean {\n\tif (hasStructuredAgentInputContent(parsedSlice)) return false\n\tconst text = event.clipboardData?.getData(\"text/plain\")\n\tif (!text) return false\n\n\tevent.preventDefault()\n\teditorView.dispatch(editorView.state.tr.replaceSelection(parseAgentInputClipboardText(text)).scrollIntoView())\n\treturn true\n}\n\n/**\n * Clears the editor content, replacing it with an empty paragraph.\n */\nfunction clearEditorContent(editorView: EditorView): void {\n\tconst { tr, doc } = editorView.state\n\tconst emptyParagraph = schema.nodes.paragraph.create()\n\ttr.replaceWith(0, doc.content.size, emptyParagraph)\n\teditorView.dispatch(tr)\n}\n\n/**\n * Sets the editor content from segments.\n */\nfunction setEditorContent(editorView: EditorView, segments: readonly AgentInputSegment[]): void {\n\tconst { tr } = editorView.state\n\tconst paragraphs = buildParagraphsFromSegments(segments)\n\ttr.replaceWith(0, editorView.state.doc.content.size, Fragment.from(paragraphs))\n\teditorView.dispatch(tr)\n}\n\ninterface OnFileAttachmentRemoveRef {\n\tcurrent: ((attachmentId: string) => void) | undefined\n}\n\nfunction getFileAttachmentIds(doc: ProseMirrorNode): Set<string> {\n\tconst ids = new Set<string>()\n\tdoc.nodesBetween(0, doc.content.size, node => {\n\t\tif (node.type.name === \"fileAttachment\") {\n\t\t\tconst attrs = getFileAttachmentTagAttrs(node)\n\t\t\tif (attrs?.attachmentId) ids.add(attrs.attachmentId)\n\t\t\treturn false\n\t\t}\n\t})\n\treturn ids\n}\n\ninterface SetIsValidRef {\n\tcurrent: (isValid: boolean) => void\n}\n\ninterface BooleanRef {\n\tcurrent: boolean\n}\n\ninterface SuggestionChangeRef {\n\tcurrent: ((suggestion: SuggestionState | null) => void) | undefined\n}\n\nfunction buildStateFromEntry(entry: HistoryEntry, plugins: readonly Plugin[]): EditorState {\n\tif (\"docJson\" in entry) {\n\t\treturn EditorState.fromJSON({ schema, plugins }, entry.docJson)\n\t}\n\tconst paragraphs = entry.length > 0 ? buildParagraphsFromSegments(entry) : [schema.nodes.paragraph.create()]\n\tconst doc = schema.nodes.doc.create(null, Fragment.from(paragraphs))\n\treturn EditorState.create({ schema, plugins, doc })\n}\n\nexport const agentInputNodeViews = {\n\tlayer: createLayerTagNodeView,\n\tcms: createCmsSelectionTagNodeView,\n\tpage: createPageTagNodeView,\n\tdesignPage: createDesignPageTagNodeView,\n\tcomponent: createComponentTagNodeView,\n\ttextStyle: createTextStyleTagNodeView,\n\tlinkStyle: createLinkStyleTagNodeView,\n\tcolorStyle: createColorStyleTagNodeView,\n\tlayoutTemplate: createLayoutTemplateTagNodeView,\n\tskill: createSkillTagNodeView,\n\tfileAttachment: createFileAttachmentTagNodeView,\n}\n\nfunction createAgentInputEditorView(\n\tfromState: PersistedEditorState | undefined,\n\tproseMirror: ProseMirror,\n\tplaceholderText: string,\n\tonSubmitRef: OnSubmitRef,\n\tonEscapeRef: CallbackRef,\n\thistoryNavigatorRef: HistoryNavigatorRef,\n\tsetIsValidRef: SetIsValidRef,\n\tclearOnSubmit: boolean,\n\tonFilePasteRef: OnFilePasteRef,\n\tonFocusRef: CallbackRef,\n\tonBlurRef: CallbackRef,\n\thasImagesRef: BooleanRef,\n\tisUploadingImagesRef: BooleanRef,\n\tonEmptySubmitRef: CallbackRef,\n\tonChangeRef: CallbackRef,\n\tonSuggestionChangeRef: SuggestionChangeRef,\n\tsuggestionKeyCommandsRef: SuggestKeyCommandsRef,\n\tonFileAttachmentRemoveRef: OnFileAttachmentRemoveRef,\n): EditorView {\n\tconst { keymap, baseKeymap, history, undo, redo } = proseMirror\n\n\tconst plugins = [\n\t\t// Registered first so Arrow/Enter/Tab/Escape reach the popover before the editor's own\n\t\t// Enter-to-submit handler; it returns false (letting the editor handle) when no popover is\n\t\t// active or when the popover has nothing to select.\n\t\tagentSuggestKeyPlugin(suggestionKeyCommandsRef),\n\t\tkeymap({\n\t\t\t\"Mod-z\": undo,\n\t\t\t\"Mod-Shift-z\": redo,\n\t\t\tBackspace: deleteCharBackward,\n\t\t\tDelete: deleteCharForward,\n\t\t\t\"Shift-Enter\": (state, dispatch) => {\n\t\t\t\tif (!dispatch) return false\n\t\t\t\tconst { $from } = state.selection\n\t\t\t\tconst tr = state.tr.deleteSelection()\n\t\t\t\tdispatch(tr.split(tr.mapping.map($from.pos)).scrollIntoView())\n\t\t\t\treturn true\n\t\t\t},\n\t\t\tEnter: (state, _dispatch, view) => {\n\t\t\t\t// Return true to prevent default (breakline) behavior in the baseKeymap.\n\t\t\t\tconst isValid = isValidAgentInput(state.doc, hasImagesRef.current, isUploadingImagesRef.current)\n\t\t\t\tif (!view) return true\n\n\t\t\t\tif (!isValid) {\n\t\t\t\t\t// isValid checks for already valid input but does not mean it is empty.\n\t\t\t\t\t// It might have uploading images and/or layer tags with no text or images, in which case we don't\n\t\t\t\t\t// want to call the empty input callback.\n\t\t\t\t\tif (isAgentInputEmpty(state.doc) && !hasImagesRef.current && !isUploadingImagesRef.current) {\n\t\t\t\t\t\tonEmptySubmitRef.current?.()\n\t\t\t\t\t}\n\t\t\t\t\treturn true\n\t\t\t\t}\n\n\t\t\t\tconst segments = serializeToSegments(state.doc)\n\t\t\t\tif (clearOnSubmit) clearEditorContent(view)\n\t\t\t\tonSubmitRef.current(segments)\n\t\t\t\thistoryNavigatorRef.current?.reset()\n\t\t\t\treturn true\n\t\t\t},\n\t\t\tEscape: () => {\n\t\t\t\teditorView.dom.blur()\n\t\t\t\tonEscapeRef.current?.()\n\t\t\t\treturn true\n\t\t\t},\n\t\t\t\"Alt-ArrowUp\": state => {\n\t\t\t\tconst navigator = historyNavigatorRef.current\n\t\t\t\tif (!navigator) return false\n\n\t\t\t\tconst entry = navigator.navigateUp(state.toJSON())\n\t\t\t\tif (entry) {\n\t\t\t\t\tconst newState = buildStateFromEntry(entry, editorView.state.plugins)\n\t\t\t\t\t// updateState bypasses dispatchTransaction so navigating history does not\n\t\t\t\t\t// trigger onFileAttachmentRemove for pills in the current draft.\n\t\t\t\t\teditorView.updateState(newState)\n\t\t\t\t\tsetIsValidRef.current(isValidAgentInput(newState.doc, hasImagesRef.current, isUploadingImagesRef.current))\n\t\t\t\t}\n\t\t\t\treturn true\n\t\t\t},\n\t\t\t\"Alt-ArrowDown\": () => {\n\t\t\t\tconst navigator = historyNavigatorRef.current\n\t\t\t\tif (!navigator) return false\n\n\t\t\t\tconst entry = navigator.navigateDown()\n\t\t\t\tif (entry === undefined) return false\n\n\t\t\t\tconst newState = buildStateFromEntry(entry, editorView.state.plugins)\n\t\t\t\teditorView.updateState(newState)\n\t\t\t\tsetIsValidRef.current(isValidAgentInput(newState.doc, hasImagesRef.current, isUploadingImagesRef.current))\n\t\t\t\treturn true\n\t\t\t},\n\t\t}),\n\t\tkeymap(baseKeymap),\n\t\thistory(),\n\t\tplaceholderPlugin(placeholderText),\n\t\t...agentSuggestPlugin(state => onSuggestionChangeRef.current?.(state)),\n\t]\n\n\tconst config = {\n\t\tschema,\n\t\tplugins,\n\t}\n\tconst state = fromState ? EditorState.fromJSON(config, fromState) : EditorState.create(config)\n\n\tconst editorView = new EditorView(null, {\n\t\tstate,\n\t\tnodeViews: agentInputNodeViews,\n\t\tclipboardTextParser: text => parseAgentInputClipboardText(text),\n\t\thandleDOMEvents: {\n\t\t\tfocus: () => {\n\t\t\t\tonFocusRef.current?.()\n\t\t\t\treturn false\n\t\t\t},\n\t\t\tblur: () => {\n\t\t\t\tonBlurRef.current?.()\n\t\t\t\treturn false\n\t\t\t},\n\t\t},\n\t\thandleKeyDown: (_view, event) => {\n\t\t\t// Prevent browser's default contenteditable behavior for Enter key which can create extra paragraphs\n\t\t\tif (event.key === \"Enter\") event.preventDefault()\n\t\t\treturn false\n\t\t},\n\t\thandlePaste: (view, event, slice) => {\n\t\t\tconst onFilePaste = onFilePasteRef.current\n\t\t\tconst files = event.clipboardData?.files\n\t\t\tif (onFilePaste && files && files.length > 0) {\n\t\t\t\t// Filter for image files\n\t\t\t\tconst imageFiles = Array.from(files).filter(file => file.type.startsWith(\"image/\"))\n\t\t\t\tif (imageFiles.length > 0) {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tonFilePaste(imageFiles)\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn pasteAgentInputClipboardText(view, event, slice)\n\t\t},\n\t\tdispatchTransaction: (transaction: Transaction) => {\n\t\t\tconst prevDoc = editorView.state.doc\n\t\t\tconst newState = editorView.state.apply(transaction)\n\t\t\teditorView.updateState(newState)\n\n\t\t\tif (transaction.docChanged) {\n\t\t\t\t// Detect fileAttachment nodes removed via keyboard and sync the attachments state\n\t\t\t\tconst onFileAttachmentRemove = onFileAttachmentRemoveRef.current\n\t\t\t\tif (onFileAttachmentRemove) {\n\t\t\t\t\tconst prevIds = getFileAttachmentIds(prevDoc)\n\t\t\t\t\tconst nextIds = getFileAttachmentIds(newState.doc)\n\t\t\t\t\tfor (const id of prevIds) {\n\t\t\t\t\t\tif (!nextIds.has(id)) onFileAttachmentRemove(id)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst isValid = isValidAgentInput(newState.doc, hasImagesRef.current, isUploadingImagesRef.current)\n\t\t\t\tsetIsValidRef.current(isValid)\n\t\t\t\tonChangeRef.current?.()\n\t\t\t}\n\t\t},\n\t})\n\n\treturn editorView\n}\n\nexport function useAgentInputEditorView({\n\tfromEditorState,\n\tplaceholder = \"\",\n\tonSubmit,\n\tonEscape,\n\thistoryNavigator,\n\tclearOnSubmit = true,\n\thasImages = false,\n\tisUploadingImages = false,\n\tonFilePaste,\n\tonFocus,\n\tonBlur,\n\tonEmptySubmit,\n\tonChange,\n\tonSuggestionChange,\n\tonFileAttachmentRemove,\n}: UseAgentInputEditorViewOptions): AgentInputEditorAPI {\n\tconst proseMirror = useImportProseMirror()\n\n\tconst [isValid, setIsValid] = useState(false)\n\n\t// Use refs to store the latest callbacks so the ProseMirror keymap handler\n\t// always calls the current version, avoiding stale closure issues.\n\tconst onSubmitRef = useRef(onSubmit)\n\tconst onEscapeRef = useRef(onEscape)\n\tconst historyNavigatorRef = useRef(historyNavigator)\n\tconst onFilePasteRef = useRef(onFilePaste)\n\tconst onFocusRef = useRef(onFocus)\n\tconst onBlurRef = useRef(onBlur)\n\tconst setIsValidRef = useRef(setIsValid)\n\tconst hasImagesRef = useRef(hasImages)\n\tconst isUploadingImagesRef = useRef(isUploadingImages)\n\tconst onEmptySubmitRef = useRef(onEmptySubmit)\n\tconst onChangeRef = useRef(onChange)\n\tconst onSuggestionChangeRef = useRef(onSuggestionChange)\n\tconst onFileAttachmentRemoveRef = useRef(onFileAttachmentRemove)\n\tconst suggestionKeyCommandsRef = useRef<SuggestKeyCommands | null>(null)\n\n\tuseInsertionEffect(() => {\n\t\tonSubmitRef.current = onSubmit\n\t}, [onSubmit])\n\n\tuseInsertionEffect(() => {\n\t\tonEscapeRef.current = onEscape\n\t}, [onEscape])\n\n\tuseInsertionEffect(() => {\n\t\thistoryNavigatorRef.current = historyNavigator\n\t}, [historyNavigator])\n\n\tuseInsertionEffect(() => {\n\t\tonFilePasteRef.current = onFilePaste\n\t}, [onFilePaste])\n\n\tuseInsertionEffect(() => {\n\t\tonFocusRef.current = onFocus\n\t}, [onFocus])\n\n\tuseInsertionEffect(() => {\n\t\tonBlurRef.current = onBlur\n\t}, [onBlur])\n\n\tuseInsertionEffect(() => {\n\t\thasImagesRef.current = hasImages\n\t}, [hasImages])\n\n\tuseInsertionEffect(() => {\n\t\tisUploadingImagesRef.current = isUploadingImages\n\t}, [isUploadingImages])\n\n\tuseInsertionEffect(() => {\n\t\tonEmptySubmitRef.current = onEmptySubmit\n\t}, [onEmptySubmit])\n\n\tuseInsertionEffect(() => {\n\t\tonChangeRef.current = onChange\n\t}, [onChange])\n\n\tuseInsertionEffect(() => {\n\t\tonSuggestionChangeRef.current = onSuggestionChange\n\t}, [onSuggestionChange])\n\n\tuseInsertionEffect(() => {\n\t\tonFileAttachmentRemoveRef.current = onFileAttachmentRemove\n\t}, [onFileAttachmentRemove])\n\n\tconst [editorView] = useState<EditorView>(() =>\n\t\tcreateAgentInputEditorView(\n\t\t\tfromEditorState,\n\t\t\tproseMirror,\n\t\t\tplaceholder,\n\t\t\tonSubmitRef,\n\t\t\tonEscapeRef,\n\t\t\thistoryNavigatorRef,\n\t\t\tsetIsValidRef,\n\t\t\tclearOnSubmit,\n\t\t\tonFilePasteRef,\n\t\t\tonFocusRef,\n\t\t\tonBlurRef,\n\t\t\thasImagesRef,\n\t\t\tisUploadingImagesRef,\n\t\t\tonEmptySubmitRef,\n\t\t\tonChangeRef,\n\t\t\tonSuggestionChangeRef,\n\t\t\tsuggestionKeyCommandsRef,\n\t\t\tonFileAttachmentRemoveRef,\n\t\t),\n\t)\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\teditorView.destroy()\n\t\t}\n\t}, [editorView])\n\n\tuseEffect(() => {\n\t\t// Re-evaluate validity after we create the editor view. It might be constructed from an\n\t\t// existing state or when the hasImages or isUploadingImages state changes.\n\t\tconst isValid = isValidAgentInput(editorView.state.doc, hasImages, isUploadingImages)\n\t\tsetIsValidRef.current(isValid)\n\t}, [editorView, hasImages, isUploadingImages])\n\n\tuseEffect(() => {\n\t\teditorView.dom.setAttribute(\"data-placeholder\", placeholder)\n\t}, [placeholder, editorView])\n\n\tconst insertTag = useCallback(\n\t\t(tag: AgentInputTag, options?: InsertTagOptions) => {\n\t\t\tconst { tr, doc, selection } = editorView.state\n\t\t\tconst callerRange = options?.replaceRange\n\n\t\t\tswitch (tag.type) {\n\t\t\t\tcase \"layer\": {\n\t\t\t\t\tconst layers = getLayerTagReferences(tag)\n\t\t\t\t\tif (layers.length === 0) return\n\n\t\t\t\t\tinsertOrReplaceTagAtSelection({\n\t\t\t\t\t\tdoc,\n\t\t\t\t\t\ttr,\n\t\t\t\t\t\tselection,\n\t\t\t\t\t\ttagNodeName: \"layer\",\n\t\t\t\t\t\tcreateTagNode: existingTag => {\n\t\t\t\t\t\t\tconst existingLayers = existingTag ? getLayerTagAttrs(existingTag).nodes : []\n\t\t\t\t\t\t\tconst existingNodeIds = new Set(existingLayers.map(layer => layer.id))\n\t\t\t\t\t\t\tconst mergedLayers = [...existingLayers]\n\n\t\t\t\t\t\t\tfor (const layer of layers) {\n\t\t\t\t\t\t\t\tif (existingNodeIds.has(layer.id)) continue\n\t\t\t\t\t\t\t\tmergedLayers.push(layer)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn schema.nodes.layer.create({ nodes: mergedLayers })\n\t\t\t\t\t\t},\n\t\t\t\t\t\treplaceRange: callerRange,\n\t\t\t\t\t})\n\n\t\t\t\t\teditorView.dispatch(tr)\n\t\t\t\t\teditorView.focus()\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tcase \"cmsSelection\": {\n\t\t\t\t\tinsertOrReplaceTagAtSelection({\n\t\t\t\t\t\tdoc,\n\t\t\t\t\t\ttr,\n\t\t\t\t\t\tselection,\n\t\t\t\t\t\ttagNodeName: \"cms\",\n\t\t\t\t\t\tcreateTagNode: () => createTagNode(tag),\n\t\t\t\t\t\treplaceRange: callerRange,\n\t\t\t\t\t\tshouldReplaceAdjacentTag: existingTag => getCmsTagAttrs(existingTag).collectionId === tag.collectionId,\n\t\t\t\t\t})\n\n\t\t\t\t\teditorView.dispatch(tr)\n\n\t\t\t\t\tif (callerRange) editorView.focus()\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tcase \"cmsCollection\":\n\t\t\t\tcase \"page\":\n\t\t\t\tcase \"designPage\":\n\t\t\t\tcase \"component\":\n\t\t\t\tcase \"textStyle\":\n\t\t\t\tcase \"linkStyle\":\n\t\t\t\tcase \"colorStyle\":\n\t\t\t\tcase \"layoutTemplate\":\n\t\t\t\tcase \"skill\": {\n\t\t\t\t\tconst fallbackPos = selection.empty ? selection.from : selection.to\n\t\t\t\t\tinsertOrReplaceTagAtSelection({\n\t\t\t\t\t\tdoc,\n\t\t\t\t\t\ttr,\n\t\t\t\t\t\tselection,\n\t\t\t\t\t\ttagNodeName: tag.type,\n\t\t\t\t\t\tcreateTagNode: () => createTagNode(tag),\n\t\t\t\t\t\treplaceRange: callerRange ?? { from: fallbackPos, to: fallbackPos },\n\t\t\t\t\t})\n\t\t\t\t\teditorView.dispatch(tr)\n\t\t\t\t\teditorView.focus()\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[editorView],\n\t)\n\n\tconst focus = useCallback(() => {\n\t\teditorView.focus()\n\t}, [editorView])\n\n\tconst clear = useCallback(() => {\n\t\tclearEditorContent(editorView)\n\t}, [editorView])\n\n\tconst setContent = useCallback(\n\t\t(segments: readonly AgentInputSegment[]) => {\n\t\t\tsetEditorContent(editorView, segments)\n\t\t},\n\t\t[editorView],\n\t)\n\n\tconst insertFileAttachment = useCallback(\n\t\t(id: string, fileName: string) => {\n\t\t\tconst { tr, selection } = editorView.state\n\t\t\ttr.insert(selection.from, schema.nodes.fileAttachment.create({ attachmentId: id, fileName }))\n\t\t\teditorView.dispatch(tr)\n\t\t},\n\t\t[editorView],\n\t)\n\n\tconst getTextContent = useCallback(() => {\n\t\treturn editorView.state.doc.textContent\n\t}, [editorView])\n\n\tconst submit = useCallback((): boolean => {\n\t\tif (!isValidAgentInput(editorView.state.doc, hasImagesRef.current, isUploadingImagesRef.current)) return false\n\t\tconst segments = serializeToSegments(editorView.state.doc)\n\n\t\tif (clearOnSubmit) clear()\n\n\t\tconst success = onSubmitRef.current(segments)\n\t\thistoryNavigatorRef.current?.reset()\n\t\treturn success\n\t}, [editorView, clearOnSubmit, clear])\n\n\tconst updateStateFrom = useCallback(\n\t\t(fromState: PersistedEditorState | undefined) => {\n\t\t\tconst config = {\n\t\t\t\tschema,\n\t\t\t\tplugins: editorView.state.plugins,\n\t\t\t}\n\t\t\tconst newState = fromState ? EditorState.fromJSON(config, fromState) : EditorState.create(config)\n\t\t\teditorView.updateState(newState)\n\n\t\t\tconst isValid = isValidAgentInput(newState.doc, hasImagesRef.current, isUploadingImagesRef.current)\n\t\t\tsetIsValidRef.current(isValid)\n\n\t\t\thistoryNavigatorRef.current?.reset()\n\t\t},\n\t\t[editorView],\n\t)\n\t// Return memoized object to prevent unnecessary re-renders in consumers.\n\treturn useMemo(\n\t\t() => ({\n\t\t\teditorView,\n\t\t\tinsertTag,\n\t\t\tinsertFileAttachment,\n\t\t\tsetContent,\n\t\t\tfocus,\n\t\t\tgetTextContent,\n\t\t\tsubmit,\n\t\t\tupdateStateFrom,\n\t\t\tisValid,\n\t\t\tsuggestionKeyCommandsRef,\n\t\t}),\n\t\t[isValid, editorView, insertTag, insertFileAttachment, setContent, focus, getTextContent, submit, updateStateFrom],\n\t)\n}\n", "import type { Node as ProseMirrorNode } from \"prosemirror-model\"\nimport type { EditorView, NodeView } from \"prosemirror-view\"\n\nimport { Dictionary } from \"app/dictionary.ts\"\nimport {\n\tCanvasSelectionTag,\n\tColorStyleTag,\n\tCmsCollectionTag,\n\tCmsTableSelectionTag,\n\tComponentTag,\n\tFileAttachmentTag,\n\tLinkStyleTag,\n\tLayoutTemplateTag,\n\tPageTag,\n\tSkillTag,\n\tTextStyleTag,\n} from \"document/components/chrome/agentPanel/SelectionTag.tsx\"\nimport { type Root, createRoot } from \"react-dom/client\"\nimport {\n\tcmsTagAttrsToSegment,\n\tgetColorStyleTagAttrs,\n\tgetCmsTagAttrs,\n\tgetComponentTagAttrs,\n\tgetDesignPageTagAttrs,\n\tgetFileAttachmentTagAttrs,\n\tgetLayerTagAttrs,\n\tgetLayoutTemplateTagAttrs,\n\tgetPageTagAttrs,\n\tgetSkillTagAttrs,\n\tgetStyleTagAttrs,\n} from \"./agentInputSchema.ts\"\n\nclass LayerTagNodeView implements NodeView {\n\tdom: HTMLElement\n\tprivate root: Root\n\n\tconstructor(node: ProseMirrorNode, _view: EditorView, _getPos: () => number | undefined) {\n\t\tthis.dom = document.createElement(\"span\")\n\t\tthis.dom.className = \"tag-wrapper\"\n\t\tthis.dom.contentEditable = \"false\"\n\n\t\tthis.root = createRoot(this.dom)\n\t\tthis.renderNode(node)\n\t}\n\n\tprivate renderNode(node: ProseMirrorNode) {\n\t\tconst tagNodes = getLayerTagAttrs(node).nodes\n\t\tif (tagNodes.length > 1) {\n\t\t\tthis.root.render(<CanvasSelectionTag layerCount={tagNodes.length} />)\n\t\t\treturn\n\t\t}\n\n\t\tconst tag = tagNodes[0]\n\t\tthis.root.render(\n\t\t\t<CanvasSelectionTag\n\t\t\t\tnodeName={tag?.name ?? Dictionary.Unknown}\n\t\t\t\tlayerIconName={tag?.type ?? \"rectangle\"}\n\t\t\t\tisComponent={tag?.type === \"component\"}\n\t\t\t/>,\n\t\t)\n\t}\n\n\tupdate(node: ProseMirrorNode): boolean {\n\t\tif (node.type.name !== \"layer\") return false\n\t\tthis.renderNode(node)\n\t\treturn true\n\t}\n\n\tdestroy() {\n\t\tsetTimeout(() => this.root.unmount(), 0)\n\t}\n\n\tstopEvent(): boolean {\n\t\treturn false\n\t}\n\n\tignoreMutation(): boolean {\n\t\treturn true\n\t}\n}\n\nclass CmsSelectionTagNodeView implements NodeView {\n\tdom: HTMLElement\n\tprivate root: Root\n\n\tconstructor(node: ProseMirrorNode, _view: EditorView, _getPos: () => number | undefined) {\n\t\tthis.dom = document.createElement(\"span\")\n\t\tthis.dom.className = \"tag-wrapper\"\n\t\tthis.dom.contentEditable = \"false\"\n\n\t\tthis.root = createRoot(this.dom)\n\t\tthis.renderNode(node)\n\t}\n\n\tprivate renderNode(node: ProseMirrorNode) {\n\t\tconst tag = cmsTagAttrsToSegment(getCmsTagAttrs(node))\n\t\tif (!tag) {\n\t\t\tthis.root.render(<CmsCollectionTag collectionName={Dictionary.Unknown} />)\n\t\t\treturn\n\t\t}\n\t\tif (tag.type === \"cmsCollection\") {\n\t\t\tthis.root.render(<CmsCollectionTag collectionName={tag.collectionName} />)\n\t\t\treturn\n\t\t}\n\t\tconst cellCount = tag.collectionItemIds.length * (tag.variableColumnIds.length + tag.metadataColumnIds.length)\n\t\tthis.root.render(<CmsTableSelectionTag collectionName={tag.collectionName} cellCount={cellCount} />)\n\t}\n\n\tupdate(node: ProseMirrorNode): boolean {\n\t\tif (node.type.name !== \"cms\") return false\n\t\tthis.renderNode(node)\n\t\treturn true\n\t}\n\n\tdestroy() {\n\t\tsetTimeout(() => this.root.unmount(), 0)\n\t}\n\n\tstopEvent(): boolean {\n\t\treturn false\n\t}\n\n\tignoreMutation(): boolean {\n\t\treturn true\n\t}\n}\n\nfunction createSimpleTagNodeView(\n\tnode: ProseMirrorNode,\n\tnodeName:\n\t\t| \"page\"\n\t\t| \"designPage\"\n\t\t| \"component\"\n\t\t| \"textStyle\"\n\t\t| \"linkStyle\"\n\t\t| \"colorStyle\"\n\t\t| \"layoutTemplate\"\n\t\t| \"skill\"\n\t\t| \"fileAttachment\",\n\trenderNode: (node: ProseMirrorNode) => React.ReactNode,\n): NodeView {\n\tconst dom = document.createElement(\"span\")\n\tdom.className = \"tag-wrapper\"\n\tdom.contentEditable = \"false\"\n\tconst root = createRoot(dom)\n\tconst render = (nextNode: ProseMirrorNode) => root.render(renderNode(nextNode))\n\trender(node)\n\treturn {\n\t\tdom,\n\t\tupdate(nextNode) {\n\t\t\tif (nextNode.type.name !== nodeName) return false\n\t\t\trender(nextNode)\n\t\t\treturn true\n\t\t},\n\t\tdestroy() {\n\t\t\tsetTimeout(() => root.unmount(), 0)\n\t\t},\n\t\tstopEvent() {\n\t\t\treturn false\n\t\t},\n\t\tignoreMutation() {\n\t\t\treturn true\n\t\t},\n\t}\n}\n\nexport function createLayerTagNodeView(\n\tnode: ProseMirrorNode,\n\tview: EditorView,\n\tgetPos: () => number | undefined,\n): LayerTagNodeView {\n\treturn new LayerTagNodeView(node, view, getPos)\n}\n\nexport function createCmsSelectionTagNodeView(\n\tnode: ProseMirrorNode,\n\tview: EditorView,\n\tgetPos: () => number | undefined,\n): CmsSelectionTagNodeView {\n\treturn new CmsSelectionTagNodeView(node, view, getPos)\n}\n\nexport function createPageTagNodeView(node: ProseMirrorNode): NodeView {\n\treturn createSimpleTagNodeView(node, \"page\", n => {\n\t\tconst attrs = getPageTagAttrs(n)\n\t\treturn <PageTag name={attrs?.name || Dictionary.Unknown} />\n\t})\n}\n\nexport function createDesignPageTagNodeView(node: ProseMirrorNode): NodeView {\n\treturn createSimpleTagNodeView(node, \"designPage\", n => {\n\t\tconst attrs = getDesignPageTagAttrs(n)\n\t\treturn <PageTag name={attrs?.name || Dictionary.Unknown} />\n\t})\n}\n\nexport function createComponentTagNodeView(node: ProseMirrorNode): NodeView {\n\treturn createSimpleTagNodeView(node, \"component\", n => {\n\t\tconst attrs = getComponentTagAttrs(n)\n\t\treturn <ComponentTag name={attrs?.name || Dictionary.Unknown} />\n\t})\n}\n\nexport function createTextStyleTagNodeView(node: ProseMirrorNode): NodeView {\n\treturn createSimpleTagNodeView(node, \"textStyle\", n => {\n\t\tconst attrs = getStyleTagAttrs(n)\n\t\treturn <TextStyleTag name={attrs?.name || Dictionary.Unknown} />\n\t})\n}\n\nexport function createLinkStyleTagNodeView(node: ProseMirrorNode): NodeView {\n\treturn createSimpleTagNodeView(node, \"linkStyle\", n => {\n\t\tconst attrs = getStyleTagAttrs(n)\n\t\treturn <LinkStyleTag name={attrs?.name || Dictionary.Unknown} />\n\t})\n}\n\nexport function createColorStyleTagNodeView(node: ProseMirrorNode): NodeView {\n\treturn createSimpleTagNodeView(node, \"colorStyle\", n => {\n\t\tconst attrs = getColorStyleTagAttrs(n)\n\t\treturn <ColorStyleTag name={attrs?.name || Dictionary.Unknown} color={attrs?.color || \"transparent\"} />\n\t})\n}\n\nexport function createLayoutTemplateTagNodeView(node: ProseMirrorNode): NodeView {\n\treturn createSimpleTagNodeView(node, \"layoutTemplate\", n => {\n\t\tconst attrs = getLayoutTemplateTagAttrs(n)\n\t\treturn <LayoutTemplateTag name={attrs?.name || Dictionary.Unknown} />\n\t})\n}\n\nexport function createSkillTagNodeView(node: ProseMirrorNode): NodeView {\n\treturn createSimpleTagNodeView(node, \"skill\", n => {\n\t\tconst attrs = getSkillTagAttrs(n)\n\t\treturn <SkillTag label={attrs?.label || Dictionary.Unknown} />\n\t})\n}\n\nexport function createFileAttachmentTagNodeView(node: ProseMirrorNode): NodeView {\n\treturn createSimpleTagNodeView(node, \"fileAttachment\", n => {\n\t\tconst attrs = getFileAttachmentTagAttrs(n)\n\t\treturn <FileAttachmentTag name={attrs?.fileName ?? \"\"} />\n\t})\n}\n", "import { Plugin } from \"prosemirror-state\"\nimport { type Suggester, suggest } from \"prosemirror-suggest\"\n\nexport type SuggestionType = \"context\" | \"skills\"\n\nexport interface SuggestionState {\n\ttype: SuggestionType\n\tquery: string\n\trange: { from: number; to: number }\n\tanchorElement: HTMLElement\n}\n\n/**\n * Callbacks the popover registers so key handling can live inside a ProseMirror plugin (scoped to\n * the editor's view) rather than a document-level listener. `onSelect` returns `true` when it\n * consumed the event so the caller can fall through to the editor's own Enter handler (submit) when\n * there are no options to pick.\n */\nexport interface SuggestKeyCommands {\n\tonNavigate: (direction: \"up\" | \"down\", repeat: boolean) => void\n\tonSelect: () => boolean\n\tonDismiss: () => void\n}\n\nexport interface SuggestKeyCommandsRef {\n\tcurrent: SuggestKeyCommands | null\n}\n\nconst TRIGGERS: readonly { char: \"@\" | \"/\"; type: SuggestionType }[] = [\n\t{ char: \"@\", type: \"context\" },\n\t{ char: \"/\", type: \"skills\" },\n]\n\n// Spaces are included so asset names containing them (e.g. \"My Image\") can still be queried in\n// full; the popover tokenizes the trimmed query on whitespace when filtering.\nconst supportedCharacters = /[\\p{L}\\p{N}_/\\- ]/u\nconst whitespaceRegex = /\\s/u\nconst leadingNumericSuffixRegex = /^\\s+\\d+\\b/u\n\nfunction getReplacementRange({\n\trange,\n\tquery,\n}: {\n\trange: { from: number; cursor: number }\n\tquery: { partial: string; full: string }\n}): SuggestionState[\"range\"] {\n\tlet to = range.cursor\n\tconst suffix = query.full.slice(query.partial.length)\n\n\t// Keep unrelated prose after a just-typed trigger, but include the rest of the active word when\n\t// editing inside a token. Spaces already typed before the caret stay part of multi-word queries.\n\tif (suffix && !whitespaceRegex.test(suffix[0] ?? \"\")) {\n\t\tconst suffixTokenEnd = suffix.search(whitespaceRegex)\n\t\tto += suffixTokenEnd === -1 ? suffix.length : suffixTokenEnd\n\t} else if (query.partial.length > 0 && leadingNumericSuffixRegex.test(suffix)) {\n\t\tto += suffix.match(leadingNumericSuffixRegex)?.[0].length ?? 0\n\t}\n\n\treturn { from: range.from, to }\n}\n\nexport function agentSuggestPlugin(onChange: (state: SuggestionState | null) => void): Plugin[] {\n\t// A fixed-position element used as the Popover anchor. Created imperatively so it is already\n\t// in the DOM (with correct coordinates) before the React component first renders \u2014 avoiding\n\t// the double-render that a ghost-anchor-in-state approach requires. Its position is updated\n\t// on every suggestion change via coordsAtPos, which is sufficient for a small input that\n\t// doesn't scroll while a suggestion is open.\n\tconst anchorEl = document.createElement(\"span\")\n\tanchorEl.setAttribute(\"aria-hidden\", \"true\")\n\tanchorEl.style.cssText = \"position:fixed;width:0;height:0;pointer-events:none\"\n\n\tconst makeSuggester = ({ char, type }: (typeof TRIGGERS)[number]): Suggester => ({\n\t\tchar,\n\t\tname: `agent-${type}`,\n\t\tsupportedCharacters,\n\t\tcaptureChar: true,\n\t\t// `matchOffset: 0` fires as soon as the trigger character is typed, before any query chars.\n\t\tmatchOffset: 0,\n\t\tcaseInsensitive: true,\n\t\tunicode: true,\n\t\tonChange: ({ query, view, range, exitReason }) => {\n\t\t\tif (exitReason) {\n\t\t\t\tanchorEl.remove()\n\t\t\t\tonChange(null)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Append to the editor's document on first activation.\n\t\t\tif (!anchorEl.isConnected) {\n\t\t\t\tview.dom.ownerDocument.body.appendChild(anchorEl)\n\t\t\t}\n\n\t\t\tconst coords = view.coordsAtPos(range.from)\n\t\t\tanchorEl.style.left = `${coords.left}px`\n\t\t\tanchorEl.style.top = `${coords.top}px`\n\t\t\tanchorEl.style.height = `${coords.bottom - coords.top}px`\n\n\t\t\tonChange({\n\t\t\t\ttype,\n\t\t\t\tquery: query.partial.toLowerCase(),\n\t\t\t\trange: getReplacementRange({ range, query }),\n\t\t\t\tanchorElement: anchorEl,\n\t\t\t})\n\t\t},\n\t\t// Hide the decoration once the caret has left the match in either direction; the popover\n\t\t// itself is driven by the `onChange` exitReason path, so we don't need to wire it again here.\n\t\tdisableDecorations: (editorState, match) =>\n\t\t\teditorState.selection.to < match.range.from || editorState.selection.to > match.range.to,\n\t})\n\n\t// Clean up the anchor element when the editor is destroyed.\n\tconst cleanupPlugin = new Plugin({\n\t\tview: () => ({ destroy: () => anchorEl.remove() }),\n\t})\n\n\treturn [suggest(...TRIGGERS.map(makeSuggester)), cleanupPlugin]\n}\n\n/**\n * Scoped keymap plugin that runs only while the popover registered commands. Returning `true` from\n * `handleKeyDown` prevents downstream keymaps; returning `false` lets the editor's own handlers run\n * (e.g. Enter falling through to submit when there are no selectable suggestions).\n */\nexport function agentSuggestKeyPlugin(commandsRef: SuggestKeyCommandsRef): Plugin {\n\treturn new Plugin({\n\t\tprops: {\n\t\t\thandleKeyDown(_view, event) {\n\t\t\t\tconst commands = commandsRef.current\n\t\t\t\tif (!commands) return false\n\n\t\t\t\tswitch (event.key) {\n\t\t\t\t\tcase \"ArrowDown\":\n\t\t\t\t\tcase \"ArrowUp\":\n\t\t\t\t\t\tcommands.onNavigate(event.key === \"ArrowUp\" ? \"up\" : \"down\", event.repeat)\n\t\t\t\t\t\treturn true\n\t\t\t\t\tcase \"Enter\":\n\t\t\t\t\tcase \"Tab\":\n\t\t\t\t\t\treturn commands.onSelect()\n\t\t\t\t\tcase \"Escape\":\n\t\t\t\t\t\tcommands.onDismiss()\n\t\t\t\t\t\treturn true\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t})\n}\n", "import type { Node as ProseMirrorNode, ResolvedPos } from \"prosemirror-model\"\nimport { TextSelection, type Selection, type Transaction } from \"prosemirror-state\"\nimport { isAgentInputEmpty } from \"./input.ts\"\n\ninterface AdjacentTagMatch {\n\tnode: ProseMirrorNode\n\tposition: number\n}\n\n// Returns every tag of the given kind adjacent to the caret, in priority order:\n// 1. right before the caret (`[tag]|`)\n// 2. right after the caret (`|[tag]`)\n// 3. one space before the caret (`[tag] |`) \u2014 because we always add a trailing space after a tag and want to merge next one with it\n// 4. one space after the caret (`| [tag]`) \u2014 sometimes this happens when caret sits between tags, for instance\nfunction findAdjacentTagCandidates(doc: ProseMirrorNode, from: number, tagNodeName: string): AdjacentTagMatch[] {\n\tconst resolvedPosition = doc.resolve(from)\n\tconst candidates: AdjacentTagMatch[] = []\n\n\tconst adjacentNodeBefore = resolvedPosition.nodeBefore\n\tif (adjacentNodeBefore?.type.name === tagNodeName) {\n\t\tcandidates.push({ node: adjacentNodeBefore, position: from - adjacentNodeBefore.nodeSize })\n\t}\n\n\tconst adjacentNodeAfter = resolvedPosition.nodeAfter\n\tif (adjacentNodeAfter?.type.name === tagNodeName) {\n\t\tcandidates.push({ node: adjacentNodeAfter, position: from })\n\t}\n\n\tconst beforeMatch = findTagAcrossSpaceFromCaret({\n\t\tresolvedPosition,\n\t\tdirection: \"before\",\n\t\ttagNodeName,\n\t})\n\tif (beforeMatch) candidates.push(beforeMatch)\n\n\tconst afterMatch = findTagAcrossSpaceFromCaret({\n\t\tresolvedPosition,\n\t\tdirection: \"after\",\n\t\ttagNodeName,\n\t})\n\tif (afterMatch) candidates.push(afterMatch)\n\n\treturn candidates\n}\n\ninterface FindTagAcrossSpaceFromCaretArgs {\n\tresolvedPosition: ResolvedPos\n\tdirection: \"before\" | \"after\"\n\ttagNodeName: string\n}\n\n// Looks for a tag of `tagNodeName` one space away from the caret in the given direction.\nfunction findTagAcrossSpaceFromCaret({\n\tresolvedPosition,\n\tdirection,\n\ttagNodeName,\n}: FindTagAcrossSpaceFromCaretArgs): AdjacentTagMatch | null {\n\tconst { parent } = resolvedPosition\n\tconst parentSize = parent.content.size\n\tconst positionInParent = resolvedPosition.parentOffset\n\tconst spaceOffset = direction === \"before\" ? positionInParent - 1 : positionInParent\n\tconst tagOffset = direction === \"before\" ? positionInParent - 2 : positionInParent + 1\n\n\tif (spaceOffset < 0 || spaceOffset >= parentSize) return null\n\tif (tagOffset < 0 || tagOffset >= parentSize) return null\n\n\tconst spaceChar = parent.textBetween(spaceOffset, spaceOffset + 1, undefined, \"\\ufffc\")\n\tif (spaceChar !== \" \") return null\n\n\tlet found: AdjacentTagMatch | null = null\n\tparent.forEach((node, offset) => {\n\t\tif (node.type.name !== tagNodeName) return\n\t\tconst containsTagOffset = offset <= tagOffset && offset + node.nodeSize > tagOffset\n\t\tif (!containsTagOffset) return\n\t\tfound = { node, position: resolvedPosition.start() + offset }\n\t})\n\treturn found\n}\n\ninterface InsertOrReplaceTagAtSelectionOptions {\n\tdoc: ProseMirrorNode\n\ttr: Transaction\n\tselection: Selection\n\ttagNodeName: string\n\tcreateTagNode: (existingTag: ProseMirrorNode | null) => ProseMirrorNode\n\treplaceRange?: { from: number; to: number }\n\tshouldReplaceAdjacentTag?: (existingTag: ProseMirrorNode) => boolean\n}\n\nexport function insertOrReplaceTagAtSelection({\n\tdoc,\n\ttr,\n\tselection,\n\ttagNodeName,\n\tcreateTagNode,\n\treplaceRange,\n\tshouldReplaceAdjacentTag = () => true,\n}: InsertOrReplaceTagAtSelectionOptions): void {\n\tlet insertPosition = replaceRange?.from ?? getInsertPosition(doc, selection)\n\tconst adjacentCandidates = replaceRange ? [] : findAdjacentTagCandidates(doc, insertPosition, tagNodeName)\n\tconst replaceableTag = adjacentCandidates.find(candidate => shouldReplaceAdjacentTag(candidate.node)) ?? null\n\tconst nextTag = createTagNode(replaceableTag?.node ?? null)\n\n\tif (replaceableTag) {\n\t\tconst hasTrailingSpace = hasSpaceAfterTag(doc, replaceableTag)\n\t\tconst adjacentTagEndPosition = replaceableTag.position + replaceableTag.node.nodeSize\n\t\tconst nextSelectionPosition = replaceableTag.position + nextTag.nodeSize + (hasTrailingSpace ? 1 : 0)\n\n\t\ttr.replaceWith(replaceableTag.position, adjacentTagEndPosition, nextTag)\n\t\ttr.setSelection(TextSelection.create(tr.doc, nextSelectionPosition))\n\t\treturn\n\t}\n\n\tif (replaceRange) {\n\t\ttr.replaceWith(replaceRange.from, replaceRange.to, nextTag)\n\t} else {\n\t\tconst standaloneInsertPosition = getStandaloneInsertPosition(doc, insertPosition, adjacentCandidates)\n\t\ttr.insert(standaloneInsertPosition, nextTag)\n\t\tinsertPosition = standaloneInsertPosition\n\t}\n\ttr.insertText(\" \", insertPosition + nextTag.nodeSize)\n\ttr.setSelection(TextSelection.create(tr.doc, insertPosition + nextTag.nodeSize + 1))\n}\n\nfunction getInsertPosition(doc: ProseMirrorNode, selection: Selection): number {\n\tconst selectsWholeDocument = selection.from === 0 && selection.to === doc.content.size\n\n\t// Ctrl+A in an empty input creates a whole-document selection over the placeholder\n\t// paragraph. Insert into that paragraph instead of after it to avoid a new line.\n\tif (selectsWholeDocument && isAgentInputEmpty(doc)) return 1\n\n\treturn selection.empty ? selection.from : selection.to\n}\n\n// Finds the position to insert a new tag at, so it doesn't interfere with existing non-replaceable tags\nfunction getStandaloneInsertPosition(\n\tdoc: ProseMirrorNode,\n\tinsertPosition: number,\n\tadjacentCandidates: readonly AdjacentTagMatch[],\n): number {\n\tconst blockingTagBeforeCaret =\n\t\tadjacentCandidates.find(candidate => candidate.position + candidate.node.nodeSize <= insertPosition) ?? null\n\tif (!blockingTagBeforeCaret) return insertPosition\n\n\t// Skip past the tag and its trailing space\n\tconst spaceOffset = hasSpaceAfterTag(doc, blockingTagBeforeCaret) ? 1 : 0\n\treturn blockingTagBeforeCaret.position + blockingTagBeforeCaret.node.nodeSize + spaceOffset\n}\n\nfunction hasSpaceAfterTag(doc: ProseMirrorNode, tag: AdjacentTagMatch): boolean {\n\tconst nextPosition = tag.position + tag.node.nodeSize\n\tif (nextPosition >= doc.content.size) return false\n\n\tconst nextCharacterEndPosition = Math.min(nextPosition + 1, doc.content.size)\n\tconst nextCharacter = doc.textBetween(nextPosition, nextCharacterEndPosition, undefined, \"\\ufffc\")\n\n\treturn nextCharacter === \" \"\n}\n", "import { useInsertionEffect, useMemo, useRef } from \"react\"\nimport type { AgentInputSegment } from \"./agentInputSchema.ts\"\n\nexport interface DraftStateSnapshot {\n\tdocJson: object\n}\n\nexport type HistoryEntry = readonly AgentInputSegment[] | DraftStateSnapshot\n\nexport interface MessageHistoryNavigator {\n\tnavigateUp(currentStateJson: object): HistoryEntry | undefined\n\tnavigateDown(): HistoryEntry | undefined\n\treset(): void\n}\n\n/**\n * Encapsulates the browsing-position state for cycling through past user\n * messages with Alt-ArrowUp / Alt-ArrowDown.  The returned object is\n * referentially stable so it can be stored in a ref without re-creating\n * ProseMirror plugins.\n */\nexport function useMessageHistoryNavigator(\n\tuserMessageCount: number,\n\tgetUserMessageParts?: (index: number) => readonly AgentInputSegment[] | undefined,\n): MessageHistoryNavigator {\n\tconst countRef = useRef(userMessageCount)\n\tconst getPartsRef = useRef(getUserMessageParts)\n\tconst offsetRef = useRef(0)\n\tconst draftRef = useRef<object | null>(null)\n\n\tuseInsertionEffect(() => {\n\t\tcountRef.current = userMessageCount\n\t\tgetPartsRef.current = getUserMessageParts\n\t}, [userMessageCount, getUserMessageParts])\n\n\treturn useMemo(\n\t\t(): MessageHistoryNavigator => ({\n\t\t\tnavigateUp(currentStateJson) {\n\t\t\t\tconst count = countRef.current\n\t\t\t\tconst getParts = getPartsRef.current\n\t\t\t\tif (count === 0 || !getParts) return undefined\n\n\t\t\t\tif (offsetRef.current === 0) {\n\t\t\t\t\tdraftRef.current = currentStateJson\n\t\t\t\t}\n\n\t\t\t\tif (offsetRef.current < count) {\n\t\t\t\t\toffsetRef.current++\n\t\t\t\t}\n\n\t\t\t\treturn getParts(count - offsetRef.current)\n\t\t\t},\n\n\t\t\tnavigateDown() {\n\t\t\t\tif (offsetRef.current <= 0) return undefined\n\n\t\t\t\tconst getParts = getPartsRef.current\n\t\t\t\tif (!getParts) return undefined\n\n\t\t\t\toffsetRef.current--\n\n\t\t\t\tif (offsetRef.current === 0) {\n\t\t\t\t\tconst draft = draftRef.current\n\t\t\t\t\tdraftRef.current = null\n\t\t\t\t\treturn draft ? { docJson: draft } : []\n\t\t\t\t}\n\n\t\t\t\tconst count = countRef.current\n\t\t\t\treturn getParts(count - offsetRef.current)\n\t\t\t},\n\n\t\t\treset() {\n\t\t\t\toffsetRef.current = 0\n\t\t\t\tdraftRef.current = null\n\t\t\t},\n\t\t}),\n\t\t[],\n\t)\n}\n", "import type { LanguageModel } from \"app/ai/languageModels.ts\"\nimport { defaultAgentModel } from \"app/ai/languageModels.ts\"\nimport { EngineChange } from \"document/EngineChanges.ts\"\nimport engine from \"document/engine.ts\"\nimport { useEngineState } from \"document/useEngineState.ts\"\nimport { useCallback } from \"react\"\n\ninterface UseAgentModelResult {\n\tmodel: LanguageModel\n\tsetModel: (model: LanguageModel) => void\n}\n\nexport function useAgentModel(): UseAgentModelResult {\n\tconst model = useEngineState(\n\t\t() => engine.stores.persistedUserDefaults.agentSelectedModel ?? defaultAgentModel,\n\t\t[],\n\t\t[EngineChange.UserDefaultsStore],\n\t)\n\n\tconst setModel = useCallback((newModel: LanguageModel) => {\n\t\tengine.stores.persistedUserDefaults.agentSelectedModel = newModel\n\t}, [])\n\n\treturn {\n\t\tmodel,\n\t\tsetModel,\n\t}\n}\n", "import { getImageFromFile } from \"web/lib/files.ts\"\n\nconst MAX_SVG_RASTER_DIMENSION = 4096\nconst MAX_SVG_RASTER_PIXELS = MAX_SVG_RASTER_DIMENSION * MAX_SVG_RASTER_DIMENSION\n\nexport async function convertSvgAttachmentToPng(file: File): Promise<File> {\n\tconst image = await getImageFromFile(file)\n\tconst { width, height } = getRasterSize(image.naturalWidth, image.naturalHeight)\n\tconst canvas = document.createElement(\"canvas\")\n\tcanvas.width = width\n\tcanvas.height = height\n\n\tconst context = canvas.getContext(\"2d\")\n\tif (!context) throw new Error(\"Failed to create canvas context\")\n\n\tcontext.drawImage(image, 0, 0, canvas.width, canvas.height)\n\n\tconst blob = await new Promise<Blob>((resolve, reject) => {\n\t\tcanvas.toBlob(blob => {\n\t\t\tif (!blob) {\n\t\t\t\treject(new Error(\"Failed to create PNG blob\"))\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tresolve(blob)\n\t\t}, \"image/png\")\n\t})\n\n\treturn new File([blob], replaceFileExtension(file.name, \"png\"), {\n\t\ttype: \"image/png\",\n\t\tlastModified: file.lastModified,\n\t})\n}\n\nfunction replaceFileExtension(filename: string, extension: string): string {\n\tconst basename = filename.replace(/\\.[^.]+$/u, \"\")\n\treturn `${basename}.${extension}`\n}\n\nfunction getRasterSize(width: number, height: number): { width: number; height: number } {\n\tif (width <= 0 || height <= 0) {\n\t\tthrow new Error(\"Failed to rasterize SVG with invalid dimensions\")\n\t}\n\n\tconst scaleByDimension = Math.min(1, MAX_SVG_RASTER_DIMENSION / Math.max(width, height))\n\tconst scaleByPixels = Math.min(1, Math.sqrt(MAX_SVG_RASTER_PIXELS / (width * height)))\n\tconst scale = Math.min(scaleByDimension, scaleByPixels)\n\n\treturn {\n\t\twidth: Math.max(1, Math.round(width * scale)),\n\t\theight: Math.max(1, Math.round(height * scale)),\n\t}\n}\n", "import { emptyArray } from \"@framerjs/shared\"\nimport {\n\ttype AgentAttachmentImage,\n\ttype AgentAttachmentImageUploadResult,\n\tcreateAgentAttachmentImage,\n\tgetImageUrls,\n\ttype AgentAttachmentFile,\n\ttype AgentAttachmentFileType,\n\ttype AgentAttachmentFileUploadResult,\n\ttype AgentAttachmentResult,\n\tisVideoFileName,\n\ttextFileTypes,\n\tvideoFileExtensions,\n} from \"app/agent/attachments.ts\"\nimport { convertSvgAttachmentToPng } from \"app/agent/utils/convertSvgAttachmentToPng.ts\"\nimport type { LanguageModel } from \"app/ai/languageModels.ts\"\nimport { maxAgentImageAttachmentBytes, maxAgentImageAttachments, modelAttachmentsRules } from \"app/ai/models.ts\"\nimport type { BaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport { randomID } from \"document/models/CanvasTree/nodes/NodeID.ts\"\nimport { startTransition, useCallback, useEffect, useInsertionEffect, useMemo, useRef, useState } from \"react\"\nimport { isNumber } from \"utils/typeChecks.ts\"\nimport { BatchAssetUploader } from \"web/lib/BatchAssetUploader.ts\"\nimport { isImageUploadResult, type AssetUploadResult } from \"web/pages/project/lib/UploadService.ts\"\nimport { uploadUserAssetsService } from \"web/pages/project/lib/UploadUserAssetsService.ts\"\n\nexport type AttachmentStatus = \"uploading\" | \"uploaded\" | \"error\"\n\ninterface AttachmentBase {\n\tid: string\n\tstatus: AttachmentStatus\n\tresult?: AgentAttachmentResult\n\tpreviewUrl: string\n}\n\nexport interface LocalAttachment extends AttachmentBase {\n\tfile: File\n}\n\nexport interface UploadedAttachment extends AttachmentBase {\n\tfile?: never\n\tstatus: \"uploaded\"\n\tresult: AgentAttachmentResult\n}\n\nexport type AttachmentItem = LocalAttachment | UploadedAttachment\n\nexport function isLocalAttachment(item: AttachmentItem): item is LocalAttachment {\n\treturn \"file\" in item && item.file instanceof File\n}\n\nexport type ImageAttachmentItem = LocalAttachment | (UploadedAttachment & { result: AgentAttachmentImage })\n\ninterface UseAttachmentsResult {\n\titems: readonly AttachmentItem[]\n\tsetAttachments: (items: readonly AttachmentItem[]) => void\n\thasUploadingAttachments: boolean\n\thasUploadedImages: boolean\n\tuploadedImageResults: readonly AgentAttachmentImage[]\n\tuploadedFileResults: readonly AgentAttachmentFile[]\n\tisDragging: boolean\n\tcanAddMore: boolean\n\thandleFiles: (files: File[]) => void\n\thandleDrop: (event: DragEvent) => void\n\thandleDragEnter: (event: DragEvent) => void\n\thandleDragLeave: (event: DragEvent) => void\n\thandlePaste: (event: React.ClipboardEvent) => void\n\thandleRemoveItem: (index: number) => void\n\tremoveItemById: (id: string) => void\n\tclearAttachments: () => void\n\topenFilePicker: () => void\n}\n\ninterface ValidateFileContext {\n\tmodel: LanguageModel\n\tcurrentAttachmentSizeBytes: number\n}\n\nexport function useAttachments(\n\tmodel: LanguageModel,\n\tfromItems: readonly AttachmentItem[] = emptyArray<AttachmentItem>(),\n\tengine?: BaseEngine,\n\tonChange?: (items: readonly AttachmentItem[]) => void,\n\tonFilesAdded?: (items: readonly LocalAttachment[]) => void,\n): UseAttachmentsResult {\n\tconst attachmentRule = modelAttachmentsRules[model]\n\tconst maxAttachments = attachmentRule?.maxAttachments ?? maxAgentImageAttachments\n\tconst fileInputRef = useRef<HTMLInputElement | null>(null)\n\tconst [items, setItems] = useState<readonly AttachmentItem[]>(fromItems)\n\tconst [isDragging, setIsDragging] = useState(false)\n\tconst assetUploader = useMemo(() => {\n\t\tif (!engine) return undefined\n\t\treturn new BatchAssetUploader(engine, {\n\t\t\tsilent: true,\n\t\t\tassetOwnerType: \"user\",\n\t\t})\n\t}, [engine])\n\n\tconst previousItemsRef = useRef(items)\n\n\tuseEffect(() => {\n\t\tif (items === previousItemsRef.current) return\n\t\tonChange?.(items)\n\t\tpreviousItemsRef.current = items\n\t}, [items, onChange])\n\n\tconst canAddMore = items.length < maxAttachments\n\n\tconst hasUploadingAttachments = items.some(item => item.status === \"uploading\")\n\tconst hasUploadedImages = items.some(\n\t\titem => item.status === \"uploaded\" && !!item.result && isAgentAttachmentImageResult(item.result),\n\t)\n\tconst { uploadedImageResults, uploadedFileResults } = useUploadedAttachmentGroups(items)\n\n\tconst uploadAttachment = useCallback(\n\t\tasync (item: LocalAttachment) => {\n\t\t\ttry {\n\t\t\t\tconst result = isFileAttachment(item.file)\n\t\t\t\t\t? await createFileAttachment(item.file, assetUploader)\n\t\t\t\t\t: await createImageAttachment(item.file, assetUploader)\n\n\t\t\t\tconst status = result ? \"uploaded\" : \"error\"\n\n\t\t\t\t// Preload the image to avoid flickering when submitting the prompt.\n\t\t\t\tif (isAgentAttachmentImage(result)) preloadAgentAttachmentImage(result)\n\t\t\t\tsetItems(current => updateItemStatus(current, item.id, status, result))\n\t\t\t} catch {\n\t\t\t\tsetItems(current => updateItemStatus(current, item.id, \"error\"))\n\t\t\t}\n\t\t},\n\t\t[assetUploader],\n\t)\n\n\tconst onFilesAddedRef = useRef(onFilesAdded)\n\tuseInsertionEffect(() => {\n\t\tonFilesAddedRef.current = onFilesAdded\n\t}, [onFilesAdded])\n\n\tconst handleFiles = useCallback(\n\t\t(files: File[]) => {\n\t\t\tif (items.length >= maxAttachments) return\n\n\t\t\tconst newItems: LocalAttachment[] = []\n\n\t\t\tlet acceptedSizeBytes = getAttachmentsSizeBytes(items)\n\t\t\tfor (const file of files) {\n\t\t\t\tif (items.length + newItems.length >= maxAttachments) break\n\n\t\t\t\tconst isValid = validateFile(file, {\n\t\t\t\t\tmodel,\n\t\t\t\t\tcurrentAttachmentSizeBytes: acceptedSizeBytes,\n\t\t\t\t})\n\n\t\t\t\tif (isValid) {\n\t\t\t\t\tconst id = randomID()\n\t\t\t\t\tconst previewUrl = URL.createObjectURL(file)\n\t\t\t\t\tnewItems.push({ id, file, status: \"uploading\", previewUrl })\n\t\t\t\t\tacceptedSizeBytes += file.size\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (newItems.length === 0) return\n\n\t\t\tonFilesAddedRef.current?.(newItems)\n\n\t\t\tstartTransition(() => {\n\t\t\t\tsetItems(current => [...current, ...newItems])\n\t\t\t})\n\n\t\t\tfor (const item of newItems) {\n\t\t\t\tvoid uploadAttachment(item)\n\t\t\t}\n\t\t},\n\t\t[items, maxAttachments, model, uploadAttachment],\n\t)\n\n\tconst handleDrop = useCallback(\n\t\t(event: DragEvent) => {\n\t\t\tsetIsDragging(false)\n\t\t\tif (!event.dataTransfer?.files?.length) return\n\t\t\tconst files = Array.from(event.dataTransfer.files)\n\t\t\thandleFiles(files)\n\t\t},\n\t\t[handleFiles],\n\t)\n\n\tconst handleDragEnter = useCallback((event: DragEvent) => {\n\t\tif (!event.dataTransfer?.types.includes(\"Files\")) return\n\t\tsetIsDragging(true)\n\t}, [])\n\n\tconst handleDragLeave = useCallback((_event: DragEvent) => {\n\t\tsetIsDragging(false)\n\t}, [])\n\n\tconst handlePaste = useCallback(\n\t\t(event: React.ClipboardEvent) => {\n\t\t\tif (!event.clipboardData?.files?.length) return\n\t\t\tevent.preventDefault() // Prevent the image name to be pasted into the input\n\t\t\tconst files = Array.from(event.clipboardData.files)\n\t\t\thandleFiles(files)\n\t\t},\n\t\t[handleFiles],\n\t)\n\n\tconst handleRemoveItem = useCallback((index: number) => {\n\t\tstartTransition(() => {\n\t\t\tsetItems(current => {\n\t\t\t\tconst updated = [...current]\n\t\t\t\tupdated.splice(index, 1)\n\t\t\t\treturn updated\n\t\t\t})\n\t\t})\n\t}, [])\n\n\tconst removeItemById = useCallback((id: string) => {\n\t\tstartTransition(() => {\n\t\t\tsetItems(current => current.filter(item => item.id !== id))\n\t\t})\n\t}, [])\n\n\tconst clearAttachments = useCallback(() => {\n\t\t// Revoke blob URLs for local files being discarded. Without this, blob URL\n\t\t// registry entries accumulate across submissions for the lifetime of the page.\n\t\trevokeLocalBlobUrls(items)\n\n\t\tstartTransition(() => {\n\t\t\tsetItems(emptyArray<AttachmentItem>())\n\t\t})\n\t}, [items])\n\n\tconst openFilePicker = useCallback(() => {\n\t\tif (!canAddMore) return\n\n\t\t// Reuse existing input or create a new one\n\t\tif (!fileInputRef.current) {\n\t\t\tconst input = document.createElement(\"input\")\n\t\t\tinput.type = \"file\"\n\t\t\tinput.multiple = true\n\t\t\tconst allowedFileTypes = attachmentRule?.allowedFileTypes ?? [\"image/*\"]\n\t\t\tinput.accept = [...allowedFileTypes, ...fileAttachmentAcceptedPatterns].join(\",\")\n\t\t\tinput.style.display = \"none\"\n\t\t\tfileInputRef.current = input\n\t\t}\n\n\t\tconst input = fileInputRef.current\n\t\tinput.onchange = () => {\n\t\t\tif (input.files?.length) handleFiles(Array.from(input.files))\n\t\t\tinput.value = \"\"\n\t\t}\n\t\tinput.click()\n\t}, [attachmentRule?.allowedFileTypes, canAddMore, handleFiles])\n\n\tconst setAttachments = useCallback((newItems: readonly AttachmentItem[]) => {\n\t\tsetItems(newItems)\n\t}, [])\n\n\treturn useMemo(\n\t\t() => ({\n\t\t\titems,\n\t\t\tsetAttachments,\n\t\t\thasUploadingAttachments,\n\t\t\thasUploadedImages,\n\t\t\tuploadedImageResults,\n\t\t\tuploadedFileResults,\n\t\t\tisDragging,\n\t\t\tcanAddMore,\n\t\t\thandleFiles,\n\t\t\thandleDrop,\n\t\t\thandleDragEnter,\n\t\t\thandleDragLeave,\n\t\t\thandlePaste,\n\t\t\thandleRemoveItem,\n\t\t\tremoveItemById,\n\t\t\tclearAttachments,\n\t\t\topenFilePicker,\n\t\t}),\n\t\t[\n\t\t\titems,\n\t\t\thasUploadingAttachments,\n\t\t\thasUploadedImages,\n\t\t\tuploadedImageResults,\n\t\t\tuploadedFileResults,\n\t\t\tisDragging,\n\t\t\tcanAddMore,\n\t\t\thandleFiles,\n\t\t\thandleDrop,\n\t\t\thandleDragEnter,\n\t\t\thandleDragLeave,\n\t\t\thandlePaste,\n\t\t\thandleRemoveItem,\n\t\t\tremoveItemById,\n\t\t\tclearAttachments,\n\t\t\topenFilePicker,\n\t\t\tsetAttachments,\n\t\t],\n\t)\n}\n\nfunction useUploadedAttachmentGroups(items: readonly AttachmentItem[]) {\n\tconst uploadedImageResults = useMemo(\n\t\t() =>\n\t\t\titems\n\t\t\t\t.filter(\n\t\t\t\t\t(item): item is AttachmentItem & { result: AgentAttachmentImage } =>\n\t\t\t\t\t\titem.status === \"uploaded\" && !!item.result && isAgentAttachmentImageResult(item.result),\n\t\t\t\t)\n\t\t\t\t.map(item => item.result),\n\t\t[items],\n\t)\n\tconst uploadedFileResults = useMemo(\n\t\t() =>\n\t\t\titems\n\t\t\t\t.filter(\n\t\t\t\t\t(item): item is AttachmentItem & { result: AgentAttachmentFile } =>\n\t\t\t\t\t\titem.status === \"uploaded\" && !!item.result && isAgentAttachmentFileResult(item.result),\n\t\t\t\t)\n\t\t\t\t.map(item => item.result),\n\t\t[items],\n\t)\n\n\treturn { uploadedImageResults, uploadedFileResults }\n}\n\nexport function isAgentAttachmentImageResult(result: AgentAttachmentResult): result is AgentAttachmentImage {\n\treturn \"referenceImage\" in result\n}\n\nfunction isAgentAttachmentFileResult(result: AgentAttachmentResult): result is AgentAttachmentFile {\n\treturn \"type\" in result && result.type === \"file\"\n}\n\nfunction isVideoFile(file: File): boolean {\n\treturn file.type.startsWith(\"video/\") || isVideoFileName(file.name)\n}\n\nfunction isFileAttachment(file: File): boolean {\n\treturn fileAttachmentAcceptedPatterns.some(pattern => matchesFileTypePattern(pattern, file))\n}\n\nconst fileAttachmentAcceptedPatterns = [\n\t\".csv\",\n\t\".json\",\n\t\".markdown\",\n\t\".md\",\n\t\".tsv\",\n\t\".txt\",\n\t...[...videoFileExtensions].map(ext => `.${ext}`),\n\t\"application/json\",\n\t\"text/*\",\n\t\"video/*\",\n]\n\nfunction matchesFileTypePattern(pattern: string, file: File): boolean {\n\tif (pattern.startsWith(\".\")) {\n\t\tconst dotIdx = file.name.lastIndexOf(\".\")\n\t\tconst ext = dotIdx !== -1 ? file.name.slice(dotIdx + 1).toLowerCase() : \"\"\n\t\treturn ext === pattern.slice(1)\n\t}\n\treturn matchesMimeTypePattern(pattern, file.type)\n}\n\nfunction getFileExtension(fileName: string): keyof typeof fileAttachmentExtensionTypes | \"\" {\n\tconst extensionStart = fileName.lastIndexOf(\".\")\n\tif (extensionStart === -1) return \"\"\n\n\tconst extension = fileName.slice(extensionStart + 1).toLowerCase()\n\treturn fileAttachmentExtensions.has(extension) ? (extension as keyof typeof fileAttachmentExtensionTypes) : \"\"\n}\n\nfunction matchesMimeTypePattern(pattern: string, mimeType: string): boolean {\n\tif (pattern.endsWith(\"/*\")) {\n\t\tconst prefix = pattern.slice(0, -1)\n\t\treturn mimeType.startsWith(prefix)\n\t}\n\n\treturn mimeType === pattern\n}\n\nasync function createFileAttachment(\n\tfile: File,\n\tassetUploader: BatchAssetUploader | undefined,\n): Promise<AgentAttachmentFile | undefined> {\n\tconst result = await uploadFileAttachment(file, assetUploader)\n\tif (!result) return undefined\n\n\tconst fileType = getFileAttachmentFileType(file) ?? (isVideoFile(file) ? \"video\" : \"plain\")\n\treturn {\n\t\ttype: \"file\",\n\t\tfileName: result.originalFilename,\n\t\tfileType,\n\t\tuploadResult: result,\n\t\t// File text is stripped out from history on serialization so it's fine to keep it here.\n\t\ttext: textFileTypes.has(fileType) ? await file.text() : undefined,\n\t\tsizeBytes: file.size,\n\t}\n}\n\nasync function uploadFileAttachment(\n\tfile: File,\n\tassetUploader: BatchAssetUploader | undefined,\n): Promise<AgentAttachmentFileUploadResult | undefined> {\n\tif (assetUploader) {\n\t\tconst result = await assetUploader.add(file)\n\t\tif (!isImageUploadResult(result)) return toAgentAttachmentFileUploadResult(result, file)\n\t\treturn\n\t}\n\n\tif (isVideoFile(file)) {\n\t\treturn toAgentAttachmentFileUploadResult(await uploadUserAssetsService.uploadVideo(file, { silent: true }), file)\n\t}\n\n\treturn toAgentAttachmentFileUploadResult(await uploadUserAssetsService.uploadFile(file, { silent: true }), file)\n}\n\nfunction toAgentAttachmentFileUploadResult(\n\tresult: AgentAttachmentFileUploadResult | undefined,\n\tfile: File,\n): AgentAttachmentFileUploadResult | undefined {\n\tif (!result) return undefined\n\treturn {\n\t\t...result,\n\t\tsizeKB: Math.ceil(file.size / 1000),\n\t}\n}\n\nconst fileAttachmentMimeTypes: Readonly<Record<string, AgentAttachmentFileType>> = {\n\t\"application/json\": \"json\",\n\t\"text/csv\": \"csv\",\n\t\"text/markdown\": \"markdown\",\n\t\"text/plain\": \"plain\",\n\t\"text/tab-separated-values\": \"tsv\",\n}\n\nconst fileAttachmentExtensions = new Set([\"csv\", \"json\", \"markdown\", \"md\", \"tsv\", \"txt\"])\n\nconst fileAttachmentExtensionTypes = {\n\tcsv: \"csv\",\n\tjson: \"json\",\n\tmarkdown: \"markdown\",\n\tmd: \"markdown\",\n\ttsv: \"tsv\",\n\ttxt: \"plain\",\n} as const satisfies Record<string, AgentAttachmentFileType>\n\nfunction getFileAttachmentFileType(file: File): AgentAttachmentFileType | undefined {\n\tconst fileTypeFromMimeType = fileAttachmentMimeTypes[file.type]\n\tif (fileTypeFromMimeType) return fileTypeFromMimeType\n\n\tconst extension = getFileExtension(file.name)\n\tif (!extension) return undefined\n\treturn fileAttachmentExtensionTypes[extension]\n}\n\nasync function createImageAttachment(\n\tfile: File,\n\tassetUploader: BatchAssetUploader | undefined,\n): Promise<AgentAttachmentImage | undefined> {\n\tconst referenceImage = await uploadImageAttachment(file, assetUploader)\n\tif (!referenceImage) return undefined\n\n\treturn isSvgFile(file)\n\t\t? createSvgAttachmentImage(file, referenceImage, assetUploader)\n\t\t: createAgentAttachmentImage(referenceImage)\n}\n\nasync function uploadImageAttachment(\n\tfile: File,\n\tassetUploader: BatchAssetUploader | undefined,\n): Promise<AgentAttachmentImageUploadResult | undefined> {\n\tif (assetUploader) {\n\t\treturn toAgentAttachmentImageUploadResult(await assetUploader.add(file), file)\n\t}\n\n\treturn toAgentAttachmentImageUploadResult(await uploadUserAssetsService.uploadImage(file, { silent: true }), file)\n}\n\nfunction toAgentAttachmentImageUploadResult(\n\tresult: AssetUploadResult | undefined,\n\tfile: File,\n): AgentAttachmentImageUploadResult | undefined {\n\tif (!result || !isImageUploadResult(result)) return undefined\n\treturn {\n\t\t...result,\n\t\tsizeKB: Math.ceil(file.size / 1000),\n\t}\n}\n\nfunction isSvgFile(file: File): boolean {\n\treturn file.type === \"image/svg+xml\" || file.name.toLowerCase().endsWith(\".svg\")\n}\n\nasync function createSvgAttachmentImage(\n\tfile: File,\n\treferenceImage: AgentAttachmentImageUploadResult,\n\tassetUploader: BatchAssetUploader | undefined,\n): Promise<AgentAttachmentImage | undefined> {\n\tconst pngFile = await convertSvgAttachmentToPng(file)\n\tconst modelImage = await uploadImageAttachment(pngFile, assetUploader)\n\tif (!modelImage) return\n\n\treturn {\n\t\treferenceImage,\n\t\tmodelImage,\n\t}\n}\n\nexport function isAgentAttachmentImage(result: AgentAttachmentResult | undefined): result is AgentAttachmentImage {\n\treturn result !== undefined && \"referenceImage\" in result\n}\n\nfunction preloadAgentAttachmentImage(image: AgentAttachmentImage) {\n\tnew Image().src = getImageUrls(image).messageUrl\n}\n\nfunction updateItemStatus(\n\titems: readonly AttachmentItem[],\n\tid: string,\n\tstatus: AttachmentStatus,\n\tresult?: AgentAttachmentResult,\n): readonly AttachmentItem[] {\n\tconst index = items.findIndex(a => a.id === id)\n\tif (index === -1) return items\n\n\tconst existing = items[index]\n\tif (!existing || !isLocalAttachment(existing)) return items\n\n\tconst updated = [...items]\n\tupdated[index] = { ...existing, status, result: result ?? existing.result }\n\treturn updated\n}\n\nfunction getAttachmentsSizeBytes(items: readonly AttachmentItem[]): number {\n\tlet sizeBytes = 0\n\tfor (const item of items) {\n\t\tsizeBytes += getAttachmentSizeBytes(item)\n\t}\n\treturn sizeBytes\n}\n\nfunction getAttachmentSizeBytes(item: AttachmentItem): number {\n\tif (isLocalAttachment(item)) return item.file.size\n\tif (isAgentAttachmentFileResult(item.result)) return item.result.sizeBytes\n\tconst sizeKB = item.result.referenceImage.sizeKB ?? item.result.modelImage?.sizeKB\n\treturn sizeKB ? sizeKB * 1000 : 0\n}\n\n/**\n * Validates files before they are attached.\n * @returns true if the file is valid, false otherwise\n */\nfunction validateFile(file: File, context: ValidateFileContext): boolean {\n\tif (isFileAttachment(file)) {\n\t\tconst limit = isVideoFile(file) ? maxVideoAttachmentSize : maxFileAttachmentSize\n\t\treturn file.size <= limit\n\t}\n\treturn validateImageFile(file, context)\n}\n\nconst maxFileAttachmentSize = 5 * 1024 * 1024\nconst maxVideoAttachmentSize = 256 * 1024 * 1024\n\nfunction validateImageFile(file: File, context: ValidateFileContext): boolean {\n\tconst imageRule = modelAttachmentsRules[context.model]\n\n\t// Fallbacks for models without explicit rules\n\tconst allowedImageFileTypes = imageRule?.allowedFileTypes ?? [\"image/*\"]\n\tconst totalImageSizeLimit = imageRule?.totalSizeLimit ?? maxAgentImageAttachmentBytes\n\n\tconst isAllowedImageType = allowedImageFileTypes.some(pattern => matchesMimeTypePattern(pattern, file.type))\n\tif (!isAllowedImageType) return false\n\n\tif (isNumber(totalImageSizeLimit)) {\n\t\tconst isValidImageSize = context.currentAttachmentSizeBytes + file.size <= totalImageSizeLimit\n\t\treturn isValidImageSize\n\t}\n\n\treturn true\n}\n\nfunction revokeLocalBlobUrls(items: readonly AttachmentItem[]) {\n\tfor (const item of items) {\n\t\tif (isLocalAttachment(item) && item.previewUrl.startsWith(\"blob:\")) URL.revokeObjectURL(item.previewUrl)\n\t}\n}\n\nexport function isImageAttachmentItem(item: AttachmentItem): item is ImageAttachmentItem {\n\tif (isLocalAttachment(item)) return !isFileAttachment(item.file)\n\treturn isAgentAttachmentImage(item.result)\n}\n\nexport type FileAttachmentItem = LocalAttachment | (UploadedAttachment & { result: AgentAttachmentFile })\n\nexport function isFileAttachmentItem(item: AttachmentItem): item is FileAttachmentItem {\n\treturn !isImageAttachmentItem(item)\n}\n", "import { FileDropZone, Stack } from \"@framerjs/fresco\"\nimport { assert, debounce, emptyArray } from \"@framerjs/shared\"\nimport type { AgentAttachmentFile, AgentAttachmentImage } from \"app/agent/attachments.ts\"\nimport { getAttachmentPreviewUrl } from \"app/agent/attachments.ts\"\nimport { AgentFooter } from \"app/agent/components/AgentInput/AgentFooter.tsx\"\nimport { AgentInput } from \"app/agent/components/AgentInput/AgentInput.tsx\"\nimport { AgentSuggestionPopover } from \"app/agent/components/AgentInput/AgentSuggestionPopover.tsx\"\nimport { AttachmentList, type AttachmentListImage } from \"app/agent/components/AgentInput/AttachmentList.tsx\"\nimport { getContextItems, skillItems } from \"app/agent/components/AgentInput/suggestionItems.tsx\"\nimport type { AgentInputSegment, AgentInputTag, LayerReference } from \"app/agent/editor/agentInputSchema.ts\"\nimport type { SuggestionState } from \"app/agent/editor/suggestPlugin.ts\"\nimport { useAgentInputEditorView } from \"app/agent/editor/useAgentInputEditorView.ts\"\nimport {\n\ttype MessageHistoryNavigator,\n\tuseMessageHistoryNavigator,\n} from \"app/agent/editor/useMessageHistoryNavigator.ts\"\nimport { hasEditorContent } from \"app/agent/editor/utils/input.ts\"\nimport { useAgentModel } from \"app/agent/hooks/useAgentModel.ts\"\nimport {\n\ttype AttachmentItem,\n\ttype FileAttachmentItem,\n\tisImageAttachmentItem,\n\tisLocalAttachment,\n\ttype LocalAttachment,\n\ttype UploadedAttachment,\n\tuseAttachments,\n} from \"app/agent/hooks/useAttachments.ts\"\nimport type { AgentContextUsage, AgentID, AgentState } from \"app/ai/agents/Agent.ts\"\nimport type { LanguageModel } from \"app/ai/languageModels.ts\"\nimport { getDefaultReasoningEffortForModel } from \"app/ai/models.ts\"\nimport type { AgentReasoningEffort } from \"app/ai/models.ts\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport { getDefaultName } from \"document/components/utils/nodes.ts\"\nimport engine from \"document/engine.ts\"\nimport { getGeneratedValue } from \"document/models/CanvasTree/traits/Generated.ts\"\nimport {\n\tnewAgentChatId,\n\ttype PendingSelection,\n\ttype PersistedChatState,\n\ttype PersistedEditorState,\n} from \"document/stores/AgentStore.ts\"\nimport { useEngineCallback } from \"document/useEngineCallback.ts\"\nimport { useEngineState } from \"document/useEngineState.ts\"\nimport { randomID } from \"library/render/types/randomID.ts\"\nimport { useStableCallback } from \"library/utils/useStableCallback.ts\"\nimport {\n\ttype MutableRefObject,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseInsertionEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from \"react\"\nimport { isString } from \"utils/typeChecks.ts\"\nimport { iconName } from \"../../layers/Layers.tsx\"\nimport type { AgentSelectionMode } from \"../AgentChatPanel.tsx\"\nimport * as commonStyles from \"./AgentChat.common.styles.ts\"\nimport * as styles from \"./AgentChatInput.styles.ts\"\nimport { AgentContextUsageMeter } from \"./AgentContextUsageMeter.tsx\"\n\ninterface AgentChatInputAPI {\n\tgetAttachments: () => readonly AttachmentItem[]\n\tisDestroyed: () => boolean\n\tgetSerializedEditorState: () => PersistedEditorState | undefined\n\thasContent: () => boolean\n\tsetContent: (content: readonly AgentInputSegment[]) => void\n\tsetAttachments: (attachments: readonly AttachmentItem[]) => void\n\tupdateStateFrom: (fromState: PersistedEditorState | undefined) => void\n\tfocus: () => void\n}\n\ninterface AgentChatInputInnerProps {\n\t/* Unique identifier for the input. Used to determine where to send the pending selection.\nUndefined for the main input. */\n\tid: string | undefined\n\tchatInputAPIRef: MutableRefObject<AgentChatInputAPI | undefined>\n\tinitialChatState?: PersistedChatState\n\tmodel: LanguageModel\n\tonModelChange?: (model: LanguageModel) => void\n\tplaceholder?: string\n\tmessageHistoryNavigator?: MessageHistoryNavigator\n\tselectionMode?: AgentSelectionMode\n\tonSubmit: (\n\t\tparts: readonly AgentInputSegment[],\n\t\tmodel: LanguageModel,\n\t\treasoningEffort: AgentReasoningEffort,\n\t\timages: readonly AgentAttachmentImage[],\n\t\tfiles: readonly AgentAttachmentFile[],\n\t) => void\n\tonEmptySubmit?: () => void\n\t/** On input content or attachment change. */\n\tonChange?: () => void\n\tonCancel?: () => void\n\t/** If provided, will render the stop button instead of submit button, if there is no image/text content. */\n\tonStop?: () => void\n\tcontextUsage?: AgentContextUsage\n}\n\nexport const ChatInput = ({\n\tid,\n\tchatInputAPIRef,\n\tinitialChatState,\n\tmodel: initialModel,\n\tonModelChange,\n\tplaceholder,\n\tmessageHistoryNavigator,\n\tselectionMode,\n\tonSubmit,\n\tonEmptySubmit,\n\tonChange,\n\tonCancel,\n\tonStop,\n\tcontextUsage,\n}: AgentChatInputInnerProps) => {\n\tconst [model, setModel] = useState<LanguageModel>(initialModel)\n\n\tconst handleModelChange = useCallback(\n\t\t(nextModel: LanguageModel) => {\n\t\t\tsetModel(nextModel)\n\t\t\tonModelChange?.(nextModel)\n\t\t},\n\t\t[onModelChange],\n\t)\n\n\t// Use a ref to avoid circular dependencies between the editor API and the callbacks.\n\tconst editorAPIRef = useRef<ReturnType<typeof useAgentInputEditorView> | null>(null)\n\n\t// Stable callback: inserts a file pill into the editor at the current cursor position.\n\t// Reads editorAPIRef at call time so it doesn't need to be recreated when editorAPI changes.\n\tconst onFilesAdded = useCallback((items: readonly LocalAttachment[]) => {\n\t\tconst api = editorAPIRef.current\n\t\tif (!api) return\n\t\tfor (const item of items) {\n\t\t\tconst { id, file } = item\n\t\t\t// Images are shown as previews below the input, not as inline pills.\n\t\t\tif (isImageAttachmentItem(item)) continue\n\t\t\tapi.insertFileAttachment(id, file.name)\n\t\t}\n\t}, [])\n\n\tconst {\n\t\titems: attachments,\n\t\tuploadedImageResults,\n\t\tuploadedFileResults,\n\t\tclearAttachments,\n\t\thandleFiles,\n\t\thasUploadedImages,\n\t\thasUploadingAttachments,\n\t\tsetAttachments,\n\t\tisDragging,\n\t\tcanAddMore,\n\t\topenFilePicker,\n\t\thandleDrop,\n\t\thandleDragEnter,\n\t\thandleDragLeave,\n\t\thandleRemoveItem,\n\t\tremoveItemById,\n\t} = useAttachments(model, initialChatState?.attachedImages, engine, onChange, onFilesAdded)\n\n\t// Tracks the latest attachment items for reading in effect cleanups and\n\t// synchronous callbacks where the React state closure would be stale.\n\tconst attachmentsItemsRef = useRef<readonly AttachmentItem[]>(emptyArray())\n\tuseInsertionEffect(() => {\n\t\tattachmentsItemsRef.current = attachments\n\t}, [attachments])\n\n\t// Memoized to avoid re-running effects on every render.\n\tconst { listImages, imageAttachmentIndices } = useMemo(() => {\n\t\tconst imageAttachmentIndices: number[] = []\n\t\tconst listImages: AttachmentListImage[] = []\n\n\t\tfor (const [index, item] of attachments.entries()) {\n\t\t\tif (isImageAttachmentItem(item)) {\n\t\t\t\tlistImages.push({\n\t\t\t\t\tsrc: item.previewUrl,\n\t\t\t\t\talt: isLocalAttachment(item) ? item.file.name : item.result.referenceImage.originalFilename,\n\t\t\t\t\tstatus: item.status,\n\t\t\t\t})\n\t\t\t\timageAttachmentIndices.push(index)\n\t\t\t}\n\t\t}\n\n\t\treturn { listImages, imageAttachmentIndices }\n\t}, [attachments])\n\n\tconst hasAttachments = listImages.length > 0\n\n\tconst handleRemoveImage = (filteredIdx: number) => {\n\t\tconst idx = imageAttachmentIndices[filteredIdx]\n\t\tif (idx !== undefined) handleRemoveItem(idx)\n\t}\n\n\tconst handleRemoveFileById = removeItemById\n\n\tuseImperativeHandle(chatInputAPIRef, () => {\n\t\tif (!editorAPIRef.current) return undefined\n\n\t\treturn {\n\t\t\tgetAttachments: () => attachmentsItemsRef.current,\n\t\t\tisDestroyed: () => editorAPIRef.current?.editorView.isDestroyed ?? false,\n\t\t\tgetSerializedEditorState: () => editorAPIRef.current?.editorView.state.toJSON(),\n\t\t\thasContent: () => hasEditorContent(editorAPIRef.current?.editorView.state.doc),\n\t\t\tsetContent: editorAPIRef.current.setContent,\n\t\t\tsetAttachments,\n\t\t\tupdateStateFrom: editorAPIRef.current.updateStateFrom,\n\t\t\tfocus: editorAPIRef.current.focus,\n\t\t}\n\t})\n\n\tconst toggleSelectionMode = useCallback(() => {\n\t\tassert(selectionMode, \"selectionMode is required\")\n\t\tselectionMode.setEnabled(!selectionMode.enabled)\n\t}, [selectionMode])\n\n\tconst disableSelectionMode = useStableCallback(() => {\n\t\tselectionMode?.setEnabled(false)\n\t})\n\n\tconst handleSubmit = useEngineCallback(\n\t\t(parts: readonly AgentInputSegment[]): boolean => {\n\t\t\t// Capturing uploaded results before clearing.\n\t\t\tclearAttachments()\n\n\t\t\t// Eagerly sync the ref so the agentId effect cleanup persists an empty draft\n\t\t\t// rather than stale items (clearAttachments defers state via startTransition).\n\t\t\tattachmentsItemsRef.current = emptyArray()\n\n\t\t\tonSubmit(parts, model, getDefaultReasoningEffortForModel(model), uploadedImageResults, uploadedFileResults)\n\n\t\t\tif (selectionMode?.enabled) {\n\t\t\t\tselectionMode.setEnabled(false)\n\t\t\t\teditorAPIRef.current?.editorView.dom.blur()\n\t\t\t}\n\n\t\t\treturn true\n\t\t},\n\t\t[model, uploadedImageResults, uploadedFileResults, clearAttachments, onSubmit, selectionMode],\n\t)\n\n\tconst handleEscape = useEngineCallback(() => {\n\t\tselectionMode?.setEnabled(false)\n\n\t\tonCancel?.()\n\t}, [selectionMode, onCancel])\n\n\tconst [suggestion, setSuggestion] = useState<SuggestionState | null>(null)\n\tconst suggestionType = suggestion?.type\n\n\t// Pick the right pre-built list for the active trigger (`@` vs `/`). Both lookups are cached:\n\t// `skillItems` is a module constant; `getContextItems` memoizes per engine, busting when the\n\t// tree's update counter advances. Filtering by `suggestion.query` happens inside the popover.\n\tconst suggestionBuilder = useMemo(() => {\n\t\tif (!suggestionType) return null\n\t\treturn suggestionType === \"skills\" ? skillItems : getContextItems(engine)\n\t}, [suggestionType])\n\n\tconst suggestionListboxId = \"agent-suggestions\"\n\n\tconst editorAPI = useAgentInputEditorView({\n\t\tfromEditorState: initialChatState?.editorState,\n\t\tplaceholder,\n\t\tonSubmit: handleSubmit,\n\t\tonEscape: handleEscape,\n\t\thistoryNavigator: messageHistoryNavigator,\n\t\tclearOnSubmit: true,\n\t\tonFilePaste: handleFiles,\n\t\thasImages: hasUploadedImages,\n\t\t// This might need to be updated to check for attachments not only images.\n\t\tisUploadingImages: hasUploadingAttachments,\n\t\tonEmptySubmit,\n\t\tonChange,\n\t\tonSuggestionChange: setSuggestion,\n\t\tonFileAttachmentRemove: handleRemoveFileById,\n\t})\n\n\tconst handleSuggestionSelect = useCallback(\n\t\t(value: string) => {\n\t\t\tif (!suggestion || !suggestionBuilder) return\n\t\t\tconst tag = suggestionBuilder.resolve(value)\n\t\t\tif (!tag) return\n\t\t\teditorAPI.insertTag(tag, { replaceRange: suggestion.range })\n\t\t\tsetSuggestion(null)\n\t\t},\n\t\t[suggestion, suggestionBuilder, editorAPI],\n\t)\n\n\tconst handleSuggestionDismiss = useCallback(() => setSuggestion(null), [])\n\n\tconst hasContent = editorAPI.isValid\n\n\tuseInsertionEffect(() => {\n\t\teditorAPIRef.current = editorAPI\n\t}, [editorAPI])\n\n\tuseEffect(() => {\n\t\tconst dom = editorAPI.editorView.dom\n\t\tif (suggestion) {\n\t\t\tdom.setAttribute(\"aria-haspopup\", \"listbox\")\n\t\t\tdom.setAttribute(\"aria-controls\", suggestionListboxId)\n\t\t\tdom.setAttribute(\"aria-expanded\", \"true\")\n\t\t\treturn () => {\n\t\t\t\tdom.removeAttribute(\"aria-expanded\")\n\t\t\t\tdom.removeAttribute(\"aria-controls\")\n\t\t\t\tdom.removeAttribute(\"aria-haspopup\")\n\t\t\t}\n\t\t}\n\t}, [editorAPI, suggestion])\n\n\tconst handleSubmitWithImages = useCallback(() => {\n\t\tif (!hasContent) return false\n\t\tif (hasEditorContent(editorAPI.editorView.state.doc)) return editorAPI.submit()\n\t\treturn handleSubmit([])\n\t}, [hasContent, editorAPI, handleSubmit])\n\n\tconst handleAddAttachment = useCallback(() => {\n\t\topenFilePicker()\n\t\teditorAPI.focus()\n\t}, [openFilePicker, editorAPI])\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tengine.scheduler.processWhenReady(() => {\n\t\t\t\tengine.stores.agentStore.activeInputId = undefined\n\t\t\t\tdisableSelectionMode()\n\t\t\t})\n\t\t}\n\t}, [])\n\n\t// Sync the chat input content state to the chrome store so that canvas selection\n\t// changes don't auto-switch to the Style tab while the user is composing a message.\n\tuseEffect(() => {\n\t\tengine.scheduler.processWhenReady(() => {\n\t\t\tengine.stores.chromeStore.chatInputHasContent = hasContent\n\t\t})\n\t\treturn () => {\n\t\t\tengine.scheduler.processWhenReady(() => {\n\t\t\t\tengine.stores.chromeStore.chatInputHasContent = false\n\t\t\t})\n\t\t}\n\t}, [hasContent])\n\n\tconst [pendingSelection, activeInputId] = useEngineState(\n\t\t() => [engine.stores.agentStore.pendingSelection, engine.stores.agentStore.activeInputId],\n\t\t[],\n\t\t[engine.stores.agentStore],\n\t\t{ deepEqual: true },\n\t)\n\n\tuseEffect(() => {\n\t\tif (activeInputId !== id) return\n\t\tif (!pendingSelection) return\n\n\t\tconst api = editorAPIRef.current\n\t\tif (!api || api.editorView.isDestroyed) return\n\n\t\tconst tag = selectionToTag(pendingSelection)\n\t\tapi.insertTag(tag)\n\n\t\tif (pendingSelection.focusInput) api.focus()\n\n\t\tconst pendingId = pendingSelection.id\n\t\tengine.scheduler.processWhenReady(() => {\n\t\t\tengine.stores.agentStore.clearPendingSelection(pendingId)\n\t\t})\n\t}, [pendingSelection, activeInputId, id])\n\n\treturn (\n\t\t<FileDropZone onDrop={handleDrop} onDragEnter={handleDragEnter} onDragLeave={handleDragLeave}>\n\t\t\t<Stack className={commonStyles.inputCard} gap={0}>\n\t\t\t\t<div className={styles.inputArea}>\n\t\t\t\t\t<AgentInput\n\t\t\t\t\t\tid=\"agent-chat-input\"\n\t\t\t\t\t\teditorAPI={editorAPI}\n\t\t\t\t\t\tclassName={contextUsage ? styles.inputWithContextMeter : undefined}\n\t\t\t\t\t/>\n\t\t\t\t\t{contextUsage && <AgentContextUsageMeter usage={contextUsage} />}\n\t\t\t\t</div>\n\n\t\t\t\t{suggestion && suggestionBuilder && (\n\t\t\t\t\t<AgentSuggestionPopover\n\t\t\t\t\t\titems={suggestionBuilder.items}\n\t\t\t\t\t\tquery={suggestion.query}\n\t\t\t\t\t\tanchorElement={suggestion.anchorElement}\n\t\t\t\t\t\tlistboxId={suggestionListboxId}\n\t\t\t\t\t\tcommandsRef={editorAPI.suggestionKeyCommandsRef}\n\t\t\t\t\t\tonSelect={handleSuggestionSelect}\n\t\t\t\t\t\tonDismiss={handleSuggestionDismiss}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t{hasAttachments && (\n\t\t\t\t\t<AttachmentList className={styles.attachments} items={listImages} onRemoveImage={handleRemoveImage} />\n\t\t\t\t)}\n\n\t\t\t\t<div className={commonStyles.divider} />\n\n\t\t\t\t<AgentFooter\n\t\t\t\t\tvariant=\"chat\"\n\t\t\t\t\tmodel={model}\n\t\t\t\t\tonModelChange={handleModelChange}\n\t\t\t\t\tcanSubmit={hasContent}\n\t\t\t\t\tonSubmit={handleSubmitWithImages}\n\t\t\t\t\tonStop={onStop && !hasContent ? onStop : undefined}\n\t\t\t\t\tisDragging={isDragging}\n\t\t\t\t\tcanAddMore={canAddMore}\n\t\t\t\t\tonAddAttachment={handleAddAttachment}\n\t\t\t\t\tonSelectMode={selectionMode ? toggleSelectionMode : undefined}\n\t\t\t\t\tisSelectionMode={id === activeInputId && (selectionMode?.enabled ?? false)}\n\t\t\t\t/>\n\t\t\t</Stack>\n\t\t</FileDropZone>\n\t)\n}\n\n/**\n * Returns the display file name for a non-image attachment item.\n * Extracted as a standalone function to avoid TypeScript narrowing the parameter to `never`\n * when called inside a context where `isImageAttachmentItem` has already narrowed the type.\n */\nfunction getNonImageAttachmentFileName(item: FileAttachmentItem): string {\n\tif (isLocalAttachment(item)) return item.file.name\n\treturn item.result.fileName\n}\n\nfunction selectionToTag(selection: PendingSelection): AgentInputTag {\n\tswitch (selection.type) {\n\t\tcase \"layerSelection\": {\n\t\t\tconst tags: LayerReference[] = selection.nodeIds.map(nodeId => {\n\t\t\t\tconst node = engine.tree.getNode(nodeId)\n\t\t\t\tif (!node) return { id: nodeId, name: Dictionary.Unknown, type: \"rectangle\" }\n\n\t\t\t\treturn {\n\t\t\t\t\tid: nodeId,\n\t\t\t\t\tname: getGeneratedValue(node.name) ?? getDefaultName(engine.componentLoader, node),\n\t\t\t\t\ttype: iconName(engine.tree, node),\n\t\t\t\t}\n\t\t\t})\n\n\t\t\treturn {\n\t\t\t\ttype: \"layer\",\n\t\t\t\tnodes: tags,\n\t\t\t}\n\t\t}\n\t\tcase \"cmsSelection\":\n\t\t\treturn {\n\t\t\t\ttype: \"cmsSelection\",\n\t\t\t\tcollectionId: selection.collectionId,\n\t\t\t\tcollectionName: selection.collectionName,\n\t\t\t\tcollectionItemIds: selection.collectionItemIds,\n\t\t\t\tvariableColumnIds: selection.variableColumnIds,\n\t\t\t\tmetadataColumnIds: selection.metadataColumnIds,\n\t\t\t}\n\t\tcase \"cmsCollection\":\n\t\t\treturn {\n\t\t\t\ttype: \"cmsCollection\",\n\t\t\t\tcollectionId: selection.collectionId,\n\t\t\t\tcollectionName: selection.collectionName,\n\t\t\t}\n\t}\n}\n\nfunction useRestorePendingChatInputPrefill({\n\tagentId,\n\tpendingChatInputPrefill,\n\tchatInputAPIRef,\n\tsetModel,\n}: {\n\tagentId: AgentID | typeof newAgentChatId | undefined\n\tpendingChatInputPrefill: PendingChatInputPrefill | undefined\n\tchatInputAPIRef: MutableRefObject<AgentChatInputAPI | undefined>\n\tsetModel: (model: LanguageModel) => void\n}): void {\n\tuseEffect(() => {\n\t\tif (!pendingChatInputPrefill) return\n\n\t\tconst api = chatInputAPIRef.current\n\t\tif (!api || api.isDestroyed()) return\n\n\t\tapi.setContent(pendingChatInputPrefill.parts)\n\n\t\tif (pendingChatInputPrefill.images.length > 0 || pendingChatInputPrefill.files.length > 0) {\n\t\t\tconst restoredImageItems: UploadedAttachment[] = pendingChatInputPrefill.images.map(result => ({\n\t\t\t\tid: randomID(),\n\t\t\t\tstatus: \"uploaded\",\n\t\t\t\tresult,\n\t\t\t\tpreviewUrl: getAttachmentPreviewUrl(result),\n\t\t\t}))\n\t\t\tconst restoredFileItems: UploadedAttachment[] = pendingChatInputPrefill.files.map(result => ({\n\t\t\t\tid: randomID(),\n\t\t\t\tstatus: \"uploaded\",\n\t\t\t\tresult,\n\t\t\t\tpreviewUrl: result.uploadResult.url,\n\t\t\t}))\n\t\t\tconst restoredItems = [...restoredImageItems, ...restoredFileItems]\n\t\t\tapi.setAttachments(restoredItems)\n\t\t} else {\n\t\t\tapi.setAttachments(emptyArray())\n\t\t}\n\n\t\tif (pendingChatInputPrefill.model) setModel(pendingChatInputPrefill.model)\n\n\t\t// Focus the input but defer to the next frame to wait for click handlers (e.g. clicking the edit button\n\t\t// in the queue) to finish processing. Otherwise the focus event might be triggered before the click handlers,\n\t\t// causing the input to lose focus.\n\t\tconst rafId = requestAnimationFrame(() => {\n\t\t\tif (!api.isDestroyed()) api.focus()\n\t\t})\n\n\t\tengine.scheduler.processWhenReady(() => {\n\t\t\tengine.stores.agentStore.clearPendingChatInputPrefill(isString(agentId) ? agentId : undefined)\n\t\t})\n\n\t\treturn () => {\n\t\t\tcancelAnimationFrame(rafId)\n\t\t}\n\t}, [agentId, pendingChatInputPrefill, chatInputAPIRef, setModel])\n}\n\nconst draftPersistDebounceMs = 100\n\nfunction getPlaceholderForState(state: AgentState): string {\n\tswitch (state) {\n\t\tcase \"idle\":\n\t\t\treturn \"Ask Framer\u2026\"\n\t\tcase \"follow-up\":\n\t\tcase \"generating\":\n\t\t\treturn \"Add follow-up\u2026\"\n\t\tcase \"error\":\n\t\t\treturn \"Retry\u2026\"\n\t\tdefault:\n\t\t\treturn \"\"\n\t}\n}\n\ninterface AgentChatInputProps {\n\tagentId: AgentID | typeof newAgentChatId | undefined\n\tstate: AgentState\n\tuserMessageCount: number\n\tgetUserMessageParts: (index: number) => readonly AgentInputSegment[] | undefined\n\tonSubmit: (\n\t\tparts: readonly AgentInputSegment[],\n\t\tmodel: LanguageModel,\n\t\treasoningEffort: AgentReasoningEffort,\n\t\timages: readonly AgentAttachmentImage[],\n\t\tfiles: readonly AgentAttachmentFile[],\n\t) => void\n\tonCancel?: () => void\n\tonEmptySubmit?: () => void\n\tcontextUsage?: AgentContextUsage\n\tselectionMode?: AgentSelectionMode\n}\n\ninterface PendingChatInputPrefill {\n\tparts: readonly AgentInputSegment[]\n\timages: readonly AgentAttachmentImage[]\n\tfiles: readonly AgentAttachmentFile[]\n\tmodel?: LanguageModel\n\treasoningEffort?: AgentReasoningEffort\n}\n\nexport function AgentChatInput({\n\tagentId = newAgentChatId,\n\tstate,\n\tuserMessageCount,\n\tgetUserMessageParts,\n\tonSubmit,\n\tonCancel,\n\tonEmptySubmit,\n\tcontextUsage,\n\tselectionMode,\n}: AgentChatInputProps) {\n\tconst { model, setModel } = useAgentModel()\n\tconst chatInputAPI = useRef<AgentChatInputAPI | undefined>(undefined)\n\n\tconst lastPersistedDraftRef = useRef<PersistedChatState | undefined>(undefined)\n\n\tconst persistDraft = useCallback(\n\t\t(chatId: AgentID | typeof newAgentChatId | undefined = agentId) => {\n\t\t\tconst currentEditorAPI = chatInputAPI.current\n\t\t\tif (!currentEditorAPI || currentEditorAPI.isDestroyed()) return\n\n\t\t\tconst editorState = currentEditorAPI.getSerializedEditorState()\n\t\t\tif (!editorState) return\n\n\t\t\t// Only persist the images that have been uploaded, not the ones that are still uploading to\n\t\t\t// avoid a weird state where images finished uploading but the status remained uploading.\n\t\t\tconst attachedImages = currentEditorAPI.getAttachments().filter(item => item.status !== \"uploading\")\n\t\t\tconst persistedDraft = { editorState, attachedImages }\n\n\t\t\t// Only keep the in-memory fallback draft when the editor has meaningful content.\n\t\t\t// Empty drafts are still written to the store so cleared chats stay cleared.\n\t\t\tconst hasPersistedContent = currentEditorAPI.hasContent() || attachedImages.length > 0\n\t\t\tlastPersistedDraftRef.current = hasPersistedContent ? persistedDraft : undefined\n\n\t\t\tengine.stores.agentStore.setPersistedChatState(persistedDraft, chatId)\n\t\t},\n\t\t[agentId],\n\t)\n\n\tconst debouncedPersistDraft = useMemo(() => debounce(persistDraft, draftPersistDebounceMs), [persistDraft])\n\tuseEffect(() => () => debouncedPersistDraft.flush(), [debouncedPersistDraft])\n\n\tconst isInitialMountRef = useRef(true)\n\n\tuseEffect(() => {\n\t\tif (isInitialMountRef.current) {\n\t\t\tisInitialMountRef.current = false\n\t\t} else {\n\t\t\tconst currentEditorAPI = chatInputAPI.current\n\t\t\tif (!currentEditorAPI || currentEditorAPI.isDestroyed()) return\n\t\t\tconst lastPersistedDraft = lastPersistedDraftRef.current\n\t\t\t// When agentId changes, read the stored editor state and update the editor state. When\n\t\t\t// switching to a new chat, first attempt to restore the last persisted draft, before\n\t\t\t// checking if there is a stored draft for the new agentId.\n\t\t\tconst fromEditorState =\n\t\t\t\tlastPersistedDraft && agentId === newAgentChatId\n\t\t\t\t\t? lastPersistedDraft\n\t\t\t\t\t: engine.stores.agentStore.getPersistedChatState(agentId)\n\t\t\tcurrentEditorAPI.updateStateFrom(fromEditorState?.editorState)\n\t\t\tcurrentEditorAPI.setAttachments(fromEditorState?.attachedImages ?? emptyArray())\n\t\t}\n\t}, [agentId])\n\n\tconst pendingChatInputPrefill = useEngineState(\n\t\t() =>\n\t\t\tisString(agentId)\n\t\t\t\t? engine.stores.agentStore.pendingChatInputPrefills[agentId]\n\t\t\t\t: engine.stores.agentStore.pendingNewChatInputPrefill,\n\t\t[agentId],\n\t\t[engine.stores.agentStore],\n\t\t{ deepEqual: true },\n\t)\n\n\tuseRestorePendingChatInputPrefill({\n\t\tagentId,\n\t\tpendingChatInputPrefill,\n\t\tchatInputAPIRef: chatInputAPI,\n\t\tsetModel,\n\t})\n\n\tuseEffect(() => {\n\t\tconst { chromeStore } = engine.stores\n\t\tlet pendingFocusRafId = 0\n\t\tconst focusHandler = () => {\n\t\t\t// Defer focus to the next frame so any click handlers running this tick (which may\n\t\t\t// move focus back to the canvas) finish first.\n\t\t\tcancelAnimationFrame(pendingFocusRafId)\n\t\t\tpendingFocusRafId = requestAnimationFrame(() => {\n\t\t\t\tconst api = chatInputAPI.current\n\t\t\t\tif (!api || api.isDestroyed()) return\n\t\t\t\tapi.focus()\n\t\t\t})\n\t\t}\n\t\tengine.scheduler.processWhenReady(() => {\n\t\t\tchromeStore.focusAgentChatInput = focusHandler\n\t\t\tif (chromeStore.pendingAgentChatInputFocus) {\n\t\t\t\tchromeStore.pendingAgentChatInputFocus = false\n\t\t\t\tfocusHandler()\n\t\t\t}\n\t\t})\n\t\treturn () => {\n\t\t\tcancelAnimationFrame(pendingFocusRafId)\n\t\t\tengine.scheduler.processWhenReady(() => {\n\t\t\t\tif (chromeStore.focusAgentChatInput === focusHandler) {\n\t\t\t\t\tchromeStore.focusAgentChatInput = undefined\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}, [])\n\n\tconst historyNavigator = useMessageHistoryNavigator(userMessageCount, getUserMessageParts)\n\n\tconst handleStop = useEngineCallback(() => {\n\t\tif (!isString(agentId)) return\n\t\tengine.stores.agentStore.stop(agentId)\n\t}, [agentId])\n\n\tconst persistAgentChatState = useCallback(() => {\n\t\tdebouncedPersistDraft(agentId)\n\t}, [debouncedPersistDraft, agentId])\n\n\treturn (\n\t\t<ChatInput\n\t\t\tid={undefined}\n\t\t\tchatInputAPIRef={chatInputAPI}\n\t\t\tinitialChatState={engine.stores.agentStore.getPersistedChatState(agentId)}\n\t\t\tmodel={model}\n\t\t\tonModelChange={setModel}\n\t\t\tplaceholder={getPlaceholderForState(state)}\n\t\t\tmessageHistoryNavigator={historyNavigator}\n\t\t\tonSubmit={onSubmit}\n\t\t\tonEmptySubmit={onEmptySubmit}\n\t\t\tonChange={persistAgentChatState}\n\t\t\tonCancel={onCancel}\n\t\t\tonStop={state === \"generating\" ? handleStop : undefined}\n\t\t\tcontextUsage={contextUsage}\n\t\t\tselectionMode={selectionMode}\n\t\t/>\n\t)\n}\n", "import type { CanvasNode } from \"../nodes/CanvasNode.ts\"\nimport { isRichTextNode, isTextNode } from \"../nodes/utils/nodeCheck.ts\"\nimport { hasLink } from \"../traits/WithLink.ts\"\n\nexport function hasAnchorLink(node: CanvasNode): boolean {\n\tif (hasLink(node)) {\n\t\treturn true\n\t}\n\n\tif (isRichTextNode(node)) {\n\t\treturn node.hasLinks()\n\t}\n\n\tif (isTextNode(node)) {\n\t\treturn node.getInlineLinks(false).filter(Boolean).length > 0\n\t}\n\n\treturn false\n}\n", "import type { ComponentLoader } from \"@framerjs/framer-runtime\"\nimport { Stack } from \"@framerjs/fresco\"\nimport { Events } from \"@framerjs/fresco/layout-transitions\"\nimport { dimensions } from \"@framerjs/fresco/tokens\"\nimport { assert, isCommandKeyPressed } from \"@framerjs/shared\"\nimport { experiments } from \"app/experiments.ts\"\nimport { MetricsInteractionViews, MetricsViewContext } from \"app/metrics.ts\"\nimport { isVisibleInOtherVariants } from \"code-generation/utils/isOnlyVisibleInCurrentVariant.ts\"\nimport {\n\tupdateNodeWhenMovedIntoVariant,\n\tupdateNodeWhenMovedOutOfVariant,\n\tupdateNodeWhenReparentedInVariant,\n} from \"code-generation/utils/variantEditingHelpers.ts\"\nimport { EngineChange } from \"document/EngineChanges.ts\"\nimport type { InsertLocation, SortableTreeItem } from \"document/components/chrome/sortableTree/types.ts\"\nimport { ContextAction } from \"document/components/utils/contextActions.ts\"\nimport { createContainer } from \"document/components/utils/createContainer.ts\"\nimport { getDefaultName } from \"document/components/utils/nodes.ts\"\nimport engine from \"document/engine.ts\"\nimport { hasActions } from \"document/models/CanvasTree/actions/actions.ts\"\nimport type { CanvasNode, CanvasTree, FrameNode, MaybeNodeID, NodeID } from \"document/models/CanvasTree/index.ts\"\nimport { NullID, isScopeNode } from \"document/models/CanvasTree/index.ts\"\nimport type { LoadedScopeNode } from \"document/models/CanvasTree/nodes/ScopeNode.ts\"\nimport { SlotPropertyNode } from \"document/models/CanvasTree/nodes/SlotPropertyNode.ts\"\nimport { generateReplicaChildId } from \"document/models/CanvasTree/nodes/TemplateHelper.ts\"\nimport {\n\tisBooleanShapeNode,\n\tisCanvasPageNode,\n\tisCodeComponentNode,\n\tisDataRepeater,\n\tisFormBooleanInputNode,\n\tisFormPlainTextInputNode,\n\tisFormSelectNode,\n\tisFrameNode,\n\tisOvalShapeNode,\n\tisOverlayNode,\n\tisPathNode,\n\tisPolygonShapeNode,\n\tisRectangleShapeNode,\n\tisRichTextNode,\n\tisSVGNode,\n\tisShaderNode,\n\tisShapeContainerNode,\n\tisShapeGroupNode,\n\tisSlotNode,\n\tisSlotPropertyNode,\n\tisStackOrGridComponent,\n\tisStarShapeNode,\n\tisTextNode,\n\tisVectorInstance,\n} from \"document/models/CanvasTree/nodes/utils/nodeCheck.ts\"\nimport { isFixedOrRelativeOverlay, isValidOverlay } from \"document/models/CanvasTree/nodes/utils/overlayHelpers.ts\"\nimport { type Breakpoints, withBreakpointVariants } from \"document/models/CanvasTree/traits/WithBreakpointVariants.ts\"\nimport type { WithChildren } from \"document/models/CanvasTree/traits/WithChildren.ts\"\nimport { withChildren } from \"document/models/CanvasTree/traits/WithChildren.ts\"\nimport { hasCodeOverride } from \"document/models/CanvasTree/traits/WithCodeOverride.ts\"\nimport { CustomCursorType, withCursor } from \"document/models/CanvasTree/traits/WithCursor.ts\"\nimport { withExport } from \"document/models/CanvasTree/traits/WithExport.ts\"\nimport { hasImageFill } from \"document/models/CanvasTree/traits/WithFill.ts\"\nimport { hasFloatingPosition } from \"document/models/CanvasTree/traits/WithFloatingPosition.ts\"\nimport { hasLabelTag } from \"document/models/CanvasTree/traits/WithHTMLTag.ts\"\nimport {\n\tdefaultStackDirection,\n\thasAnyLayout,\n\thasColumnMasonryLayout,\n\thasGridLayout,\n\thasStackLayout,\n} from \"document/models/CanvasTree/traits/WithLayout.ts\"\nimport type { HasStackLayout } from \"document/models/CanvasTree/traits/WithLayout.ts\"\nimport { isLockedOrLockedByParent, withLock } from \"document/models/CanvasTree/traits/WithLock.ts\"\nimport { withReplicaVariants } from \"document/models/CanvasTree/traits/WithReplicaVariants.ts\"\nimport { withScrollTarget } from \"document/models/CanvasTree/traits/WithScrollTarget.ts\"\nimport {\n\tisHiddenMaster,\n\tisMaster,\n\tisReplica,\n\tisReplicaChild,\n\tisReplicaOrReplicaChild,\n} from \"document/models/CanvasTree/traits/WithTemplate.ts\"\nimport {\n\tisBreakpointVariant,\n\tisGestureVariant,\n\tisReplicaVariantChild,\n\tisReplicaVariantOrReplicaVariantChild,\n} from \"document/models/CanvasTree/traits/WithVariant.ts\"\nimport { isVectorSetItem } from \"document/models/CanvasTree/traits/WithVectorSetItem.ts\"\nimport { withVectorSetItems } from \"document/models/CanvasTree/traits/WithVectorSetItems.ts\"\nimport { isFormContainer } from \"document/models/CanvasTree/traits/forms/WithFormContainer.ts\"\nimport { withFormInput } from \"document/models/CanvasTree/traits/forms/WithFormInput.ts\"\nimport { hasAnyEffect } from \"document/models/CanvasTree/traits/utils/effects.ts\"\nimport { HardCodedCodeIdentifier } from \"document/models/CanvasTree/traits/utils/hardCodedCodeComponentIdentifiers.ts\"\nimport type { ErrorByNodeId } from \"document/models/CanvasTree/utils/getNodeError.ts\"\nimport { getErrorsByNodeId, getNodeError } from \"document/models/CanvasTree/utils/getNodeError.ts\"\nimport { hasAnchorLink } from \"document/models/CanvasTree/utils/hasAnchorLink.ts\"\nimport { getHomeNode } from \"document/models/CanvasTree/utils/homeNode.ts\"\nimport { shouldGuessPinToBottom } from \"document/models/shouldGuessPinToBottom.ts\"\nimport { shouldGuessPinToRight } from \"document/models/shouldGuessPinToRight.ts\"\nimport { Tools } from \"document/stores/ToolEnum.ts\"\nimport { ActiveContentPanelTab } from \"document/utils/ActiveEditorType.ts\"\nimport { isSortableNode, updateIdIndexInItemsOrder } from \"document/utils/itemsOrderOverrideHelpers.ts\"\nimport { Point } from \"library/render/types/Point.ts\"\nimport { Rect } from \"library/render/types/Rect.ts\"\nimport React from \"react\"\nimport { isRepeatedItem } from \"utils/repeaterUtils.ts\"\nimport { matchSubstring } from \"utils/searchUtils.ts\"\nimport { isArray, isBoolean, isString } from \"utils/typeChecks.ts\"\nimport { getIsViewOnly } from \"web/pages/project/permissions/isViewOnly.ts\"\nimport { isUserComponent } from \"../../../models/CanvasTree/traits/utils/isUserComponent.ts\"\nimport { ContentPanelSearchBar } from \"../contentPanel/ContentPanelSearchBar.tsx\"\nimport { PanelSearchContext } from \"../contentPanel/PanelSearch.tsx\"\nimport { nodeSupportsEventActions } from \"../properties/utils/eventActions.ts\"\nimport { SortableTree } from \"../sortableTree/index.tsx\"\nimport { LayerPanelItem } from \"./LayerPanelItem.tsx\"\nimport * as styles from \"./Layers.styles.ts\"\nimport { PageSelector } from \"./PageSelector.tsx\"\nimport {\n\ttype VirtualSlotPropertyNode,\n\tgetLayerPanelItemChildren,\n\tgetNodeOrVirtualSlotPropertyNode,\n\tgetVirtualSlotPropertyParentAndKey,\n\thasLayerPanelItemAnyChildren,\n\tisVirtualSlotProperty,\n\tisVirtualSlotPropertyId,\n} from \"./VirtualSlotProperyNode.ts\"\nimport type { LayerIconName } from \"./layerIconNames.ts\"\nimport { getLayerIcons } from \"./layerIcons.ts\"\n\ninterface AsItemsOptions {\n\tindent: number\n\tpartOfSelection: boolean\n\thidden: boolean | undefined\n\tnodesWithSelectedChildren: Set<NodeID>\n\tisSelectionTreeRootUserComponent: SortableTreeItem<LayerIconName>[\"isSelectionTreeRootUserComponent\"]\n\tisInUserComponent: SortableTreeItem<LayerIconName>[\"isInUserComponent\"]\n\titems: SortableTreeItem<LayerIconName>[]\n\tactiveScopeId: NodeID\n\tbreakpointValues?: Breakpoints\n\treplicaVariantCount?: number\n}\n\ninterface State {\n\ttree: CanvasTree\n\tselection: NodeID[]\n\thighlight: MaybeNodeID\n\tactiveScreen: MaybeNodeID\n\tcollapseOverrides: ReadonlyMap<NodeID, boolean>\n\tfeedbackModeActive: boolean\n\tisViewOnly: boolean\n\tframesWithThreads: ReadonlySet<string>\n\tpreviewNodeId: MaybeNodeID\n\thomeNodeId?: NodeID\n\tactiveScope: LoadedScopeNode\n\tactiveBundleHash: string\n\tactiveOverlays: ReadonlySet<NodeID>\n\t/**\n\t * Used to trigger a re-render when a new external module gets loaded.\n\t */\n\tloadedExternalModulesCount: number\n\terrorsByNodeId: ErrorByNodeId\n\tisAgentExperimentOn: boolean\n\tisAgentContextToolActive: boolean\n}\n\ninterface SearchResults {\n\tnodeMatches: boolean\n\tfilteredChildren: (CanvasNode | VirtualSlotPropertyNode)[]\n}\n\nclass Layers extends React.PureComponent<Record<string, never>, State> {\n\t// TODO: Whenever this component is refactored into a functional component,\n\t// please refactor this.context usage to use the usePanelSearch hook instead.\n\tstatic override contextType = PanelSearchContext\n\tdeclare context: React.ContextType<typeof PanelSearchContext>\n\n\titems: SortableTreeItem<LayerIconName>[] = []\n\tisMouseOverLayersTree = false\n\n\t/**\n\t * Cache of nodes that were auto-expanded. We use this when the mouse is over the\n\t * layer panel to keep those nodes open even if the selection changes, this will\n\t * avoid jumpiness.\n\t */\n\tautoExpandedNodes: Set<NodeID> = new Set()\n\n\tstatic engineChangeKeys = [\n\t\tEngineChange.TreeStore,\n\t\tEngineChange.ActiveBundle,\n\t\tengine.stores.feedbackStore,\n\t\tengine.stores.loadedExternalModulesStore,\n\t\tengine.stores.selectionStore,\n\t\tengine.stores.toolStore,\n\t\tengine.stores.scopeStore,\n\t\tengine.stores.previewStore,\n\t\tengine.stores.overlayStore,\n\t\tengine.stores.chromeStore,\n\t\tengine.stores.projectStore,\n\t\tengine.stores.sessionStore,\n\t\tengine.stores.loadingStore,\n\t]\n\n\tstatic calculateState(): State {\n\t\tconst {\n\t\t\ttreeStore,\n\t\t\tselectionStore,\n\t\t\tfeedbackStore,\n\t\t\tpreviewStore,\n\t\t\ttoolStore,\n\t\t\tloadedExternalModulesStore,\n\t\t\tchromeStore,\n\t\t\tcomponentsStore,\n\t\t\toverlayStore,\n\t\t\tscopeStore,\n\t\t} = engine.stores\n\t\tconst { collapseOverrides } = treeStore\n\t\tconst tree = treeStore.tree\n\t\tconst activeScope = scopeStore.active\n\n\t\treturn {\n\t\t\ttree,\n\t\t\tselection: selectionStore.ids,\n\t\t\thighlight: treeStore.highlight,\n\t\t\tactiveScreen: selectionStore.commonGroundNodeId,\n\t\t\tcollapseOverrides,\n\t\t\tisViewOnly: getIsViewOnly(engine, \"canDesign\") || chromeStore.isPreviewingLocaleOnCanvas,\n\t\t\tfeedbackModeActive: toolStore.feedbackModeActive,\n\t\t\tframesWithThreads: feedbackStore.framesWithThreads,\n\t\t\tpreviewNodeId: (previewStore.isActive && previewStore.previewNode?.id) || null,\n\t\t\thomeNodeId: isCanvasPageNode(activeScope) ? getHomeNode(tree, activeScope)?.id : undefined,\n\t\t\tactiveScope,\n\t\t\tactiveBundleHash: componentsStore.activeBundleHash,\n\t\t\tloadedExternalModulesCount: loadedExternalModulesStore.loadedExternalModules.size,\n\t\t\tactiveOverlays: overlayStore.activeOverlays,\n\t\t\terrorsByNodeId: getErrorsByNodeId(engine.tree),\n\t\t\tisAgentExperimentOn: experiments.isOn(\"agent\"),\n\t\t\tisAgentContextToolActive: experiments.isOn(\"agent\") && toolStore.tool === Tools.AgentPanel,\n\t\t}\n\t}\n\n\t/**\n\t * Gets the current search query from PanelSearchContext to avoid prop drilling.\n\t * @returns The current search query string for the Layers tab\n\t * TODO: Whenever this component is refactored into a functional component,\n\t * we should use the usePanelSearch hook instead of this.context.\n\t */\n\tprivate getFilter() {\n\t\treturn this.context.searchQueryFor(ActiveContentPanelTab.Layers)\n\t}\n\n\t/**\n\t * Keeps track of the previous filter in order to detect when the filter has cleared in order\n\t * to reset the collapse state.\n\t */\n\tprivate prevFilter = \"\"\n\n\tprivate getIsFiltering() {\n\t\treturn this.getFilter().trim() !== \"\"\n\t}\n\n\tinsertActionLayersTree = (id: NodeID, location: InsertLocation, copy: boolean) => {\n\t\tconst { tree, selection } = this.state\n\t\tthis.insertSelection(tree, id, location, selection, copy)\n\t}\n\n\tgetElementForItem = (item: SortableTreeItem<LayerIconName>, beingDragged = false): JSX.Element => {\n\t\tconst {\n\t\t\ttree,\n\t\t\tisViewOnly,\n\t\t\tframesWithThreads,\n\t\t\tfeedbackModeActive,\n\t\t\tactiveOverlays,\n\t\t\tisAgentExperimentOn,\n\t\t\tisAgentContextToolActive,\n\t\t} = this.state\n\t\tconst node = getNodeOrVirtualSlotPropertyNode(tree, engine.componentLoader, item.id, this.state.activeBundleHash)\n\t\t// node should always exist, but we see that in practice it doesn\u2019t, so be defensive\n\t\tif (!node) return <div />\n\n\t\tconst nodeIsVirtualSlot = isVirtualSlotProperty(node)\n\t\tconst name = nodeIsVirtualSlot ? node.name : node.resolveValue(\"name\")\n\n\t\tconst masterNode = !nodeIsVirtualSlot && isMaster(node)\n\t\tconst instanceNode = !nodeIsVirtualSlot && isReplica(node)\n\t\tconst breakpointVariant = !nodeIsVirtualSlot && isBreakpointVariant(node)\n\t\tconst gesture = !nodeIsVirtualSlot && isGestureVariant(node) ? node.gesture : undefined\n\t\tconst icons = getLayerIcons(isAgentExperimentOn)\n\t\tconst Icon = item.icon ? icons[item.icon] : undefined\n\t\t// This extra prop ensures that if a search is active, and the current node does not have children\n\t\t// that match the search term, then that node is not expandable. If the prop is undefined,\n\t\t// then a search is not active.\n\t\tconst containsChildren = isBoolean(item.hasMatchingChildren)\n\t\t\t? item.hasMatchingChildren\n\t\t\t: hasLayerPanelItemAnyChildren(engine.componentLoader, node)\n\t\tconst hasInteraction =\n\t\t\t!nodeIsVirtualSlot && nodeSupportsEventActions(tree, node) && hasActions(node, engine.componentLoader)\n\t\tconst isHiddenOverlay = !nodeIsVirtualSlot && isFixedOrRelativeOverlay(node) && !activeOverlays.has(node.id)\n\t\tconst isDisabledOverlay = !nodeIsVirtualSlot && isFixedOrRelativeOverlay(node) && !isValidOverlay(node, tree)\n\t\tconst hasCodeOverrideApplied = !nodeIsVirtualSlot && hasCodeOverride(node)\n\t\treturn (\n\t\t\t<LayerPanelItem\n\t\t\t\tkey={item.id}\n\t\t\t\tbeingDragged={beingDragged}\n\t\t\t\tbreakpointMax={item.breakpointMax}\n\t\t\t\tbreakpointMin={item.breakpointMin}\n\t\t\t\tcollapsed={item.collapsed}\n\t\t\t\tcollapsedOverride={item.collapsedOverride}\n\t\t\t\tdeselectOthers={beingDragged ? undefined : this.handleLayerPanelItemDeselectOthers}\n\t\t\t\texportable={item.exportable}\n\t\t\t\tfeedbackModeActive={feedbackModeActive}\n\t\t\t\tgesture={gesture}\n\t\t\t\thasChildren={containsChildren}\n\t\t\t\thasEffect={item.hasEffect}\n\t\t\t\thasCustomCursor={item.hasCustomCursor}\n\t\t\t\thasCodeOverride={hasCodeOverrideApplied}\n\t\t\t\thasHighlightedVariantLabel={item.hasHighlightedVariantLabel}\n\t\t\t\thasInteraction={hasInteraction}\n\t\t\t\thasLink={item.hasLink}\n\t\t\t\thasThread={framesWithThreads.has(node.id)}\n\t\t\t\thidden={item.hidden}\n\t\t\t\ticon={Icon}\n\t\t\t\tindent={item.indent}\n\t\t\t\tisBreakpointVariant={breakpointVariant}\n\t\t\t\tisDisabledOverlay={isDisabledOverlay}\n\t\t\t\tisHiddenOverlay={isHiddenOverlay}\n\t\t\t\tisHomeNode={item.isHomeNode}\n\t\t\t\tisInSelectionTree={!item.selected && item.partOfSelection}\n\t\t\t\tisInstanceNode={instanceNode}\n\t\t\t\tisInUserComponent={item.isInUserComponent}\n\t\t\t\tisMasterNode={masterNode}\n\t\t\t\tisPreviewNode={item.isPreviewNode}\n\t\t\t\tisScrollTarget={item.isScrollTarget}\n\t\t\t\tisSelectionTreeRootUserComponent={item.isSelectionTreeRootUserComponent}\n\t\t\t\tisUserComponent={item.isUserComponent}\n\t\t\t\tisViewOnly={isViewOnly}\n\t\t\t\tisAgentContextToolActive={isAgentContextToolActive}\n\t\t\t\tlocked={item.locked}\n\t\t\t\tlockedByParent={item.lockedByParent}\n\t\t\t\tnodeError={item.nodeError}\n\t\t\t\tnodeid={node.id}\n\t\t\t\tnodeName={name}\n\t\t\t\tplaceholder={item.placeholder}\n\t\t\t\tselect={beingDragged ? undefined : this.handleSelectLayerPanelItem}\n\t\t\t\tselected={item.selected}\n\t\t\t/>\n\t\t)\n\t}\n\n\tprivate isAllDescendantsSelected(\n\t\tnode: CanvasNode,\n\t\tchildren: readonly (CanvasNode | VirtualSlotPropertyNode)[],\n\t): boolean {\n\t\tconst { selection, activeOverlays } = this.state\n\t\tlet isAllDescendantsSelected = true\n\n\t\tif (isCodeComponentNode(node)) {\n\t\t\t// Virtual slot properties can't be selected, because on select they are\n\t\t\t// converted to actual nodes.\n\t\t\tisAllDescendantsSelected = !children.some(isVirtualSlotProperty)\n\t\t}\n\n\t\tfor (const { node: n, skipChildren } of node.walkWithSkipChildren()) {\n\t\t\tif (!n.isSelected()) {\n\t\t\t\tconst shouldIgnore = (withLock(n) && n.locked) || !n.isVisible()\n\t\t\t\tif (!shouldIgnore) {\n\t\t\t\t\tisAllDescendantsSelected = false\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!n.isVisible()) {\n\t\t\t\tskipChildren()\n\t\t\t}\n\t\t\tif (isReplica(n) && selection.length !== 1) {\n\t\t\t\tskipChildren()\n\t\t\t}\n\t\t\tif (isFixedOrRelativeOverlay(n) && !activeOverlays.has(n.id)) {\n\t\t\t\tskipChildren()\n\t\t\t}\n\t\t}\n\n\t\treturn isAllDescendantsSelected\n\t}\n\n\tprivate shouldAutoCollapseNode(\n\t\tnode: CanvasNode | VirtualSlotPropertyNode,\n\t\tchildren: readonly (CanvasNode | VirtualSlotPropertyNode)[],\n\t\tisNodeSelected: boolean,\n\t\thasSelectedChildren: boolean,\n\t): boolean {\n\t\tconst { selection, activeScreen, highlight } = this.state\n\n\t\tconst isMultiSelect = selection.length > 1\n\t\tconst isActiveScreen = node.id === activeScreen\n\t\tconst wasNodeAutoExpanded = this.autoExpandedNodes.has(node.id)\n\t\tconst isNodeHighlighted = highlight === node.id\n\n\t\tlet shouldAutoCollapseNode = true\n\n\t\t// 1. Don\u2019t collapse when selected, except when part of multiselect\n\t\tif (isNodeSelected && !isMultiSelect) shouldAutoCollapseNode = false\n\t\t// 2. Don\u2019t collapse if a child is selected\n\t\tif (hasSelectedChildren) shouldAutoCollapseNode = false\n\t\t// 3. Don\u2019t collapse when we\u2019re the active screen and there's no multiselect\n\t\tif (isActiveScreen && !isMultiSelect) shouldAutoCollapseNode = false\n\t\t// 4. Don\u2019t collapse when previously auto expanded and still highlighted\n\t\tif (wasNodeAutoExpanded && isNodeHighlighted) shouldAutoCollapseNode = false\n\t\t// 5. Don\u2019t collapse parent nodes when filtering to show matching children\n\t\tif (this.getIsFiltering() && children.length > 0) shouldAutoCollapseNode = false\n\n\t\t// Always collapse selected nodes when all descendants are selected\n\t\tif (\n\t\t\t!shouldAutoCollapseNode &&\n\t\t\t!isVirtualSlotProperty(node) &&\n\t\t\tisNodeSelected &&\n\t\t\tthis.isAllDescendantsSelected(node, children)\n\t\t) {\n\t\t\tshouldAutoCollapseNode = true\n\t\t}\n\n\t\treturn shouldAutoCollapseNode\n\t}\n\n\tprivate asItems(nodes: readonly (CanvasNode | VirtualSlotPropertyNode)[], options: AsItemsOptions): void {\n\t\tconst {\n\t\t\tindent,\n\t\t\thidden,\n\t\t\tpartOfSelection,\n\t\t\tnodesWithSelectedChildren,\n\t\t\tisInUserComponent,\n\t\t\tisSelectionTreeRootUserComponent,\n\t\t\titems,\n\t\t\tactiveScopeId,\n\t\t\tbreakpointValues,\n\t\t\treplicaVariantCount = 0,\n\t\t} = options\n\t\tconst {\n\t\t\tcollapseOverrides,\n\t\t\tisViewOnly,\n\t\t\tpreviewNodeId,\n\t\t\thomeNodeId,\n\t\t\terrorsByNodeId,\n\t\t\ttree,\n\t\t\tactiveBundleHash,\n\t\t\tactiveOverlays,\n\t\t\tisAgentContextToolActive,\n\t\t} = this.state\n\t\tconst filter = this.getFilter()\n\n\t\tfor (let i = nodes.length - 1; i >= 0; i--) {\n\t\t\tconst node = nodes[i]\n\t\t\tconst nodeIsVirtualSlot = isVirtualSlotProperty(node)\n\n\t\t\tif (!node || (!nodeIsVirtualSlot && isHiddenMaster(node))) continue\n\n\t\t\tlet children = getLayerPanelItemChildren(tree, engine.componentLoader, node, activeBundleHash)\n\n\t\t\t// If the node is filtering, then we want to see whether this node matches the search query\n\t\t\t// or whether any children do. If neither is the case, then we do not render this layer item.\n\t\t\tif (this.getIsFiltering()) {\n\t\t\t\tconst { nodeMatches, filteredChildren } = filterNodeAndDescendants(\n\t\t\t\t\tfilter,\n\t\t\t\t\tnode,\n\t\t\t\t\ttree,\n\t\t\t\t\tengine.componentLoader,\n\t\t\t\t\tactiveBundleHash,\n\t\t\t\t)\n\n\t\t\t\t// We should hide the node if filtering excludes it, or if the node has no matching children\n\t\t\t\tif (!nodeMatches && filteredChildren.length === 0) continue\n\n\t\t\t\t// Update children for this node if filtering is applied\n\t\t\t\tchildren = filteredChildren\n\t\t\t}\n\n\t\t\tconst isNodeSelected = !nodeIsVirtualSlot && node.isSelected()\n\t\t\tconst isHiddenInput = !nodeIsVirtualSlot && Boolean(withFormInput(node) && node.formInputHidden)\n\t\t\tconst isNodeVisible = nodeIsVirtualSlot\n\t\t\t\t? true\n\t\t\t\t: experiments.isOn(\"visibilityFromSandbox\")\n\t\t\t\t\t? node.cache.visible\n\t\t\t\t\t: node.isVisible()\n\t\t\tconst isNodeHidden = !isNodeVisible || hidden === true || isHiddenInput\n\t\t\tconst isNodeLocked = !nodeIsVirtualSlot && withLock(node) && node.locked === true\n\t\t\tconst isNodeExportable = !nodeIsVirtualSlot && withExport(node) && node.exportOptions.length > 0\n\t\t\tconst nodeError = nodeIsVirtualSlot\n\t\t\t\t? undefined\n\t\t\t\t: getNodeError(\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tengine.componentLoader,\n\t\t\t\t\t\tengine.stores.treeStore.tree,\n\t\t\t\t\t\tengine.stores.loadedExternalModulesStore,\n\t\t\t\t\t\tengine.stores.modulesStore,\n\t\t\t\t\t\terrorsByNodeId,\n\t\t\t\t\t)\n\n\t\t\tconst shouldAutoCollapseNode = this.shouldAutoCollapseNode(\n\t\t\t\tnode,\n\t\t\t\tchildren,\n\t\t\t\tisNodeSelected,\n\t\t\t\tnodesWithSelectedChildren.has(node.id),\n\t\t\t)\n\n\t\t\tconst hasChildren = children.length > 0\n\n\t\t\tconst nodeCollapseOverride = collapseOverrides.get(node.id)\n\t\t\tlet isNodeCollapsed = isBoolean(nodeCollapseOverride) ? nodeCollapseOverride : shouldAutoCollapseNode\n\t\t\t// If override exists and is different from the auto collapse value,\n\t\t\t// mark the node as having a collapse override.\n\t\t\tconst isCollapseOverrideInEffect =\n\t\t\t\tisBoolean(nodeCollapseOverride) && nodeCollapseOverride !== shouldAutoCollapseNode\n\n\t\t\t// When filtering is active, we do not want to touch the auto-expanded nodes set as it is\n\t\t\t// unpredictable to clean up between renders.\n\t\t\tif (hasChildren && !this.getIsFiltering()) {\n\t\t\t\tconst wasNodeAutoExpanded = this.autoExpandedNodes.has(node.id)\n\t\t\t\tconst shouldShowExpandedOnHover =\n\t\t\t\t\tthis.isMouseOverLayersTree && shouldAutoCollapseNode && wasNodeAutoExpanded && !nodeCollapseOverride\n\t\t\t\tif (shouldShowExpandedOnHover) {\n\t\t\t\t\tisNodeCollapsed = false\n\t\t\t\t} else if (!shouldAutoCollapseNode && !nodeCollapseOverride) {\n\t\t\t\t\tthis.autoExpandedNodes.add(node.id)\n\t\t\t\t} else {\n\t\t\t\t\tthis.autoExpandedNodes.delete(node.id)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst isHiddenOverlay = !nodeIsVirtualSlot && isFixedOrRelativeOverlay(node) && !activeOverlays.has(node.id)\n\t\t\tconst isSortable =\n\t\t\t\t!nodeIsVirtualSlot &&\n\t\t\t\t!isSlotPropertyNode(node) &&\n\t\t\t\t!isHiddenOverlay &&\n\t\t\t\t(!isReplicaChild(node) || isReplicaVariantOrReplicaVariantChild(node))\n\t\t\tconst shouldShowChildren =\n\t\t\t\t!nodeIsVirtualSlot && !isNodeCollapsed && withChildren(node) && hasChildren && !isHiddenOverlay\n\n\t\t\tconst isSelectionTreeRoot: boolean = isNodeSelected && shouldShowChildren\n\t\t\tconst isUserComponentNode: boolean = !nodeIsVirtualSlot && isUserComponent(node)\n\t\t\tconst breakpoint = replicaVariantCount > 0 ? breakpointValues?.[node.id] : undefined\n\t\t\tconst isNestedRepeater =\n\t\t\t\t!nodeIsVirtualSlot && isArray(node.cache.ancestorRepeaterIds) && node.cache.ancestorRepeaterIds.length > 1\n\t\t\tconst isScrollTarget: boolean =\n\t\t\t\t!nodeIsVirtualSlot &&\n\t\t\t\twithScrollTarget(node) &&\n\t\t\t\t!!node.scrollTargetEnabled &&\n\t\t\t\tisString(node.elementId) &&\n\t\t\t\t!isNestedRepeater\n\t\t\tconst hasEffect = !nodeIsVirtualSlot && hasAnyEffect(node)\n\t\t\tconst hasCustomCursor =\n\t\t\t\t!nodeIsVirtualSlot &&\n\t\t\t\twithCursor(node) &&\n\t\t\t\t((node.customCursorType === CustomCursorType.Component && isString(node.customCursorSmartComponentId)) ||\n\t\t\t\t\tnode.customCursorType === CustomCursorType.Variant)\n\n\t\t\tconst icon = nodeIsVirtualSlot ? \"placeholder\" : node ? iconName(tree, node) : undefined\n\n\t\t\t// If we are filtering and the node has children that match the search query,\n\t\t\t// then the node has viewable children. Otherwise, we let the component handle\n\t\t\t// the children visibility logic.\n\t\t\tconst hasMatchingChildren = this.getIsFiltering() ? hasChildren : undefined\n\n\t\t\titems.push({\n\t\t\t\tid: node.id,\n\t\t\t\thash: nodeIsVirtualSlot ? 0 : node.update,\n\t\t\t\tselected: isNodeSelected,\n\t\t\t\tpartOfSelection: partOfSelection || isNodeSelected,\n\t\t\t\thidden: isNodeHidden,\n\t\t\t\tplaceholder: nodeIsVirtualSlot ? node.name : getDefaultName(engine.componentLoader, node),\n\t\t\t\tlocked: isNodeLocked,\n\t\t\t\tlockedByParent: nodeIsVirtualSlot ? false : isLockedOrLockedByParent(node),\n\t\t\t\texportable: isNodeExportable,\n\t\t\t\tindent,\n\t\t\t\theight: dimensions.values.contentItemHeight,\n\t\t\t\tsortable: !isViewOnly && isSortable,\n\t\t\t\tcollapsed: isNodeCollapsed,\n\t\t\t\tcollapsedOverride: isCollapseOverrideInEffect,\n\t\t\t\tisSelectionTreeRoot,\n\t\t\t\tisSelectionTreeRootUserComponent,\n\t\t\t\t// the index is counted only among its siblings,\n\t\t\t\t// it can be the last sibling but with children shown,\n\t\t\t\t// and thus not the last of the selection tree\n\t\t\t\tisLastInSelectionTree: !shouldShowChildren && i === 0,\n\t\t\t\tisUserComponent: isUserComponentNode,\n\t\t\t\tisInUserComponent,\n\t\t\t\tisPreviewNode: previewNodeId === node.id,\n\t\t\t\tisHomeNode: node.id === homeNodeId,\n\t\t\t\tisAgentContextToolActive,\n\t\t\t\thasMatchingChildren,\n\t\t\t\tisScrollTarget,\n\t\t\t\thasLink: !nodeIsVirtualSlot && hasAnchorLink(node),\n\t\t\t\tnodeError,\n\t\t\t\thasHighlightedVariantLabel: replicaVariantCount > 0,\n\t\t\t\tbreakpointMin: breakpoint?.min,\n\t\t\t\tbreakpointMax: breakpoint?.max,\n\t\t\t\thasEffect,\n\t\t\t\thasCustomCursor,\n\t\t\t\ticon,\n\t\t\t\telement: this.getElementForItem,\n\t\t\t\tgetItems: this.getItems,\n\t\t\t})\n\n\t\t\tif (shouldShowChildren) {\n\t\t\t\tlet orderedChildren: readonly (CanvasNode | VirtualSlotPropertyNode)[]\n\t\t\t\tif (!nodeIsVirtualSlot && shouldReverseChildOrder(node)) {\n\t\t\t\t\torderedChildren = children.toReversed()\n\t\t\t\t} else {\n\t\t\t\t\torderedChildren = children\n\t\t\t\t}\n\n\t\t\t\tthis.asItems(orderedChildren, {\n\t\t\t\t\tindent: indent + 1,\n\t\t\t\t\tpartOfSelection: partOfSelection || isNodeSelected,\n\t\t\t\t\thidden: isNodeHidden,\n\t\t\t\t\tnodesWithSelectedChildren,\n\t\t\t\t\tisInUserComponent: isInUserComponent || isUserComponentNode,\n\t\t\t\t\t// memorizing if the selection tree root is (inside) a user component\n\t\t\t\t\tisSelectionTreeRootUserComponent: isSelectionTreeRoot\n\t\t\t\t\t\t? isUserComponentNode || isInUserComponent\n\t\t\t\t\t\t: isSelectionTreeRootUserComponent,\n\t\t\t\t\titems,\n\t\t\t\t\tactiveScopeId,\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate updateItems() {\n\t\tconst { tree, selection, activeScope } = this.state\n\t\tconst nodesWithSelectedChildren = new Set<NodeID>()\n\t\tfor (const nodeId of selection) {\n\t\t\tif (!tree.has(nodeId)) continue\n\t\t\ttree.getAncestors(nodeId).forEach(ancestorId => nodesWithSelectedChildren.add(ancestorId))\n\t\t}\n\n\t\tlet nodes: CanvasNode[]\n\n\t\tnodes = activeScope.getGroundNodes()\n\t\tif (shouldReverseChildOrder(activeScope)) {\n\t\t\tnodes.reverse()\n\t\t}\n\n\t\tconst items: SortableTreeItem<LayerIconName>[] = []\n\t\tthis.asItems(nodes, {\n\t\t\tindent: 1,\n\t\t\tpartOfSelection: false,\n\t\t\thidden: undefined,\n\t\t\tnodesWithSelectedChildren,\n\t\t\tisInUserComponent: false,\n\t\t\tisSelectionTreeRootUserComponent: false,\n\t\t\titems,\n\t\t\tactiveScopeId: activeScope.id,\n\t\t\tbreakpointValues: withBreakpointVariants(activeScope) ? activeScope.getBreakpointValues() : undefined,\n\t\t\treplicaVariantCount: withReplicaVariants(activeScope) ? activeScope.getReplicaVariants().length : undefined,\n\t\t})\n\t\tthis.items = items\n\t\treturn items\n\t}\n\n\tgetItems = () => {\n\t\treturn this.items\n\t}\n\n\t/**\n\t * When the search is emptied, we want to reset all collapse overrides to show a fully collapsed state.\n\t */\n\tprivate resetCollapseState = engine.scheduler.wrapHandler(() => {\n\t\tengine.stores.treeStore.resetCollapseOverrides()\n\t\t// This will not affect trigger a render, as it's not part of state, but we do want to\n\t\t// ensure the view will be as close as possible to the fully collapsed state when the\n\t\t// the search is cleared.\n\t\tthis.autoExpandedNodes.clear()\n\t})\n\n\toverride componentDidUpdate() {\n\t\tconst currentFilter = this.getFilter()\n\t\tconst trimmedCurrentFilter = currentFilter.trim()\n\t\tconst trimmedPrevFilter = this.prevFilter.trim()\n\n\t\tif (trimmedPrevFilter !== \"\" && trimmedCurrentFilter === \"\") {\n\t\t\tengine.scheduler.processWhenReady(() => {\n\t\t\t\tthis.resetCollapseState()\n\t\t\t})\n\t\t}\n\n\t\tthis.prevFilter = currentFilter\n\t}\n\n\toverride render() {\n\t\tconst { selection } = this.state\n\t\tconst items = this.updateItems()\n\t\tconst selectedIndexes = new Set<number>([])\n\n\t\t// Item decides whether to render border-radius or not base on the\n\t\t// selectedIdx set, thus make sure only the first and the last items in\n\t\t// a selection have border-radius\n\t\titems.forEach((item, idx) => {\n\t\t\tif (item.partOfSelection) {\n\t\t\t\tselectedIndexes.add(idx)\n\t\t\t}\n\t\t})\n\n\t\tconst activeFilterWithoutResults = items.length === 0 && this.getIsFiltering()\n\t\treturn (\n\t\t\t<MetricsViewContext.Provider value={MetricsInteractionViews.LAYERS_PANEL}>\n\t\t\t\t<Stack direction=\"column\" gap={dimensions.css.panelControlGap} className={styles.controlWrapper}>\n\t\t\t\t\t<PageSelector />\n\t\t\t\t\t<ContentPanelSearchBar\n\t\t\t\t\t\tcontentPanelTab={ActiveContentPanelTab.Layers}\n\t\t\t\t\t\tisFocused={engine.stores.chromeStore.isContentPanelSearchFocused}\n\t\t\t\t\t/>\n\t\t\t\t</Stack>\n\t\t\t\t{activeFilterWithoutResults ? (\n\t\t\t\t\t<div className={styles.noResults}>No Layers Found</div>\n\t\t\t\t) : (\n\t\t\t\t\t<SortableTree\n\t\t\t\t\t\taction={this.insertActionLayersTree}\n\t\t\t\t\t\titems={items}\n\t\t\t\t\t\tselectedIndexes={selectedIndexes}\n\t\t\t\t\t\tsingleSelection={selection.length === 1}\n\t\t\t\t\t\tonMouseEnter={this.handleMouseEnterLayersTree}\n\t\t\t\t\t\tonMouseLeave={this.handleMouseLeaveLayersTree}\n\t\t\t\t\t\tonMouseDownCapture={engine.stores.codeEditorStore.closeEditor}\n\t\t\t\t\t\tminDepthForHorizontalScroll={4}\n\t\t\t\t\t\tscrollContainerClassName={styles.scrollStyle}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</MetricsViewContext.Provider>\n\t\t)\n\t}\n\n\thandleMouseEnterLayersTree = () => {\n\t\tthis.isMouseOverLayersTree = true\n\t}\n\n\thandleMouseLeaveLayersTree = engine.scheduler.wrapHandler((event: React.MouseEvent) => {\n\t\tif (Events.isLeftMouseButtonDown(event)) return\n\n\t\tengine.stores.treeStore.setHighlight(null)\n\n\t\t// It may seem like a bug that this.isMouseOverLayersTree is not set to false here. A broken condition here meant\n\t\t// that this.isMouseOverLayersTree was never set to false for such a long time that fixing it will change the way autocollapse\n\t\t// works and potentially cause bug reports. Feel free to remove this comment and set this.isMouseOverLayersTree to false if you\n\t\t// have approval from product.\n\t\t// this.isMouseOverLayersTree = false\n\t})\n\n\thandleSelectLayerPanelItem = engine.scheduler.wrapHandler((nodeId: NodeID, event: React.MouseEvent<HTMLElement>) => {\n\t\tconst { selection, isAgentContextToolActive } = this.state\n\t\tconst { items } = this\n\t\tconst metaOrCtrl = isCommandKeyPressed(event)\n\n\t\tconst { selectionStore, overlayStore, scopeStore } = engine.stores\n\n\t\tif (isVirtualSlotPropertyId(nodeId)) {\n\t\t\tconst { parentId, originalParentId, slotKey, replicaId } = getVirtualSlotPropertyParentAndKey(nodeId)\n\t\t\tconst codeComponent = engine.tree.get(parentId)\n\t\t\tconst originalCodeComponent = engine.tree.get(originalParentId)\n\t\t\tif (!isCodeComponentNode(codeComponent)) return\n\t\t\tif (!isCodeComponentNode(originalCodeComponent)) return\n\n\t\t\tconst existingSlotProperty = originalCodeComponent.children.find(\n\t\t\t\tchild => isSlotPropertyNode(child) && child.slotPropertyKey === slotKey,\n\t\t\t)\n\t\t\tassert(!existingSlotProperty, \"Virtual slot property node already exists\")\n\n\t\t\tconst newSlotPropertyNode = new SlotPropertyNode({ slotPropertyKey: slotKey })\n\t\t\tscopeStore.insertNode(newSlotPropertyNode, originalCodeComponent.id)\n\n\t\t\tconst idToSelect = replicaId ? generateReplicaChildId(replicaId, newSlotPropertyNode.id) : newSlotPropertyNode.id\n\n\t\t\tif (isAgentContextToolActive) {\n\t\t\t\tContextAction.addSelectionToAgent(engine.stores, [idToSelect])\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tselectionStore.set(idToSelect, { switchToProperties: true })\n\t\t\treturn\n\t\t}\n\n\t\tconst node = engine.tree.getNode(nodeId)\n\t\tif (!node) return\n\n\t\tif (isAgentContextToolActive) {\n\t\t\tContextAction.addSelectionToAgent(engine.stores, [nodeId])\n\t\t\treturn\n\t\t}\n\n\t\tif (event.shiftKey) {\n\t\t\tconst lastSelected = selection[selection.length - 1]\n\t\t\tif (lastSelected === undefined) {\n\t\t\t\tselectionStore.set(nodeId, { switchToProperties: true })\n\t\t\t} else {\n\t\t\t\tconst lastSelectedIndex = items.findIndex(item => item.id === lastSelected)\n\t\t\t\tconst extendToIndex = items.findIndex(item => item.id === nodeId)\n\t\t\t\tconst from = Math.min(lastSelectedIndex, extendToIndex)\n\t\t\t\tconst to = Math.max(lastSelectedIndex, extendToIndex)\n\t\t\t\tconst toToggle: NodeID[] = []\n\t\t\t\tfor (let i = from; i <= to; i++) {\n\t\t\t\t\tconst item = items[i] as SortableTreeItem | undefined\n\t\t\t\t\tif (item && !item.selected && item.id !== NullID) {\n\t\t\t\t\t\ttoToggle.push(item.id)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tselectionStore.toggle(toToggle, { switchToProperties: true })\n\t\t\t}\n\t\t} else if (metaOrCtrl) {\n\t\t\tselectionStore.toggle(nodeId, { switchToProperties: true })\n\t\t} else if (!selection.includes(nodeId)) {\n\t\t\t// Selection in the layers panel always deselects everything else\n\t\t\t// (unless modifiers are present -- see above). However the\n\t\t\t// selection store can only show overlays additively, not hide them,\n\t\t\t// supporting a flow where elements from outside an overlay can be\n\t\t\t// copied in.\n\t\t\t//\n\t\t\t// To ensure the layer panel works as expected, we first manually\n\t\t\t// hide all the active overlays, then allow the selection store to\n\t\t\t// show only the newly selected one.\n\t\t\tconst isAnyOverlay = isFixedOrRelativeOverlay(node)\n\t\t\tif (isAnyOverlay) overlayStore.hideAll()\n\t\t\tselectionStore.set(nodeId, { sticky: !isAnyOverlay, switchToProperties: true })\n\t\t}\n\t})\n\n\thandleLayerPanelItemDeselectOthers = engine.scheduler.wrapHandler((nodeId: NodeID) => {\n\t\tconst { isAgentContextToolActive } = this.state\n\t\tif (isAgentContextToolActive) return\n\n\t\tconst { selectionStore, treeStore } = engine.stores\n\t\tif (selectionStore.ids.includes(nodeId)) {\n\t\t\tselectionStore.set(nodeId, { switchToProperties: true })\n\t\t\ttreeStore.setHighlight(null)\n\t\t}\n\t})\n\n\tinsertSelection = engine.scheduler.wrapHandler(\n\t\t(\n\t\t\ttree: CanvasTree,\n\t\t\tdropTargetId: NodeID,\n\t\t\tinsertLocation: InsertLocation,\n\t\t\tselection: NodeID[],\n\t\t\tcopyNodes: boolean,\n\t\t) => {\n\t\t\tif (insertLocation === \"none\") return\n\n\t\t\tlet dropTargetNode: CanvasNode | null\n\t\t\tlet transformIdsToSelect: ((ids: Set<NodeID>) => Set<NodeID>) | undefined\n\n\t\t\tif (isVirtualSlotPropertyId(dropTargetId)) {\n\t\t\t\tconst { slotKey, originalParentId, replicaId } = getVirtualSlotPropertyParentAndKey(dropTargetId)\n\t\t\t\tconst slotPropertyNode = new SlotPropertyNode({ slotPropertyKey: slotKey })\n\t\t\t\tengine.stores.scopeStore.insertNode(slotPropertyNode, originalParentId)\n\t\t\t\tdropTargetNode = slotPropertyNode\n\n\t\t\t\tif (replicaId) {\n\t\t\t\t\t// We are inserting into the primary slot, so we need to transform the ids to\n\t\t\t\t\t// select the inserted slot nodes within the replica.\n\t\t\t\t\ttransformIdsToSelect = originalIds => {\n\t\t\t\t\t\tconst result = new Set<NodeID>()\n\n\t\t\t\t\t\tfor (const originalId of originalIds) {\n\t\t\t\t\t\t\tconst idToSelect = generateReplicaChildId(replicaId, originalId)\n\t\t\t\t\t\t\tresult.add(idToSelect)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn result\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdropTargetNode = tree.get(dropTargetId)\n\t\t\t}\n\n\t\t\tif (!dropTargetNode) return\n\n\t\t\tlet newParent: (CanvasNode & WithChildren) | null\n\n\t\t\tif (insertLocation === \"siblingAbove\" || insertLocation === \"siblingBelow\") {\n\t\t\t\tnewParent = tree.getParent(dropTargetNode.id)\n\t\t\t} else {\n\t\t\t\tassert(withChildren(dropTargetNode), \"dropTargetNode must support withChildren when location is set to 'child'\")\n\t\t\t\tnewParent = dropTargetNode\n\t\t\t}\n\n\t\t\t// Because getParent returns null for ScopeNodes, we need to\n\t\t\t// manually fallback on the activeScope\n\t\t\tconst reversed = shouldReverseChildOrder(newParent ?? this.state.activeScope)\n\t\t\tconst insertionIndex = getInsertionIndex(tree, dropTargetNode, insertLocation, reversed)\n\t\t\tconst selectedNodes = tree.sortVisually(tree.withoutDescendants(tree.getNodes(selection)))\n\n\t\t\t// Do not allow reparenting overlay nodes.\n\t\t\tif (selectedNodes.some(isFixedOrRelativeOverlay)) return\n\n\t\t\tif (copyNodes) {\n\t\t\t\tif (!ContextAction.canDuplicateNodes(selectedNodes)) return\n\t\t\t\t// Duplicating replica nodes is handled in duplicateNodes\n\t\t\t\tconst duplicatedIds = ContextAction.duplicateNodes(engine, selection, {\n\t\t\t\t\tnode: newParent,\n\t\t\t\t\tinsertionIndex,\n\t\t\t\t})\n\n\t\t\t\tif (duplicatedIds && transformIdsToSelect) {\n\t\t\t\t\tconst transformedIds = transformIdsToSelect(duplicatedIds)\n\t\t\t\t\tengine.stores.selectionStore.set(transformedIds)\n\t\t\t\t}\n\n\t\t\t\treturn\n\t\t\t} // else\n\n\t\t\tconst idsToSelect: Set<NodeID> = new Set(selection)\n\n\t\t\tswitch (insertLocation) {\n\t\t\t\tcase \"siblingAbove\":\n\t\t\t\tcase \"siblingBelow\": {\n\t\t\t\t\tif (reversed) selectedNodes.reverse()\n\t\t\t\t\tconst siblings = tree.getSiblingsIncludingSelf(dropTargetNode)\n\t\t\t\t\tselectedNodes.forEach(node => {\n\t\t\t\t\t\tlet localInsertionIndex = insertionIndex\n\t\t\t\t\t\tconst currentIndex = siblings.indexOf(node)\n\t\t\t\t\t\tif (currentIndex !== -1 && currentIndex < insertionIndex) {\n\t\t\t\t\t\t\tlocalInsertionIndex -= 1\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tinsertNodeToNewPosition(node, newParent, localInsertionIndex, idsToSelect)\n\t\t\t\t\t})\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tcase \"child\": {\n\t\t\t\t\tselectedNodes.forEach(node => {\n\t\t\t\t\t\tinsertNodeToNewPosition(node, newParent, insertionIndex, idsToSelect)\n\t\t\t\t\t})\n\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (transformIdsToSelect) {\n\t\t\t\tconst transformedIds = transformIdsToSelect(idsToSelect)\n\t\t\t\tengine.stores.selectionStore.set(transformedIds, { switchToProperties: true })\n\t\t\t} else {\n\t\t\t\tengine.stores.selectionStore.set(idsToSelect, { switchToProperties: true })\n\t\t\t}\n\t\t},\n\t)\n}\n\nconst LayersContainer = createContainer(Layers)\nexport { LayersContainer as Layers }\n\n/**\n * If a a node has a name, then return it. If it does not, and it's not a Virtual Slot node, then get the default name.\n * for that node type (ie \"Frame\" for a FrameNode).\n */\nfunction getNodeDisplayName(componentLoader: ComponentLoader, node: CanvasNode | VirtualSlotPropertyNode): string {\n\tif (isVirtualSlotProperty(node)) return node.name ?? \"\"\n\tconst name = node.resolveValue(\"name\")\n\tif (isString(name)) return name\n\treturn getDefaultName(componentLoader, node)\n}\n\n/**\n * Recursively checks if a node matches the search query and returns any matching children.\n */\nexport function filterNodeAndDescendants(\n\tsearchQuery: string,\n\tnode: CanvasNode | VirtualSlotPropertyNode,\n\ttree: CanvasTree,\n\tcomponentLoader: ComponentLoader,\n\tactiveBundleHash: string,\n): SearchResults {\n\t// For the current implementation, this case should never happen.\n\tassert(searchQuery.trim() !== \"\", \"Search query should not be empty\")\n\n\tconst nodeMatches = matchSubstring(searchQuery, getNodeDisplayName(componentLoader, node))\n\tconst children = getLayerPanelItemChildren(tree, componentLoader, node, activeBundleHash)\n\tconst filteredChildren: (CanvasNode | VirtualSlotPropertyNode)[] = []\n\n\tif (children.length === 0) {\n\t\tconst result = { nodeMatches, filteredChildren }\n\t\treturn result\n\t}\n\n\tfor (const child of children) {\n\t\tconst childResult = filterNodeAndDescendants(searchQuery, child, tree, componentLoader, activeBundleHash)\n\t\tif (childResult.nodeMatches || childResult.filteredChildren.length > 0) {\n\t\t\tfilteredChildren.push(child)\n\t\t}\n\t}\n\n\tconst result = { nodeMatches, filteredChildren }\n\treturn result\n}\n\nfunction getInsertionIndex(tree: CanvasTree, dropTarget: CanvasNode, location: InsertLocation, reversed: boolean) {\n\tif (location !== \"siblingAbove\" && location !== \"siblingBelow\") return -1\n\tconst siblings = tree.getSiblingsIncludingSelf(dropTarget)\n\tconst insertionIndex = siblings.indexOf(dropTarget)\n\tif (insertionIndex === -1) return -1\n\tif (reversed) {\n\t\tif (location === \"siblingBelow\") {\n\t\t\treturn insertionIndex + 1\n\t\t}\n\t} else {\n\t\tif (location === \"siblingAbove\") {\n\t\t\treturn insertionIndex + 1\n\t\t}\n\t}\n\treturn insertionIndex\n}\n\nfunction insertNodeToNewPosition(\n\tnode: CanvasNode,\n\tnewParent: (CanvasNode & WithChildren) | null,\n\tinsertionIndex: number,\n\tidToSelect: Set<string>,\n) {\n\tconst { tree } = engine\n\t// If the node is a replica variant, node that's visible in more than one\n\t// variants, when moving it out of the variant, move a clone and hide the\n\t// node.\n\t// Technically we should check if the new parent is in a different variant,\n\t// but currently we don't allow moving between different variants, nor\n\t// moving into a non-variant replica, so checking if the new parent is in a\n\t// replica should be sufficient.\n\tconst movingNodeOutOfReplicaVariantWhileBeingVisibleInOtherVariants =\n\t\t(!newParent || !isReplicaOrReplicaChild(newParent)) &&\n\t\tisReplicaVariantChild(node) &&\n\t\tisVisibleInOtherVariants(tree, node)\n\tif (movingNodeOutOfReplicaVariantWhileBeingVisibleInOtherVariants) {\n\t\tif (!ContextAction.canDuplicateNodes([node])) return\n\t\tconst newSelection = ContextAction.duplicateNodes(\n\t\t\tengine,\n\t\t\t[node.id],\n\t\t\t{\n\t\t\t\tnode: newParent,\n\t\t\t\tinsertionIndex,\n\t\t\t},\n\t\t\tfalse,\n\t\t)\n\n\t\tengine.tree.current(node)?.set({ visible: false })\n\n\t\tif (newSelection) {\n\t\t\tidToSelect.delete(node.id)\n\t\t\tnewSelection.forEach(id => {\n\t\t\t\tidToSelect.add(id)\n\t\t\t})\n\t\t}\n\t\treturn\n\t}\n\n\tconst currentParent = tree.getParent(node.id)\n\n\t// When sorting in a replica variant stack/grid, we update the itemsOrder\n\t// without reparenting the node.\n\tconst sortingInReplicaVariantStackOrGrid =\n\t\tcurrentParent &&\n\t\tnewParent &&\n\t\tcurrentParent.id === newParent.id &&\n\t\tisReplicaVariantChild(node) &&\n\t\tisReplicaVariantOrReplicaVariantChild(currentParent) &&\n\t\tisStackOrGridComponent(currentParent)\n\tif (sortingInReplicaVariantStackOrGrid && isSortableNode(node)) {\n\t\tupdateIdIndexInItemsOrder(node.originalid, currentParent, insertionIndex)\n\t\treturn\n\t}\n\n\tconst originalNodeInfo = ContextAction.convertNodeToNewParent(engine, node, currentParent, newParent, insertionIndex)\n\n\tif (originalNodeInfo) {\n\t\tconst { originalNode, originalNewParent } = originalNodeInfo\n\t\tupdateNodeAfterMovingInOrOutOfVariant(node, originalNode, currentParent, newParent, originalNewParent, idToSelect)\n\t}\n}\n\nfunction updateNodeAfterMovingInOrOutOfVariant(\n\tnode: CanvasNode,\n\toriginalNode: CanvasNode | null,\n\tcurrentParent: CanvasNode | null,\n\tnewParent: CanvasNode | null,\n\toriginalNewParent: CanvasNode | null,\n\tidToSelect: Set<NodeID>,\n) {\n\tif (!originalNode) return\n\n\t// Re-parent in variant\n\tif (\n\t\tisReplicaChild(node) &&\n\t\tcurrentParent &&\n\t\tisReplicaOrReplicaChild(currentParent) &&\n\t\tnewParent &&\n\t\tisReplicaOrReplicaChild(newParent)\n\t) {\n\t\tupdateNodeWhenReparentedInVariant(engine, node, newParent)\n\t}\n\t// Move into variant\n\telse if (!isReplicaChild(node) && newParent && isReplicaOrReplicaChild(newParent) && originalNewParent) {\n\t\tupdateNodeWhenMovedIntoVariant(engine, node, newParent, originalNewParent, idToSelect)\n\t}\n\t// Move out of variant\n\telse if (isReplicaChild(node) && (!newParent || !isReplicaOrReplicaChild(newParent))) {\n\t\tupdateNodeWhenMovedOutOfVariant(engine, node, originalNode, idToSelect)\n\n\t\t// make sure the original node stays at the same position as the moved node\n\t\tconst nodeRect = engine.tree.getRect(node)\n\t\tconst centerPoint = engine.tree.convertPointToCanvas(node, Rect.center(Rect.atOrigin(nodeRect)))\n\t\tconst newCenterPoint: Point = newParent ? engine.tree.convertPointToNode(newParent, centerPoint) : centerPoint\n\n\t\tconst newPosition = Point.pixelAligned({\n\t\t\tx: newCenterPoint.x - nodeRect.width / 2,\n\t\t\ty: newCenterPoint.y - nodeRect.height / 2,\n\t\t})\n\t\tconst newRect = {\n\t\t\t...nodeRect,\n\t\t\t...newPosition,\n\t\t}\n\n\t\tconst update = node.updateForRect({\n\t\t\trect: newRect,\n\t\t\tparentSizeInfo: engine.tree.getParentSizeInfo(node, newParent),\n\t\t\tconstraintsLocked: false,\n\t\t\tshouldGuessPinToBottom: newParent ? shouldGuessPinToBottom(engine.tree, null, newParent) : true,\n\t\t\tshouldGuessPinToRight: shouldGuessPinToRight(engine.tree, node, newParent),\n\t\t})\n\t\tengine.tree.current(originalNode)?.set(update)\n\t}\n}\n\nexport const iconName = (tree: CanvasTree, node: CanvasNode): LayerIconName => {\n\tif (hasFloatingPosition(node)) return \"overlay\"\n\n\tif (isVectorInstance(node)) {\n\t\treturn \"vector\"\n\t}\n\n\tif (isUserComponent(node)) {\n\t\treturn \"component\"\n\t}\n\tif (isCodeComponentNode(node)) {\n\t\tswitch (node.codeComponentIdentifier) {\n\t\t\tcase HardCodedCodeIdentifier.scroll:\n\t\t\tcase HardCodedCodeIdentifier.page:\n\t\t\t\treturn \"frame\"\n\t\t}\n\t}\n\n\tif (isFormContainer(node)) {\n\t\treturn \"form-container\"\n\t}\n\n\tif (isFormPlainTextInputNode(node)) {\n\t\treturn \"form-input\"\n\t}\n\n\tif (isSlotNode(node) || isSlotPropertyNode(node)) {\n\t\treturn \"placeholder\"\n\t}\n\n\tif (isFormBooleanInputNode(node)) {\n\t\tif (node.formBooleanInputType === \"radio\") return \"radio\"\n\t\treturn \"checkbox\"\n\t}\n\n\tif (isFormSelectNode(node)) {\n\t\treturn \"form-select\"\n\t}\n\n\tif (isRepeatedItem(tree, node)) {\n\t\treturn \"collection-item\"\n\t}\n\n\tif (hasImageFill(node) && !hasStackLayout(node) && !hasGridLayout(node)) {\n\t\treturn \"image\"\n\t}\n\n\tif (isShaderNode(node)) {\n\t\treturn \"shader\"\n\t}\n\n\tif (isFrameNode(node)) {\n\t\tif (isBreakpointVariant(node)) {\n\t\t\treturn \"breakpoint\"\n\t\t}\n\n\t\tif (hasLabelTag(node)) return \"label\"\n\n\t\tconst layoutIcon = resolveFrameLayoutIcon(node)\n\t\tif (layoutIcon) {\n\t\t\treturn layoutIcon\n\t\t}\n\t\tif (isRoundFrame(node)) return \"frame-round\"\n\t\treturn \"frame\"\n\t}\n\tif (isTextNode(node) || isRichTextNode(node)) {\n\t\treturn \"text\"\n\t}\n\tif (isSVGNode(node)) {\n\t\treturn \"svg\"\n\t}\n\tif (isPathNode(node)) {\n\t\treturn \"path\"\n\t}\n\tif (isBooleanShapeNode(node)) {\n\t\treturn \"boolean\"\n\t}\n\tif (isStarShapeNode(node)) {\n\t\treturn \"star\"\n\t}\n\tif (isPolygonShapeNode(node)) {\n\t\treturn \"polygon\"\n\t}\n\tif (isOvalShapeNode(node)) {\n\t\treturn \"oval\"\n\t}\n\tif (isRectangleShapeNode(node)) {\n\t\treturn \"rectangle\"\n\t}\n\tif (isShapeGroupNode(node)) {\n\t\treturn \"group\"\n\t}\n\tif (isShapeContainerNode(node)) {\n\t\treturn isVectorSetItem(node) ? \"vector\" : \"view-box\"\n\t}\n\tif (isOverlayNode(node)) {\n\t\treturn \"overlay\"\n\t}\n\n\treturn \"rectangle\"\n}\n\nfunction resolveFrameLayoutIcon(node: FrameNode): LayerIconName | null {\n\tif (!hasAnyLayout(node)) return null\n\tif (isDataRepeater(node)) return \"stack-with-data\"\n\tif (hasColumnMasonryLayout(node)) return \"masonry\"\n\tif (hasGridLayout(node)) return \"grid\"\n\tif (!hasStackLayout(node)) return \"frame\"\n\treturn resolveStackLayoutIcon(node)\n}\n\nfunction resolveStackLayoutIcon(node: CanvasNode & HasStackLayout): LayerIconName {\n\tconst isHorizontalStack = resolveStackDirectionForIcon(node) === \"horizontal\"\n\tif (node.stackWrapEnabled) {\n\t\treturn isHorizontalStack ? \"stack-wrap-horizontal\" : \"stack-wrap-vertical\"\n\t}\n\treturn isHorizontalStack ? \"stack-horizontal\" : \"stack\"\n}\n\nfunction resolveStackDirectionForIcon(node: CanvasNode & HasStackLayout) {\n\treturn node.resolveValue(\"stackDirection\") ?? defaultStackDirection\n}\n\nfunction isRoundFrame(node: FrameNode) {\n\tconst radius = node.radiusPerCorner\n\t\t? Math.min(node.radiusTopLeft, node.radiusTopRight, node.radiusBottomLeft, node.radiusBottomRight)\n\t\t: (node.resolveValue(\"radius\") ?? 0)\n\tif (radius === 0) return false\n\n\tconst radiusIsRelative = !node.radiusPerCorner && node.radiusIsRelative\n\tif (radiusIsRelative) return radius > 40\n\n\tconst tree = node.tree()\n\tif (!tree) return false\n\n\tconst rect = tree.getRect(node)\n\tconst minSize = Math.min(rect.width, rect.height)\n\tif (minSize === 0) return false\n\treturn radius >= minSize / 2\n}\n\nfunction shouldReverseChildOrder(parent: CanvasNode | null) {\n\tif (isStackOrGridComponent(parent)) return true\n\treturn isScopeNode(parent) && (withReplicaVariants(parent) || withVectorSetItems(parent))\n}\n", "import { SearchBar } from \"@framerjs/fresco\"\nimport { useExperimentIsOn } from \"app/experiments.ts\"\nimport engine from \"document/engine.ts\"\nimport type { ActiveContentPanelTab } from \"document/utils/ActiveEditorType.ts\"\nimport { useEffect, useRef, useState } from \"react\"\nimport { record } from \"web/lib/tracker.ts\"\nimport { useDebounce } from \"web/lib/useDebounce.ts\"\nimport * as styles from \"../shared/AgentSearchBar.styles.ts\"\nimport { usePanelSearch } from \"./PanelSearch.tsx\"\n\ninterface Props {\n\tcontentPanelTab: ActiveContentPanelTab\n\tisFocused: boolean\n}\n\nconst debounceTime = 200\n\nexport function ContentPanelSearchBar({ contentPanelTab, isFocused }: Props) {\n\tconst inputRef = useRef<HTMLInputElement>(null)\n\tconst agentEnabled = useExperimentIsOn(\"agent\")\n\t// Used to help track when clear events occurred.\n\tconst clearedByEscRef = useRef<boolean | null>(null)\n\n\tconst { searchQueryFor, updateSearchQueryFor } = usePanelSearch()\n\tconst currentSearchQuery = searchQueryFor(contentPanelTab)\n\n\t// Local state for the input value\n\tconst [inputValue, setInputValue] = useState(currentSearchQuery)\n\n\t// Debounced version for updating context. If the input value is empty, then\n\t// the filter is immediately cleared without debounce.\n\tconst debouncedInputValue = useDebounce(inputValue, inputValue ? debounceTime : 0)\n\n\t// Update context when debounced value changes\n\tuseEffect(() => {\n\t\tupdateSearchQueryFor(contentPanelTab, debouncedInputValue)\n\n\t\t// Track search metrics when debounced value changes\n\t\tif (debouncedInputValue.trim() !== \"\") {\n\t\t\trecord(\"content_panel_search\", {\n\t\t\t\ttab: contentPanelTab,\n\t\t\t})\n\t\t} else if (clearedByEscRef.current === false) {\n\t\t\trecord(\"content_panel_search_clear\", {\n\t\t\t\ttab: contentPanelTab,\n\t\t\t\twithEsc: false,\n\t\t\t})\n\t\t}\n\n\t\t// Reset the flag to ensure subsequent events are accurate. On mount,\n\t\t// the ref will be `null`, so it will not run then.\n\t\tclearedByEscRef.current = false\n\t}, [debouncedInputValue, updateSearchQueryFor, contentPanelTab])\n\n\t// When the focus prop is updated from an external source, such as the `CMD+F` hotkey,\n\t// then we need to focus the input.\n\tuseEffect(() => {\n\t\tif (isFocused) {\n\t\t\tinputRef.current?.focus()\n\t\t}\n\t}, [isFocused])\n\n\t// We must change the external state in order to re-trigger the focus action.\n\tconst handleBlur = () => {\n\t\tengine.scheduler.processWhenReady(() => {\n\t\t\tengine.stores.chromeStore.isContentPanelSearchFocused = false\n\t\t})\n\t}\n\n\tconst handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n\t\tif (event.key !== \"Escape\") return\n\t\tif (!inputRef.current) return\n\n\t\tclearedByEscRef.current = true\n\t\trecord(\"content_panel_search_clear\", {\n\t\t\ttab: contentPanelTab,\n\t\t\twithEsc: true,\n\t\t})\n\t\tsetInputValue(\"\")\n\t\tinputRef.current.blur()\n\t}\n\n\treturn (\n\t\t<SearchBar\n\t\t\tref={inputRef}\n\t\t\tvalue={inputValue}\n\t\t\tclassName={agentEnabled ? styles.agentInputWrapper : undefined}\n\t\t\tplaceholder=\"Search\u2026\"\n\t\t\ticonPosition=\"left\"\n\t\t\tonChange={setInputValue}\n\t\t\tonBlur={handleBlur}\n\t\t\tonKeyDown={handleKeyDown}\n\t\t\tshowClearButton={true}\n\t\t\ttestId=\"content-panel-search-bar\"\n\t\t/>\n\t)\n}\n", "import \"AgentSearchBar.styles_14yicyw.wyw.css\"; export const agentInputWrapper = \"agentInputWrapper_am8uwqo\";", "import { ActiveContentPanelTab } from \"document/utils/ActiveEditorType.ts\"\nimport { type ReactNode, createContext, startTransition, useCallback, useContext, useMemo, useState } from \"react\"\n\ninterface SearchQueries {\n\t[ActiveContentPanelTab.Pages]: string\n\t[ActiveContentPanelTab.Layers]: string\n\t[ActiveContentPanelTab.Assets]: string\n}\n\nexport const PanelSearchContext = createContext<{\n\tsearchQueryFor: (tab: ActiveContentPanelTab) => string\n\tupdateSearchQueryFor: (tab: ActiveContentPanelTab, query: string) => void\n\tclearSearchQueryFor: (tab: ActiveContentPanelTab) => void\n}>({\n\t// Initial values\n\tsearchQueryFor: () => \"\",\n\tupdateSearchQueryFor: () => {},\n\tclearSearchQueryFor: () => {},\n})\n\nPanelSearchContext.displayName = \"PanelSearchContext\"\n\nexport function PanelSearchProvider({ children }: { children: ReactNode }) {\n\tconst [searchQueries, setSearchQueries] = useState<SearchQueries>({\n\t\t[ActiveContentPanelTab.Pages]: \"\",\n\t\t[ActiveContentPanelTab.Layers]: \"\",\n\t\t[ActiveContentPanelTab.Assets]: \"\",\n\t})\n\tconst updateSearchQueryFor = useCallback((tab: ActiveContentPanelTab, query: string) => {\n\t\tstartTransition(() => {\n\t\t\tsetSearchQueries(prev => ({\n\t\t\t\t...prev,\n\t\t\t\t[tab]: query,\n\t\t\t}))\n\t\t})\n\t}, [])\n\tconst clearSearchQueryFor = useCallback((tab: ActiveContentPanelTab) => {\n\t\tstartTransition(() => {\n\t\t\tsetSearchQueries(prev => ({\n\t\t\t\t...prev,\n\t\t\t\t[tab]: \"\",\n\t\t\t}))\n\t\t})\n\t}, [])\n\tconst value = useMemo(\n\t\t() => ({\n\t\t\tsearchQueryFor: (tab: ActiveContentPanelTab) => searchQueries[tab],\n\t\t\tupdateSearchQueryFor,\n\t\t\tclearSearchQueryFor,\n\t\t}),\n\t\t[searchQueries, updateSearchQueryFor, clearSearchQueryFor],\n\t)\n\treturn <PanelSearchContext.Provider value={value}>{children}</PanelSearchContext.Provider>\n}\n\nexport const usePanelSearch = () => {\n\tconst context = useContext(PanelSearchContext)\n\tif (!context) {\n\t\tthrow new Error(\"usePanelSearch must be used within a PanelSearchProvider\")\n\t}\n\treturn context\n}\n", "import { Scroll } from \"@framerjs/fresco\"\nimport { dimensions } from \"@framerjs/fresco/tokens\"\nimport { cx } from \"@linaria/core\"\nimport { EngineChange } from \"document/EngineChanges.ts\"\nimport engine from \"document/engine.ts\"\nimport { stringFromNodeID } from \"document/models/CanvasTree/index.ts\"\nimport { useEngineCallback } from \"document/useEngineCallback.ts\"\nimport React from \"react\"\nimport { Item } from \"./Item.tsx\"\nimport * as styles from \"./index.styles.ts\"\nimport type { InsertAction, SortableTreeItem } from \"./types.ts\"\n\ninterface Props {\n\titems: SortableTreeItem[]\n\tselectedIndexes: Set<number>\n\taction: InsertAction\n\tsingleSelection: boolean\n\tonMouseEnter: (event: React.MouseEvent<HTMLDivElement>) => void\n\tonMouseLeave: (event: React.MouseEvent<HTMLDivElement>) => void\n\tonMouseDownCapture: (event: React.MouseEvent<HTMLDivElement>) => void\n\tminDepthForHorizontalScroll?: number\n\tscrollContainerClassName?: string\n}\n\nexport function SortableTree({\n\titems,\n\tselectedIndexes,\n\taction,\n\tsingleSelection,\n\tonMouseEnter,\n\tonMouseLeave,\n\tonMouseDownCapture,\n\tscrollContainerClassName,\n\tminDepthForHorizontalScroll = 0,\n}: Props) {\n\tconst elementRef = React.useRef<HTMLDivElement>(null)\n\n\tconst tabContentWidth = useTabContentWidth()\n\n\tconst clearHighlight = useEngineCallback((event: React.MouseEvent<HTMLDivElement>) => {\n\t\tif (event.target === elementRef.current) {\n\t\t\tengine.stores.treeStore.setHighlight(null)\n\t\t}\n\t}, [])\n\n\tconst clearSelection = useEngineCallback((event: React.MouseEvent) => {\n\t\tif (event.target === elementRef.current) {\n\t\t\tengine.stores.selectionStore.clear()\n\t\t}\n\t}, [])\n\n\tconst { maxDepth, elements } = mapItems({ items, action, selectedIndexes, singleSelection })\n\tconst scrollDirection = maxDepth > minDepthForHorizontalScroll ? \"both\" : \"vertical\"\n\n\treturn (\n\t\t<div\n\t\t\tclassName={styles.treeWrapper}\n\t\t\tstyle={{\n\t\t\t\t// make panel width available for items to use without rerendering memoised components\n\t\t\t\t// subtract panel border and panel padding\n\t\t\t\t\"--tree-available-width\": `calc(${tabContentWidth}px - 1px - ${dimensions.css.panelPadding} * 2)`,\n\t\t\t}}\n\t\t>\n\t\t\t<Scroll\n\t\t\t\tclassName={cx(styles.tabbedTreeStyle, scrollContainerClassName)}\n\t\t\t\tonMouseEnter={onMouseEnter}\n\t\t\t\tonMouseLeave={onMouseLeave}\n\t\t\t\tonMouseDownCapture={onMouseDownCapture}\n\t\t\t\tdirection={scrollDirection}\n\t\t\t>\n\t\t\t\t{/*\n                    it is important that all selection state manipulations are done on mousedown/mouseup events.\n                    click events get fired later and the sequence of events might break (see issue #30099)\n                */}\n\t\t\t\t{/* biome-ignore lint/nursery/noStaticElementInteractions: see above */}\n\t\t\t\t<div\n\t\t\t\t\tclassName={cx(styles.itemsWrapper, scrollDirection === \"both\" && styles.itemsWrapperWithScroll)}\n\t\t\t\t\tonMouseMove={clearHighlight}\n\t\t\t\t\tonMouseDown={clearSelection}\n\t\t\t\t\tref={elementRef}\n\t\t\t\t\tdata-testid=\"sortable-tree\"\n\t\t\t\t>\n\t\t\t\t\t{elements}\n\t\t\t\t</div>\n\t\t\t</Scroll>\n\t\t</div>\n\t)\n}\n\nfunction mapItems({\n\titems,\n\taction,\n\tselectedIndexes,\n\tsingleSelection,\n}: Pick<Props, \"items\" | \"selectedIndexes\" | \"action\" | \"singleSelection\">) {\n\tlet maxDepth = 0\n\tlet idx = 0\n\tconst elements: JSX.Element[] = []\n\n\tfor (const item of items) {\n\t\tlet prevSelected = false\n\t\tlet nextSelected = false\n\t\tif (selectedIndexes.has(idx)) {\n\t\t\tif (selectedIndexes.has(idx - 1)) {\n\t\t\t\tprevSelected = true\n\t\t\t}\n\t\t\tif (selectedIndexes.has(idx + 1)) {\n\t\t\t\tnextSelected = true\n\t\t\t}\n\t\t}\n\n\t\telements.push(\n\t\t\t<Item\n\t\t\t\tkey={stringFromNodeID(item.id)}\n\t\t\t\titem={item}\n\t\t\t\taction={action}\n\t\t\t\tsingleSelection={singleSelection}\n\t\t\t\tprevSelected={prevSelected}\n\t\t\t\tnextSelected={nextSelected}\n\t\t\t/>,\n\t\t)\n\n\t\tmaxDepth = Math.max(maxDepth, item.indent)\n\t\tidx++\n\t}\n\n\treturn { maxDepth, elements }\n}\n\nfunction useTabContentWidth() {\n\treturn React.useSyncExternalStore<number>(observeTabContentWidth, () =>\n\t\tengine.stores.layoutState.getCurrentTabContentWidth(),\n\t)\n}\n\nconst observeTabContentWidth = (onStoreChange: () => void) => {\n\tconst observeToken = engine.scheduler.changes.observe(EngineChange.TabContentWidth, onStoreChange)\n\n\treturn () => engine.scheduler.changes.removeObserver(observeToken)\n}\n", "import type { DraggableEvent, DroppableEvent } from \"@framerjs/fresco/layout-transitions\"\nimport { Draggable, useDroppable } from \"@framerjs/fresco/layout-transitions\"\nimport { cx } from \"@linaria/core\"\nimport engine from \"document/engine.ts\"\nimport type { MaybeNodeID, NodeID } from \"document/models/CanvasTree/index.ts\"\nimport { isSlotNode } from \"document/models/CanvasTree/nodes/utils/nodeCheck.ts\"\nimport { acceptsChild, isValidSlotPropertyChild } from \"document/models/CanvasTree/traits/utils/acceptsChild.ts\"\nimport React from \"react\"\nimport { isShallowEqual } from \"utils/isShallowEqual.ts\"\nimport { scrollIntoView } from \"utils/scroll-into-view-if-needed/index.ts\"\nimport { isVirtualSlotPropertyId } from \"../layers/VirtualSlotProperyNode.ts\"\nimport { InsertionIndicator } from \"./InsertionIndicator.tsx\"\nimport * as styles from \"./Item.styles.ts\"\nimport type { InsertAction, InsertLocation, SortableTreeItem } from \"./types.ts\"\n\ninterface Props {\n\titem: SortableTreeItem\n\taction: InsertAction\n\tsingleSelection: boolean\n\tprevSelected?: boolean\n\tnextSelected?: boolean\n}\n\nconst itemKey: keyof Props = \"item\"\n\nconst dataType = \"layer-panel-item\"\n\nfunction isCopyAction(event: DroppableEvent): boolean {\n\treturn event.altKey\n}\n\nexport const Item = React.memo(\n\tfunction Item({ item, singleSelection, action, prevSelected = false, nextSelected = false }: Props) {\n\t\tconst [insertLocation, setInsertLocation] = React.useState<InsertLocation>(\"none\")\n\t\tconst [insertOffset, setInsertOffset] = React.useState(0)\n\n\t\tconst onDragOver = React.useCallback(\n\t\t\t(event: DroppableEvent) => {\n\t\t\t\tif (isCopyAction(event)) {\n\t\t\t\t\tevent.dataTransfer.dropEffect = \"copy\"\n\t\t\t\t}\n\n\t\t\t\tconst location = getInsertLocation(item, event)\n\t\t\t\tlet parentId: NodeID | null = null\n\t\t\t\tif (location === \"child\") {\n\t\t\t\t\tparentId = item.id\n\t\t\t\t} else if (location === \"siblingAbove\" || location === \"siblingBelow\") {\n\t\t\t\t\tconst parentNode = engine.tree.getParent(item.id)\n\t\t\t\t\tif (parentNode) parentId = parentNode.id\n\t\t\t\t}\n\t\t\t\tsetHighlight(parentId)\n\t\t\t\tif (location === insertLocation) return\n\t\t\t\tsetInsertLocation(location)\n\t\t\t\tsetInsertOffset(getInsertOffset(item, location))\n\t\t\t},\n\t\t\t[item, insertLocation],\n\t\t)\n\n\t\tconst onDragLeave = React.useCallback(() => {\n\t\t\tsetInsertLocation(\"none\")\n\t\t\tsetHighlight(null)\n\t\t}, [])\n\n\t\tconst onDrop = React.useCallback(\n\t\t\t(event: DroppableEvent) => {\n\t\t\t\tconst location = getInsertLocation(item, event)\n\t\t\t\taction(item.id, location, isCopyAction(event))\n\t\t\t},\n\t\t\t[item, action],\n\t\t)\n\n\t\tconst onDragStart = React.useCallback((event: DraggableEvent) => {\n\t\t\tevent.dataTransfer.setData(dataType, null)\n\t\t}, [])\n\n\t\tconst ref = useDroppable({\n\t\t\tenabled: !item.partOfSelection,\n\t\t\tdataTypes: [dataType],\n\t\t\tonDrop,\n\t\t\tonDragOver,\n\t\t\tonDragLeave,\n\t\t})\n\n\t\tReact.useEffect(() => {\n\t\t\tif (item.selected && singleSelection && ref.current) {\n\t\t\t\tscrollIntoView(ref.current, {\n\t\t\t\t\tscrollMode: \"if-needed\",\n\t\t\t\t\tblock: \"nearest\",\n\t\t\t\t\tinline: \"nearest\",\n\t\t\t\t\tbehavior: actions => {\n\t\t\t\t\t\tactions.forEach(({ el, top }) => {\n\t\t\t\t\t\t\t// only scroll vertically\n\t\t\t\t\t\t\tel.scrollTop = top\n\t\t\t\t\t\t})\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t}\n\t\t}, [item.selected, singleSelection, ref])\n\n\t\tlet rowStyle = cx(styles.base, getRowBackgroundStyle(item))\n\t\tlet insertIndicator: JSX.Element | null = null\n\n\t\tif (insertLocation !== \"none\" && !item.partOfSelection) {\n\t\t\tconst indentation = indentPosition(item.indent, false)\n\t\t\tinsertIndicator = (\n\t\t\t\t<InsertionIndicator indentPosition={indentation} location={insertLocation} belowOffset={insertOffset} />\n\t\t\t)\n\t\t\trowStyle = cx(rowStyle, styles.draggingOverlay)\n\t\t}\n\n\t\treturn (\n\t\t\t<div className={rowStyle} ref={ref}>\n\t\t\t\t<div className={styles.selectedOverlayWrapper}>\n\t\t\t\t\t<div className={cx(styles.selectedOverlay, getRowBorderStyles(item, prevSelected, nextSelected))} />\n\t\t\t\t</div>\n\t\t\t\t<Draggable\n\t\t\t\t\tenabled={item.sortable && item.selected}\n\t\t\t\t\tonDragStart={onDragStart}\n\t\t\t\t\thideDragSource={false}\n\t\t\t\t\tclassName={styles.draggable}\n\t\t\t\t>\n\t\t\t\t\t{({ isDragPreview }) => (isDragPreview ? getDragPreview(item) : item.element(item))}\n\t\t\t\t</Draggable>\n\t\t\t\t{insertIndicator}\n\t\t\t</div>\n\t\t)\n\t},\n\t(prevProps, nextProps) => {\n\t\tlet key: keyof typeof nextProps\n\t\tfor (key in nextProps) {\n\t\t\tif (key === itemKey) {\n\t\t\t\tif (!isShallowEqual(prevProps[itemKey], nextProps[itemKey])) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// biome-ignore lint/suspicious/noDoubleEquals: intentional\n\t\t\t\tif (prevProps[key] != nextProps[key]) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn true\n\t},\n)\n\n/**\n * We only want top border radius for the first one of the selected group, and bottom border radius for the last one.\n */\nfunction getRowBorderStyles(item: Props[\"item\"], prevSelected: boolean, nextSelected: boolean): string {\n\tif (item.selected) {\n\t\treturn cx(prevSelected ? \"\" : styles.borderTop, nextSelected || item.isSelectionTreeRoot ? \"\" : styles.borderBottom)\n\t}\n\n\tif (item.partOfSelection && item.isLastInSelectionTree && !nextSelected) {\n\t\treturn styles.borderBottom\n\t}\n\n\treturn \"\"\n}\n\n/**\n * When it's inside a selection tree, the background color depends on the tree root.\n * Otherwise, it depends on if the node is or is inside a user component.\n */\nfunction getRowBackgroundStyle(item: Props[\"item\"]): string {\n\tif (item.selected && (item.isUserComponent || item.isInUserComponent)) {\n\t\treturn styles.userComponent\n\t}\n\n\tif (item.selected) {\n\t\treturn styles.selected\n\t}\n\n\tif (item.partOfSelection) {\n\t\treturn item.isSelectionTreeRootUserComponent ? styles.userComponentDimmedSelection : styles.dimmedSelection\n\t}\n\n\treturn \"\"\n}\n\nconst setEngineHighlight = engine.scheduler.wrapHandler((highlight: MaybeNodeID) => {\n\tengine.stores.treeStore.setHighlight(highlight)\n})\n\nfunction setHighlight(highlight: MaybeNodeID) {\n\tif (engine.stores.treeStore.highlight === highlight) return\n\tsetEngineHighlight(highlight)\n}\n\nfunction getInsertOffset(currentItem: SortableTreeItem, insertLocation: InsertLocation) {\n\tif (insertLocation !== \"siblingBelow\") {\n\t\treturn 0\n\t}\n\tlet insertOffset = 0\n\tconst items = currentItem.getItems()\n\n\tlet foundItem = false\n\tfor (let i = 0; i < items.length; i++) {\n\t\tconst item = items[i]\n\n\t\tif (item?.id === currentItem.id) {\n\t\t\tfoundItem = true\n\t\t\tcontinue\n\t\t}\n\n\t\tif (!item || !foundItem) continue\n\t\tif (item.indent <= currentItem.indent) break\n\t\tinsertOffset += item.height\n\t}\n\n\treturn insertOffset\n}\n\nfunction dropConstraintsForItem(item: SortableTreeItem): { childrenAllowed: boolean; siblingsAllowed: boolean } {\n\tconst result = {\n\t\tchildrenAllowed: false,\n\t\tsiblingsAllowed: false,\n\t}\n\n\tconst activeScopeId = engine.stores.scopeStore.active.id\n\tconst selectedNodesWithoutDescendants = engine.tree.withoutDescendants(engine.stores.selectionStore.nodes)\n\n\tif (isVirtualSlotPropertyId(item.id)) {\n\t\tresult.childrenAllowed = selectedNodesWithoutDescendants.every(isValidSlotPropertyChild)\n\t\treturn result\n\t}\n\n\tconst node = engine.tree.getNode(item.id)\n\tif (!item.partOfSelection) {\n\t\tif (node) {\n\t\t\tresult.childrenAllowed = selectedNodesWithoutDescendants.every(selectedNode => {\n\t\t\t\treturn acceptsChild(engine.tree, node, selectedNode, activeScopeId, engine.componentLoader)\n\t\t\t})\n\t\t}\n\t}\n\n\tconst parentNode = engine.tree.getParent(item.id)\n\tif (parentNode) {\n\t\tconst isParentPartOfSelection =\n\t\t\tparentNode.isSelected() || [...parentNode.ancestors()].some(ancestor => ancestor.isSelected())\n\t\tif (!isParentPartOfSelection) {\n\t\t\tresult.siblingsAllowed = selectedNodesWithoutDescendants.every(selectedNode => {\n\t\t\t\treturn acceptsChild(engine.tree, parentNode, selectedNode, activeScopeId, engine.componentLoader)\n\t\t\t})\n\t\t}\n\t} else {\n\t\t// We don't want slot nodes to be dragged to the top level\n\t\tresult.siblingsAllowed = !selectedNodesWithoutDescendants.some(isSlotNode)\n\t}\n\n\treturn result\n}\n\nconst getInsertLocation = (item: SortableTreeItem, event: DroppableEvent): InsertLocation => {\n\tconst rect = event.clientRect\n\tconst distanceToTop = event.client.y - rect.top\n\n\tconst verticalThird = (rect.bottom - rect.top) / 3\n\n\tconst { childrenAllowed, siblingsAllowed } = dropConstraintsForItem(item)\n\n\tif (siblingsAllowed) {\n\t\tif (distanceToTop < verticalThird) {\n\t\t\treturn \"siblingAbove\"\n\t\t} else if (distanceToTop > 2 * verticalThird || !childrenAllowed) {\n\t\t\treturn \"siblingBelow\"\n\t\t}\n\t}\n\n\treturn childrenAllowed ? \"child\" : \"none\"\n}\n\nconst indentPosition = (indentationLevel: number, child: boolean) => {\n\tlet indention = indentationLevel\n\tif (child) {\n\t\tindention = indention + 1\n\t}\n\t// @FIXME: make indention a token and the base of other calculation\n\treturn indention * 21 + 10\n}\n\nfunction getDragPreview(dragItem: SortableTreeItem) {\n\tconst items = dragItem.getItems()\n\tconst draggedItemIndex = items.findIndex(item => item.id === dragItem.id)\n\tconst draggedItems = items.filter(draggedItem => draggedItem.partOfSelection)\n\treturn (\n\t\t<div>\n\t\t\t{draggedItems.map((draggedItem, idx) => {\n\t\t\t\tconst yOffset = (items.indexOf(draggedItem) - draggedItemIndex) * draggedItem.height\n\n\t\t\t\tconst draggedItemStyle: React.CSSProperties = {\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\ttransform: `translate(0, ${yOffset}px)`,\n\t\t\t\t\twidth: 200,\n\t\t\t\t}\n\n\t\t\t\treturn (\n\t\t\t\t\t<div key={idx} style={draggedItemStyle}>\n\t\t\t\t\t\t{draggedItem.element(draggedItem, true /* beingDragged */)}\n\t\t\t\t\t</div>\n\t\t\t\t)\n\t\t\t})}\n\t\t</div>\n\t)\n}\n", "import type { ComponentLoader } from \"@framerjs/framer-runtime\"\nimport { assert } from \"@framerjs/shared\"\nimport type { CanvasNode, CanvasTree, CodeComponentNode, NodeID } from \"document/models/CanvasTree/index.ts\"\nimport type { CodeComponentNodeChild } from \"document/models/CanvasTree/nodes/CodeComponentNode.ts\"\nimport type { SlotPropertyNode } from \"document/models/CanvasTree/nodes/SlotPropertyNode.ts\"\nimport { TemplateHelper, generateReplicaChildId } from \"document/models/CanvasTree/nodes/TemplateHelper.ts\"\nimport {\n\tisCodeComponentNode,\n\tisOverlayNode,\n\tisSlotPropertyNode,\n} from \"document/models/CanvasTree/nodes/utils/nodeCheck.ts\"\nimport { getSlotKeys, hasAnySlots } from \"document/models/CanvasTree/nodes/utils/slotUtils.ts\"\nimport { getChildren, withChildren } from \"document/models/CanvasTree/traits/WithChildren.ts\"\nimport { withFloatingPosition } from \"document/models/CanvasTree/traits/WithFloatingPosition.ts\"\nimport { hasItemsOrderOverride } from \"document/models/CanvasTree/traits/WithItemsOrder.ts\"\nimport { ControlType } from \"library/render/types/PropertyControls.ts\"\nimport { titleCase } from \"utils/titleCase.ts\"\nimport { isObject } from \"utils/typeChecks.ts\"\n\nconst separator = \".\"\nconst virtualSlotSuffix = \"__virtual_slot_property_node\"\n\ntype Separator = typeof separator\ntype VirtualSlotSuffix = typeof virtualSlotSuffix\ntype SlotKey = string\ntype OriginalParentId = NodeID\ntype ParentId = NodeID\ntype ReplicaId = NodeID\ntype VirtualSlotPropertyId =\n\t`${ReplicaId}${Separator}${OriginalParentId}${Separator}${SlotKey}${Separator}${VirtualSlotSuffix}`\n\nconst virtualSlotPropertyNodeType = \"virtualSlotPropertyNode\"\ntype VirtualSlotPropertyNodeType = typeof virtualSlotPropertyNodeType\n\nexport interface VirtualSlotPropertyNode {\n\ttype: VirtualSlotPropertyNodeType\n\tid: VirtualSlotPropertyId\n\tname: string\n\tparentId: ParentId\n\tslotKey: SlotKey\n}\n\nexport function isVirtualSlotProperty(\n\tvalue: CanvasNode | VirtualSlotPropertyNode | undefined | null,\n): value is VirtualSlotPropertyNode {\n\treturn isObject(value) && value.type === virtualSlotPropertyNodeType\n}\n\nexport function isVirtualSlotPropertyId(id: string): id is VirtualSlotPropertyId {\n\treturn id.endsWith(virtualSlotSuffix)\n}\n\nexport function getVirtualSlotPropertyParentAndKey(id: VirtualSlotPropertyId): {\n\tparentId: NodeID\n\toriginalParentId: NodeID\n\tslotKey: SlotKey\n\treplicaId: NodeID | null\n} {\n\tconst segments = id.split(separator)\n\tassert(segments.length === 4, \"Virtual slot id must have 4 segments\")\n\tconst [replicaId, originalParentId, slotKey] = segments as [ReplicaId, OriginalParentId, SlotKey]\n\n\tconst parentId = replicaId.length > 0 ? generateReplicaChildId(replicaId, originalParentId) : originalParentId\n\n\treturn {\n\t\tparentId,\n\t\toriginalParentId,\n\t\tslotKey,\n\t\treplicaId: replicaId.length > 0 ? replicaId : null,\n\t}\n}\n\nexport function getVirtualSlotPropertyId(\n\toriginalParentId: NodeID,\n\tslotKey: SlotKey,\n\treplicaId: NodeID | undefined,\n): VirtualSlotPropertyId {\n\tconst originalId: VirtualSlotPropertyId = `${separator}${originalParentId}${separator}${slotKey}${separator}${virtualSlotSuffix}`\n\treturn replicaId ? generateReplicaChildId(replicaId, originalId) : originalId\n}\n\nlet currentActiveBundleHash = \"\"\nconst virtualSlotPropertyCache = new Map<VirtualSlotPropertyId, VirtualSlotPropertyNode>()\n\nfunction getVirtualSlotPropertyNode(\n\ttree: CanvasTree,\n\tcomponentLoader: ComponentLoader,\n\tparent: CodeComponentNode,\n\tslotKey: SlotKey,\n\tactiveBundleHash: string,\n): VirtualSlotPropertyNode {\n\tconst originalParentId = parent.getPrimaryId()\n\tconst optionalReplica = TemplateHelper.getReplicaForTemplateNode(tree, parent)\n\tconst optionalReplicaId = optionalReplica?.id\n\n\tconst virtualSlotPropertyId = getVirtualSlotPropertyId(originalParentId, slotKey, optionalReplicaId)\n\n\tif (currentActiveBundleHash === activeBundleHash) {\n\t\tconst cached = virtualSlotPropertyCache.get(virtualSlotPropertyId)\n\t\tif (cached) return cached\n\t} else {\n\t\tcurrentActiveBundleHash = activeBundleHash\n\t\tvirtualSlotPropertyCache.clear()\n\t}\n\n\tconst componentDefinition = componentLoader.reactComponentForIdentifier(parent.codeComponentIdentifier)\n\tlet name = titleCase(slotKey)\n\n\tif (componentDefinition) {\n\t\tconst slotProperty = componentDefinition.properties[slotKey]\n\t\tif (slotProperty?.type === ControlType.Slot) {\n\t\t\tname = slotProperty.title || name\n\t\t}\n\t}\n\n\tconst virtualSlotPropertyNode: VirtualSlotPropertyNode = {\n\t\tid: virtualSlotPropertyId,\n\t\ttype: virtualSlotPropertyNodeType,\n\t\tname,\n\t\tparentId: parent.id,\n\t\tslotKey,\n\t}\n\tvirtualSlotPropertyCache.set(virtualSlotPropertyId, virtualSlotPropertyNode)\n\treturn virtualSlotPropertyNode\n}\n\nfunction getVirtualSlotParent(tree: CanvasTree, parentId: ParentId): CodeComponentNode {\n\tconst parent = tree.get(parentId)\n\tassert(parent, \"Parent of virtual slot should exist\")\n\tassert(isCodeComponentNode(parent), \"Parent of virtual slot should be a code component\")\n\treturn parent\n}\n\nexport function getNodeOrVirtualSlotPropertyNode(\n\ttree: CanvasTree,\n\tcomponentLoader: ComponentLoader,\n\tid: NodeID | VirtualSlotPropertyId,\n\tactiveBundleHash: string,\n): CanvasNode | VirtualSlotPropertyNode | null {\n\tif (isVirtualSlotPropertyId(id)) {\n\t\tconst { parentId, slotKey } = getVirtualSlotPropertyParentAndKey(id)\n\t\tconst parent = getVirtualSlotParent(tree, parentId)\n\t\treturn getVirtualSlotPropertyNode(tree, componentLoader, parent, slotKey, activeBundleHash)\n\t}\n\treturn tree.get(id)\n}\n\nexport function hasLayerPanelItemAnyChildren(\n\tcomponentLoader: ComponentLoader,\n\tnode: CanvasNode | VirtualSlotPropertyNode | undefined | null,\n): boolean {\n\tif (!node) return false\n\n\tif (isVirtualSlotProperty(node)) {\n\t\treturn false\n\t}\n\n\tif (isCodeComponentNode(node)) {\n\t\tif (node.children.some(isOverlayNode)) return true\n\t\tif (!node.slotsAreChildNodes) return false\n\t\treturn hasAnySlots(node, componentLoader)\n\t}\n\n\treturn withChildren(node) && node.children.length > 0\n}\n\nexport function getLayerPanelItemChildren(\n\ttree: CanvasTree,\n\tcomponentLoader: ComponentLoader,\n\tnode: CanvasNode | VirtualSlotPropertyNode,\n\tactiveBundleHash: string,\n): readonly (CanvasNode | VirtualSlotPropertyNode)[] {\n\tif (isVirtualSlotProperty(node)) {\n\t\treturn []\n\t}\n\n\tif (!isCodeComponentNode(node)) {\n\t\tif (hasItemsOrderOverride(node)) {\n\t\t\treturn node.getChildrenInVisualOrder()\n\t\t}\n\t\treturn getChildren(node).toArray()\n\t}\n\n\tconst component = componentLoader.reactComponentForIdentifier(node.codeComponentIdentifier)\n\tif (!component) return []\n\n\tconst codeComponentChildren: (CodeComponentNodeChild | VirtualSlotPropertyNode)[] = node.children.filter(\n\t\tchild => isOverlayNode(child) || withFloatingPosition(child),\n\t)\n\n\tif (!node.slotsAreChildNodes) {\n\t\treturn codeComponentChildren\n\t}\n\n\tconst slotKeys = getSlotKeys(node, componentLoader)\n\tfor (const slotKey of slotKeys) {\n\t\tconst slotPropertyNode = node.children.find(\n\t\t\t(child): child is SlotPropertyNode => isSlotPropertyNode(child) && child.slotPropertyKey === slotKey,\n\t\t)\n\t\tif (slotPropertyNode) {\n\t\t\tcodeComponentChildren.push(slotPropertyNode)\n\t\t} else {\n\t\t\tconst virtualSlotPropertyNode = getVirtualSlotPropertyNode(tree, componentLoader, node, slotKey, activeBundleHash)\n\t\t\tcodeComponentChildren.push(virtualSlotPropertyNode)\n\t\t}\n\t}\n\treturn codeComponentChildren\n}\n", "import { colors, dimensions } from \"@framerjs/fresco/tokens\"\nimport type React from \"react\"\nimport type { InsertLocation } from \"./types.ts\"\n\ninterface Props {\n\tindentPosition: number\n\tlocation: InsertLocation\n\tbelowOffset: number\n}\n\nconst insertionCircle: React.CSSProperties = {\n\tposition: \"absolute\",\n\tleft: -7,\n\ttop: -3,\n\twidth: 7,\n\theight: 7,\n\tborderRadius: 5,\n\tborder: `1px solid ${colors.tint}`,\n}\n\nconst siblingStyle: React.CSSProperties = {\n\tposition: \"absolute\",\n\tright: 0,\n\theight: 1,\n\tbackgroundColor: colors.tint,\n}\n\nconst childStyle: React.CSSProperties = {\n\tposition: \"absolute\",\n\tleft: 0,\n\tright: 0,\n\ttop: 0,\n\tbottom: 0,\n\tborder: `1px solid ${colors.tint}`,\n\tborderRadius: dimensions.css.contentItemRadius,\n}\n\nexport function InsertionIndicator({ indentPosition, location, belowOffset }: Props) {\n\tswitch (location) {\n\t\tcase \"siblingAbove\":\n\t\tcase \"siblingBelow\": {\n\t\t\tconst insertIndicatorStyle =\n\t\t\t\tlocation === \"siblingAbove\" ? { ...siblingStyle, top: 0 } : { ...siblingStyle, bottom: -1 - belowOffset }\n\t\t\tinsertIndicatorStyle.left = indentPosition\n\t\t\treturn (\n\t\t\t\t<div style={insertIndicatorStyle}>\n\t\t\t\t\t<div style={insertionCircle} />\n\t\t\t\t</div>\n\t\t\t)\n\t\t}\n\t\tcase \"child\":\n\t\t\treturn <div style={childStyle} />\n\t\tdefault:\n\t\t\treturn null\n\t}\n}\n", "import \"Item.styles_37u9zx.wyw.css\"; export const base = \"base_b16vvqev\";\nexport const borderTop = \"borderTop_b19s83hj\";\nexport const borderBottom = \"borderBottom_b4ig66f\";\nexport const selected = \"selected_svu6pp5\";\nexport const userComponent = \"userComponent_uauwled\";\nexport const dimmedSelection = \"dimmedSelection_d1x5fs7i\";\nexport const userComponentDimmedSelection = \"userComponentDimmedSelection_u1k2vtg8\";\nexport const selectedOverlayWrapper = \"selectedOverlayWrapper_s1hcr5eu\";\nexport const selectedOverlay = \"selectedOverlay_s1lzegxh\";\nexport const draggingOverlay = \"draggingOverlay_d1dsadjy\";\nexport const draggable = \"draggable_d9sfs6d\";", "import \"index.styles_h25i.wyw.css\"; export const treeWrapper = \"treeWrapper_tl3c96k\";\nexport const tabbedTreeStyle = \"tabbedTreeStyle_t1xglp4f\";\nexport const itemsWrapper = \"itemsWrapper_i1469jih\";\nexport const itemsWrapperWithScroll = \"itemsWrapperWithScroll_i9b9yq2\";", "import {\n\tIconLayerCodeOverride,\n\tIconLayerComment,\n\tIconLayerCustomCursor,\n\tIconLayerEffect,\n\tIconLayerHome,\n\tIconLayerInteraction,\n\tIconLayerLink,\n\tIconLayerLock,\n\tIconLayerPreview,\n\tIconLayerScrollTarget,\n\tTextInput,\n} from \"@framerjs/fresco\"\nimport { Events } from \"@framerjs/fresco/layout-transitions\"\nimport { isCommandKeyPressed } from \"@framerjs/shared\"\nimport { type LinariaClassName, cx } from \"@linaria/core\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport { Experiment, experiments } from \"app/experiments.ts\"\nimport { getOriginalVariantNodeIfExists } from \"code-generation/utils/variantEditingHelpers.ts\"\nimport { ContextAction } from \"document/components/utils/contextActions.ts\"\nimport { showContextMenu } from \"document/components/utils/contextMenu.ts\"\nimport engine from \"document/engine.ts\"\nimport type { CanvasNode, NodeID } from \"document/models/CanvasTree/index.ts\"\nimport type { GestureType } from \"document/models/CanvasTree/traits/WithVariant.ts\"\nimport { titleForGestureType } from \"document/models/CanvasTree/traits/WithVariant.ts\"\nimport type { NodeError } from \"document/models/CanvasTree/utils/getNodeError.ts\"\nimport { Point } from \"library/render/types/Point.ts\"\nimport React from \"react\"\nimport { isUndefined } from \"utils/typeChecks.ts\"\nimport { isReplicaChild } from \"../../../models/CanvasTree/traits/WithTemplate.ts\"\nimport { CollapseIndicator } from \"../shared/CollapseIndicator.tsx\"\nimport { EditableTextInput } from \"../shared/EditableTextInput/EditableTextInput.tsx\"\nimport { subLabelText } from \"../shared/SubLabel.styles.ts\"\nimport {\n\tIconAgentLayerIndicatorCodeOverride,\n\tIconAgentLayerIndicatorComment,\n\tIconAgentLayerIndicatorCustomCursor,\n\tIconAgentLayerIndicatorEffect,\n\tIconAgentLayerIndicatorError,\n\tIconAgentLayerIndicatorHome,\n\tIconAgentLayerIndicatorInteraction,\n\tIconAgentLayerIndicatorLink,\n\tIconAgentLayerIndicatorLock,\n\tIconAgentLayerIndicatorPreview,\n\tIconAgentLayerIndicatorScrollTarget,\n} from \"./AgentLayerIndicatorIcons.tsx\"\nimport { LayerErrorIndicator } from \"./LayerErrorIndicator.tsx\"\nimport * as styles from \"./LayerPanelItem.styles.ts\"\n\ninterface Props {\n\tnodeid: NodeID\n\tnodeName: string | null\n\tplaceholder: string\n\ticon: React.ComponentType | undefined\n\tisMasterNode: boolean\n\tisInstanceNode: boolean\n\tisBreakpointVariant: boolean\n\tgesture?: GestureType\n\tindent: number\n\tselected: boolean\n\thidden: boolean\n\tlocked: boolean\n\tlockedByParent: boolean\n\thasThread: boolean\n\thasInteraction: boolean\n\texportable: boolean\n\tbeingDragged: boolean\n\tselect?: (nodeId: NodeID, event: React.MouseEvent<HTMLElement>) => void\n\tdeselectOthers?: (nodeId: NodeID) => void\n\tcollapsed: boolean\n\tcollapsedOverride: boolean\n\tisUserComponent: boolean\n\tisViewOnly: boolean\n\thasChildren: boolean\n\tisInUserComponent?: boolean\n\tisSelectionTreeRootUserComponent?: boolean\n\tisInSelectionTree?: boolean\n\tisScrollTarget?: boolean\n\tisHomeNode?: boolean\n\tisAgentContextToolActive?: boolean\n\thasEffect?: boolean\n\thasCustomCursor?: boolean\n\thasCodeOverride?: boolean\n\tfeedbackModeActive: boolean\n\tisPreviewNode: boolean\n\tisHiddenOverlay: boolean\n\tisDisabledOverlay: boolean\n\thasLink: boolean\n\tnodeError?: NodeError\n\thasHighlightedVariantLabel?: boolean\n\tbreakpointMin?: number\n\tbreakpointMax?: number\n}\n\ninterface State {\n\tisEditing: boolean\n}\n\nexport class LayerPanelItem extends React.PureComponent<Props, State> {\n\tinputRef = React.createRef<HTMLInputElement>()\n\n\t// Lifecycle\n\n\toverride state: State = {\n\t\tisEditing: false,\n\t}\n\n\tstatic getDerivedStateFromProps(props: Props, state: State) {\n\t\tif (state.isEditing && !props.selected) {\n\t\t\treturn { isEditing: false }\n\t\t}\n\n\t\treturn null\n\t}\n\n\t// Events\n\n\tonChange = engine.scheduler.wrapHandler((value: string, final: boolean) => {\n\t\tconst name = value.length > 0 ? value : null\n\n\t\tif (!final) {\n\t\t\treturn\n\t\t} // else\n\n\t\tconst selectedNode = engine.tree.get(this.props.nodeid)\n\t\tif (!selectedNode) return\n\t\tlet renamableNode: CanvasNode | null = selectedNode\n\t\tif (isReplicaChild(selectedNode)) {\n\t\t\trenamableNode = getOriginalVariantNodeIfExists(engine.tree, selectedNode)\n\t\t}\n\t\tif (!renamableNode) return\n\n\t\trenamableNode.set({ name })\n\t\tthis.setState({ isEditing: false })\n\t})\n\n\tonBlur = () => {\n\t\tthis.setState({ isEditing: false })\n\t}\n\n\tonMouseOver = engine.scheduler.wrapHandler(() => {\n\t\tconst { nodeid } = this.props\n\t\tengine.stores.treeStore.setHighlight(nodeid)\n\t})\n\n\tselectedOnMouseDown = false\n\n\t// We update the selection state synchronously because the layer panel draggable hook needs to receive the\n\t// new selection state before the drag session starts, else dragging will be disabled for this row.\n\tonMouseDown = engine.scheduler.wrapHandler((event: React.MouseEvent<HTMLElement>) => {\n\t\tconst { nodeid, select, selected } = this.props\n\t\t// Right click handles its own selection, so we don't fire the select callback.\n\t\tif (!Events.isLeftMouseClick(event)) return\n\n\t\tselect?.(nodeid, event)\n\t\tthis.selectedOnMouseDown = selected\n\t})\n\n\tonMouseUp = engine.scheduler.wrapHandler((event: React.MouseEvent<HTMLElement>) => {\n\t\tif (event.shiftKey || isCommandKeyPressed(event)) return\n\t\tif (!Events.isLeftMouseClick(event)) return\n\t\tif (!this.selectedOnMouseDown) return\n\t\tconst { deselectOthers, nodeid } = this.props\n\t\tdeselectOthers?.(nodeid)\n\t})\n\n\tonDoubleInputClick = engine.scheduler.wrapHandler((event: React.MouseEvent<HTMLElement>) => {\n\t\tthis.beginEditing()\n\t\tevent.preventDefault()\n\t\tevent.stopPropagation()\n\t})\n\n\tonDoubleClick = engine.scheduler.wrapHandler((event: React.MouseEvent<HTMLElement>) => {\n\t\tif (this.props.isDisabledOverlay) return\n\t\tconst node = engine.tree.getNode(this.props.nodeid)\n\t\tif (node) {\n\t\t\tevent.preventDefault()\n\t\t\tevent.stopPropagation()\n\t\t}\n\t})\n\n\tonContextMenu = engine.scheduler.wrapHandler((event: React.MouseEvent<HTMLElement>) => {\n\t\tif (this.props.isDisabledOverlay) return\n\n\t\tlet selection = engine.stores.selectionStore.ids\n\t\tconst node = engine.tree.getNode(this.props.nodeid)\n\n\t\tif (node) {\n\t\t\tconst { isEditing } = this.state\n\n\t\t\tif (isEditing) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (!node.isSelected()) {\n\t\t\t\tengine.stores.selectionStore.set(node, { sticky: true })\n\t\t\t\tselection = [node.id]\n\t\t\t}\n\n\t\t\tshowContextMenu({\n\t\t\t\tcoordinate: Point(event.clientX, event.clientY),\n\t\t\t\tengine,\n\t\t\t\tselection,\n\t\t\t})\n\n\t\t\tevent.preventDefault()\n\t\t}\n\t})\n\n\tonKeyDown = (event: React.KeyboardEvent) => {\n\t\tif (event.key === \"Enter\") {\n\t\t\tconst inputElement = this.inputRef.current\n\t\t\tif (inputElement) inputElement.blur()\n\t\t}\n\t}\n\n\tunlockAction = engine.scheduler.wrapHandler((event: React.MouseEvent<HTMLElement>) => {\n\t\tif (this.props.isViewOnly) return\n\t\tconst node = engine.tree.getNode(this.props.nodeid)\n\t\tif (!node) return\n\t\tContextAction.toggleLock(engine.tree, [node])\n\t\tevent.preventDefault()\n\t})\n\n\tprivate beginEditing() {\n\t\tif (this.state.isEditing || this.props.isViewOnly) return\n\t\tconst node = engine.tree.getNode(this.props.nodeid)\n\t\tif (!node) return\n\t\tif (!ContextAction.canRenameNode(engine.tree, node)) return\n\n\t\tthis.setState({\n\t\t\tisEditing: true,\n\t\t})\n\t}\n\n\t// Rendering\n\n\toverride render(): JSX.Element | null {\n\t\tif (process.env.NODE_ENV !== \"production\" && window.perf) window.perf.layerPanelItem()\n\n\t\tconst {\n\t\t\tbeingDragged,\n\t\t\thidden,\n\t\t\tindent,\n\t\t\tisUserComponent,\n\t\t\tisInUserComponent,\n\t\t\tgesture,\n\t\t\tnodeid,\n\t\t\tnodeName,\n\t\t\tisHiddenOverlay,\n\t\t\tisDisabledOverlay,\n\t\t\thasChildren,\n\t\t\tisAgentContextToolActive,\n\t\t} = this.props\n\t\tlet { placeholder } = this.props\n\n\t\tconst { isEditing } = this.state\n\n\t\tconst selected = this.props.selected && !beingDragged\n\n\t\tlet fieldValue = nodeName || \"\"\n\n\t\tif (!isEditing) {\n\t\t\tif (fieldValue === \"\") {\n\t\t\t\tfieldValue = placeholder\n\t\t\t}\n\t\t\tplaceholder = \"\"\n\n\t\t\tif (gesture) fieldValue += ` \u00B7 ${titleForGestureType(gesture)}`\n\t\t}\n\n\t\tconst shouldSkip = isHiddenOverlay\n\t\tconst showCollapseIndicator = hasChildren && !shouldSkip\n\n\t\tconst indentationWidth = 11 + fromIconToText // frame icon width (11px) +  distance from icon to text (10px)\n\t\tconst baseIndentation = (indent - 1) * indentationWidth\n\t\tconst itemIndentation = baseIndentation\n\n\t\treturn (\n\t\t\t// biome-ignore lint/a11y/useKeyWithMouseEvents: Can't use buttons here\n\t\t\t// biome-ignore lint/nursery/noStaticElementInteractions: Can't use buttons here\n\t\t\t<div\n\t\t\t\tclassName={cx(\n\t\t\t\t\tstyles.row,\n\t\t\t\t\t(hidden || isDisabledOverlay) && styles.rowHidden,\n\t\t\t\t\tselected && styles.rowSelected,\n\t\t\t\t\thidden && selected && styles.rowHiddenSelected,\n\t\t\t\t\tisEditing && styles.rowEditing,\n\t\t\t\t\t(isUserComponent || isInUserComponent) && styles.rowComponentNode,\n\t\t\t\t\tisAgentContextToolActive && styles.agentContextToolHighlight,\n\t\t\t\t)}\n\t\t\t\tstyle={{ \"--layer-item-indent\": `${itemIndentation}px` }}\n\t\t\t\t// eslint-disable-next-line jsx-a11y/mouse-events-have-key-events\n\t\t\t\tonMouseOver={this.onMouseOver}\n\t\t\t\tonMouseDown={this.onMouseDown}\n\t\t\t\tonMouseUp={this.onMouseUp}\n\t\t\t\tonDoubleClick={this.onDoubleClick}\n\t\t\t\tonContextMenu={this.onContextMenu}\n\t\t\t\tdata-testid={nodeid}\n\t\t\t>\n\t\t\t\t<div className={styles.indent} />\n\t\t\t\t<div className={cx(\"content\", styles.itemContent)}>\n\t\t\t\t\t{/*\n                        We render the icon and labels invisibly inline to force the layout to be correct.\n                        We also render them visibly with position sticky to allow them to overlap the content and\n                        stick to the right when scrolling.\n                    */}\n\t\t\t\t\t<LayerIcon\n\t\t\t\t\t\t{...this.props}\n\t\t\t\t\t\tcolor={this.getIconColor()}\n\t\t\t\t\t\tshowCollapseIndicator={showCollapseIndicator}\n\t\t\t\t\t\tonMouseDown={this.onMouseDownCollapseExpand}\n\t\t\t\t\t\tisLayoutOnly\n\t\t\t\t\t/>\n\t\t\t\t\t{/* biome-ignore lint/nursery/noStaticElementInteractions: Can't use buttons here */}\n\t\t\t\t\t<div data-testid=\"layer-name-input\" className={styles.inputWrapper} onDoubleClick={this.onDoubleInputClick}>\n\t\t\t\t\t\t<Experiment isOn=\"agent\">\n\t\t\t\t\t\t\t<EditableTextInput\n\t\t\t\t\t\t\t\tref={this.inputRef}\n\t\t\t\t\t\t\t\tid={nodeid}\n\t\t\t\t\t\t\t\tplaceholder={fieldValue}\n\t\t\t\t\t\t\t\teditingPlaceholder={placeholder}\n\t\t\t\t\t\t\t\tallowEdit={true}\n\t\t\t\t\t\t\t\tallowEmpty={true}\n\t\t\t\t\t\t\t\tisEditing={isEditing}\n\t\t\t\t\t\t\t\tautoFocus={isEditing}\n\t\t\t\t\t\t\t\tonValueChange={this.onChange}\n\t\t\t\t\t\t\t\tsetIsEditing={value => (value ? this.beginEditing() : this.onBlur())}\n\t\t\t\t\t\t\t\tonKeyDown={this.onKeyDown}\n\t\t\t\t\t\t\t\tsmall\n\t\t\t\t\t\t\t\tdisabledIsReadOnly={false}\n\t\t\t\t\t\t\t\tclassName={cx(\n\t\t\t\t\t\t\t\t\t`layerPanelPlaceholder${selected ? \" active\" : \"\"}`,\n\t\t\t\t\t\t\t\t\tthis.getTextColor(),\n\t\t\t\t\t\t\t\t\tisAgentContextToolActive && styles.agentTextHighlighting,\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\tselectionStyle=\"unsaturated\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Experiment>\n\t\t\t\t\t\t<Experiment isNotOn=\"agent\">\n\t\t\t\t\t\t\t<TextInput\n\t\t\t\t\t\t\t\tref={this.inputRef}\n\t\t\t\t\t\t\t\tvalue={fieldValue}\n\t\t\t\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\t\t\t\tonChange={this.onChange}\n\t\t\t\t\t\t\t\tonBlur={this.onBlur}\n\t\t\t\t\t\t\t\tenabled={isEditing}\n\t\t\t\t\t\t\t\tautoFocus={isEditing}\n\t\t\t\t\t\t\t\tonKeyDown={this.onKeyDown}\n\t\t\t\t\t\t\t\tdisabledIsReadOnly={false}\n\t\t\t\t\t\t\t\tclassName={cx(\n\t\t\t\t\t\t\t\t\t`layerPanelPlaceholder${selected ? \" active\" : \"\"}`,\n\t\t\t\t\t\t\t\t\tisUserComponent && styles.inputUserComponent,\n\t\t\t\t\t\t\t\t\tstyles.input,\n\t\t\t\t\t\t\t\t\tisEditing && styles.editingInput,\n\t\t\t\t\t\t\t\t\tthis.getTextColor(),\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\tsmall\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Experiment>\n\t\t\t\t\t</div>\n\t\t\t\t\t<LayerLabels {...this.props} isEditing={isEditing} unlockAction={this.unlockAction} isLayoutOnly />\n\t\t\t\t</div>\n\t\t\t\t<div className={styles.leftStickyWrapper}>\n\t\t\t\t\t<LayerIcon\n\t\t\t\t\t\t{...this.props}\n\t\t\t\t\t\tcolor={cx(this.getIconColor(), isAgentContextToolActive && styles.agentTextHighlighting)}\n\t\t\t\t\t\tshowCollapseIndicator={showCollapseIndicator}\n\t\t\t\t\t\tonMouseDown={this.onMouseDownCollapseExpand}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t{!isEditing && (\n\t\t\t\t\t<div className={styles.rightStickyWrapper}>\n\t\t\t\t\t\t<div className={styles.indent} />\n\n\t\t\t\t\t\t<div className={styles.stickyAlignment}>\n\t\t\t\t\t\t\t<LayerLabels {...this.props} isEditing={isEditing} unlockAction={this.unlockAction} />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t)\n\t}\n\n\tonMouseDownCollapseExpand = engine.scheduler.wrapHandler((event: React.MouseEvent) => {\n\t\tconst { collapsed, nodeid, collapsedOverride } = this.props\n\t\tif (!nodeid) return\n\n\t\t// When \u2325 (ALT) key is pressed, we collapse/expand all children of the node\n\t\tif (event.altKey) {\n\t\t\tconst node = engine.tree.getNode(nodeid)\n\t\t\tif (!node) return\n\t\t\tfor (const child of node.walk()) {\n\t\t\t\tengine.stores.treeStore.setCollapseMode(child.id, !collapsed, true)\n\t\t\t}\n\t\t} else {\n\t\t\tengine.stores.treeStore.setCollapseMode(nodeid, !collapsed, !collapsedOverride)\n\t\t}\n\t\tevent.stopPropagation()\n\t\t// Stops document.activeElement becoming this button. If document.activeElement is not body then certain canvas\n\t\t// actions will be prevented, including the canvas action that causes the element to expand on enter.\n\t\t// https://github.com/framer/company/issues/31954\n\t\tevent.preventDefault()\n\t})\n\n\tgetTextColor = () => {\n\t\tconst { hidden, beingDragged, isDisabledOverlay } = this.props\n\t\tconst { isEditing } = this.state\n\t\tconst dimmed = (hidden || isDisabledOverlay) && !isEditing && !beingDragged\n\t\tconst selected = this.props.selected && !beingDragged\n\n\t\tif (isEditing) {\n\t\t\tif (experiments.isOn(\"agent\")) return styles.agentTextEditing\n\t\t\treturn styles.textEditing\n\t\t}\n\n\t\tif (selected) {\n\t\t\treturn dimmed ? styles.textInactiveSelected : styles.textSelected\n\t\t}\n\n\t\treturn dimmed ? styles.textInactive : styles.textDefault\n\t}\n\t/**\n\t * When the icon is inside an selected expanded tree, the color depends on the tree root.\n\t * Otherwise, depends on if it's inside a user component.\n\t */\n\tgetIconColor = () => {\n\t\tconst {\n\t\t\tselected,\n\t\t\tisUserComponent,\n\t\t\tisInUserComponent = false,\n\t\t\tisInSelectionTree = false,\n\t\t\tisSelectionTreeRootUserComponent = false,\n\t\t\thasChildren,\n\t\t\thidden,\n\t\t\tisDisabledOverlay,\n\t\t\tbeingDragged,\n\t\t} = this.props\n\t\tconst { isEditing } = this.state\n\t\tconst isHidden = (hidden || isDisabledOverlay) && !isEditing && !beingDragged\n\n\t\tif (isHidden) {\n\t\t\tif (selected) return styles.iconHiddenSelected\n\t\t\treturn styles.iconHidden\n\t\t}\n\n\t\tif (selected && !beingDragged) return styles.iconSelected\n\n\t\tif (isInSelectionTree && !beingDragged) {\n\t\t\tif (hasChildren) return isSelectionTreeRootUserComponent ? styles.iconComponent : styles.iconTint\n\t\t\treturn isSelectionTreeRootUserComponent ? styles.iconComponentDimmed : styles.iconDimmed\n\t\t}\n\n\t\tif (isUserComponent) return styles.iconComponent\n\n\t\tif (hasChildren) {\n\t\t\tif (isUserComponent || isInUserComponent) return styles.iconComponent\n\t\t\treturn styles.iconTint\n\t\t}\n\n\t\treturn styles.iconDefault\n\t}\n}\n\ninterface LayerIconProps {\n\tshowCollapseIndicator: boolean\n\tcollapsed: boolean\n\tcolor: LinariaClassName\n\ticon: React.ComponentType | undefined\n\tonMouseDown: (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => void\n\tisLayoutOnly?: boolean\n}\nfunction LayerIcon({\n\tshowCollapseIndicator,\n\tcollapsed,\n\tcolor,\n\ticon: Icon,\n\tonMouseDown,\n\tisLayoutOnly = false,\n}: LayerIconProps) {\n\tconst isVisible = !isLayoutOnly\n\n\treturn (\n\t\t<div\n\t\t\tclassName={styles.collapseWrapper}\n\t\t\taria-hidden={!isVisible}\n\t\t\t// all can be removed after experiment, they are handled by css\n\t\t\tstyle={{ visibility: isVisible ? \"visible\" : \"hidden\", pointerEvents: isVisible ? \"auto\" : \"none\" }}\n\t\t>\n\t\t\t<CollapseIndicator visible={showCollapseIndicator} onMouseDown={onMouseDown} collapsed={collapsed} />\n\t\t\t<div className={cx(styles.frameIcon, color)}>{Icon && <Icon />}</div>\n\t\t</div>\n\t)\n}\n\ninterface LayerLabelsProps extends Pick<\n\tProps,\n\t| \"isMasterNode\"\n\t| \"isBreakpointVariant\"\n\t| \"breakpointMin\"\n\t| \"breakpointMax\"\n\t| \"hasHighlightedVariantLabel\"\n\t| \"locked\"\n\t| \"lockedByParent\"\n\t| \"hasThread\"\n\t| \"feedbackModeActive\"\n\t| \"isPreviewNode\"\n\t| \"hasCustomCursor\"\n\t| \"hasCodeOverride\"\n\t| \"nodeError\"\n\t| \"selected\"\n\t| \"beingDragged\"\n\t| \"isHomeNode\"\n\t| \"isInstanceNode\"\n\t| \"hasInteraction\"\n\t| \"isScrollTarget\"\n\t| \"hasLink\"\n\t| \"hasEffect\"\n> {\n\tisEditing: boolean\n\tunlockAction: (event: React.MouseEvent<HTMLElement>) => void\n\tisLayoutOnly?: boolean\n}\nfunction LayerLabels({\n\tisMasterNode,\n\tisInstanceNode,\n\tisBreakpointVariant,\n\tbreakpointMin,\n\tbreakpointMax,\n\thasHighlightedVariantLabel,\n\tlocked,\n\tlockedByParent,\n\thasThread,\n\tfeedbackModeActive,\n\tisPreviewNode,\n\thasCustomCursor,\n\thasCodeOverride,\n\tnodeError,\n\tselected,\n\tbeingDragged,\n\tisHomeNode,\n\thasInteraction,\n\tisScrollTarget,\n\tunlockAction,\n\thasLink,\n\thasEffect,\n\tisEditing,\n\tisLayoutOnly = false,\n}: LayerLabelsProps) {\n\tconst isAgentExperimentOn = experiments.isOn(\"agent\")\n\tconst showHome = isHomeNode\n\tconst showComment = hasThread && feedbackModeActive\n\tconst showLock = locked || lockedByParent\n\tconst showComponentLabel = isMasterNode || isInstanceNode\n\tconst showInteraction = hasInteraction\n\tconst showPreview = isPreviewNode\n\tconst showError = nodeError !== undefined\n\tconst showScrollTarget = isScrollTarget\n\tconst showCustomCursor = hasCustomCursor\n\tconst showCodeOverride = hasCodeOverride\n\tconst componentLabel = getComponentLabel(isMasterNode, isBreakpointVariant, breakpointMin, breakpointMax)\n\tconst ScrollTargetIcon = isAgentExperimentOn ? IconAgentLayerIndicatorScrollTarget : IconLayerScrollTarget\n\tconst HomeIcon = isAgentExperimentOn ? IconAgentLayerIndicatorHome : IconLayerHome\n\tconst PreviewIcon = isAgentExperimentOn ? IconAgentLayerIndicatorPreview : IconLayerPreview\n\tconst InteractionIcon = isAgentExperimentOn ? IconAgentLayerIndicatorInteraction : IconLayerInteraction\n\tconst CommentIcon = isAgentExperimentOn ? IconAgentLayerIndicatorComment : IconLayerComment\n\tconst LinkIcon = isAgentExperimentOn ? IconAgentLayerIndicatorLink : IconLayerLink\n\tconst EffectIcon = isAgentExperimentOn ? IconAgentLayerIndicatorEffect : IconLayerEffect\n\tconst CustomCursorIcon = isAgentExperimentOn ? IconAgentLayerIndicatorCustomCursor : IconLayerCustomCursor\n\tconst CodeOverrideIcon = isAgentExperimentOn ? IconAgentLayerIndicatorCodeOverride : IconLayerCodeOverride\n\tconst LockIcon = isAgentExperimentOn ? IconAgentLayerIndicatorLock : IconLayerLock\n\tconst agentIndicatorClass = isAgentExperimentOn && styles.agentIndicatorIcon\n\n\tif (isEditing || beingDragged) return null\n\n\treturn (\n\t\t<div\n\t\t\tclassName={styles.labelsWrapper}\n\t\t\tstyle={{ visibility: isLayoutOnly ? \"hidden\" : \"visible\" }}\n\t\t\taria-hidden={isLayoutOnly}\n\t\t>\n\t\t\t{showComponentLabel && (\n\t\t\t\t<div\n\t\t\t\t\tclassName={cx(\n\t\t\t\t\t\tstyles.componentLabel,\n\t\t\t\t\t\tisAgentExperimentOn && subLabelText,\n\t\t\t\t\t\tselected && styles.componentLabelSelected,\n\t\t\t\t\t\tisMasterNode && hasHighlightedVariantLabel && !selected && styles.primaryLabel,\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{componentLabel}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{showScrollTarget && (\n\t\t\t\t<div className={cx(styles.icon, agentIndicatorClass)} title={Dictionary.ScrollSection}>\n\t\t\t\t\t<ScrollTargetIcon />\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{showHome && (\n\t\t\t\t<div className={cx(styles.icon, agentIndicatorClass)} title=\"Home Frame\">\n\t\t\t\t\t<HomeIcon />\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{showPreview && (\n\t\t\t\t<div\n\t\t\t\t\tclassName={cx(styles.icon, agentIndicatorClass, !isAgentExperimentOn && !selected && styles.iconTint)}\n\t\t\t\t\ttitle={Dictionary.Previewing}\n\t\t\t\t>\n\t\t\t\t\t<PreviewIcon />\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{showInteraction && (\n\t\t\t\t<div className={cx(styles.icon, agentIndicatorClass)} title=\"Has Interactions\">\n\t\t\t\t\t<InteractionIcon />\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{showComment && (\n\t\t\t\t<div className={cx(styles.icon, agentIndicatorClass)} title=\"Has Comments\">\n\t\t\t\t\t<CommentIcon />\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{showError && (\n\t\t\t\t<div className={cx(styles.icon, agentIndicatorClass)}>\n\t\t\t\t\t<LayerErrorIndicator\n\t\t\t\t\t\tnodeError={nodeError}\n\t\t\t\t\t\ticon={isAgentExperimentOn ? <IconAgentLayerIndicatorError /> : undefined}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{hasLink && (\n\t\t\t\t<div className={cx(styles.icon, agentIndicatorClass)} title=\"Has Links\">\n\t\t\t\t\t<LinkIcon />\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{hasEffect && (\n\t\t\t\t<div className={cx(styles.icon, agentIndicatorClass)} title=\"Has Effects\">\n\t\t\t\t\t<EffectIcon />\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{showCustomCursor && (\n\t\t\t\t<div className={cx(styles.icon, agentIndicatorClass)} title=\"Has Custom Cursor\">\n\t\t\t\t\t<CustomCursorIcon />\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{showCodeOverride && (\n\t\t\t\t<div className={cx(styles.icon, agentIndicatorClass)} title=\"Has Code Override\">\n\t\t\t\t\t<CodeOverrideIcon />\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{showLock && (\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\ttitle={locked ? \"Unlock\" : undefined}\n\t\t\t\t\taria-label={locked ? \"Unlock layer\" : undefined}\n\t\t\t\t\tclassName={cx(styles.icon, styles.iconLock, agentIndicatorClass, locked && styles.opaqueLock)}\n\t\t\t\t\tonMouseDown={unlockAction}\n\t\t\t\t>\n\t\t\t\t\t<LockIcon />\n\t\t\t\t</button>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n\nconst fromIconToText = 10\n\nfunction getComponentLabel(\n\tisMasterNode: boolean,\n\tisBreakpointVariant: boolean,\n\tbreakpointMin?: number,\n\tbreakpointMax?: number,\n) {\n\tif (isMasterNode) return Dictionary.Primary\n\tif (isBreakpointVariant) {\n\t\tif (isUndefined(breakpointMax) && isUndefined(breakpointMin)) {\n\t\t\treturn Dictionary.Variant\n\t\t}\n\n\t\tconst mediaQueryRange = isUndefined(breakpointMax)\n\t\t\t? `${breakpointMin}+`\n\t\t\t: // eslint-disable-next-line no-irregular-whitespace\n\t\t\t\t`${breakpointMax}\u2009\u2014\u2009${breakpointMin ?? 0}`\n\t\treturn mediaQueryRange\n\t}\n\n\treturn Dictionary.Variant\n}\n", "import { IconSectionCollapsed } from \"@framerjs/fresco\"\nimport { cx } from \"@linaria/core\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport type React from \"react\"\nimport { stopPropagation } from \"../properties/rows/utils/stopPropagation.ts\"\nimport * as styles from \"./CollapseIndicator.styles.ts\"\n\ninterface Props {\n\tvisible: boolean\n\tcollapsed: boolean\n\tonMouseDown?: (event: React.MouseEvent) => void\n\twithMargin?: boolean\n\tsiblingIcon?: boolean\n\tclassName?: string\n}\n\nexport const CollapseIndicator = ({\n\tvisible,\n\tcollapsed,\n\tclassName,\n\tonMouseDown,\n\twithMargin = true,\n\tsiblingIcon = true,\n}: Props) => {\n\tconst title = collapsed ? Dictionary.Expand : Dictionary.Collapse\n\tconst label = `${title} item`\n\treturn visible ? (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\ttitle={title}\n\t\t\taria-label={label}\n\t\t\tdraggable={false}\n\t\t\tonMouseDown={onMouseDown}\n\t\t\tonMouseUp={stopPropagation}\n\t\t\tclassName={cx(\n\t\t\t\tclassName,\n\t\t\t\tstyles.collapseIndicator,\n\t\t\t\t!collapsed && styles.collapseIndicatorExpanded,\n\t\t\t\twithMargin && styles.withPaddingAndMargin,\n\t\t\t\tsiblingIcon && styles.alignLeft,\n\t\t\t)}\n\t\t\tdata-testid={`layer-collapse-indicator-${collapsed ? \"right\" : \"down\"}`}\n\t\t>\n\t\t\t<IconSectionCollapsed height={6} />\n\t\t</button>\n\t) : (\n\t\t<div\n\t\t\tclassName={cx(\n\t\t\t\tclassName,\n\t\t\t\tstyles.collapsePlaceholder,\n\t\t\t\twithMargin && styles.withPaddingAndMargin,\n\t\t\t\tsiblingIcon && styles.alignLeft,\n\t\t\t)}\n\t\t/>\n\t)\n}\n", "import type { SVGProps } from \"react\"\n\nexport function IconAgentLayerIndicatorCustomCursor(props: SVGProps<SVGSVGElement>) {\n\treturn (\n\t\t<svg role=\"presentation\" xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" fill=\"none\" {...props}>\n\t\t\t<path\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\tfillOpacity={0.2}\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\td=\"M1.945 1.689a.5.5 0 0 0-.604.607l1.968 7.87a.5.5 0 0 0 .922.121l2.037-3.666 3.936-2.035a.5.5 0 0 0-.113-.931Z\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n\nexport function IconAgentLayerIndicatorLink(props: SVGProps<SVGSVGElement>) {\n\treturn (\n\t\t<svg role=\"presentation\" xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" fill=\"none\" {...props}>\n\t\t\t<path\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\td=\"m5 7 2-2M4.5 2.529A3.515 3.515 0 0 1 9.471 7.5M7.5 9.471A3.515 3.515 0 0 1 2.529 4.5\"\n\t\t\t/>\n\t\t\t<path\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\tfillOpacity={0.2}\n\t\t\t\td=\"M4.75 2.75a3.181 3.181 0 1 1 4.5 4.5l-2 2a3.181 3.181 0 1 1-4.5-4.5Z\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n\nexport function IconAgentLayerIndicatorScrollTarget(props: SVGProps<SVGSVGElement>) {\n\treturn (\n\t\t<svg role=\"presentation\" xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" fill=\"none\" {...props}>\n\t\t\t<path fill=\"currentColor\" fillOpacity={0.2} d=\"M3 3h6v6H3Z\" />\n\t\t\t<path\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\td=\"M3.5 1.5v9M8.5 1.5v9M1.5 3.5h9M1.5 8.5h9\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n\nexport function IconAgentLayerIndicatorEffect(props: SVGProps<SVGSVGElement>) {\n\treturn (\n\t\t<svg role=\"presentation\" xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" fill=\"none\" {...props}>\n\t\t\t<path\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\tfillOpacity={0.2}\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\td=\"M5.056 1.947c.313-.893 1.575-.893 1.888 0l.679 1.941a.8.8 0 0 0 .489.49l1.921.679c.889.314.889 1.572 0 1.886l-1.921.679a.8.8 0 0 0-.489.49l-.679 1.941c-.313.893-1.575.893-1.888 0l-.679-1.939a.8.8 0 0 0-.491-.491l-1.939-.679c-.893-.313-.893-1.575 0-1.888l1.939-.679a.8.8 0 0 0 .491-.491Z\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n\nexport function IconAgentLayerIndicatorInteraction(props: SVGProps<SVGSVGElement>) {\n\treturn (\n\t\t<svg role=\"presentation\" xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" fill=\"none\" {...props}>\n\t\t\t<path\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\tfillOpacity={0.2}\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\td=\"M5.115 1.453c.4-.637 1.385-.353 1.385.4V4h2.871a.9.9 0 0 1 .762 1.379l-3.248 5.168c-.4.637-1.385.353-1.385-.4V8H2.629a.9.9 0 0 1-.762-1.379Z\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n\nexport function IconAgentLayerIndicatorError(props: SVGProps<SVGSVGElement>) {\n\treturn (\n\t\t<svg role=\"presentation\" xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" fill=\"none\" {...props}>\n\t\t\t<path\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\tfillOpacity={0.2}\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\td=\"M6 1a5 5 0 1 1-.001 10.001A5 5 0 0 1 6 1\"\n\t\t\t/>\n\t\t\t<path\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\tstrokeWidth={1.25}\n\t\t\t\td=\"M6 3.5v2\"\n\t\t\t/>\n\t\t\t<path fill=\"currentColor\" d=\"M6 7a.75.75 0 1 1 0 1.5A.75.75 0 0 1 6 7\" />\n\t\t</svg>\n\t)\n}\n\nexport function IconAgentLayerIndicatorCodeOverride(props: SVGProps<SVGSVGElement>) {\n\treturn (\n\t\t<svg role=\"presentation\" xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" fill=\"none\" {...props}>\n\t\t\t<path\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\td=\"M3.75 2.75 1.561 4.939a1.5 1.5 0 0 0 0 2.122L3.75 9.25M8.25 2.75l2.189 2.189a1.5 1.5 0 0 1 0 2.122L8.25 9.25\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n\nexport function IconAgentLayerIndicatorLock(props: SVGProps<SVGSVGElement>) {\n\treturn (\n\t\t<svg role=\"presentation\" xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" fill=\"none\" {...props}>\n\t\t\t<path\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\tfillOpacity={0.2}\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\td=\"M2 6.5a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2Z\"\n\t\t\t/>\n\t\t\t<path\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\td=\"M3.5 4.5v-1A2.5 2.5 0 0 1 6 1h0a2.5 2.5 0 0 1 2.5 2.5v1\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n\nexport function IconAgentLayerIndicatorHome(props: SVGProps<SVGSVGElement>) {\n\treturn (\n\t\t<svg role=\"presentation\" xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" fill=\"none\" {...props}>\n\t\t\t<path\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\tfillOpacity={0.2}\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\td=\"M1.5 5.398c0-.571.244-1.115.671-1.495l2.5-2.222a2 2 0 0 1 2.658 0l2.5 2.222c.427.38.671.924.671 1.495V9a2 2 0 0 1-2 2h-5a2 2 0 0 1-2-2ZM6 11V7\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n\nexport function IconAgentLayerIndicatorPreview(props: SVGProps<SVGSVGElement>) {\n\treturn (\n\t\t<svg role=\"presentation\" xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" fill=\"none\" {...props}>\n\t\t\t<path\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\tfillOpacity={0.2}\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\td=\"M2 2.283a1 1 0 0 1 1.521-.853l6.083 3.717a1 1 0 0 1 0 1.706L3.521 10.57A1 1 0 0 1 2 9.717Z\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n\nexport function IconAgentLayerIndicatorComment(props: SVGProps<SVGSVGElement>) {\n\treturn (\n\t\t<svg role=\"presentation\" xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" fill=\"none\" {...props}>\n\t\t\t<path\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\tfillOpacity={0.2}\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\td=\"M1.5 9.682c0 .452.366.818.818.818H6A4.5 4.5 0 0 0 10.5 6h0A4.5 4.5 0 0 0 6 1.5h0A4.5 4.5 0 0 0 1.5 6Z\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n", "import { CustomButton, IconLayerError, Stack } from \"@framerjs/fresco\"\nimport { assertNever } from \"@framerjs/shared\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport engine from \"document/engine.ts\"\nimport { isShaderNode } from \"document/models/CanvasTree/nodes/utils/nodeCheck.ts\"\nimport type { NodeError } from \"document/models/CanvasTree/utils/getNodeError.ts\"\nimport { CodeError } from \"document/models/CanvasTree/utils/getNodeError.ts\"\nimport { updateModuleBackedInstanceToLatestVersion } from \"document/models/CanvasTree/utils/moduleBackedInstanceUpdate.ts\"\nimport type React from \"react\"\nimport { PanelTooltip } from \"../PanelTooltip.tsx\"\n\nexport function LayerErrorIndicator({\n\tnodeError,\n\ticon = <IconLayerError />,\n}: {\n\tnodeError: NodeError\n\ticon?: React.ReactNode\n}) {\n\treturn <PanelTooltip {...tooltipContent(nodeError)} direction=\"left\" delay=\"long\" icon={icon} variant=\"layer\" />\n}\n\nfunction tooltipContent(nodeError: NodeError): {\n\ttext: string\n\ttitle: string\n\tactions?: React.ReactNode\n\tinteractive: boolean\n} {\n\tswitch (nodeError.kind) {\n\t\tcase \"code\":\n\t\t\treturn { interactive: false, ...codeErrorContent(nodeError.codeError) }\n\t\tcase \"outdatedInstance\": {\n\t\t\tconst node = engine.tree.getNode(nodeError.originalNodeId)\n\t\t\tconst isShader = isShaderNode(node)\n\t\t\tconst moduleTypeName = isShader ? Dictionary.Shader : Dictionary.Component\n\t\t\treturn {\n\t\t\t\ttitle: `${moduleTypeName} is out of date`,\n\t\t\t\ttext: `Reset this ${moduleTypeName.toLowerCase()} to the version used in your project.`,\n\t\t\t\tinteractive: true,\n\t\t\t\tactions: (\n\t\t\t\t\t<Stack direction=\"row\">\n\t\t\t\t\t\t<CustomButton\n\t\t\t\t\t\t\tstyle={{ flexGrow: 1 }}\n\t\t\t\t\t\t\tonClick={engine.scheduler.wrapHandler(() => {\n\t\t\t\t\t\t\t\tupdateModuleBackedInstanceToLatestVersion(engine, nodeError.originalNodeId)\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tReset\n\t\t\t\t\t\t</CustomButton>\n\t\t\t\t\t</Stack>\n\t\t\t\t),\n\t\t\t}\n\t\t}\n\t\tcase \"accessibleName\":\n\t\t\treturn { title: \"Accessibility Warning\", text: nodeError.message, interactive: false }\n\t\tcase \"form\":\n\t\t\treturn {\n\t\t\t\ttitle: \"Form Set-Up\",\n\t\t\t\ttext: \"Some \u2018Send To\u2019 destinations are not set up properly. You may not receive submissions.\",\n\t\t\t\tinteractive: false,\n\t\t\t}\n\t\tdefault:\n\t\t\tassertNever(nodeError)\n\t}\n}\n\nfunction codeErrorContent(codeError: CodeError) {\n\tswitch (codeError) {\n\t\tcase CodeError.CodeComponentLoaderError:\n\t\t\treturn {\n\t\t\t\ttitle: \"Error in Code\",\n\t\t\t\ttext: \"There\u2019s an error in one of the code files preventing this component from rendering.\",\n\t\t\t}\n\t\tcase CodeError.CodeComponentMissing:\n\t\t\treturn {\n\t\t\t\ttitle: \"Missing Code File\",\n\t\t\t\ttext: \"The related code component file is missing, preventing this component from rendering.\",\n\t\t\t}\n\t\tcase CodeError.ShaderLoaderError:\n\t\t\treturn {\n\t\t\t\ttitle: \"Error in Shader\",\n\t\t\t\ttext: \"There\u2019s an error in the shader file preventing this shader from rendering.\",\n\t\t\t}\n\t\tcase CodeError.ShaderMissing:\n\t\t\treturn {\n\t\t\t\ttitle: \"Missing Shader File\",\n\t\t\t\ttext: \"The related shader file is missing, preventing this shader from rendering.\",\n\t\t\t}\n\t\tcase CodeError.SmartComponentLoaderError:\n\t\t\treturn {\n\t\t\t\ttitle: \"Error in Component\",\n\t\t\t\ttext: \"There\u2019s an error within this Smart Component. Double-click on an instance to see.\",\n\t\t\t}\n\t\tcase CodeError.ComponentLoaderError:\n\t\t\treturn {\n\t\t\t\ttitle: \"Error in Component\",\n\t\t\t\ttext: \"There\u2019s an error within this Component.\",\n\t\t\t}\n\t\tcase CodeError.OverrideMissingExport:\n\t\t\treturn {\n\t\t\t\ttitle: \"Missing Override\",\n\t\t\t\ttext: \"The override is missing from the original file. Please verify that the override still exists, or update the override.\",\n\t\t\t}\n\t\tcase CodeError.OverrideMissingFile:\n\t\t\treturn {\n\t\t\t\ttitle: \"Missing Override File\",\n\t\t\t\ttext: \"The file for the assigned override is missing. Please verify if the file still exists, or update the override.\",\n\t\t\t}\n\t\tcase CodeError.FileTooLarge:\n\t\t\treturn {\n\t\t\t\ttitle: \"Component Too Large\",\n\t\t\t\ttext: \"Please convert large SVGs or sections to Components to reduce their overall size.\",\n\t\t\t\tactions: (\n\t\t\t\t\t<Stack direction=\"row\">\n\t\t\t\t\t\t<CustomButton\n\t\t\t\t\t\t\tas=\"a\"\n\t\t\t\t\t\t\tstyle={{ flexGrow: 1 }}\n\t\t\t\t\t\t\thref=\"https://www.framer.com/help/articles/how-to-fix-module-too-large-warning/\"\n\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{Dictionary.LearnMore}\n\t\t\t\t\t\t</CustomButton>\n\t\t\t\t\t</Stack>\n\t\t\t\t),\n\t\t\t\tinteractive: true,\n\t\t\t}\n\t\tdefault:\n\t\t\tassertNever(codeError)\n\t}\n}\n", "import \"Layers.styles_11o211s.wyw.css\"; export const scrollStyle = \"scrollStyle_s10dpwt5\";\nexport const noResults = \"noResults_n1uowgf2\";\nexport const controlWrapper = \"controlWrapper_conuwap\";", "import type { CanvasTree, ShallowWebPageNode } from \"document/models/CanvasTree/index.ts\"\nimport { getRouteSegmentRootNode } from \"document/models/CanvasTree/nodes/RouteSegmentRootNode.utils.ts\"\n\nexport function getWebPagesInVisualOrder(tree: CanvasTree): ShallowWebPageNode[] {\n\tconst result: ShallowWebPageNode[] = []\n\n\tconst routeSegmentRootNode = getRouteSegmentRootNode(tree)\n\tconst webPageIdToWebPagePath = routeSegmentRootNode.getWebPageIdToRawPathMap(tree)\n\n\tfor (const webPageId of webPageIdToWebPagePath.keys()) {\n\t\tconst webPageNode = tree.get<ShallowWebPageNode>(webPageId)\n\t\tif (webPageNode) result.push(webPageNode)\n\t}\n\n\treturn result\n}\n", "import type { ComboBoxListItem } from \"@framerjs/fresco\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport { experiments } from \"app/experiments.ts\"\nimport { EngineChange } from \"document/EngineChanges.ts\"\nimport engine from \"document/engine.ts\"\nimport { useEngineState } from \"document/useEngineState.ts\"\nimport { getWebPagesInVisualOrder } from \"../chrome/Pages/utils/getWebPagesInVisualOrder.ts\"\nimport { getTitleForWebPage } from \"./webPageTitles.ts\"\n\ntype ComboBoxOption = Extract<ComboBoxListItem, { type: \"option\" }>\n\nconst emptyItems: ComboBoxListItem[] = []\n\nfunction getWebPageComboBoxListItems(): ComboBoxListItem[] {\n\tconst webPagesInVisualOrder = getWebPagesInVisualOrder(engine.tree)\n\n\tconst items = webPagesInVisualOrder.map(webPage => {\n\t\tconst comboBoxOption: ComboBoxOption = {\n\t\t\tvalue: webPage.id,\n\t\t\ttitle: getTitleForWebPage(engine.tree, engine.componentLoader, webPage),\n\t\t\ttype: \"option\",\n\t\t}\n\n\t\treturn comboBoxOption\n\t})\n\n\tif (items.length === 0) return emptyItems\n\n\treturn [\n\t\t{\n\t\t\ttype: \"section\",\n\t\t\tvalue: Dictionary.Pages,\n\t\t\titems,\n\t\t},\n\t]\n}\n\nfunction getKitPageComboBoxListItems(): ComboBoxListItem[] {\n\tconst kitPages = engine.stores.scopeStore.getKitPageNodes()\n\n\tconst items = kitPages.map(kitPage => {\n\t\tconst comboBoxOption: ComboBoxOption = {\n\t\t\tvalue: kitPage.id,\n\t\t\ttitle: kitPage.resolveValue(\"name\") ?? Dictionary.Kit,\n\t\t\ttype: \"option\",\n\t\t}\n\n\t\treturn comboBoxOption\n\t})\n\n\tif (items.length === 0) return emptyItems\n\n\treturn [\n\t\t{\n\t\t\ttype: \"section\",\n\t\t\tvalue: Dictionary.Kit,\n\t\t\titems,\n\t\t},\n\t]\n}\n\nfunction getDesignPageComboBoxListItems(): ComboBoxListItem[] {\n\tconst designPages = engine.stores.scopeStore.getDesignPageNodes()\n\n\tconst items = designPages.map(designPage => {\n\t\tconst comboBoxOption: ComboBoxOption = {\n\t\t\tvalue: designPage.id,\n\t\t\ttitle: designPage.resolveValue(\"name\") ?? Dictionary.Design,\n\t\t\ttype: \"option\",\n\t\t}\n\n\t\treturn comboBoxOption\n\t})\n\n\tif (items.length === 0) return emptyItems\n\n\treturn [\n\t\t{\n\t\t\ttype: \"section\",\n\t\t\tvalue: Dictionary.Design,\n\t\t\titems,\n\t\t},\n\t]\n}\n\nexport function usePageComboBoxListItems({\n\tincludeDesignPages,\n\tincludeKitPages,\n}: {\n\tincludeDesignPages: boolean\n\tincludeKitPages: boolean\n}): ComboBoxListItem[] {\n\tconst isWireframerKitsOn = experiments.isOn(\"wireframerKits\")\n\treturn useEngineState(\n\t\t() => {\n\t\t\tconst items: ComboBoxListItem[] = []\n\t\t\tif (isWireframerKitsOn && includeKitPages) {\n\t\t\t\titems.push(...getKitPageComboBoxListItems())\n\t\t\t}\n\n\t\t\tif (includeDesignPages) {\n\t\t\t\titems.push(...getDesignPageComboBoxListItems())\n\t\t\t}\n\n\t\t\titems.push(...getWebPageComboBoxListItems())\n\n\t\t\treturn items\n\t\t},\n\t\t[includeDesignPages, includeKitPages],\n\t\t[EngineChange.Tree, EngineChange.ActiveBundle],\n\t\t{ deepEqual: true },\n\t)\n}\n", "import { CenterChild, ComboBox, IconPage, IconWebPageHome, Stack } from \"@framerjs/fresco\"\nimport { cx } from \"@linaria/core\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport { useExperimentIsOn } from \"app/experiments.ts\"\nimport { EngineChange } from \"document/EngineChanges.ts\"\nimport { usePageComboBoxListItems } from \"document/components/utils/usePageComboBoxListItems.ts\"\nimport { getTitleForWebPageId } from \"document/components/utils/webPageTitles.ts\"\nimport engine from \"document/engine.ts\"\nimport type { NodeID } from \"document/models/CanvasTree/index.ts\"\nimport { isDesignPageNode, isKitPageNode, isWebPageNode } from \"document/models/CanvasTree/nodes/utils/nodeCheck.ts\"\nimport { useDeprecatedEngineState } from \"document/useDeprecatedEngineState.ts\"\nimport React from \"react\"\nimport { IconAgentHome } from \"../agentPanel/components/IconAgentHome.tsx\"\nimport { IconAgentPage } from \"../agentPanel/components/IconAgentPage.tsx\"\nimport * as agentStyles from \"../shared/AgentSearchBar.styles.ts\"\nimport { usePopoverWithinPadding } from \"../utils/usePopoverWithinPadding.ts\"\nimport * as styles from \"./PageSelector.styles.ts\"\n\nfunction selectScopeId(scopeId: NodeID, _final: boolean, reset: () => void) {\n\tconst node = engine.tree.get(scopeId)\n\tif (isWebPageNode(node) || isDesignPageNode(node)) {\n\t\tengine.stores.scopeStore.select(scopeId, { keepHistory: false })\n\t} else {\n\t\treset()\n\t}\n}\n\nfunction getPageSelectorIcon(isHomePage: boolean, agentEnabled: boolean) {\n\tif (agentEnabled) return isHomePage ? <IconAgentHome /> : <IconAgentPage />\n\treturn isHomePage ? <IconWebPageHome /> : <IconPage />\n}\n\nexport const PageSelector = React.memo(function PageSelector() {\n\tconst isProjectReady = engine.stores.loadingStore.useState(state => state.isReady)\n\tconst items = usePageComboBoxListItems({ includeDesignPages: true, includeKitPages: true })\n\tconst popoverWithin = usePopoverWithinPadding()\n\tconst agentEnabled = useExperimentIsOn(\"agent\")\n\n\tconst { activeScopeId, shouldShowSelector } = engine.stores.scopeStore.useState(state => ({\n\t\tactiveScopeId: state.active.id,\n\t\tshouldShowSelector: isWebPageNode(state.active) || isDesignPageNode(state.active),\n\t}))\n\n\tconst isHomePage = useDeprecatedEngineState(\n\t\tEngineChange.Tree,\n\t\t() => activeScopeId === engine.tree.root.homePageNodeId,\n\t\t[activeScopeId],\n\t)\n\n\tconst activeScopeTitle = useDeprecatedEngineState(\n\t\tEngineChange.ActiveBundle,\n\t\t() => {\n\t\t\tconst scope = engine.tree.get(activeScopeId)\n\t\t\tif (isKitPageNode(scope)) {\n\t\t\t\treturn scope.resolveValue(\"name\") ?? Dictionary.Kit\n\t\t\t}\n\n\t\t\tif (isDesignPageNode(scope)) {\n\t\t\t\treturn scope.resolveValue(\"name\") ?? Dictionary.Design\n\t\t\t}\n\n\t\t\tif (isWebPageNode(scope)) {\n\t\t\t\treturn getTitleForWebPageId(engine.tree, engine.componentLoader, activeScopeId)\n\t\t\t}\n\n\t\t\treturn Dictionary.Missing\n\t\t},\n\t\t[activeScopeId],\n\t)\n\n\tif (!shouldShowSelector) return null\n\n\treturn (\n\t\t<Stack>\n\t\t\t<ComboBox\n\t\t\t\trightChevron\n\t\t\t\titems={items}\n\t\t\t\tenabled={isProjectReady}\n\t\t\t\tmenuWithin={popoverWithin}\n\t\t\t\tunsaturated={agentEnabled}\n\t\t\t\tvalue={activeScopeTitle}\n\t\t\t\tonChange={selectScopeId}\n\t\t\t\twrapperClassName={cx(styles.inputWrapper, agentEnabled && agentStyles.agentInputWrapper)}\n\t\t\t\tleftSlot={\n\t\t\t\t\t<CenterChild className={styles.leftIcon}>{getPageSelectorIcon(isHomePage, agentEnabled)}</CenterChild>\n\t\t\t\t}\n\t\t\t/>\n\t\t</Stack>\n\t)\n})\n", "import \"PageSelector.styles_9gamja.wyw.css\"; export const inputWrapper = \"inputWrapper_ibuxfpv\";\nexport const leftIcon = \"leftIcon_lgc8pda\";", "import \"AgentChatInput.styles_1hyvte1.wyw.css\"; export const inputArea = \"inputArea_iybib1b\";\nexport const inputWithContextMeter = \"inputWithContextMeter_i18nljhg\";\nexport const attachments = \"attachments_a1wj1u8r\";", "import \"AgentChatTurn.styles_exjb7.wyw.css\"; import { cx } from \"@linaria/core\";\nimport { sentinel } from \"./useScrollSentinel.styles.ts\";\nexport const stickySentinel = cx(sentinel, \"stickySentinel_s71brc5\");\nexport const turnContainer = \"turnContainer_t1wmzoaz\";\nexport const userBubbleSticky = \"userBubbleSticky_u17c3to3\";\nexport const userBubbleStickyStuck = \"userBubbleStickyStuck_u1v5xen1\";\nexport const stickyInner = \"stickyInner_s1rdcoaw\";\nexport const userBubble = \"userBubble_udvgw5e\";\nexport const confirmGradientOverlay = \"confirmGradientOverlay_c1xlggno\";\nexport const confirmButton = \"confirmButton_ce6u0p0\";\nexport const userText = \"userText_uwelm9q\";\nexport const userTextClamp = \"userTextClamp_u18o5sdz\";\nexport const userImageOnlyLabel = \"userImageOnlyLabel_ur57xvt\";\nexport const userBubbleFades = \"userBubbleFades_u15pkn8v\";\nexport const userBubbleFadeBottomVisible = \"userBubbleFadeBottomVisible_u17sg1zp\";\nexport const clarificationQuestion = \"clarificationQuestion_c28znvx\";\nexport const clarificationAnswer = \"clarificationAnswer_cq3pun8\";\nexport const clarificationAnswerGroup = \"clarificationAnswerGroup_ct0pw3p\";\nexport const streamContainer = \"streamContainer_s1oiso29\";\nexport const assistantMessage = \"assistantMessage_a1qhdb14\";\nexport const stepsList = \"stepsList_sjgd3mg\";\nexport const markdownImage = \"markdownImage_m7qw8il\";\nexport const colorPreview = \"colorPreview_c11pzg5a\";\nexport const colorPreviewSwatch = \"colorPreviewSwatch_c16eqomo\";\nexport const revertButton = \"revertButton_r1synk2y\";\nexport const assistantText = \"assistantText_a84uy5s\";\nexport const markdownStyles = \"markdownStyles_mboqhxh\";", "import { Tooltip } from \"@framerjs/fresco\"\nimport { cx } from \"@linaria/core\"\nimport { AgentButton } from \"app/agent/components/AgentButton/AgentButton.tsx\"\nimport * as chatFooterStyles from \"app/agent/components/AgentInput/AgentFooter.styles.ts\"\nimport { useDimensionValue } from \"app/agent/hooks/useDimensionValue.ts\"\nimport { useEffect, useRef, useState } from \"react\"\nimport { stopPropagation } from \"../../properties/rows/utils/stopPropagation.ts\"\nimport * as styles from \"./AgentChatTurn.styles.ts\"\nimport { IconRevert } from \"./IconRevert.tsx\"\n\nexport function RevertButton({\n\tonRevert,\n\tisReverting,\n\tshowTooltip,\n\tonConfirmingChange,\n}: {\n\tonRevert: () => void\n\tisReverting?: boolean\n\tshowTooltip: boolean\n\tonConfirmingChange?: (isConfirming: boolean) => void\n}) {\n\tconst [isConfirming, setIsConfirming] = useState(false)\n\tconst containerRef = useRef<HTMLDivElement>(null)\n\tconst tooltipOffset = useDimensionValue(\"tooltipOffset\")\n\n\tuseEffect(() => {\n\t\tonConfirmingChange?.(isConfirming)\n\t}, [isConfirming, onConfirmingChange])\n\n\tuseEffect(() => {\n\t\tif (!isConfirming) return\n\t\tconst handlePointerDown = (e: PointerEvent) => {\n\t\t\tif (!containerRef.current?.contains(e.target as Node)) {\n\t\t\t\tsetIsConfirming(false)\n\t\t\t}\n\t\t}\n\t\tdocument.addEventListener(\"pointerdown\", handlePointerDown)\n\t\treturn () => document.removeEventListener(\"pointerdown\", handlePointerDown)\n\t}, [isConfirming])\n\n\tif (isConfirming) {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<div className={styles.confirmGradientOverlay} />\n\t\t\t\t<div ref={containerRef} className={styles.revertButton} onClick={stopPropagation}>\n\t\t\t\t\t<AgentButton\n\t\t\t\t\t\tvariant=\"clean\"\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tsetIsConfirming(false)\n\t\t\t\t\t\t\tonRevert()\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonMouseDown={stopPropagation}\n\t\t\t\t\t\tclassName={cx(chatFooterStyles.button, styles.confirmButton)}\n\t\t\t\t\t\taria-label=\"Confirm\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<span>Confirm</span>\n\t\t\t\t\t</AgentButton>\n\t\t\t\t</div>\n\t\t\t</>\n\t\t)\n\t}\n\n\tconst button = (\n\t\t<AgentButton\n\t\t\tvariant=\"clean\"\n\t\t\tdisabled={isReverting}\n\t\t\tonClick={() => setIsConfirming(true)}\n\t\t\tonMouseDown={stopPropagation}\n\t\t\tclassName={chatFooterStyles.button}\n\t\t\taria-label=\"Revert\"\n\t\t>\n\t\t\t<IconRevert />\n\t\t</AgentButton>\n\t)\n\n\treturn (\n\t\t<div ref={containerRef} className={styles.revertButton} onClick={stopPropagation}>\n\t\t\t{showTooltip ? (\n\t\t\t\t<Tooltip text=\"Revert\" variant=\"toolbar\" direction=\"bottom\" delay={0} positionOffset={{ y: tooltipOffset }}>\n\t\t\t\t\t{button}\n\t\t\t\t</Tooltip>\n\t\t\t) : (\n\t\t\t\tbutton\n\t\t\t)}\n\t\t</div>\n\t)\n}\n", "export function IconRevert() {\n\treturn (\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" fill=\"none\" role=\"presentation\">\n\t\t\t<path\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\td=\"M8.5 4.75 5 8.25l3.5 3.5\"\n\t\t\t/>\n\t\t\t<path\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\td=\"M6.5 8.25h5a3.5 3.5 0 1 1 0 7\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n", "import { useEffect, type RefObject } from \"react\"\n\ninterface UseScrollSentinelParams {\n\tsentinelRef: RefObject<HTMLElement | null>\n\tscrollContainerRef: RefObject<HTMLElement | null>\n\trootMargin?: string\n\tenabled?: boolean\n\tonChange: (isIntersecting: boolean) => void\n}\n\nexport function useScrollSentinel({\n\tsentinelRef,\n\tscrollContainerRef,\n\trootMargin,\n\tenabled = true,\n\tonChange,\n}: UseScrollSentinelParams): void {\n\tuseEffect(() => {\n\t\tif (!enabled) return\n\n\t\tconst sentinel = sentinelRef.current\n\t\tconst root = scrollContainerRef.current\n\t\tif (!sentinel || !root) return\n\n\t\tconst observer = new IntersectionObserver(\n\t\t\t([entry]) => {\n\t\t\t\tif (entry) onChange(entry.isIntersecting)\n\t\t\t},\n\t\t\t{ root, rootMargin, threshold: 0 },\n\t\t)\n\n\t\tobserver.observe(sentinel)\n\t\treturn () => observer.disconnect()\n\t}, [enabled, sentinelRef, scrollContainerRef, rootMargin, onChange])\n}\n"],
  "mappings": "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",
  "names": ["import_react", "sentinel", "import_react", "container", "container", "import_jsx_runtime", "import_react", "import_jsx_runtime", "disabled", "container", "icon", "import_jsx_runtime", "divider", "container", "icon", "import_jsx_runtime", "import_jsx_runtime", "import_jsx_runtime", "import_jsx_runtime", "container", "icon", "import_jsx_runtime", "import_jsx_runtime", "agentLayerIcons", "Icon", "container", "icon", "pluralize", "name", "label", "import_pluralize", "import_react", "disabled", "divider", "import_jsx_runtime", "import_react", "header", "row", "icon", "import_react", "title", "divider", "card", "content", "header", "icon", "import_jsx_runtime", "import_jsx_runtime", "import_jsx_runtime", "import_jsx_runtime", "import_jsx_runtime", "import_jsx_runtime", "message", "text", "label", "icon", "title", "card", "divider", "active", "AgentChatThinkingTrace", "header", "formatDuration", "type", "exists", "compact", "Icon", "content", "import_jsx_runtime", "import_jsx_runtime", "label", "import_jsx_runtime", "header", "row", "icon", "import_react", "message", "name", "base", "input", "name", "base", "_a", "lines", "decorations", "name", "text", "count", "input", "content", "clone", "message", "ShikiError", "name", "Registry", "bundledLanguages", "bundledThemes", "createHighlighter", "getSingletonHighlighter", "ShikiError", "message", "__publicField", "_OnigString", "count", "codeToHtml", "codeToHast", "codeToTokens", "codeToTokensBase", "codeToTokensWithThemes", "getLastGrammarState", "header", "divider", "title", "import_jsx_runtime", "content", "fileName", "name", "card", "header", "divider", "base", "card", "import_jsx_runtime", "import_jsx_runtime", "title", "message", "card", "content", "header", "icon", "import_jsx_runtime", "message", "title", "import_react", "button", "title", "import_jsx_runtime", "ModelPicker", "selected", "button", "title", "import_jsx_runtime", "import_jsx_runtime", "text", "import_react", "input", "import_jsx_runtime", "container", "input", "import_react", "import_jsx_runtime", "matches", "import_jsx_runtime", "name", "name", "charSize", "import_react", "import_jsx_runtime", "createTagNode", "text", "content", "state", "navigator", "isValid", "fileName", "import_react", "count", "import_react", "image", "blob", "basename", "import_react", "randomID", "input", "fileName", "image", "import_react", "import_react", "import_react", "import_react", "import_jsx_runtime", "import_jsx_runtime", "import_react", "import_react", "name", "import_jsx_runtime", "indentPosition", "base", "import_jsx_runtime", "Item", "React", "base", "import_jsx_runtime", "React", "Item", "import_react", "import_jsx_runtime", "title", "label", "import_jsx_runtime", "import_jsx_runtime", "icon", "import_jsx_runtime", "React", "name", "selected", "isUserComponent", "indent", "Icon", "isBreakpointVariant", "hasCodeOverride", "hasLink", "componentLabel", "import_react", "inputWrapper", "import_jsx_runtime", "React", "PageSelector", "inputWrapper", "import_jsx_runtime", "React", "name", "Icon", "indent", "icon", "name", "result", "import_jsx_runtime", "id", "attachments", "imageAttachmentIndices", "listImages", "divider", "import_react", "import_jsx_runtime", "import_jsx_runtime", "button", "import_react", "sentinel", "import_jsx_runtime", "UserBubble", "hasEditorContent", "userText", "image", "randomID", "pluralize", "message", "AssistantBubble", "content", "ClarificationAnswersBubble", "messages", "Icon", "label", "title", "AgentChatActivityTrace", "count", "duration", "import_jsx_runtime", "container", "content", "messages", "sentinel"]
}
