pika-plugin-ai 0.6.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.css +953 -0
- package/dist/index.css.map +1 -0
- package/dist/index.d.mts +261 -0
- package/dist/index.d.ts +261 -0
- package/dist/index.js +1865 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +1846 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +59 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../index.tsx","../../tsup-config/react-import.js","../../../node_modules/.pnpm/lucide-react@0.452.0_react@19.2.4/node_modules/shared/src/utils.ts","../../../node_modules/.pnpm/lucide-react@0.452.0_react@19.2.4/node_modules/lucide-react/src/defaultAttributes.ts","../../../node_modules/.pnpm/lucide-react@0.452.0_react@19.2.4/node_modules/lucide-react/src/Icon.ts","../../../node_modules/.pnpm/lucide-react@0.452.0_react@19.2.4/node_modules/lucide-react/src/createLucideIcon.ts","../../../node_modules/.pnpm/lucide-react@0.452.0_react@19.2.4/node_modules/lucide-react/src/icons/arrow-left.ts","../../../node_modules/.pnpm/lucide-react@0.452.0_react@19.2.4/node_modules/lucide-react/src/icons/arrow-up.ts","../../../node_modules/.pnpm/lucide-react@0.452.0_react@19.2.4/node_modules/lucide-react/src/icons/bot.ts","../../../node_modules/.pnpm/lucide-react@0.452.0_react@19.2.4/node_modules/lucide-react/src/icons/check.ts","../../../node_modules/.pnpm/lucide-react@0.452.0_react@19.2.4/node_modules/lucide-react/src/icons/eye-off.ts","../../../node_modules/.pnpm/lucide-react@0.452.0_react@19.2.4/node_modules/lucide-react/src/icons/eye.ts","../../../node_modules/.pnpm/lucide-react@0.452.0_react@19.2.4/node_modules/lucide-react/src/icons/image.ts","../../../node_modules/.pnpm/lucide-react@0.452.0_react@19.2.4/node_modules/lucide-react/src/icons/rotate-ccw.ts","../../../node_modules/.pnpm/lucide-react@0.452.0_react@19.2.4/node_modules/lucide-react/src/icons/settings.ts","../../../node_modules/.pnpm/lucide-react@0.452.0_react@19.2.4/node_modules/lucide-react/src/icons/trash-2.ts","../../../node_modules/.pnpm/lucide-react@0.452.0_react@19.2.4/node_modules/lucide-react/src/icons/triangle-alert.ts","../../../node_modules/.pnpm/lucide-react@0.452.0_react@19.2.4/node_modules/lucide-react/src/icons/wrench.ts","../../../node_modules/.pnpm/lucide-react@0.452.0_react@19.2.4/node_modules/lucide-react/src/icons/x.ts"],"sourcesContent":["\"use client\";\n\nimport {\n useState,\n useCallback,\n useEffect,\n useRef,\n useContext,\n createContext,\n useMemo,\n type ReactNode,\n type ReactElement,\n} from \"react\";\nimport type { PuckAction, Data, Config, Plugin } from \"pika-editor-core\";\nimport { useGetPuck, createUsePuck } from \"pika-editor-core\";\nimport { useChat } from \"@ai-sdk/react\";\nimport {\n DefaultChatTransport,\n getToolName,\n isDataUIPart,\n isFileUIPart,\n isReasoningUIPart,\n isTextUIPart,\n isToolUIPart,\n type DataUIPart,\n type DynamicToolUIPart,\n type ChatStatus,\n type CreateUIMessage,\n type FileUIPart,\n type LanguageModelUsage,\n type ToolUIPart,\n type UIMessage,\n} from \"ai\";\nimport ReactMarkdown from \"react-markdown\";\nimport TextareaAutosize from \"react-textarea-autosize\";\nimport { useStickToBottom } from \"use-stick-to-bottom\";\nimport {\n ArrowLeft,\n ArrowUp,\n Bot,\n Check,\n Eye,\n EyeOff,\n Image as ImageIcon,\n RotateCcw,\n Settings,\n Trash2,\n TriangleAlert,\n Wrench,\n X,\n} from \"lucide-react\";\nimport qler from \"qler\";\nimport { ulid } from \"ulid\";\nimport html2canvas from \"html2canvas-pro\";\nimport \"./styles.css\";\n\n// ============================================================\n// Image attachment helpers\n// ============================================================\n\nexport interface AttachedImage {\n /** Unique key for React lists */\n id: string;\n /** base64 data URL e.g. \"data:image/png;base64,...\" */\n dataUrl: string;\n /** Original file name */\n name: string;\n}\n\nfunction readFileAsDataURL(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => resolve(reader.result as string);\n reader.onerror = reject;\n reader.readAsDataURL(file);\n });\n}\n\nasync function filesToAttachedImages(\n files: FileList | File[]\n): Promise<AttachedImage[]> {\n const results: AttachedImage[] = [];\n for (const file of Array.from(files)) {\n if (!file.type.startsWith(\"image/\")) continue;\n const dataUrl = await readFileAsDataURL(file);\n results.push({ id: prefixedUlid(\"img\"), dataUrl, name: file.name });\n }\n return results;\n}\n\n/** Parse `data:<mediatype>;base64,...` for UI file parts (chat history). */\nfunction mediaTypeFromDataUrl(dataUrl: string): string {\n if (!dataUrl.startsWith(\"data:\")) return \"application/octet-stream\";\n const rest = dataUrl.slice(5);\n const semi = rest.indexOf(\";\");\n const comma = rest.indexOf(\",\");\n const end = semi === -1 ? comma : semi;\n if (end <= 0) return \"application/octet-stream\";\n return rest.slice(0, end) || \"application/octet-stream\";\n}\n\nfunction attachedImageToFileUIPart(img: AttachedImage): FileUIPart {\n return {\n type: \"file\",\n mediaType: mediaTypeFromDataUrl(img.dataUrl),\n url: img.dataUrl,\n filename: img.name,\n };\n}\n\n// ============================================================\n// Type definitions\n// ============================================================\n\ntype _JSONSchema = boolean | JSONSchema;\nexport type JSONSchema = {\n [k: string]: unknown;\n $schema?: string;\n $id?: string;\n $ref?: string;\n $defs?: Record<string, JSONSchema>;\n type?:\n | \"object\"\n | \"array\"\n | \"string\"\n | \"number\"\n | \"boolean\"\n | \"null\"\n | \"integer\";\n additionalItems?: _JSONSchema;\n unevaluatedItems?: _JSONSchema;\n prefixItems?: _JSONSchema[];\n items?: _JSONSchema | _JSONSchema[];\n contains?: _JSONSchema;\n additionalProperties?: _JSONSchema;\n unevaluatedProperties?: _JSONSchema;\n properties?: Record<string, _JSONSchema>;\n patternProperties?: Record<string, _JSONSchema>;\n dependentSchemas?: Record<string, _JSONSchema>;\n propertyNames?: _JSONSchema;\n if?: _JSONSchema;\n then?: _JSONSchema;\n else?: _JSONSchema;\n allOf?: JSONSchema[];\n anyOf?: JSONSchema[];\n oneOf?: JSONSchema[];\n not?: _JSONSchema;\n multipleOf?: number;\n maximum?: number;\n exclusiveMaximum?: number | boolean;\n minimum?: number;\n exclusiveMinimum?: number | boolean;\n maxLength?: number;\n minLength?: number;\n pattern?: string;\n maxItems?: number;\n minItems?: number;\n uniqueItems?: boolean;\n maxContains?: number;\n minContains?: number;\n maxProperties?: number;\n minProperties?: number;\n required?: string[];\n dependentRequired?: Record<string, string[]>;\n enum?: Array<string | number | boolean | null>;\n const?: string | number | boolean | null;\n id?: string;\n title?: string;\n description?: string;\n default?: unknown;\n deprecated?: boolean;\n readOnly?: boolean;\n writeOnly?: boolean;\n nullable?: boolean;\n examples?: unknown[];\n format?: string;\n contentMediaType?: string;\n contentEncoding?: string;\n contentSchema?: JSONSchema;\n _prefault?: unknown;\n};\n\nexport type ComponentAiParams = {\n instructions?: string;\n exclude?: boolean;\n defaultZone?: { allow?: string[]; disallow?: string[]; disabled?: boolean };\n};\n\nexport type FieldAiParams = {\n instructions?: string;\n exclude?: boolean;\n required?: boolean;\n stream?: boolean;\n schema?: JSONSchema;\n bind?: string;\n};\n\nexport type AddOperation = {\n op: \"add\";\n id: string;\n index: number;\n zone: string;\n type: string;\n props: object;\n};\nexport type UpdateOperation = { op: \"update\"; id: string; props: object };\nexport type UpdateRootOperation = { op: \"updateRoot\"; props: object };\nexport type MoveOperation = {\n op: \"move\";\n zone: string;\n id: string;\n index: number;\n};\nexport type DeleteOperation = { op: \"delete\"; id: string };\nexport type DuplicateOperation = { op: \"duplicate\"; id: string };\nexport type ResetOperation = { op: \"reset\" };\nexport type Operation =\n | AddOperation\n | UpdateOperation\n | UpdateRootOperation\n | MoveOperation\n | DeleteOperation\n | DuplicateOperation\n | ResetOperation;\n\nexport type ToolStatus = {\n loading: boolean;\n label: string;\n error?: { message: string };\n};\nexport type DataToolStatus = { status: ToolStatus; toolCallId: string };\n\ntype TokenUsage = {\n inputTokens: number | undefined;\n outputTokens: number | undefined;\n totalTokens: number | undefined;\n reasoningTokens?: number | undefined;\n cachedInputTokens?: number | undefined;\n};\n\ntype DataFinish = {\n totalCost: number;\n tokenUsage: TokenUsage;\n};\n\ntype PuckDataParts = {\n \"new-chat-created\": { chatId: string };\n \"puck-actions\": PuckAction[];\n \"build-op\": Operation;\n \"tool-status\": DataToolStatus;\n \"user-tool\": { toolCallId: string; tools: { name: string; input: any }[] };\n \"send-screenshot\": { id: string; urls: { [breakpoint: number]: string }[] };\n finish: DataFinish;\n page: Data;\n};\n\ntype PuckProviderMetadata = {\n tokenUsage?: LanguageModelUsage;\n};\n\nexport type PuckMessage = UIMessage<PuckProviderMetadata, PuckDataParts>;\n\nexport type RequestOptions = {\n body?: {\n chatId?: string;\n trigger?: string;\n messages?: PuckMessage[];\n pageData?: Data;\n config?: Config;\n [key: string]: any;\n };\n headers?: HeadersInit;\n credentials?: RequestCredentials;\n};\n\nexport type ThinkingLevel = \"none\" | \"low\" | \"medium\" | \"high\";\n\nexport type AiSettings = {\n thinkingLevel: ThinkingLevel;\n urlContext: boolean;\n googleSearch: boolean;\n enterpriseWebSearch: boolean;\n /**\n * When a migration source URL is present, run Browser Rendering (Puppeteer/Worker) to capture\n * a viewport screenshot and DOM bundle for the model. When off, migration URLs still enable\n * URL context only — no `runBrowserMigrationPipeline` on the server.\n */\n browserCapture: boolean;\n /**\n * When migrating from a page URL, run the full browser pipeline (DOM bundle + structured IR).\n * Slower and uses more Worker time; leave off for screenshot-only + Vertex url_context.\n * Only applies when {@link AiSettings.browserCapture} is enabled.\n */\n pageMigrationIr: boolean;\n figmaToken: string;\n};\n\nconst DEFAULT_AI_SETTINGS: AiSettings = {\n thinkingLevel: \"none\",\n urlContext: false,\n googleSearch: false,\n enterpriseWebSearch: false,\n browserCapture: false,\n pageMigrationIr: false,\n figmaToken: \"\",\n};\n\nconst AI_SETTINGS_STORAGE_KEY = \"puck-ai-settings\";\n\nfunction useAiSettings(\n storageKey = AI_SETTINGS_STORAGE_KEY\n): [AiSettings, (update: Partial<AiSettings>) => void] {\n const [settings, setSettingsState] = useState<AiSettings>(() => {\n try {\n if (typeof window !== \"undefined\") {\n const stored = localStorage.getItem(storageKey);\n if (stored) return { ...DEFAULT_AI_SETTINGS, ...JSON.parse(stored) };\n }\n } catch {}\n return { ...DEFAULT_AI_SETTINGS };\n });\n\n const setSettings = useCallback(\n (update: Partial<AiSettings>) => {\n setSettingsState((prev) => {\n const next = { ...prev, ...update };\n try {\n localStorage.setItem(storageKey, JSON.stringify(next));\n } catch {}\n return next;\n });\n },\n [storageKey]\n );\n\n return [settings, setSettings];\n}\n\nexport type AiPluginProps = {\n host?: string;\n chat?: {\n onSubmit?: (prompt: string) => void;\n examplePrompts?: { label: string; href?: string; onClick?: () => void }[];\n };\n scrollTracking?: boolean;\n prepareRequest?: (\n opts: RequestOptions\n ) => RequestOptions | Promise<RequestOptions>;\n settings?: {\n storageKey?: string;\n };\n};\n\n// Extend pika-editor-core types\ndeclare module \"pika-editor-core\" {\n export interface ComponentMetadata {\n ai?: ComponentAiParams;\n }\n export interface ComponentConfigExtensions {\n ai?: ComponentAiParams;\n }\n export interface FieldMetadata {\n ai?: FieldAiParams;\n }\n export interface BaseField {\n ai?: FieldAiParams;\n }\n}\n\nexport type TargetComponent = {\n id: string;\n type: string;\n label?: string;\n};\n\ndeclare global {\n interface Window {\n __PUCK_AI: {\n sendMessage: (message: CreateUIMessage<PuckMessage>) => void;\n setMessages: (_messages: PuckMessage[]) => void;\n processData: (_dataPart: DataUIPart<PuckDataParts>) => void;\n setStatus: (_status: ChatStatus) => void;\n setPrompt: (_value: string) => void;\n setTargetComponent: (_target: TargetComponent | null) => void;\n };\n }\n}\n\n// ============================================================\n// Helpers\n// ============================================================\n\nconst prefixedUlid = (prefix = \"\") => `${prefix ? `${prefix}_` : \"\"}${ulid()}`;\n\nconst q = qler();\n\n// ============================================================\n// dispatchOp - sophisticated version that uses state lookups\n// ============================================================\n\nconst getSelectorForId = (state: any, id: string) => {\n const node = state?.indexes?.nodes?.[id];\n if (!node) return undefined;\n const zoneCompound = `${node.parentId}:${node.zone}`;\n const index = state.indexes.zones[zoneCompound]?.contentIds?.indexOf(id);\n return { zone: zoneCompound, index };\n};\n\nconst getItemById = (state: any, id: string) =>\n state?.indexes?.nodes?.[id]?.data;\n\nconst applyArrayDefaults = (oldProps: any, newProps: any, fields: any) => {\n const updatedProps = { ...oldProps, ...newProps };\n for (const fieldName in fields) {\n const field = fields[fieldName];\n if (field.type === \"array\") {\n const arrayField = field;\n const arrayFields = arrayField.arrayFields;\n updatedProps[fieldName] = (updatedProps[fieldName] || []).map(\n (item: any, index: number) => {\n const newItem: any = {};\n const defaultValue =\n typeof arrayField.defaultItemProps === \"function\"\n ? arrayField.defaultItemProps(index)\n : arrayField.defaultItemProps;\n for (const arrayFieldName in arrayFields) {\n const subField = arrayFields[arrayFieldName];\n if (subField.type === \"slot\") {\n newItem[arrayFieldName] =\n item[arrayFieldName] ??\n oldProps[fieldName]?.[index]?.[arrayFieldName] ??\n defaultValue?.[arrayFieldName];\n } else {\n newItem[arrayFieldName] =\n item[arrayFieldName] ?? defaultValue?.[arrayFieldName];\n }\n }\n return newItem;\n }\n );\n }\n }\n return updatedProps;\n};\n\n/**\n * After `insert`, Puck state exposed by `getState()` may not yet include the new node in the\n * same synchronous turn (React batching / store timing). Retry before merging AI props via `replace`.\n */\nconst scheduleReplacePropsAfterAddInsert = (\n operation: AddOperation,\n {\n getState,\n dispatchAction,\n config,\n }: {\n getState: () => any;\n dispatchAction: (action: any) => void;\n config: Config;\n }\n) => {\n const maxAttempts = 8;\n const tryApply = (attempt: number) => {\n const existing = getItemById(getState(), operation.id);\n if (existing) {\n const newData = {\n ...existing,\n props: applyArrayDefaults(\n existing.props,\n operation.props,\n config.components[existing.type]?.fields ?? {}\n ),\n };\n dispatchAction({\n type: \"replace\",\n destinationIndex: operation.index,\n destinationZone: operation.zone,\n data: newData,\n recordHistory: false,\n });\n return;\n }\n if (attempt >= maxAttempts) {\n const zoneOk = Boolean(getState()?.indexes?.zones?.[operation.zone]);\n console.error(\n \"Puck AI: could not find inserted item after add.\",\n zoneOk\n ? \"State may not have synced yet.\"\n : `Target zone may be invalid or not yet in the tree: ${operation.zone}`,\n operation\n );\n return;\n }\n const delay =\n attempt === 0\n ? 0\n : attempt === 1\n ? 0\n : attempt === 2\n ? 10\n : attempt === 3\n ? 50\n : attempt === 4\n ? 100\n : 200;\n setTimeout(() => tryApply(attempt + 1), delay);\n };\n queueMicrotask(() => tryApply(0));\n};\n\nconst dispatchOp = (\n operation: Operation,\n {\n getState,\n dispatchAction,\n config,\n }: {\n getState: () => any;\n dispatchAction: (action: any) => void;\n config: Config;\n }\n) => {\n const state = getState();\n try {\n if (operation.op === \"add\") {\n if (operation.zone) {\n dispatchAction({\n type: \"insert\",\n destinationIndex: operation.index,\n destinationZone: operation.zone,\n componentType: operation.type,\n id: operation.id,\n recordHistory: false,\n });\n scheduleReplacePropsAfterAddInsert(operation, {\n getState,\n dispatchAction,\n config,\n });\n }\n } else if (operation.op === \"update\") {\n const selector = getSelectorForId(state, operation.id);\n const existing = getItemById(state, operation.id);\n if (!selector || !existing) {\n throw new Error(\n `Tried to update an item that doesn't exist: ${operation.id}`\n );\n }\n const newData = {\n ...existing,\n props: applyArrayDefaults(\n existing.props,\n operation.props,\n config.components[existing.type]?.fields ?? {}\n ),\n };\n dispatchAction({\n type: \"replace\",\n destinationIndex: selector.index,\n destinationZone: selector.zone,\n data: newData,\n recordHistory: false,\n });\n } else if (operation.op === \"updateRoot\") {\n const existing = state?.data?.root;\n const defaultProps = (config as any).root?.defaultProps ?? {};\n dispatchAction({\n type: \"replaceRoot\",\n root: {\n ...existing,\n props: {\n ...defaultProps,\n ...existing?.props,\n ...operation.props,\n },\n },\n recordHistory: false,\n });\n } else if (operation.op === \"delete\") {\n const selector = getSelectorForId(state, operation.id);\n if (!selector) {\n throw new Error(\n `Tried to delete an item that doesn't exist: ${operation.id}`\n );\n }\n dispatchAction({\n type: \"remove\",\n zone: selector.zone,\n index: selector.index,\n recordHistory: false,\n });\n } else if (operation.op === \"duplicate\") {\n const selector = getSelectorForId(state, operation.id);\n if (!selector) {\n throw new Error(\n `Tried to duplicate an item that doesn't exist: ${operation.id}`\n );\n }\n dispatchAction({\n type: \"duplicate\",\n sourceZone: selector.zone,\n sourceIndex: selector.index,\n recordHistory: false,\n });\n } else if (operation.op === \"move\") {\n const selector = getSelectorForId(state, operation.id);\n if (!selector) {\n throw new Error(\n `Tried to move an item that doesn't exist: ${operation.id}`\n );\n }\n dispatchAction({\n type: \"move\",\n sourceZone: selector.zone,\n sourceIndex: selector.index,\n destinationIndex: operation.index,\n destinationZone: operation.zone,\n recordHistory: false,\n });\n } else if ((operation as Operation).op === \"reset\") {\n const defaultRootProps = (config as any).root?.defaultProps ?? {};\n dispatchAction({\n type: \"setData\",\n data: { content: [], root: defaultRootProps },\n recordHistory: false,\n });\n } else {\n throw new Error(`Unknown operation: ${(operation as any).op}`);\n }\n } catch (e) {\n console.error(\"Error applying operation, skipping...\", operation, e);\n }\n};\n\n// ============================================================\n// Tool status context\n// ============================================================\n\nconst toolStatusContext = createContext<Record<string, ToolStatus>>({});\nconst ToolStatusProvider = toolStatusContext.Provider;\n\n// ============================================================\n// Loader component\n// ============================================================\n\nfunction Loader({ size = 16 }: { size?: number }) {\n return (\n <span\n className=\"puck-ai-loader\"\n style={{ width: size, height: size }}\n aria-label=\"loading\"\n />\n );\n}\n\n// ============================================================\n// ToolStatus display component\n// ============================================================\n\nfunction ToolStatusDisplay({ status }: { status: ToolStatus }) {\n return (\n <div className=\"puck-ai-chat-message-data\">\n <div className=\"puck-ai-chat-message-data-inner\">\n <div className=\"puck-ai-chat-message-data-icon\">\n {status.error ? (\n <TriangleAlert size={18} />\n ) : status.loading ? (\n <Loader size={16} />\n ) : (\n <Check size={18} />\n )}\n </div>\n <div>{status.label}</div>\n </div>\n </div>\n );\n}\n\n// ============================================================\n// PuckTool component for tool call parts\n// ============================================================\n\nfunction PuckTool({\n toolCallId,\n output,\n status: mergedStatus,\n defaultLabel = \"Thinking...\",\n}: {\n toolCallId: string;\n output?: any;\n status?: ToolStatus;\n defaultLabel?: string;\n}) {\n const toolStatusMap = useContext(toolStatusContext);\n const contextStatus = toolStatusMap[toolCallId];\n const outputObj = output as any;\n const status: ToolStatus =\n mergedStatus ??\n (outputObj && \"status\" in outputObj\n ? outputObj.status\n : contextStatus ?? { loading: true, label: defaultLabel });\n return <ToolStatusDisplay status={status} />;\n}\n\nfunction safeJsonPreview(value: unknown, maxLen = 4000): string {\n try {\n const s = JSON.stringify(value, null, 2);\n if (s.length <= maxLen) return s;\n return `${s.slice(0, maxLen)}\\n…`;\n } catch {\n return String(value);\n }\n}\n\nfunction FileMessagePart({\n part,\n role,\n}: {\n part: { mediaType: string; url: string; filename?: string };\n role: string;\n}) {\n const isImage = part.mediaType.startsWith(\"image/\");\n if (isImage) {\n return (\n <div\n className={`puck-ai-chat-message-file${\n role === \"user\" ? \" puck-ai-chat-message-file--user\" : \"\"\n }`}\n >\n <img\n src={part.url}\n alt={part.filename ?? \"Attached image\"}\n className=\"puck-ai-chat-message-file-image\"\n />\n {part.filename ? (\n <span className=\"puck-ai-chat-message-file-caption\">\n {part.filename}\n </span>\n ) : null}\n </div>\n );\n }\n return (\n <div className=\"puck-ai-chat-message-file puck-ai-chat-message-file--document\">\n <a\n href={part.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n download={part.filename}\n >\n {part.filename ?? part.mediaType}\n </a>\n </div>\n );\n}\n\nfunction ReasoningMessagePart({\n part,\n}: {\n part: { text: string; state?: string };\n}) {\n const streaming = part.state === \"streaming\";\n return (\n <details className=\"puck-ai-chat-message-reasoning\" open={streaming}>\n <summary className=\"puck-ai-chat-message-reasoning-summary\">\n Reasoning\n {streaming ? (\n <span\n className=\"puck-ai-chat-message-reasoning-streaming\"\n aria-live=\"polite\"\n >\n <Loader size={12} />\n </span>\n ) : null}\n </summary>\n <div className=\"puck-ai-chat-message-reasoning-body\">\n <ReactMarkdown>{part.text}</ReactMarkdown>\n </div>\n </details>\n );\n}\n\nfunction SdkToolInvocation({ part }: { part: ToolUIPart | DynamicToolUIPart }) {\n const name = getToolName(part);\n const state = part.state;\n let stateLabel: string;\n if (state === \"input-streaming\") stateLabel = \"Preparing…\";\n else if (state === \"input-available\") stateLabel = \"Running…\";\n else if (state === \"output-available\") stateLabel = \"Done\";\n else if (state === \"output-error\") stateLabel = \"Error\";\n else if (state === \"approval-requested\") stateLabel = \"Awaiting approval\";\n else if (state === \"approval-responded\") stateLabel = \"Approval recorded\";\n else if (state === \"output-denied\") stateLabel = \"Denied\";\n else stateLabel = state;\n\n const loading =\n state === \"input-streaming\" ||\n state === \"input-available\" ||\n state === \"approval-requested\";\n\n const input = \"input\" in part ? part.input : undefined;\n const output = \"output\" in part ? part.output : undefined;\n const errorText = \"errorText\" in part ? part.errorText : undefined;\n\n return (\n <div className=\"puck-ai-chat-message-tool\">\n <div className=\"puck-ai-chat-message-tool-header\">\n <span className=\"puck-ai-chat-message-tool-icon\" aria-hidden>\n <Wrench size={14} />\n </span>\n <span className=\"puck-ai-chat-message-tool-name\">{name}</span>\n <span className=\"puck-ai-chat-message-tool-state\">\n {loading ? <Loader size={12} /> : null}\n {stateLabel}\n </span>\n </div>\n {state === \"output-error\" && errorText ? (\n <div className=\"puck-ai-chat-message-tool-error\">{errorText}</div>\n ) : null}\n <details className=\"puck-ai-chat-message-tool-details\">\n <summary>Input / output</summary>\n {input !== undefined ? (\n <pre className=\"puck-ai-chat-message-tool-pre\">\n {safeJsonPreview(input)}\n </pre>\n ) : null}\n {state === \"output-available\" && output !== undefined ? (\n <pre className=\"puck-ai-chat-message-tool-pre\">\n {safeJsonPreview(output)}\n </pre>\n ) : null}\n </details>\n </div>\n );\n}\n\nfunction DataMessagePart({ part }: { part: DataUIPart<PuckDataParts> }) {\n if (part.type === \"data-puck-actions\") {\n const actions = part.data as PuckAction[];\n return (\n <div className=\"puck-ai-chat-message-data-summary\">\n Applied {actions.length} editor action{actions.length === 1 ? \"\" : \"s\"}\n </div>\n );\n }\n if (part.type === \"data-build-op\") {\n const op = part.data as Operation;\n return (\n <div className=\"puck-ai-chat-message-data-summary\">\n Build operation: <code>{op.op}</code>\n </div>\n );\n }\n if (part.type === \"data-finish\") {\n const d = part.data as DataFinish;\n return (\n <div className=\"puck-ai-chat-message-data-summary\">\n Tokens: in {d.tokenUsage?.inputTokens ?? \"—\"} · out{\" \"}\n {d.tokenUsage?.outputTokens ?? \"—\"}\n {d.totalCost !== undefined ? ` · cost ${d.totalCost}` : \"\"}\n </div>\n );\n }\n if (part.type === \"data-page\") {\n return (\n <div className=\"puck-ai-chat-message-data-summary\">\n Page snapshot attached\n </div>\n );\n }\n if (\n part.type === \"data-new-chat-created\" ||\n part.type === \"data-tool-status\" ||\n part.type === \"data-send-screenshot\"\n ) {\n return null;\n }\n return (\n <details className=\"puck-ai-chat-message-data-raw\">\n <summary>{part.type.replace(/^data-/, \"\")}</summary>\n <pre className=\"puck-ai-chat-message-tool-pre\">\n {safeJsonPreview(part.data)}\n </pre>\n </details>\n );\n}\n\n// ============================================================\n// ChatMessagePart\n// ============================================================\n\nfunction ChatMessagePart({ part, role }: { part: any; role: string }) {\n if (isTextUIPart(part)) {\n return (\n <div className=\"puck-ai-chat-message-text\">\n {role === \"assistant\" || role === \"user\" ? (\n <ReactMarkdown>{part.text}</ReactMarkdown>\n ) : (\n <span>{part.text}</span>\n )}\n </div>\n );\n }\n if (isReasoningUIPart(part)) {\n return <ReasoningMessagePart part={part} />;\n }\n if (isFileUIPart(part)) {\n return <FileMessagePart part={part} role={role} />;\n }\n if (part.type === \"source-url\") {\n return (\n <div className=\"puck-ai-chat-message-source\">\n <a href={part.url} target=\"_blank\" rel=\"noopener noreferrer\">\n {part.title ?? part.url}\n </a>\n </div>\n );\n }\n if (part.type === \"source-document\") {\n return (\n <div className=\"puck-ai-chat-message-source\">\n <span title={part.filename}>{part.title}</span>\n <span className=\"puck-ai-chat-message-source-meta\">\n {part.mediaType}\n </span>\n </div>\n );\n }\n if (part.type === \"step-start\") {\n return <div className=\"puck-ai-chat-message-step\" aria-hidden />;\n }\n if (isToolUIPart(part)) {\n if (\n part.type === \"tool-createPage\" ||\n part.type === \"tool-updatePage\" ||\n part.type === \"tool-userTool\"\n ) {\n return <PuckTool {...part} />;\n }\n return <SdkToolInvocation part={part} />;\n }\n if (isDataUIPart(part)) {\n return <DataMessagePart part={part as DataUIPart<PuckDataParts>} />;\n }\n return null;\n}\n\n// ============================================================\n// ChatMessage\n// ============================================================\n\nfunction ChatMessage({ message }: { message: PuckMessage }) {\n const { role, parts } = message;\n return (\n <div\n className={`puck-ai-chat-message${\n role === \"user\" ? \" puck-ai-chat-message--user-role\" : \"\"\n }`}\n data-message-id={message.id}\n >\n {parts.map((part: any, i: number) => (\n <ChatMessagePart\n key={`${message.id}-${part.type}-${i}`}\n part={part}\n role={role}\n />\n ))}\n </div>\n );\n}\n\n// ============================================================\n// ExamplePrompt\n// ============================================================\n\nfunction ExamplePrompt({\n label,\n href,\n onClick,\n}: {\n label: string;\n href?: string;\n onClick?: () => void;\n}) {\n const El = href ? \"a\" : \"button\";\n return (\n <El\n className=\"puck-ai-chatbody-example-prompt\"\n href={href as any}\n onClick={onClick}\n >\n <div>{label}</div>\n <div className=\"puck-ai-chatbody-example-prompt-arrow\">\n <ArrowUp size={16} />\n </div>\n </El>\n );\n}\n\n// ============================================================\n// PromptForm\n// ============================================================\n\nfunction PromptForm({\n handleSubmit,\n inputRef,\n isLoading,\n glow,\n placeholder = \"What do you want to build?\",\n minRows = 2,\n maxRows = 5,\n value = \"\",\n images = [],\n onImagesChange,\n}: {\n handleSubmit: (prompt: string) => void;\n inputRef?: React.RefObject<HTMLTextAreaElement | null>;\n isLoading?: boolean;\n glow?: boolean;\n placeholder?: string;\n minRows?: number;\n maxRows?: number;\n value?: string;\n images?: AttachedImage[];\n onImagesChange?: (imgs: AttachedImage[]) => void;\n}) {\n const [prompt, setPrompt] = useState(value);\n const [isDragOver, setIsDragOver] = useState(false);\n const hasSetInitialPrompt = useRef(false);\n const internalRef = useRef<HTMLTextAreaElement | null>(null);\n const fileInputRef = useRef<HTMLInputElement | null>(null);\n\n useEffect(() => {\n setPrompt(value);\n }, [value]);\n\n useEffect(() => {\n const currentUrl = new URL(location.href);\n const initialPrompt = currentUrl.searchParams.get(\"initialPrompt\");\n if (!hasSetInitialPrompt.current && initialPrompt && prompt === \"\") {\n hasSetInitialPrompt.current = true;\n setPrompt(initialPrompt);\n }\n }, []);\n\n const addImages = useCallback(\n async (files: FileList | File[]) => {\n const newImgs = await filesToAttachedImages(files);\n if (newImgs.length > 0) {\n onImagesChange?.([...images, ...newImgs]);\n }\n },\n [images, onImagesChange]\n );\n\n const removeImage = useCallback(\n (id: string) => {\n onImagesChange?.(images.filter((img) => img.id !== id));\n },\n [images, onImagesChange]\n );\n\n const sendPrompt = () => {\n if (isLoading) return;\n if (prompt.trim() || images.length > 0) {\n handleSubmit(prompt);\n }\n setPrompt(\"\");\n };\n\n const handleDragOver = (e: React.DragEvent) => {\n e.preventDefault();\n if (e.dataTransfer.types.some((t) => t === \"Files\")) {\n setIsDragOver(true);\n }\n };\n const handleDragLeave = (e: React.DragEvent) => {\n if (!e.currentTarget.contains(e.relatedTarget as Node)) {\n setIsDragOver(false);\n }\n };\n const handleDrop = async (e: React.DragEvent) => {\n e.preventDefault();\n setIsDragOver(false);\n if (e.dataTransfer.files.length > 0) {\n await addImages(e.dataTransfer.files);\n }\n };\n\n const handlePaste = async (e: React.ClipboardEvent<HTMLTextAreaElement>) => {\n const items = Array.from(e.clipboardData.items);\n const imageFiles = items\n .filter((item) => item.kind === \"file\" && item.type.startsWith(\"image/\"))\n .map((item) => item.getAsFile())\n .filter((file): file is File => file !== null);\n\n if (imageFiles.length > 0) {\n await addImages(imageFiles);\n }\n };\n\n const classNames = [\n \"puck-ai-prompt-form\",\n glow ? \"puck-ai-prompt-form--glow\" : \"\",\n isLoading ? \"puck-ai-prompt-form--is-loading\" : \"\",\n isDragOver ? \"puck-ai-prompt-form--drag-over\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <div\n className={classNames}\n onDragOver={handleDragOver}\n onDragEnter={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n >\n <div className=\"puck-ai-prompt-form-inner\">\n <span className=\"puck-ai-prompt-form-glow\" />\n {/* Hidden file input */}\n <input\n ref={fileInputRef}\n type=\"file\"\n accept=\"image/*\"\n multiple\n style={{ display: \"none\" }}\n onChange={async (e) => {\n if (e.target.files) {\n await addImages(e.target.files);\n e.target.value = \"\";\n }\n }}\n />\n <form\n onSubmit={(e) => {\n e.preventDefault();\n sendPrompt();\n }}\n >\n {/* Image thumbnails strip */}\n {images.length > 0 && (\n <div className=\"puck-ai-image-thumbnails\">\n {images.map((img) => (\n <div key={img.id} className=\"puck-ai-image-thumbnail\">\n <img src={img.dataUrl} alt={img.name} />\n <button\n type=\"button\"\n className=\"puck-ai-image-thumbnail-remove\"\n onClick={() => removeImage(img.id)}\n title=\"Remove image\"\n >\n <X size={10} />\n </button>\n </div>\n ))}\n </div>\n )}\n <div className=\"puck-ai-prompt-form-form-inner\">\n <TextareaAutosize\n className=\"puck-ai-prompt-form-input\"\n name=\"prompt\"\n minRows={minRows}\n maxRows={maxRows}\n placeholder={isDragOver ? \"Drop images here…\" : placeholder}\n disabled={isLoading}\n value={prompt}\n ref={(node) => {\n if (inputRef) {\n (\n inputRef as React.MutableRefObject<HTMLTextAreaElement | null>\n ).current = node;\n }\n internalRef.current = node;\n }}\n onChange={(e) => setPrompt(e.target.value)}\n onPaste={handlePaste}\n onKeyDown={(e) => {\n if (!e.shiftKey && e.key === \"Enter\") {\n e.preventDefault();\n }\n }}\n onKeyUp={(e) => {\n if (!e.shiftKey && e.key === \"Enter\") {\n e.preventDefault();\n sendPrompt();\n }\n }}\n />\n <div\n className=\"puck-ai-prompt-form-actions\"\n onClick={() => internalRef.current?.focus()}\n >\n <div\n className=\"puck-ai-prompt-form-actions-left\"\n onClick={(e) => e.stopPropagation()}\n >\n <button\n type=\"button\"\n className=\"puck-ai-image-attach-btn\"\n title=\"Attach image\"\n onClick={() => fileInputRef.current?.click()}\n disabled={isLoading}\n >\n <ImageIcon size={15} />\n </button>\n </div>\n <div\n className=\"puck-ai-prompt-form-actions-right\"\n onClick={(e) => e.stopPropagation()}\n >\n <button\n className=\"puck-ai-prompt-form-action-submit\"\n type=\"submit\"\n disabled={isLoading}\n >\n <ArrowUp size={24} />\n </button>\n </div>\n </div>\n </div>\n </form>\n </div>\n </div>\n );\n}\n\n// ============================================================\n// ChatBody\n// ============================================================\n\nfunction ChatBody({\n children,\n examplePrompts,\n handleSubmit,\n hideInput,\n inputRef,\n messages = [],\n status,\n error,\n handleRetry,\n promptValue,\n targetComponent,\n onClearTarget,\n images,\n onImagesChange,\n}: {\n children?: ReactNode;\n examplePrompts?: ReactNode;\n handleSubmit: (prompt: string) => void;\n hideInput?: boolean;\n inputRef?: React.RefObject<HTMLTextAreaElement | null>;\n messages?: PuckMessage[];\n status: ChatStatus;\n error?: string;\n handleRetry?: () => void;\n promptValue?: string;\n targetComponent?: TargetComponent | null;\n onClearTarget?: () => void;\n images?: AttachedImage[];\n onImagesChange?: (imgs: AttachedImage[]) => void;\n}) {\n const { scrollRef, contentRef } = useStickToBottom();\n const hasMessages = messages && messages.length > 0;\n\n const classNames = [\n \"puck-ai-chatbody\",\n hasMessages ? \"puck-ai-chatbody--has-messages\" : \"\",\n children ? \"puck-ai-chatbody--has-children\" : \"\",\n hideInput ? \"puck-ai-chatbody--hide-input\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <div className={classNames}>\n {children ? (\n <div className=\"puck-ai-chatbody-default\">{children}</div>\n ) : null}\n <div className=\"puck-ai-chatbody-inner\" ref={scrollRef}>\n <div className=\"puck-ai-chatbody-messages\" ref={contentRef}>\n {[...messages].reverse().map((message) => (\n <ChatMessage key={message.id} message={message} />\n ))}\n </div>\n {status === \"submitted\" && (\n <div className=\"puck-ai-chatbody-loader\">\n <Loader size={14} />\n </div>\n )}\n {error && (\n <div className=\"puck-ai-chatbody-error\">\n <div className=\"puck-ai-chatbody-error-label\">\n Something went wrong.\n </div>\n {handleRetry && (\n <div className=\"puck-ai-chatbody-error-action\">\n <button\n className=\"puck-ai-icon-button\"\n title=\"Retry\"\n onClick={handleRetry}\n >\n <RotateCcw size={14} />\n </button>\n </div>\n )}\n </div>\n )}\n <div className=\"puck-ai-chatbody-form\">\n {targetComponent && (\n <div className=\"puck-ai-target-banner\">\n <span className=\"puck-ai-target-banner-label\">Targeting:</span>\n <span className=\"puck-ai-target-banner-name\">\n {targetComponent.label || targetComponent.type}\n </span>\n <code className=\"puck-ai-target-banner-id\">\n {targetComponent.id}\n </code>\n {onClearTarget && (\n <button\n className=\"puck-ai-target-banner-clear\"\n onClick={onClearTarget}\n title=\"Clear target\"\n type=\"button\"\n >\n ×\n </button>\n )}\n </div>\n )}\n <PromptForm\n glow={!hasMessages && !targetComponent}\n handleSubmit={handleSubmit}\n inputRef={inputRef}\n isLoading={status === \"submitted\" || status === \"streaming\"}\n placeholder={\n targetComponent\n ? `What should I do with the ${\n targetComponent.label || targetComponent.type\n }?`\n : \"What do you want to build?\"\n }\n value={promptValue}\n images={images}\n onImagesChange={onImagesChange}\n />\n {examplePrompts ? (\n <div className=\"puck-ai-chatbody-example-prompts\">\n {examplePrompts}\n </div>\n ) : null}\n </div>\n </div>\n </div>\n );\n}\n\n// ============================================================\n// Placeholder (shown when no messages)\n// ============================================================\n\nfunction isScrolledIntoView(el: Element) {\n const rect = el.getBoundingClientRect();\n return rect.top >= 0 && rect.bottom <= window.innerHeight;\n}\n\nfunction Placeholder({\n dispatch,\n inputRef,\n pluginRef,\n}: {\n dispatch: (action: any) => void;\n inputRef: React.RefObject<HTMLTextAreaElement | null>;\n pluginRef: React.RefObject<HTMLDivElement | null>;\n}) {\n const handleEnterPromptClick = () => {\n inputRef.current?.focus({ preventScroll: true });\n setTimeout(() => {\n if (\n pluginRef.current &&\n inputRef.current &&\n !isScrolledIntoView(inputRef.current)\n ) {\n const box = pluginRef.current.getBoundingClientRect();\n const top = box.top - (window.innerHeight - box.height) / 2;\n window.scrollTo({ behavior: \"smooth\", top });\n }\n }, 10);\n };\n\n return (\n <div className=\"puck-ai-chat-placeholder\">\n <Bot size={24} />\n <div>Use AI to build a page using the available blocks</div>\n <div className=\"puck-ai-chat-actions\">\n <button\n className=\"puck-ai-chat-action\"\n onClick={handleEnterPromptClick}\n >\n Enter prompt\n </button>\n <button\n className=\"puck-ai-chat-action-outlined\"\n onClick={() => {\n dispatch({ type: \"setUi\", ui: { plugin: { current: \"blocks\" } } });\n }}\n >\n Build manually\n </button>\n </div>\n </div>\n );\n}\n\n// ============================================================\n// ScrollTracking\n// ============================================================\n\nfunction scrollIntoViewLocal(\n el: Element,\n win: Window,\n behavior: ScrollBehavior = \"smooth\"\n) {\n const scroller =\n (el.ownerDocument?.scrollingElement as HTMLElement) ||\n (el.ownerDocument?.documentElement as HTMLElement);\n const rect = el.getBoundingClientRect();\n const vpH = win.innerHeight;\n const current = scroller.scrollTop;\n const offset = win.innerHeight / 2;\n let targetTop = current;\n if (rect.top < 0) {\n targetTop = current + rect.top;\n } else if (rect.bottom > vpH) {\n targetTop = current + (rect.bottom - vpH);\n }\n if (targetTop !== current) {\n scroller.scrollTo({ top: targetTop + offset, behavior });\n }\n}\n\nfunction useFrameMutationObserver(\n callback: (entries: MutationRecord[], win: Window) => void\n) {\n return useCallback(() => {\n const frame = document?.getElementById(\n \"preview-frame\"\n ) as HTMLIFrameElement | null;\n if (!frame) return;\n let observer: MutationObserver | null = null;\n const win = frame.contentWindow;\n let enabled = true;\n const disable = () => {\n enabled = false;\n };\n const attachObserver = () => {\n const win2 = frame.contentWindow;\n const doc = frame.contentDocument || win2?.document;\n if (!win2 || !doc) return;\n const target = doc.querySelector(\"#frame-root > div\");\n if (!target) return;\n observer = new MutationObserver((entries) => {\n if (enabled) callback(entries, win2);\n });\n observer.observe(target, { childList: true, subtree: true });\n win2.addEventListener(\"pointerdown\", disable);\n win2.addEventListener(\"wheel\", disable);\n };\n if (frame.contentDocument?.readyState === \"complete\") {\n attachObserver();\n } else {\n frame.addEventListener(\"load\", attachObserver, { once: true });\n }\n return () => {\n frame.removeEventListener(\"load\", attachObserver);\n win?.removeEventListener(\"pointerdown\", disable);\n win?.removeEventListener(\"wheel\", disable);\n observer?.disconnect();\n };\n }, [callback]);\n}\n\nfunction ScrollTracking({ children }: { children: ReactNode }) {\n const followedRefs = useRef<Element[]>([]);\n const follow = useFrameMutationObserver((records, win) => {\n if (records.length > 0) {\n const lastRecord = records[records.length - 1];\n if (followedRefs.current.includes(lastRecord.target as Element)) return;\n followedRefs.current.push(lastRecord.target as Element);\n requestAnimationFrame(() => {\n const el = lastRecord.target as Element;\n scrollIntoViewLocal(el, win);\n });\n }\n });\n useEffect(() => {\n const cleanup = follow();\n return cleanup;\n }, [follow]);\n return <>{children}</>;\n}\n\n// ============================================================\n// Toggle switch\n// ============================================================\n\nfunction Toggle({\n checked,\n onChange,\n id,\n disabled,\n}: {\n checked: boolean;\n onChange: (v: boolean) => void;\n id: string;\n disabled?: boolean;\n}) {\n return (\n <label\n className={`puck-ai-toggle${disabled ? \" puck-ai-toggle--disabled\" : \"\"}`}\n htmlFor={id}\n >\n <input\n type=\"checkbox\"\n id={id}\n checked={checked}\n disabled={disabled}\n onChange={(e) => onChange(e.target.checked)}\n className=\"puck-ai-toggle-input\"\n />\n <span className=\"puck-ai-toggle-slider\" />\n </label>\n );\n}\n\n// ============================================================\n// SettingsPanel\n// ============================================================\n\nfunction SettingsPanel({\n settings,\n onChange,\n onClearChatHistory,\n hasChatMessages,\n}: {\n settings: AiSettings;\n onChange: (update: Partial<AiSettings>) => void;\n onClearChatHistory: () => void;\n hasChatMessages: boolean;\n}) {\n const [showToken, setShowToken] = useState(false);\n\n return (\n <div className=\"puck-ai-settings-scroll\">\n <div className=\"puck-ai-settings\">\n <div className=\"puck-ai-settings-section\">\n <div className=\"puck-ai-settings-section-title\">Model settings</div>\n\n <div className=\"puck-ai-settings-row\">\n <label\n className=\"puck-ai-settings-label\"\n htmlFor=\"puck-ai-thinking-level\"\n >\n Thinking level\n <span className=\"puck-ai-settings-hint\">\n Extended reasoning budget\n </span>\n </label>\n <select\n id=\"puck-ai-thinking-level\"\n className=\"puck-ai-settings-select\"\n value={settings.thinkingLevel}\n onChange={(e) =>\n onChange({ thinkingLevel: e.target.value as ThinkingLevel })\n }\n >\n <option value=\"none\">Off</option>\n <option value=\"low\">Low</option>\n <option value=\"medium\">Medium</option>\n <option value=\"high\">High</option>\n </select>\n </div>\n\n <div className=\"puck-ai-settings-row\">\n <label\n className=\"puck-ai-settings-label\"\n htmlFor=\"puck-ai-url-context\"\n >\n URL context\n <span className=\"puck-ai-settings-hint\">\n Fetch linked URLs during generation\n </span>\n </label>\n <Toggle\n id=\"puck-ai-url-context\"\n checked={settings.urlContext}\n onChange={(v) => onChange({ urlContext: v })}\n />\n </div>\n\n <div className=\"puck-ai-settings-row\">\n <label\n className=\"puck-ai-settings-label\"\n htmlFor=\"puck-ai-browser-capture\"\n >\n Browser capture\n <span className=\"puck-ai-settings-hint\">\n Run server-side browser migration (screenshot + DOM bundle) when a migration\n URL is in the prompt. Turn off to use URL context only without Worker/Puppeteer.\n </span>\n </label>\n <Toggle\n id=\"puck-ai-browser-capture\"\n checked={settings.browserCapture}\n onChange={(v) =>\n onChange({\n browserCapture: v,\n ...(v ? {} : { pageMigrationIr: false }),\n })\n }\n />\n </div>\n\n <div className=\"puck-ai-settings-row\">\n <label\n className=\"puck-ai-settings-label\"\n htmlFor=\"puck-ai-page-migration-ir\"\n >\n Page migration IR\n <span className=\"puck-ai-settings-hint\">\n Full DOM bundle + structured plan when a source URL is captured\n (slower; screenshot-only when off). Requires Browser capture.\n </span>\n </label>\n <Toggle\n id=\"puck-ai-page-migration-ir\"\n disabled={!settings.browserCapture}\n checked={settings.pageMigrationIr}\n onChange={(v) => onChange({ pageMigrationIr: v })}\n />\n </div>\n\n <div className=\"puck-ai-settings-row\">\n <label\n className=\"puck-ai-settings-label\"\n htmlFor=\"puck-ai-google-search\"\n >\n Google Search\n <span className=\"puck-ai-settings-hint\">\n Ground responses with live search\n </span>\n </label>\n <Toggle\n id=\"puck-ai-google-search\"\n checked={settings.googleSearch}\n onChange={(v) => onChange({ googleSearch: v })}\n />\n </div>\n\n <div className=\"puck-ai-settings-row\">\n <label\n className=\"puck-ai-settings-label\"\n htmlFor=\"puck-ai-enterprise-search\"\n >\n Enterprise web search\n <span className=\"puck-ai-settings-hint\">\n Advanced grounding via Vertex AI\n </span>\n </label>\n <Toggle\n id=\"puck-ai-enterprise-search\"\n checked={settings.enterpriseWebSearch}\n onChange={(v) => onChange({ enterpriseWebSearch: v })}\n />\n </div>\n </div>\n\n <div className=\"puck-ai-settings-section\">\n <div className=\"puck-ai-settings-section-title\">\n Figma integration\n </div>\n\n <div className=\"puck-ai-settings-row puck-ai-settings-row--column\">\n <label\n className=\"puck-ai-settings-label\"\n htmlFor=\"puck-ai-figma-token\"\n >\n Personal access token\n </label>\n <div className=\"puck-ai-settings-input-wrap\">\n <input\n id=\"puck-ai-figma-token\"\n type={showToken ? \"text\" : \"password\"}\n className=\"puck-ai-settings-input\"\n placeholder=\"figd_xxxxxxxxxxxx\"\n value={settings.figmaToken}\n onChange={(e) => onChange({ figmaToken: e.target.value })}\n autoComplete=\"off\"\n spellCheck={false}\n />\n <button\n type=\"button\"\n className=\"puck-ai-settings-input-action\"\n onClick={() => setShowToken((v) => !v)}\n title={showToken ? \"Hide token\" : \"Show token\"}\n >\n {showToken ? <EyeOff size={14} /> : <Eye size={14} />}\n </button>\n </div>\n <a\n href=\"https://www.figma.com/settings\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"puck-ai-settings-link\"\n >\n Get your Figma access token →\n </a>\n <span className=\"puck-ai-settings-hint\" style={{ marginTop: 4 }}>\n Paste a Figma URL in chat to generate from your design. Token\n overrides server config.\n </span>\n </div>\n </div>\n\n <div className=\"puck-ai-settings-section\">\n <div className=\"puck-ai-settings-section-title\">Chat</div>\n <div className=\"puck-ai-settings-row puck-ai-settings-row--column\">\n <label\n className=\"puck-ai-settings-label\"\n htmlFor=\"puck-ai-clear-chat\"\n >\n Clear chat history\n <span className=\"puck-ai-settings-hint\">\n Remove all messages and reset the conversation context for this\n session.\n </span>\n </label>\n <button\n id=\"puck-ai-clear-chat\"\n type=\"button\"\n className=\"puck-ai-settings-clear-chat\"\n disabled={!hasChatMessages}\n onClick={onClearChatHistory}\n >\n <Trash2 size={14} aria-hidden />\n Clear messages\n </button>\n </div>\n </div>\n </div>\n </div>\n );\n}\n\n// ============================================================\n// usePuck store hook (singleton per plugin instance)\n// ============================================================\n\nconst usePuck = createUsePuck();\n\n// ============================================================\n// Main Chat component\n// ============================================================\n\nexport function Chat({\n chat,\n host = \"/api/puck/chat\",\n prepareRequest,\n settings,\n}: {\n chat?: AiPluginProps[\"chat\"];\n host?: string;\n prepareRequest?: AiPluginProps[\"prepareRequest\"];\n settings?: AiPluginProps[\"settings\"];\n}) {\n const { examplePrompts } = chat ?? {};\n const puckDispatch = (usePuck as any)((s: any) => s.dispatch);\n const getPuck = useGetPuck();\n const localChatId = useRef(\"\");\n const inputRef = useRef<HTMLTextAreaElement | null>(null);\n const pluginRef = useRef<HTMLDivElement | null>(null);\n const [error, setError] = useState<string | undefined>();\n const [toolStatus, setToolStatus] = useState<Record<string, ToolStatus>>({});\n const [showSettings, setShowSettings] = useState(false);\n const [aiSettings, setAiSettings] = useAiSettings(settings?.storageKey);\n const aiSettingsRef = useRef<AiSettings>(aiSettings);\n useEffect(() => {\n aiSettingsRef.current = aiSettings;\n }, [aiSettings]);\n\n const uploadScreenshot = useCallback(\n async (width: number, bucketUrl: string) => {\n const iframeDocument =\n (document?.getElementById(\"preview-frame\") as HTMLIFrameElement | null)\n ?.contentDocument?.documentElement ?? null;\n if (!iframeDocument) return;\n const canvas = await html2canvas(iframeDocument, {\n scale: 2,\n backgroundColor: \"#ffffff\",\n width,\n windowWidth: width,\n foreignObjectRendering: false,\n imageTimeout: 30000,\n logging: false,\n allowTaint: false,\n useCORS: true,\n scrollY: 0,\n ignoreElements: (el: Element) =>\n Array.from(el.classList).some(\n (c) =>\n c.startsWith(\"_DraggableComponent--hover\") ||\n c.startsWith(\"_ActionBar\")\n ),\n });\n const image = canvas.toDataURL(\"image/webp\", 0.8);\n const blob = await (await fetch(image)).blob();\n await fetch(bucketUrl, { method: \"PUT\", body: blob });\n },\n []\n );\n\n const processData = useCallback(\n (dataPart: DataUIPart<PuckDataParts>) => {\n switch (dataPart.type) {\n case \"data-new-chat-created\": {\n localChatId.current = (dataPart.data as any).chatId;\n return;\n }\n case \"data-puck-actions\": {\n (dataPart.data as PuckAction[]).forEach((action) => {\n try {\n puckDispatch(action);\n } catch (e) {\n console.error(\"Bad action: \", action);\n console.error(e);\n }\n });\n return;\n }\n case \"data-build-op\": {\n const data = dataPart.data as Operation;\n q.queue(() => {\n const puck = getPuck() as any;\n if (!puck) return;\n dispatchOp(data, {\n getState: () => puck.__private?.appState,\n dispatchAction: puck.dispatch,\n config: puck.config,\n });\n });\n return;\n }\n case \"data-tool-status\": {\n const { toolCallId, status: toolSt } =\n dataPart.data as DataToolStatus;\n setToolStatus((s) => ({ ...s, [toolCallId]: toolSt }));\n return;\n }\n case \"data-send-screenshot\": {\n const { urls } = dataPart.data as PuckDataParts[\"send-screenshot\"];\n urls.forEach((obj) => {\n const entries = Object.entries(obj);\n if (entries.length === 0) return;\n const [key, value] = entries[0];\n const breakpoint = Number(key);\n uploadScreenshot(breakpoint, value as string);\n });\n return;\n }\n default:\n console.warn(\"dataPart without case:\", dataPart);\n return;\n }\n },\n [getPuck, puckDispatch, uploadScreenshot]\n );\n\n const { messages, status, sendMessage, regenerate, setMessages } = useChat({\n generateId: () => prefixedUlid(\"msg\"),\n messages: [],\n transport: new DefaultChatTransport({\n api: host,\n prepareSendMessagesRequest: async (opts: any) => {\n const puck = getPuck() as any;\n const config = puck?.config ?? { components: {} };\n const appState = puck?.appState ?? {\n data: { root: { props: {} }, content: [], zones: {} },\n };\n\n const root = config.root ?? {\n fields: {\n title: {\n type: \"text\",\n ai: { instructions: \"The title for the page\" },\n },\n },\n };\n const configWithRoot = { ...config, root };\n\n const currentSettings = aiSettingsRef.current;\n const geminiConfig: Record<string, unknown> = {};\n if (currentSettings.thinkingLevel !== \"none\")\n geminiConfig.thinkingLevel = currentSettings.thinkingLevel;\n if (currentSettings.urlContext) geminiConfig.urlContext = true;\n if (currentSettings.browserCapture) {\n geminiConfig.browserCapture = true;\n if (currentSettings.pageMigrationIr)\n geminiConfig.pageMigrationIr = true;\n }\n if (currentSettings.googleSearch) geminiConfig.googleSearch = true;\n if (currentSettings.enterpriseWebSearch)\n geminiConfig.enterpriseWebSearch = true;\n if (currentSettings.figmaToken)\n geminiConfig.figmaToken = currentSettings.figmaToken;\n\n const defaultBody = {\n ...opts.body,\n chatId: localChatId.current,\n trigger: opts.trigger,\n messages: opts.messages,\n pageData: appState.data,\n config: configWithRoot,\n ...(Object.keys(geminiConfig).length > 0 ? { geminiConfig } : {}),\n // Read from refs to avoid stale closures — state values captured at\n // initial render would always be their initial values here.\n ...(targetComponentRef.current\n ? { selectedComponentId: targetComponentRef.current.id }\n : {}),\n // Consume (read + clear) the pending images for this request.\n // The ref is populated synchronously in handleSubmit before sendMessage\n // is called, so the value is always available here even though\n // prepareSendMessagesRequest runs asynchronously after a render cycle.\n ...(pendingSendImagesRef.current.length > 0\n ? (() => {\n const imgs = pendingSendImagesRef.current;\n pendingSendImagesRef.current = [];\n return { images: imgs };\n })()\n : {}),\n };\n\n const defaultOptions: RequestOptions = {\n headers: opts.headers,\n credentials: opts.credentials,\n body: defaultBody,\n };\n\n if (prepareRequest) {\n const userOptions = await prepareRequest(defaultOptions);\n return {\n headers: { ...defaultOptions.headers, ...userOptions.headers },\n credentials: userOptions.credentials ?? defaultOptions.credentials,\n body: { ...defaultBody, ...userOptions.body },\n };\n }\n return {\n headers: defaultOptions.headers,\n credentials: defaultOptions.credentials,\n body: defaultBody,\n };\n },\n }),\n onData: processData,\n onError: (e: Error) => {\n console.error(e);\n setError(e.message);\n },\n onFinish: () => {\n const puck = getPuck() as any;\n if (puck?.appState) {\n puckDispatch({\n type: \"set\",\n state: puck.appState,\n recordHistory: true,\n });\n }\n },\n } as any);\n\n const [forcedStatus, setForcedStatus] = useState<ChatStatus | undefined>();\n const resolvedStatus = useMemo(\n () => forcedStatus ?? status,\n [status, forcedStatus]\n );\n\n const [promptValue, setPromptValue] = useState(\"\");\n const [attachedImages, setAttachedImages] = useState<AttachedImage[]>([]);\n // \"Pending send\" ref: populated synchronously in handleSubmit, consumed\n // (read + cleared) inside prepareSendMessagesRequest.\n // We intentionally do NOT use useEffect to sync this ref because\n // useEffect runs after render — by then the SDK may already have called\n // prepareSendMessagesRequest with a stale (empty) value.\n const pendingSendImagesRef = useRef<string[]>([]);\n\n const [targetComponent, setTargetComponent] =\n useState<TargetComponent | null>(null);\n // Ref so prepareSendMessagesRequest (defined once inside useChat) always reads the latest value.\n const targetComponentRef = useRef<TargetComponent | null>(null);\n useEffect(() => {\n targetComponentRef.current = targetComponent;\n }, [targetComponent]);\n\n useEffect(() => {\n window.__PUCK_AI = {\n processData: processData as any,\n setMessages: setMessages as any,\n setStatus: setForcedStatus,\n sendMessage: sendMessage as any,\n setPrompt: (value: string) => {\n setPromptValue(value);\n inputRef.current?.focus();\n },\n setTargetComponent: (target: TargetComponent | null) => {\n setTargetComponent(target);\n inputRef.current?.focus();\n },\n };\n }, [processData, setMessages, sendMessage]);\n\n const handleSubmit = (prompt: string) => {\n const text = prompt.trim();\n if (chat?.onSubmit) {\n chat.onSubmit(text);\n return;\n }\n if (!text && attachedImages.length === 0) return;\n setError(\"\");\n setPromptValue(\"\");\n // Synchronously snapshot images into the pending-send ref BEFORE calling\n // setAttachedImages([]). prepareSendMessagesRequest is async (runs after\n // a render cycle), so we cannot rely on state or a useEffect-synced ref —\n // they would already be cleared by then.\n pendingSendImagesRef.current = attachedImages.map((img) => img.dataUrl);\n const fileParts = attachedImages.map(attachedImageToFileUIPart);\n setAttachedImages([]);\n // Include file parts so images appear in chat history; `body.images` is still\n // sent for APIs that read the legacy field from prepareSendMessagesRequest.\n const sendPayload: { text?: string; files?: FileUIPart[] } = {};\n if (text) sendPayload.text = text;\n if (fileParts.length > 0) sendPayload.files = fileParts;\n (sendMessage as any)(sendPayload).catch((e: Error) => {\n console.error(e);\n });\n };\n\n const messagesWithStatuses = useMemo(() => {\n return (messages as PuckMessage[]).map((msg) => ({\n ...msg,\n parts: msg.parts.map((part: any) => {\n if (\"toolCallId\" in part) {\n return { ...part, status: toolStatus[part.toolCallId] };\n }\n return part;\n }),\n }));\n }, [messages, toolStatus]);\n\n const handleClearChatHistory = useCallback(() => {\n if (!window.confirm(\"Clear all messages in this chat?\")) return;\n setMessages([]);\n setToolStatus({});\n setError(undefined);\n localChatId.current = \"\";\n setPromptValue(\"\");\n setAttachedImages([]);\n pendingSendImagesRef.current = [];\n setForcedStatus(undefined);\n }, [setMessages]);\n\n return (\n <div className=\"puck-ai-chat\" ref={pluginRef}>\n <div className=\"puck-ai-chat-header\">\n {showSettings && (\n <button\n className=\"puck-ai-icon-button\"\n onClick={() => setShowSettings(false)}\n title=\"Back to chat\"\n type=\"button\"\n >\n <ArrowLeft size={16} />\n </button>\n )}\n <span className=\"puck-ai-chat-header-title\">\n {showSettings ? \"Settings\" : \"AI page builder\"}\n </span>\n {!showSettings && (\n <button\n className=\"puck-ai-icon-button\"\n onClick={() => setShowSettings(true)}\n title=\"Settings\"\n type=\"button\"\n >\n <Settings size={16} />\n </button>\n )}\n </div>\n {showSettings ? (\n <SettingsPanel\n settings={aiSettings}\n onChange={setAiSettings}\n onClearChatHistory={handleClearChatHistory}\n hasChatMessages={(messages as PuckMessage[]).length > 0}\n />\n ) : (\n <ToolStatusProvider value={toolStatus}>\n <ChatBody\n messages={messagesWithStatuses}\n handleSubmit={handleSubmit}\n inputRef={inputRef}\n status={resolvedStatus}\n examplePrompts={examplePrompts?.map(({ label, href, onClick }) => (\n <ExamplePrompt\n key={label}\n label={label}\n href={href}\n onClick={onClick}\n />\n ))}\n error={error}\n handleRetry={() => {\n setError(\"\");\n regenerate();\n }}\n promptValue={promptValue}\n targetComponent={targetComponent}\n onClearTarget={() => setTargetComponent(null)}\n images={attachedImages}\n onImagesChange={setAttachedImages}\n >\n <Placeholder\n dispatch={puckDispatch}\n inputRef={inputRef}\n pluginRef={pluginRef}\n />\n </ChatBody>\n </ToolStatusProvider>\n )}\n </div>\n );\n}\n\n// ============================================================\n// createAiPlugin\n// ============================================================\n\nexport function createAiPlugin(opts: AiPluginProps = {}): Plugin {\n const { scrollTracking = true, host, chat, prepareRequest, settings } = opts;\n\n return {\n label: \"AI\",\n name: \"ai\",\n icon: <Bot />,\n mobilePanelHeight: \"min-content\",\n render: (): ReactElement => (\n <Chat\n host={host}\n chat={chat}\n prepareRequest={prepareRequest}\n settings={settings}\n />\n ),\n overrides: {\n preview: ({ children }: { children: ReactNode }): ReactElement => {\n if (scrollTracking) {\n return (<ScrollTracking>{children}</ScrollTracking>) as ReactElement;\n }\n return (<>{children}</>) as ReactElement;\n },\n },\n };\n}\n\nexport default createAiPlugin;\n","// react-import.js\nimport React from \"react\";\n\nexport { React };\n","import { CamelToPascal } from './utility-types';\n\n/**\n * Converts string to kebab case\n *\n * @param {string} string\n * @returns {string} A kebabized string\n */\nexport const toKebabCase = (string: string) =>\n string.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n\n/**\n * Converts string to camel case\n *\n * @param {string} string\n * @returns {string} A camelized string\n */\nexport const toCamelCase = <T extends string>(string: T) =>\n string.replace(/^([A-Z])|[\\s-_]+(\\w)/g, (match, p1, p2) =>\n p2 ? p2.toUpperCase() : p1.toLowerCase(),\n );\n\n/**\n * Converts string to pascal case\n *\n * @param {string} string\n * @returns {string} A pascalized string\n */\nexport const toPascalCase = <T extends string>(string: T): CamelToPascal<T> => {\n const camelCase = toCamelCase(string);\n\n return (camelCase.charAt(0).toUpperCase() + camelCase.slice(1)) as CamelToPascal<T>;\n};\n\n/**\n * Merges classes into a single string\n *\n * @param {array} classes\n * @returns {string} A string of classes\n */\nexport const mergeClasses = <ClassType = string | undefined | null>(...classes: ClassType[]) =>\n classes\n .filter((className, index, array) => {\n return Boolean(className) && array.indexOf(className) === index;\n })\n .join(' ');\n","export default {\n xmlns: 'http://www.w3.org/2000/svg',\n width: 24,\n height: 24,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 2,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n};\n","import { createElement, forwardRef } from 'react';\nimport defaultAttributes from './defaultAttributes';\nimport { IconNode, LucideProps } from './types';\nimport { mergeClasses } from '@lucide/shared';\n\ninterface IconComponentProps extends LucideProps {\n iconNode: IconNode;\n}\n\n/**\n * Lucide icon component\n *\n * @component Icon\n * @param {object} props\n * @param {string} props.color - The color of the icon\n * @param {number} props.size - The size of the icon\n * @param {number} props.strokeWidth - The stroke width of the icon\n * @param {boolean} props.absoluteStrokeWidth - Whether to use absolute stroke width\n * @param {string} props.className - The class name of the icon\n * @param {IconNode} props.children - The children of the icon\n * @param {IconNode} props.iconNode - The icon node of the icon\n *\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst Icon = forwardRef<SVGSVGElement, IconComponentProps>(\n (\n {\n color = 'currentColor',\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = '',\n children,\n iconNode,\n ...rest\n },\n ref,\n ) => {\n return createElement(\n 'svg',\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? (Number(strokeWidth) * 24) / Number(size) : strokeWidth,\n className: mergeClasses('lucide', className),\n ...rest,\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...(Array.isArray(children) ? children : [children]),\n ],\n );\n },\n);\n\nexport default Icon;\n","import { createElement, forwardRef } from 'react';\nimport { mergeClasses, toKebabCase } from '@lucide/shared';\nimport { IconNode, LucideProps } from './types';\nimport Icon from './Icon';\n\n/**\n * Create a Lucide icon component\n * @param {string} iconName\n * @param {array} iconNode\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst createLucideIcon = (iconName: string, iconNode: IconNode) => {\n const Component = forwardRef<SVGSVGElement, LucideProps>(({ className, ...props }, ref) =>\n createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(`lucide-${toKebabCase(iconName)}`, className),\n ...props,\n }),\n );\n\n Component.displayName = `${iconName}`;\n\n return Component;\n};\n\nexport default createLucideIcon;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name ArrowLeft\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/arrow-left\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ArrowLeft = createLucideIcon('ArrowLeft', [\n ['path', { d: 'm12 19-7-7 7-7', key: '1l729n' }],\n ['path', { d: 'M19 12H5', key: 'x3x0zl' }],\n]);\n\nexport default ArrowLeft;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name ArrowUp\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/arrow-up\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ArrowUp = createLucideIcon('ArrowUp', [\n ['path', { d: 'm5 12 7-7 7 7', key: 'hav0vg' }],\n ['path', { d: 'M12 19V5', key: 'x0mq9r' }],\n]);\n\nexport default ArrowUp;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Bot\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/bot\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Bot = createLucideIcon('Bot', [\n ['path', { d: 'M12 8V4H8', key: 'hb8ula' }],\n ['rect', { width: '16', height: '12', x: '4', y: '8', rx: '2', key: 'enze0r' }],\n ['path', { d: 'M2 14h2', key: 'vft8re' }],\n ['path', { d: 'M20 14h2', key: '4cs60a' }],\n ['path', { d: 'M15 13v2', key: '1xurst' }],\n ['path', { d: 'M9 13v2', key: 'rq6x2g' }],\n]);\n\nexport default Bot;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Check\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/check\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Check = createLucideIcon('Check', [['path', { d: 'M20 6 9 17l-5-5', key: '1gmf2c' }]]);\n\nexport default Check;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name EyeOff\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/eye-off\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst EyeOff = createLucideIcon('EyeOff', [\n [\n 'path',\n {\n d: 'M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49',\n key: 'ct8e1f',\n },\n ],\n ['path', { d: 'M14.084 14.158a3 3 0 0 1-4.242-4.242', key: '151rxh' }],\n [\n 'path',\n {\n d: 'M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143',\n key: '13bj9a',\n },\n ],\n ['path', { d: 'm2 2 20 20', key: '1ooewy' }],\n]);\n\nexport default EyeOff;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Eye\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/eye\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Eye = createLucideIcon('Eye', [\n [\n 'path',\n {\n d: 'M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0',\n key: '1nclc0',\n },\n ],\n ['circle', { cx: '12', cy: '12', r: '3', key: '1v7zrd' }],\n]);\n\nexport default Eye;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Image\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/image\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Image = createLucideIcon('Image', [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', ry: '2', key: '1m3agn' }],\n ['circle', { cx: '9', cy: '9', r: '2', key: 'af1f0g' }],\n ['path', { d: 'm21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21', key: '1xmnt7' }],\n]);\n\nexport default Image;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name RotateCcw\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/rotate-ccw\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst RotateCcw = createLucideIcon('RotateCcw', [\n ['path', { d: 'M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8', key: '1357e3' }],\n ['path', { d: 'M3 3v5h5', key: '1xhq8a' }],\n]);\n\nexport default RotateCcw;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Settings\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/settings\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Settings = createLucideIcon('Settings', [\n [\n 'path',\n {\n d: 'M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z',\n key: '1qme2f',\n },\n ],\n ['circle', { cx: '12', cy: '12', r: '3', key: '1v7zrd' }],\n]);\n\nexport default Settings;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Trash2\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/trash-2\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Trash2 = createLucideIcon('Trash2', [\n ['path', { d: 'M3 6h18', key: 'd0wm0j' }],\n ['path', { d: 'M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6', key: '4alrt4' }],\n ['path', { d: 'M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2', key: 'v07s0e' }],\n ['line', { x1: '10', x2: '10', y1: '11', y2: '17', key: '1uufr5' }],\n ['line', { x1: '14', x2: '14', y1: '11', y2: '17', key: 'xtxkd' }],\n]);\n\nexport default Trash2;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name TriangleAlert\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/triangle-alert\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst TriangleAlert = createLucideIcon('TriangleAlert', [\n [\n 'path',\n {\n d: 'm21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3',\n key: 'wmoenq',\n },\n ],\n ['path', { d: 'M12 9v4', key: 'juzpu7' }],\n ['path', { d: 'M12 17h.01', key: 'p32p05' }],\n]);\n\nexport default TriangleAlert;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Wrench\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/wrench\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Wrench = createLucideIcon('Wrench', [\n [\n 'path',\n {\n d: 'M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z',\n key: 'cbrjhi',\n },\n ],\n]);\n\nexport default Wrench;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name X\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/x\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst X = createLucideIcon('X', [\n ['path', { d: 'M18 6 6 18', key: '1bl5f8' }],\n ['path', { d: 'm6 6 12 12', key: 'd8bk6v' }],\n]);\n\nexport default X;\n"],"mappings":"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","names":["import_react","qler","ReactMarkdown","TextareaAutosize","html2canvas"]}
|