@apteva/apteva-darwin-arm64 0.4.32 → 0.4.48

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.
Files changed (94) hide show
  1. package/apteva +0 -0
  2. package/dist/ActivityPage.9v5ha2p7.js +3 -0
  3. package/dist/ActivityPage.9v5ha2p7.js.map +10 -0
  4. package/dist/ApiDocsPage.qsehxvkb.js +4 -0
  5. package/dist/ApiDocsPage.qsehxvkb.js.map +10 -0
  6. package/dist/App.168av39e.js +221 -0
  7. package/dist/{App.af2wg84v.js.map → App.168av39e.js.map} +16 -22
  8. package/dist/App.2j20h2gt.js +8 -0
  9. package/dist/App.2j20h2gt.js.map +12 -0
  10. package/dist/App.7gj4jht5.js +53 -0
  11. package/dist/App.7gj4jht5.js.map +381 -0
  12. package/dist/App.aexwv4rk.js +4 -0
  13. package/dist/App.aexwv4rk.js.map +10 -0
  14. package/dist/App.anvw0hjc.js +61 -0
  15. package/dist/App.anvw0hjc.js.map +13 -0
  16. package/dist/App.cjcyr5aj.js +4 -0
  17. package/dist/App.cjcyr5aj.js.map +10 -0
  18. package/dist/App.dmvykj97.js +4 -0
  19. package/dist/App.dmvykj97.js.map +10 -0
  20. package/dist/App.e2kkda2a.js +4 -0
  21. package/dist/App.e2kkda2a.js.map +10 -0
  22. package/dist/App.j4ec9k18.js +13 -0
  23. package/dist/App.j4ec9k18.js.map +10 -0
  24. package/dist/App.jdkx6eqd.js +4 -0
  25. package/dist/{App.ncgc9cxy.js.map → App.jdkx6eqd.js.map} +3 -3
  26. package/dist/App.kz3qyyre.js +4 -0
  27. package/dist/App.kz3qyyre.js.map +10 -0
  28. package/dist/App.sd685nt9.js +4 -0
  29. package/dist/App.sd685nt9.js.map +10 -0
  30. package/dist/App.shfd8tp9.js +20 -0
  31. package/dist/{App.mvtqv6qc.js.map → App.shfd8tp9.js.map} +8 -6
  32. package/dist/App.wghtdzsk.js +1 -0
  33. package/dist/App.x6x8s16g.js +4 -0
  34. package/dist/App.x6x8s16g.js.map +14 -0
  35. package/dist/App.y2vn8m06.js +4 -0
  36. package/dist/App.y2vn8m06.js.map +10 -0
  37. package/dist/ConnectionsPage.1dyyfqbk.js +3 -0
  38. package/dist/McpPage.xvr8hk05.js +3 -0
  39. package/dist/{ActivityPage.41nbye4r.js.map → McpPage.xvr8hk05.js.map} +1 -1
  40. package/dist/SettingsPage.5jmnefwe.js +3 -0
  41. package/dist/SkillsPage.jw7carjq.js +3 -0
  42. package/dist/TasksPage.r8txe0e9.js +3 -0
  43. package/dist/{McpPage.y396h6fy.js.map → TasksPage.r8txe0e9.js.map} +1 -1
  44. package/dist/TelemetryPage.pcafk41x.js +3 -0
  45. package/dist/TelemetryPage.pcafk41x.js.map +9 -0
  46. package/dist/TestsPage.pkymr7yt.js +3 -0
  47. package/dist/ThreadsPage.49tgq4fq.js +3 -0
  48. package/dist/ThreadsPage.49tgq4fq.js.map +9 -0
  49. package/dist/apteva-kit.css +1 -1
  50. package/dist/index.html +1 -1
  51. package/dist/styles.css +1 -1
  52. package/package.json +1 -1
  53. package/dist/ActivityPage.41nbye4r.js +0 -3
  54. package/dist/ApiDocsPage.4smnt8m3.js +0 -4
  55. package/dist/ApiDocsPage.4smnt8m3.js.map +0 -10
  56. package/dist/App.0sbax9et.js +0 -4
  57. package/dist/App.0sbax9et.js.map +0 -10
  58. package/dist/App.0ws427h8.js +0 -4
  59. package/dist/App.0ws427h8.js.map +0 -10
  60. package/dist/App.6q6bar8b.js +0 -4
  61. package/dist/App.6q6bar8b.js.map +0 -10
  62. package/dist/App.80301vdb.js +0 -4
  63. package/dist/App.80301vdb.js.map +0 -10
  64. package/dist/App.af2wg84v.js +0 -267
  65. package/dist/App.ca1rz1ph.js +0 -4
  66. package/dist/App.ca1rz1ph.js.map +0 -14
  67. package/dist/App.ensa6z0r.js +0 -4
  68. package/dist/App.ensa6z0r.js.map +0 -10
  69. package/dist/App.f8g7tych.js +0 -13
  70. package/dist/App.f8g7tych.js.map +0 -10
  71. package/dist/App.mvtqv6qc.js +0 -20
  72. package/dist/App.ncgc9cxy.js +0 -4
  73. package/dist/App.p02f4ret.js +0 -1
  74. package/dist/App.p0fb1pds.js +0 -4
  75. package/dist/App.p0fb1pds.js.map +0 -10
  76. package/dist/App.pmaq48sj.js +0 -4
  77. package/dist/App.pmaq48sj.js.map +0 -10
  78. package/dist/App.yv87t9m5.js +0 -4
  79. package/dist/App.yv87t9m5.js.map +0 -10
  80. package/dist/App.zjmfm8p6.js +0 -4
  81. package/dist/App.zjmfm8p6.js.map +0 -10
  82. package/dist/ConnectionsPage.anb3rv9a.js +0 -3
  83. package/dist/McpPage.y396h6fy.js +0 -3
  84. package/dist/SettingsPage.p1hc60gk.js +0 -3
  85. package/dist/SkillsPage.yj3xdsay.js +0 -3
  86. package/dist/TasksPage.sjv0khtv.js +0 -3
  87. package/dist/TasksPage.sjv0khtv.js.map +0 -9
  88. package/dist/TelemetryPage.2qm4w16r.js +0 -3
  89. package/dist/TelemetryPage.2qm4w16r.js.map +0 -9
  90. package/dist/TestsPage.zzs4qfj8.js +0 -3
  91. /package/dist/{ConnectionsPage.anb3rv9a.js.map → ConnectionsPage.1dyyfqbk.js.map} +0 -0
  92. /package/dist/{SettingsPage.p1hc60gk.js.map → SettingsPage.5jmnefwe.js.map} +0 -0
  93. /package/dist/{SkillsPage.yj3xdsay.js.map → SkillsPage.jw7carjq.js.map} +0 -0
  94. /package/dist/{TestsPage.zzs4qfj8.js.map → TestsPage.pkymr7yt.js.map} +0 -0
@@ -0,0 +1,13 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../node_modules/react/cjs/react-jsx-runtime.development.js", "../src/web/components/threads/ThreadsPage.tsx", "../node_modules/@apteva/apteva-kit/dist/index.mjs", "../node_modules/tailwind-merge/dist/bundle-mjs.mjs"],
4
+ "sourcesContent": [
5
+ "/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return type.displayName || \"Context\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(type, key, props, owner, debugStack, debugTask) {\n var refProp = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== refProp ? refProp : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n debugStack,\n debugTask\n ) {\n var children = config.children;\n if (void 0 !== children)\n if (isStaticChildren)\n if (isArrayImpl(children)) {\n for (\n isStaticChildren = 0;\n isStaticChildren < children.length;\n isStaticChildren++\n )\n validateChildKeys(children[isStaticChildren]);\n Object.freeze && Object.freeze(children);\n } else\n console.error(\n \"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\"\n );\n else validateChildKeys(children);\n if (hasOwnProperty.call(config, \"key\")) {\n children = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return \"key\" !== k;\n });\n isStaticChildren =\n 0 < keys.length\n ? \"{key: someKey, \" + keys.join(\": ..., \") + \": ...}\"\n : \"{key: someKey}\";\n didWarnAboutKeySpread[children + isStaticChildren] ||\n ((keys =\n 0 < keys.length ? \"{\" + keys.join(\": ..., \") + \": ...}\" : \"{}\"),\n console.error(\n 'A props object containing a \"key\" prop is being spread into JSX:\\n let props = %s;\\n <%s {...props} />\\nReact keys must be passed directly to JSX without using spread:\\n let props = %s;\\n <%s key={someKey} {...props} />',\n isStaticChildren,\n children,\n keys,\n children\n ),\n (didWarnAboutKeySpread[children + isStaticChildren] = !0));\n }\n children = null;\n void 0 !== maybeKey &&\n (checkKeyStringCoercion(maybeKey), (children = \"\" + maybeKey));\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (children = \"\" + config.key));\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n children &&\n defineKeyPropWarningGetter(\n maybeKey,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n return ReactElement(\n type,\n children,\n maybeKey,\n getOwner(),\n debugStack,\n debugTask\n );\n }\n function validateChildKeys(node) {\n isValidElement(node)\n ? node._store && (node._store.validated = 1)\n : \"object\" === typeof node &&\n null !== node &&\n node.$$typeof === REACT_LAZY_TYPE &&\n (\"fulfilled\" === node._payload.status\n ? isValidElement(node._payload.value) &&\n node._payload.value._store &&\n (node._payload.value._store.validated = 1)\n : node._store && (node._store.validated = 1));\n }\n function isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n }\n var React = require(\"react\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n hasOwnProperty = Object.prototype.hasOwnProperty,\n isArrayImpl = Array.isArray,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n React = {\n react_stack_bottom_frame: function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind(\n React,\n UnknownOwner\n )();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutKeySpread = {};\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.jsx = function (type, config, maybeKey) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !1,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n exports.jsxs = function (type, config, maybeKey) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !0,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n })();\n",
6
+ "import React, { useState, useEffect, useCallback, useMemo } from \"react\";\nimport { Chat, convertApiMessages } from \"@apteva/apteva-kit\";\nimport { useAgentActivity, useAuth, useProjects, useTelemetryContext, useTheme } from \"../../context\";\nimport type { TelemetryEvent } from \"../../context\";\nimport type { Agent, Route } from \"../../types\";\n\ninterface Thread {\n id: string;\n title?: string;\n created_at: string;\n updated_at: string;\n message_count?: number;\n agent_id: string;\n agent_name: string;\n}\n\ninterface ThreadsPageProps {\n agents: Agent[];\n onNavigate?: (route: Route) => void;\n}\n\nexport function ThreadsPage({ agents, onNavigate }: ThreadsPageProps) {\n const { theme } = useTheme();\n const { authFetch } = useAuth();\n const { currentProjectId } = useProjects();\n const { events: realtimeEvents, statusChangeCounter } = useTelemetryContext();\n\n const [threads, setThreads] = useState<Thread[]>([]);\n const [selectedThread, setSelectedThread] = useState<Thread | null>(null);\n const [newChatAgent, setNewChatAgent] = useState<Agent | null>(null);\n const [initialMessages, setInitialMessages] = useState<any[]>([]);\n const [loadingThreads, setLoadingThreads] = useState(true);\n const [loadingMessages, setLoadingMessages] = useState(false);\n const [historicalActivities, setHistoricalActivities] = useState<TelemetryEvent[]>([]);\n const [showAgentPicker, setShowAgentPicker] = useState(false);\n const [newChatKey, setNewChatKey] = useState(0);\n\n const filteredAgents = useMemo(() => {\n if (currentProjectId === null) return agents;\n if (currentProjectId === \"unassigned\") return agents.filter(a => !a.projectId);\n return agents.filter(a => a.projectId === currentProjectId);\n }, [agents, currentProjectId]);\n\n const runningAgents = useMemo(() => filteredAgents.filter(a => a.status === \"running\"), [filteredAgents]);\n const agentIds = useMemo(() => new Set(filteredAgents.map(a => a.id)), [filteredAgents]);\n\n // Fetch consolidated threads\n const fetchThreads = useCallback(async () => {\n try {\n const projectParam = currentProjectId ? `?project_id=${encodeURIComponent(currentProjectId)}` : \"\";\n const [threadsRes, activityRes] = await Promise.all([\n authFetch(`/api/threads${projectParam}`).catch(() => null),\n authFetch(`/api/telemetry/events?type=thread_activity&limit=100${projectParam ? `&${projectParam}` : \"\"}`).catch(() => null),\n ]);\n if (threadsRes?.ok) {\n const data = await threadsRes.json();\n setThreads(data.threads || []);\n }\n if (activityRes?.ok) {\n const data = await activityRes.json();\n setHistoricalActivities(data.events || []);\n }\n } catch (e) {\n console.error(\"Failed to fetch threads:\", e);\n } finally {\n setLoadingThreads(false);\n }\n }, [authFetch, currentProjectId]);\n\n useEffect(() => { fetchThreads(); }, [fetchThreads, statusChangeCounter]);\n\n useEffect(() => {\n const interval = setInterval(fetchThreads, 15000);\n return () => clearInterval(interval);\n }, [fetchThreads]);\n\n // Open an existing thread\n const openThread = useCallback(async (thread: Thread) => {\n setNewChatAgent(null);\n setLoadingMessages(true);\n setSelectedThread(thread);\n try {\n const res = await authFetch(`/api/agents/${thread.agent_id}/threads/${thread.id}/messages`);\n if (res.ok) {\n const data = await res.json();\n setInitialMessages(convertApiMessages(data.messages || []));\n } else {\n setInitialMessages([]);\n }\n } catch {\n setInitialMessages([]);\n }\n setLoadingMessages(false);\n }, [authFetch]);\n\n // Start a new conversation with an agent\n const startNewChat = (agent: Agent) => {\n setSelectedThread(null);\n setInitialMessages([]);\n setNewChatAgent(agent);\n setNewChatKey(k => k + 1);\n setShowAgentPicker(false);\n };\n\n // Merge real-time + historical activity\n const activities = useMemo(() => {\n const realtimeThreadEvents = realtimeEvents.filter(e => e.type === \"thread_activity\" && !e.data?.parent_id);\n const seen = new Set(realtimeThreadEvents.map(e => e.id));\n const merged = [...realtimeThreadEvents];\n for (const evt of historicalActivities) {\n if (!seen.has(evt.id) && !evt.data?.parent_id) { merged.push(evt); seen.add(evt.id); }\n }\n return merged\n .filter(e => agentIds.has(e.agent_id))\n .sort((a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime())\n .slice(0, 100);\n }, [realtimeEvents, historicalActivities, agentIds]);\n\n // Group activities by thread_id\n const activityByThread = useMemo(() => {\n const map = new Map<string, TelemetryEvent[]>();\n for (const evt of activities) {\n const tid = evt.thread_id || evt.data?.thread_id as string;\n if (tid) {\n if (!map.has(tid)) map.set(tid, []);\n map.get(tid)!.push(evt);\n }\n }\n return map;\n }, [activities]);\n\n const runningCount = runningAgents.length;\n\n // What's currently shown in chat\n const chatAgentId = selectedThread?.agent_id || newChatAgent?.id;\n const chatAgentName = selectedThread?.agent_name || newChatAgent?.name;\n const chatThreadId = selectedThread?.id;\n const chatKey = selectedThread\n ? `${selectedThread.agent_id}-${selectedThread.id}`\n : newChatAgent\n ? `new-${newChatAgent.id}-${newChatKey}`\n : null;\n\n return (\n <div className=\"flex-1 flex flex-col overflow-hidden\">\n {/* Header */}\n <div className=\"px-6 pt-6 pb-4 shrink-0\">\n <div className=\"flex items-center justify-between\">\n <h1 className=\"text-xl font-semibold\">Threads</h1>\n <span className=\"text-sm text-[var(--color-text-muted)]\">\n {threads.length} threads from {runningCount} running agents\n </span>\n </div>\n </div>\n\n {/* Messenger layout: 1/4 threads | 3/4 chat */}\n <div className=\"flex-1 flex min-h-0 overflow-hidden\">\n {/* Thread list — 1/4 */}\n <div className=\"w-1/4 min-w-[260px] max-w-[360px] flex flex-col overflow-hidden\">\n {/* New conversation button */}\n <div className=\"p-2 shrink-0\">\n <div className=\"relative\">\n <button\n onClick={() => setShowAgentPicker(!showAgentPicker)}\n disabled={runningAgents.length === 0}\n className=\"w-full flex items-center justify-center gap-2 px-3 py-2 btn bg-[var(--color-accent-10)] text-[var(--color-accent)] text-sm font-medium hover:bg-[var(--color-accent-20)] transition disabled:opacity-30 disabled:cursor-not-allowed\"\n >\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 4v16m8-8H4\" />\n </svg>\n New conversation\n </button>\n\n {/* Agent picker dropdown */}\n {showAgentPicker && (\n <>\n <div className=\"fixed inset-0 z-40\" onClick={() => setShowAgentPicker(false)} />\n <div className=\"absolute top-full left-0 right-0 mt-1 bg-[var(--color-surface)] card shadow-xl z-50 max-h-60 overflow-auto\">\n {runningAgents.map(agent => (\n <button\n key={agent.id}\n onClick={() => startNewChat(agent)}\n className=\"w-full text-left px-3 py-2.5 hover:bg-[var(--color-surface-raised)] transition\"\n >\n <p className=\"text-sm font-medium truncate\">{agent.name}</p>\n <p className=\"text-[10px] text-[var(--color-text-faint)]\">{agent.provider} · {agent.model}</p>\n </button>\n ))}\n </div>\n </>\n )}\n </div>\n </div>\n\n <div className=\"flex-1 overflow-auto px-2 pb-2\">\n {loadingThreads ? (\n <div className=\"p-6 text-center text-[var(--color-text-faint)] text-sm\">Loading threads...</div>\n ) : threads.length === 0 ? (\n <div className=\"p-6 text-center text-[var(--color-text-faint)] text-sm\">\n <p>No threads yet</p>\n <p className=\"mt-1 text-[var(--color-text-faint)]\">Start a conversation or wait for agents</p>\n </div>\n ) : (\n <div className=\"space-y-0.5\">\n {threads.map(thread => (\n <ThreadRow\n key={`${thread.agent_id}-${thread.id}`}\n thread={thread}\n selected={selectedThread?.id === thread.id && selectedThread?.agent_id === thread.agent_id}\n activities={activityByThread.get(thread.id) || []}\n onSelect={() => openThread(thread)}\n />\n ))}\n </div>\n )}\n </div>\n </div>\n\n {/* Chat — 3/4 */}\n <div className=\"flex-1 flex flex-col min-h-0 overflow-hidden\">\n {chatAgentId && chatKey ? (\n loadingMessages ? (\n <div className=\"flex-1 flex items-center justify-center text-[var(--color-text-muted)]\">Loading messages...</div>\n ) : (\n <Chat\n key={chatKey}\n agentId=\"default\"\n apiUrl={`/api/agents/${chatAgentId}`}\n threadId={chatThreadId}\n initialMessages={initialMessages}\n placeholder={`Message ${chatAgentName}...`}\n headerTitle={chatAgentName}\n variant=\"terminal\"\n theme={theme.id as \"light\" | \"dark\"}\n showHeader={true}\n />\n )\n ) : (\n <div className=\"flex-1 flex items-center justify-center\">\n <div className=\"text-center text-[var(--color-text-faint)]\">\n <svg className=\"w-12 h-12 mx-auto mb-3 text-[var(--color-border-light)]\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z\" />\n </svg>\n <p className=\"text-sm\">Select a thread or start a new conversation</p>\n <p className=\"text-xs text-[var(--color-text-faint)] mt-1\">Chat with any running agent</p>\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n\n// --- Thread Row ---\n\nfunction ThreadRow({ thread, selected, activities, onSelect }: {\n thread: Thread;\n selected: boolean;\n activities: TelemetryEvent[];\n onSelect: () => void;\n}) {\n const { isActive } = useAgentActivity(thread.agent_id);\n const latestActivity = activities[0];\n const activityText = latestActivity?.data?.activity as string | undefined;\n\n return (\n <button\n onClick={onSelect}\n className={`w-full text-left px-3 py-2.5 rounded-lg transition ${\n selected\n ? \"bg-[var(--color-accent-10)]\"\n : \"hover:bg-[var(--color-bg-secondary)]\"\n }`}\n >\n <div className=\"flex items-center justify-between gap-2 mb-1\">\n <span className=\"text-sm font-medium truncate\">\n {thread.title || `Thread ${thread.id.slice(0, 8)}`}\n </span>\n <span className=\"text-[10px] text-[var(--color-text-faint)] shrink-0\">{timeAgo(thread.updated_at)}</span>\n </div>\n <div className=\"flex items-center gap-1.5\">\n <span\n className={`w-1.5 h-1.5 rounded-full shrink-0 ${\n isActive ? \"bg-green-400 animate-pulse\" : \"bg-[var(--color-scrollbar)]\"\n }`}\n />\n <span className=\"text-[11px] text-[var(--color-accent)]\">{thread.agent_name}</span>\n {thread.message_count != null && (\n <>\n <span className=\"text-[var(--color-border-light)]\">&middot;</span>\n <span className=\"text-[10px] text-[var(--color-text-faint)]\">{thread.message_count} msgs</span>\n </>\n )}\n </div>\n {activityText && (\n <p className=\"text-[11px] text-[var(--color-text-faint)] truncate mt-1\">{activityText}</p>\n )}\n </button>\n );\n}\n\n// --- Helpers ---\n\nfunction timeAgo(timestamp: string): string {\n const seconds = Math.floor((Date.now() - new Date(timestamp).getTime()) / 1000);\n if (seconds < 5) return \"just now\";\n if (seconds < 60) return `${seconds}s ago`;\n const minutes = Math.floor(seconds / 60);\n if (minutes < 60) return `${minutes}m ago`;\n const hours = Math.floor(minutes / 60);\n if (hours < 24) return `${hours}h ago`;\n const days = Math.floor(hours / 24);\n return `${days}d ago`;\n}\n",
7
+ "\"use client\";\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);\n\n// src/components/Chat/Chat.tsx\nimport { useState as useState10, useEffect as useEffect10, useRef as useRef10, useMemo as useMemo2, useCallback as useCallback5, forwardRef, useImperativeHandle } from \"react\";\n\n// src/components/Chat/MessageList.tsx\nimport { useEffect as useEffect7, useRef as useRef6 } from \"react\";\n\n// src/components/Chat/Message.tsx\nimport { useEffect as useEffect6, useRef as useRef5, useMemo } from \"react\";\n\n// src/utils/cn.ts\nimport { clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\nfunction cn(...inputs) {\n return twMerge(clsx(inputs));\n}\n\n// src/utils/mock-data.ts\nvar mockMessages = [\n {\n id: \"msg-1\",\n role: \"assistant\",\n content: \"Hello! I'm your AI assistant. How can I help you today?\",\n timestamp: new Date(Date.now() - 36e5)\n },\n {\n id: \"msg-2\",\n role: \"user\",\n content: \"I want to plan a trip to Europe\",\n timestamp: new Date(Date.now() - 35e5)\n },\n {\n id: \"msg-3\",\n role: \"assistant\",\n content: \"Great choice! Europe has amazing destinations. What's your budget and how many days do you have?\",\n timestamp: new Date(Date.now() - 34e5)\n },\n {\n id: \"msg-4\",\n role: \"user\",\n content: \"Around $2000 for 5 days\",\n timestamp: new Date(Date.now() - 33e5)\n },\n {\n id: \"msg-5\",\n role: \"assistant\",\n content: \"Perfect! I found some great destinations that fit your budget:\",\n widgets: [\n {\n type: \"list\",\n id: \"destinations-1\",\n props: {\n items: [\n {\n id: \"paris\",\n title: \"Paris, France\",\n subtitle: \"5 days \\u2022 $1,850\",\n description: \"The City of Light with iconic landmarks\",\n metadata: { city: \"Paris\", country: \"France\", lat: 48.8566, lng: 2.3522, price: 1850, days: 5 }\n },\n {\n id: \"rome\",\n title: \"Rome, Italy\",\n subtitle: \"5 days \\u2022 $1,650\",\n description: \"Ancient history meets modern culture\",\n metadata: { city: \"Rome\", country: \"Italy\", lat: 41.9028, lng: 12.4964, price: 1650, days: 5 }\n },\n {\n id: \"barcelona\",\n title: \"Barcelona, Spain\",\n subtitle: \"5 days \\u2022 $1,450\",\n description: \"Beautiful beaches and Gaud\\xED architecture\",\n metadata: { city: \"Barcelona\", country: \"Spain\", lat: 41.3851, lng: 2.1734, price: 1450, days: 5 }\n }\n ]\n },\n actions: [\n {\n type: \"select_destination\",\n label: \"Select\",\n handler: \"client\",\n payload: {}\n },\n {\n type: \"view_details\",\n label: \"Details\",\n handler: \"server\",\n payload: {}\n }\n ]\n }\n ],\n timestamp: new Date(Date.now() - 32e5)\n }\n];\nvar mockThreads = [\n {\n id: \"thread-1\",\n title: \"Trip to Europe\",\n preview: \"Planning a 5-day trip...\",\n createdAt: new Date(Date.now() - 864e5),\n updatedAt: new Date(Date.now() - 36e5),\n messageCount: 12\n },\n {\n id: \"thread-2\",\n title: \"Restaurant Recommendations\",\n preview: \"Looking for good places...\",\n createdAt: new Date(Date.now() - 1728e5),\n updatedAt: new Date(Date.now() - 864e5),\n messageCount: 8\n },\n {\n id: \"thread-3\",\n title: \"Budget Planning\",\n preview: \"Help with monthly budget\",\n createdAt: new Date(Date.now() - 2592e5),\n updatedAt: new Date(Date.now() - 1728e5),\n messageCount: 15\n }\n];\nvar mockWidgets = [\n {\n type: \"card\",\n id: \"card-1\",\n props: {\n title: \"Paris, France\",\n description: \"5-day adventure in the City of Light\",\n image: \"https://images.unsplash.com/photo-1502602898657-3e91760cbb34\",\n footer: \"Total: $1,850\"\n },\n actions: [\n {\n type: \"book_trip\",\n label: \"Book Now\",\n handler: \"client\",\n payload: { tripId: \"trip-paris\" }\n }\n ]\n },\n {\n type: \"card\",\n id: \"card-2\",\n props: {\n title: \"Rome, Italy\",\n description: \"Explore ancient wonders\",\n image: \"https://images.unsplash.com/photo-1552832230-c0197dd311b5\",\n footer: \"Total: $1,650\"\n },\n actions: [\n {\n type: \"book_trip\",\n label: \"Book Now\",\n handler: \"client\",\n payload: { tripId: \"trip-rome\" }\n }\n ]\n }\n];\nfunction generateMockResponse(delay = 1e3) {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve({\n id: `msg-${Date.now()}`,\n role: \"assistant\",\n content: \"This is a mock response. In production, this would come from your AI agent API.\",\n timestamp: /* @__PURE__ */ new Date()\n });\n }, delay);\n });\n}\nfunction generateMockStreamingResponse(text, onChunk, typingSpeed = 30) {\n return new Promise((resolve) => {\n const words = text.split(\" \");\n let currentIndex = 0;\n const interval = setInterval(() => {\n if (currentIndex < words.length) {\n onChunk(words[currentIndex] + \" \");\n currentIndex++;\n } else {\n clearInterval(interval);\n resolve();\n }\n }, typingSpeed);\n });\n}\nfunction generateMockPlan(command) {\n const lowerCommand = command.toLowerCase();\n if (lowerCommand.includes(\"analyze\") || lowerCommand.includes(\"analysis\")) {\n return `**Plan:**\n\n1. Fetch data from the analytics database\n2. Apply filters and aggregations\n3. Calculate key metrics and trends\n4. Generate visualization data\n5. Compile insights and recommendations`;\n }\n if (lowerCommand.includes(\"sales\") || lowerCommand.includes(\"revenue\")) {\n return `**Plan:**\n\n1. Query sales records for the specified period\n2. Calculate total revenue and growth rates\n3. Break down performance by product category\n4. Analyze regional distribution\n5. Present findings in charts and summary`;\n }\n if (lowerCommand.includes(\"report\") || lowerCommand.includes(\"summary\")) {\n return `**Plan:**\n\n1. Gather data from all relevant sources\n2. Aggregate metrics across categories\n3. Identify key trends and anomalies\n4. Generate executive summary\n5. Create detailed breakdowns with visualizations`;\n }\n if (lowerCommand.includes(\"customer\") || lowerCommand.includes(\"user\")) {\n return `**Plan:**\n\n1. Pull customer data from CRM\n2. Calculate engagement metrics\n3. Segment users by behavior patterns\n4. Analyze satisfaction scores\n5. Generate customer insights report`;\n }\n if (lowerCommand.includes(\"task\") || lowerCommand.includes(\"todo\") || lowerCommand.includes(\"work\") || lowerCommand.includes(\"completed\")) {\n return `**Plan:**\n\n1. Retrieve task records from the database\n2. Filter by status and date range\n3. Organize by priority and category\n4. Calculate completion metrics\n5. Display in interactive list format`;\n }\n return `**Plan:**\n\n1. Parse and understand the command requirements\n2. Gather necessary data from available sources\n3. Process and analyze the information\n4. Format results for optimal presentation\n5. Return response with any relevant visualizations`;\n}\nfunction generateMockCommandResponse(command) {\n const lowerCommand = command.toLowerCase();\n if (lowerCommand.includes(\"analyze\") || lowerCommand.includes(\"analysis\")) {\n return `Analysis complete for \"${command}\". Found 247 records with an average value of $1,234. The data shows a 23% increase compared to last quarter. Key insights: Revenue is up, customer satisfaction improved by 15%, and operational costs decreased by 8%.`;\n }\n if (lowerCommand.includes(\"sales\") || lowerCommand.includes(\"revenue\")) {\n return `Sales data processed: Q4 2024 revenue reached $2.4M, representing 18% growth year-over-year. Top performing products: Enterprise Plan (+45%), Pro Plan (+32%), Basic Plan (+12%). Regional breakdown: North America (52%), Europe (31%), APAC (17%).`;\n }\n if (lowerCommand.includes(\"report\") || lowerCommand.includes(\"summary\")) {\n return `Report generated successfully. Executive Summary: Overall performance exceeded targets by 12%. Marketing ROI improved to 3.2x, customer acquisition cost reduced by 18%, and lifetime value increased by 24%. Detailed breakdown available in attached widgets.`;\n }\n if (lowerCommand.includes(\"data\") || lowerCommand.includes(\"metrics\")) {\n return `Data metrics retrieved: 1,847 active users, 12,394 sessions this month, 94.2% uptime, average response time 127ms. Performance is within acceptable parameters. No critical issues detected.`;\n }\n if (lowerCommand.includes(\"customer\") || lowerCommand.includes(\"user\")) {\n return `Customer analysis complete: 523 new customers this month, 89% retention rate, average satisfaction score 4.6/5. Top feedback themes: excellent support (87%), easy to use (72%), good value (68%). 3 support tickets pending review.`;\n }\n return `This is a mock response showing how your agent would process and respond to commands. The actual response would be generated by your AI agent based on real data and context.`;\n}\nfunction generateMockCommandWithWidgets(command) {\n const message = generateMockCommandResponse(command);\n const lowerCommand = command.toLowerCase();\n let widgets = [];\n let action;\n if (lowerCommand.includes(\"sales\") || lowerCommand.includes(\"revenue\") || lowerCommand.includes(\"analyze\")) {\n widgets.push({\n type: \"card\",\n id: `widget-${Date.now()}-1`,\n props: {\n title: \"Q4 2024 Performance\",\n description: \"Revenue: $2.4M (+18% YoY)\",\n footer: \"Updated: \" + (/* @__PURE__ */ new Date()).toLocaleDateString()\n },\n actions: [\n {\n type: \"view_details\",\n label: \"View Details\",\n handler: \"client\",\n payload: { reportId: \"q4-2024\" }\n }\n ]\n });\n }\n if (lowerCommand.includes(\"customer\") || lowerCommand.includes(\"user\")) {\n widgets.push({\n type: \"list\",\n id: `widget-${Date.now()}-2`,\n props: {\n items: [\n {\n id: \"metric-1\",\n title: \"Active Users\",\n subtitle: \"1,847 users\",\n description: \"+12% from last month\"\n },\n {\n id: \"metric-2\",\n title: \"Retention Rate\",\n subtitle: \"89%\",\n description: \"Above industry average\"\n },\n {\n id: \"metric-3\",\n title: \"Satisfaction Score\",\n subtitle: \"4.6/5\",\n description: \"Based on 234 reviews\"\n }\n ]\n }\n });\n }\n if (lowerCommand.includes(\"task\") || lowerCommand.includes(\"todo\") || lowerCommand.includes(\"work\") || lowerCommand.includes(\"completed\")) {\n widgets.push({\n type: \"list\",\n id: `widget-${Date.now()}-tasks`,\n props: {\n items: [\n {\n id: \"task-1\",\n title: \"Implement user authentication\",\n subtitle: \"Created just now\",\n description: \"Added OAuth 2.0 support with Google and GitHub providers\",\n backgroundColor: \"rgba(59, 130, 246, 0.15)\",\n metadata: {\n status: \"created\",\n priority: \"high\",\n tags: [\"backend\", \"security\"]\n }\n },\n {\n id: \"task-2\",\n title: \"Update API documentation\",\n subtitle: \"Modified 2 minutes ago\",\n description: \"Changed endpoint descriptions and added new examples\",\n backgroundColor: \"rgba(234, 179, 8, 0.15)\",\n metadata: {\n status: \"modified\",\n priority: \"medium\",\n tags: [\"docs\"]\n }\n },\n {\n id: \"task-3\",\n title: \"Fix login redirect bug\",\n subtitle: \"Completed 5 minutes ago\",\n description: \"Users now properly redirected after successful login\",\n backgroundColor: \"rgba(34, 197, 94, 0.15)\",\n metadata: {\n status: \"completed\",\n priority: \"urgent\",\n tags: [\"bugfix\", \"auth\"]\n }\n }\n ]\n },\n actions: [\n {\n type: \"view_task\",\n label: \"View\",\n handler: \"client\",\n payload: {}\n },\n {\n type: \"undo\",\n label: \"Undo\",\n handler: \"server\",\n payload: {}\n }\n ]\n });\n action = {\n type: \"update_database\",\n payload: {\n table: \"tasks\",\n operation: \"mark_as_viewed\",\n taskIds: [\"task-1\", \"task-2\", \"task-3\"],\n timestamp: (/* @__PURE__ */ new Date()).toISOString()\n }\n };\n }\n if (lowerCommand.includes(\"analyze\") || lowerCommand.includes(\"analysis\")) {\n action = {\n type: \"send_notification\",\n payload: {\n recipient: \"team@company.com\",\n subject: \"Analysis Complete\",\n message: \"Your requested analysis has been completed and is ready for review.\"\n }\n };\n }\n return { message, widgets, action };\n}\nfunction generateMockCommandStream(command, onChunk, onComplete, onError, typingSpeed = 30) {\n const { message, widgets } = generateMockCommandWithWidgets(command);\n const words = message.split(\" \");\n let currentIndex = 0;\n const interval = setInterval(() => {\n try {\n if (currentIndex < words.length) {\n onChunk({ type: \"token\", content: words[currentIndex] + \" \" });\n currentIndex++;\n } else {\n clearInterval(interval);\n widgets.forEach((widget) => {\n onChunk({ type: \"widget\", widget });\n });\n const threadId = `mock_thread_${Date.now()}`;\n onChunk({ type: \"complete\" });\n onComplete(threadId);\n }\n } catch (error) {\n clearInterval(interval);\n onError(error instanceof Error ? error : new Error(\"Mock streaming error\"));\n }\n }, typingSpeed);\n}\n\n// src/utils/file-utils.ts\nfunction fileToBase64(file) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => {\n const result = reader.result;\n const base64 = result.split(\",\")[1];\n resolve(base64);\n };\n reader.onerror = () => reject(new Error(\"Failed to read file\"));\n reader.readAsDataURL(file);\n });\n}\nfunction getContentBlockType(mimeType) {\n if (mimeType.startsWith(\"image/\")) {\n return \"image\";\n }\n return \"document\";\n}\nfunction isSupportedFileType(file) {\n const supportedTypes = [\n // Images\n \"image/jpeg\",\n \"image/png\",\n \"image/gif\",\n \"image/webp\",\n // Documents\n \"application/pdf\",\n \"text/plain\",\n \"application/msword\",\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\"\n ];\n return supportedTypes.includes(file.type);\n}\nasync function fileToContentBlock(file) {\n const base64 = await fileToBase64(file);\n const blockType = getContentBlockType(file.type);\n return {\n type: blockType,\n source: {\n type: \"base64\",\n media_type: file.type,\n data: base64\n }\n };\n}\nasync function filesToContentBlocks(files) {\n const fileArray = Array.from(files);\n const blocks = await Promise.all(\n fileArray.map((file) => fileToContentBlock(file))\n );\n return blocks;\n}\nasync function buildMessageWithAttachments(text, files) {\n if (!files || files.length === 0) {\n return text;\n }\n const blocks = [];\n if (text.trim()) {\n blocks.push({ type: \"text\", text: text.trim() });\n }\n const fileBlocks = await filesToContentBlocks(files);\n blocks.push(...fileBlocks);\n return blocks;\n}\nfunction formatFileSize(bytes) {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\nvar MAX_FILE_SIZE = 10 * 1024 * 1024;\nfunction validateFile(file) {\n if (!isSupportedFileType(file)) {\n return { valid: false, error: `Unsupported file type: ${file.type}` };\n }\n if (file.size > MAX_FILE_SIZE) {\n return { valid: false, error: `File too large: ${formatFileSize(file.size)} (max ${formatFileSize(MAX_FILE_SIZE)})` };\n }\n return { valid: true };\n}\n\n// src/utils/widget-parser.ts\nvar STREAMABLE_WIDGET_TYPES = [\"list\", \"table\"];\nfunction parsePartialItemsArray(partialJson) {\n const items = [];\n let isStreaming = false;\n const itemsMatch = partialJson.match(/\"items\"\\s*:\\s*\\[/);\n if (!itemsMatch) {\n return { items, isStreaming: false };\n }\n const arrayStart = partialJson.indexOf(\"[\", itemsMatch.index);\n if (arrayStart === -1) {\n return { items, isStreaming: true };\n }\n let depth = 0;\n let inString = false;\n let escapeNext = false;\n let objectStart = -1;\n for (let i = arrayStart + 1; i < partialJson.length; i++) {\n const char = partialJson[i];\n if (escapeNext) {\n escapeNext = false;\n continue;\n }\n if (char === \"\\\\\" && inString) {\n escapeNext = true;\n continue;\n }\n if (char === '\"') {\n inString = !inString;\n continue;\n }\n if (inString) continue;\n if (char === \"{\") {\n if (depth === 0) {\n objectStart = i;\n }\n depth++;\n } else if (char === \"}\") {\n depth--;\n if (depth === 0 && objectStart !== -1) {\n const objectJson = partialJson.slice(objectStart, i + 1);\n try {\n const item = JSON.parse(objectJson);\n if (!item.id) {\n item.id = `item-${items.length}-${simpleHash(objectJson)}`;\n }\n items.push(item);\n } catch (e) {\n }\n objectStart = -1;\n }\n } else if (char === \"]\" && depth === 0) {\n isStreaming = false;\n break;\n }\n }\n if (depth > 0 || objectStart !== -1) {\n isStreaming = true;\n }\n const afterItems = partialJson.slice(arrayStart);\n const closingBracket = findMatchingBracket(afterItems, 0);\n if (closingBracket === -1) {\n isStreaming = true;\n }\n return { items, isStreaming };\n}\nfunction simpleHash(str) {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash;\n }\n return Math.abs(hash).toString(36);\n}\nfunction findMatchingBracket(text, startIndex) {\n let depth = 0;\n let inString = false;\n let escapeNext = false;\n for (let i = startIndex; i < text.length; i++) {\n const char = text[i];\n if (escapeNext) {\n escapeNext = false;\n continue;\n }\n if (char === \"\\\\\" && inString) {\n escapeNext = true;\n continue;\n }\n if (char === '\"') {\n inString = !inString;\n continue;\n }\n if (inString) continue;\n if (char === \"[\" || char === \"{\") {\n depth++;\n } else if (char === \"]\" || char === \"}\") {\n depth--;\n if (depth === 0) {\n return i;\n }\n }\n }\n return -1;\n}\nfunction parseWidgetsFromText(text) {\n const segments = [];\n let hasWidgets = false;\n let hasPendingWidget = false;\n let currentIndex = 0;\n let pendingWidgetType = null;\n let processText = text.replace(/<\\/?ui\\s*\\/?>/gi, \"\");\n const lastWidgetStart = text.lastIndexOf(\"@ui:\");\n if (lastWidgetStart !== -1) {\n const afterStart = text.slice(lastWidgetStart);\n const typeMatch = afterStart.match(/^@ui:(\\w+)/);\n if (typeMatch) {\n const widgetType = typeMatch[1];\n const bracketOpenIndex = afterStart.indexOf(\"[\");\n if (bracketOpenIndex === -1) {\n processText = text.slice(0, lastWidgetStart);\n pendingWidgetType = widgetType;\n hasPendingWidget = true;\n } else {\n const fullBracketStart = lastWidgetStart + bracketOpenIndex;\n const bracketEnd = findMatchingBracket(text, fullBracketStart);\n if (bracketEnd === -1) {\n if (STREAMABLE_WIDGET_TYPES.includes(widgetType)) {\n const partialContent = text.slice(fullBracketStart + 1);\n const { items, isStreaming } = parsePartialItemsArray(partialContent);\n if (items.length > 0) {\n processText = text.slice(0, lastWidgetStart);\n const widgetId = `widget-${widgetType}-streaming-${simpleHash(partialContent)}`;\n const textBefore = processText.replace(/[\\s:;\\-–—\\.]+$/g, \"\").trim();\n if (textBefore) {\n segments.push({ type: \"text\", content: textBefore });\n }\n segments.push({\n type: \"widget\",\n widget: {\n type: widgetType,\n id: widgetId,\n props: widgetType === \"table\" ? { rows: items, columns: [] } : { items },\n isStreaming\n // Use actual streaming state from items array parsing\n }\n });\n hasWidgets = true;\n hasPendingWidget = false;\n processText = \"\";\n } else {\n processText = text.slice(0, lastWidgetStart);\n pendingWidgetType = widgetType;\n hasPendingWidget = true;\n }\n } else {\n processText = text.slice(0, lastWidgetStart);\n pendingWidgetType = widgetType;\n hasPendingWidget = true;\n }\n }\n }\n }\n }\n if (hasPendingWidget) {\n processText = processText.replace(/[\\s:;\\-–—\\.]+$/g, \"\");\n }\n const startPattern = /@ui:(\\w+)\\[/g;\n let match;\n while ((match = startPattern.exec(processText)) !== null) {\n const widgetType = match[1];\n const bracketStart = match.index + match[0].length - 1;\n const bracketEnd = findMatchingBracket(processText, bracketStart);\n if (bracketEnd === -1) {\n continue;\n }\n const jsonContent = processText.slice(bracketStart + 1, bracketEnd);\n if (match.index > currentIndex) {\n const textContent = processText.slice(currentIndex, match.index).trim();\n if (textContent) {\n segments.push({\n type: \"text\",\n content: textContent\n });\n }\n }\n try {\n const trimmedJson = jsonContent.trim();\n const parsed = JSON.parse(trimmedJson);\n const widgetId = `widget-${widgetType}-${simpleHash(trimmedJson)}`;\n const { metadata, actions, ...props } = parsed;\n segments.push({\n type: \"widget\",\n widget: {\n type: widgetType,\n id: widgetId,\n props,\n ...actions && { actions },\n ...metadata && { metadata }\n }\n });\n hasWidgets = true;\n } catch (e) {\n }\n currentIndex = bracketEnd + 1;\n startPattern.lastIndex = currentIndex;\n }\n if (currentIndex < processText.length) {\n const remainingText = processText.slice(currentIndex).trim();\n if (remainingText) {\n segments.push({\n type: \"text\",\n content: remainingText\n });\n }\n }\n if (segments.length === 0 && processText.trim()) {\n segments.push({\n type: \"text\",\n content: processText.trim()\n });\n }\n if (pendingWidgetType) {\n segments.push({\n type: \"widget_pending\",\n pendingType: pendingWidgetType\n });\n }\n return { segments, hasWidgets, hasPendingWidget };\n}\n\n// src/utils/widget-context.ts\nvar WIDGET_DEFINITIONS = {\n card: {\n schema: \"title, description?, image?(url), footer?, actions?: [{type, label}]\",\n example: '@ui:card[{\"title\": \"Summary\", \"description\": \"Details here\"}]'\n },\n list: {\n schema: \"items: [{id, title, subtitle?, description?, image?(url), metadata?: {\\u2026}}], actions?: [{type, label}]\",\n example: '@ui:list[{\"items\": [{\"id\": \"1\", \"title\": \"Item\", \"subtitle\": \"Info\", \"metadata\": {\"key\": \"value\"}}]}]'\n },\n button_group: {\n schema: 'buttons: [{id, label, variant?: \"default\"|\"primary\"|\"danger\"}]',\n example: '@ui:button_group[{\"buttons\": [{\"id\": \"ok\", \"label\": \"OK\"}]}]'\n },\n form: {\n schema: 'title?, fields: [{name, type: \"text\"|\"password\"|\"number\"|\"select\"|\"checkbox\"|\"textarea\"|\"date\", label, required?, placeholder?, options?: [{label, value}]}], submitLabel?: string',\n example: '@ui:form[{\"title\": \"Settings\", \"fields\": [{\"name\": \"key\", \"type\": \"password\", \"label\": \"API Key\", \"required\": true}]}]'\n },\n table: {\n schema: \"columns: [{key, label}], rows: [{key: value, \\u2026}], striped?, compact?\",\n example: '@ui:table[{\"columns\": [{\"key\": \"name\", \"label\": \"Name\"}], \"rows\": [{\"name\": \"Alice\"}]}]'\n },\n image: {\n schema: \"src(url), alt, caption?\",\n example: '@ui:image[{\"src\": \"https://example.com/img.png\", \"alt\": \"Photo\"}]'\n },\n chart: {\n schema: 'chartType: \"line\"|\"bar\"|\"pie\", data: {labels: [...], datasets: [{label, data: [numbers]}]}',\n example: '@ui:chart[{\"chartType\": \"bar\", \"data\": {\"labels\": [\"Q1\", \"Q2\"], \"datasets\": [{\"label\": \"Revenue\", \"data\": [100, 150]}]}}]'\n },\n flow: {\n schema: 'title, subtitle?, icon?: \"research\"|\"schedule\"|\"analyze\"|\"deploy\"|\"recurring\"|\"automation\"|\"data\", steps: [{id, label, color?: \"blue\"|\"purple\"|\"cyan\"|\"amber\"|\"emerald\"|\"rose\"|\"indigo\"|\"orange\", status?: \"pending\"|\"active\"|\"completed\"|\"error\"|\"skipped\"}]',\n example: '@ui:flow[{\"title\": \"Pipeline\", \"steps\": [{\"id\": \"1\", \"label\": \"Test\", \"color\": \"cyan\"}, {\"id\": \"2\", \"label\": \"Deploy\", \"color\": \"rose\"}]}]'\n }\n};\nvar ALL_WIDGET_TYPES = Object.keys(WIDGET_DEFINITIONS);\nvar DISABLED_WIDGETS = [\"flow\"];\nvar DEFAULT_WIDGET_TYPES = ALL_WIDGET_TYPES.filter((t) => !DISABLED_WIDGETS.includes(t));\nfunction generateWidgetContext(enabledWidgets) {\n const widgets = enabledWidgets || DEFAULT_WIDGET_TYPES;\n let context = `\n## UI Widgets\n\nYou can render interactive UI widgets inline in your responses. Use them when structured display is clearer than plain text (showing data, forms, actions, images). You may include normal text before or after a widget.\n\n**Syntax:** \\`@ui:type[{json}]\\` \\u2014 the JSON object MUST be wrapped in square brackets \\`[]\\`.\n\nExample:\n@ui:list[{\"items\": [{\"id\": \"1\", \"title\": \"First item\"}]}]\n\nDo NOT wrap widgets in code blocks or backticks. Write them directly in your response text.\n\n### Available widgets\n\n`;\n for (const type of widgets) {\n const def = WIDGET_DEFINITIONS[type];\n if (!def) continue;\n context += `**${type}** \\u2014 ${def.schema}\n`;\n context += ` ${def.example}\n\n`;\n }\n context += `### Notes\n- **actions**: the \\`type\\` field is a custom string you choose (e.g. \"edit\", \"delete\"). It is returned to the app when the user clicks the button.\n- **metadata** on list items: any extra data attached to an item. Returned as the action payload when the user clicks that item.\n- **form**: always has a submit button (label defaults to \"Submit\"). When clicked, the form data is sent as a chat message automatically. Do NOT add a separate button_group for form submission.\n- **select fields**: \\`options\\` is an array of \\`{label, value}\\` objects.\n`;\n return context;\n}\nfunction generateCompactWidgetContext(enabledWidgets) {\n const widgets = enabledWidgets || DEFAULT_WIDGET_TYPES;\n let context = `\n## UI Widgets\nRender widgets inline: \\`@ui:type[{json}]\\` (square brackets required, no code blocks).\nUse when structured display is clearer than plain text. Normal text can surround widgets.\n\n`;\n for (const type of widgets) {\n const def = WIDGET_DEFINITIONS[type];\n if (!def) continue;\n context += `**${type}**: ${def.schema}\n`;\n }\n context += `\nactions.type = custom string returned on click. list metadata = payload on item click. form submit sends data as chat message automatically, no button_group needed.\n`;\n return context;\n}\n\n// src/utils/interface-parser.ts\nfunction findMatchingBracket2(text, startIndex) {\n const openChar = text[startIndex];\n const closeChar = openChar === \"[\" ? \"]\" : \"}\";\n let depth = 0;\n let inString = false;\n let escapeNext = false;\n for (let i = startIndex; i < text.length; i++) {\n const char = text[i];\n if (escapeNext) {\n escapeNext = false;\n continue;\n }\n if (char === \"\\\\\" && inString) {\n escapeNext = true;\n continue;\n }\n if (char === '\"') {\n inString = !inString;\n continue;\n }\n if (inString) continue;\n if (char === openChar || char === (openChar === \"[\" ? \"{\" : \"[\")) {\n if (char === openChar) depth++;\n } else if (char === closeChar || char === (closeChar === \"]\" ? \"}\" : \"]\")) {\n if (char === closeChar) {\n depth--;\n if (depth === 0) return i;\n }\n }\n }\n return -1;\n}\nfunction parseInterfaceFromText(text) {\n const marker = \"@interface[\";\n const idx = text.indexOf(marker);\n if (idx === -1) return null;\n const bracketStart = idx + marker.length - 1;\n const bracketEnd = findMatchingBracket2(text, bracketStart);\n if (bracketEnd === -1) return null;\n const jsonContent = text.slice(bracketStart + 1, bracketEnd);\n try {\n const parsed = JSON.parse(jsonContent);\n if (!parsed.root || !parsed.root.id) return null;\n return {\n version: parsed.version || 1,\n root: parsed.root\n };\n } catch {\n return null;\n }\n}\nfunction parseUpdatesFromText(text) {\n const updates = [];\n const marker = \"@update[\";\n let searchFrom = 0;\n while (true) {\n const idx = text.indexOf(marker, searchFrom);\n if (idx === -1) break;\n const bracketStart = idx + marker.length - 1;\n const bracketEnd = findMatchingBracket2(text, bracketStart);\n if (bracketEnd === -1) break;\n const jsonContent = text.slice(bracketStart + 1, bracketEnd);\n try {\n const parsed = JSON.parse(jsonContent);\n if (Array.isArray(parsed)) {\n updates.push(...parsed);\n } else if (parsed.op && parsed.target) {\n updates.push(parsed);\n }\n } catch {\n }\n searchFrom = bracketEnd + 1;\n }\n return updates;\n}\nfunction containsInterface(text) {\n return text.includes(\"@interface[\") || text.includes(\"@update[\");\n}\nfunction stripInterface(text) {\n let result = text;\n const ifacePattern = /@interface\\[/g;\n let match;\n while ((match = ifacePattern.exec(result)) !== null) {\n const bracketStart = match.index + match[0].length - 1;\n const bracketEnd = findMatchingBracket2(result, bracketStart);\n if (bracketEnd === -1) break;\n result = result.slice(0, match.index) + result.slice(bracketEnd + 1);\n ifacePattern.lastIndex = match.index;\n }\n const updatePattern = /@update\\[/g;\n while ((match = updatePattern.exec(result)) !== null) {\n const bracketStart = match.index + match[0].length - 1;\n const bracketEnd = findMatchingBracket2(result, bracketStart);\n if (bracketEnd === -1) break;\n result = result.slice(0, match.index) + result.slice(bracketEnd + 1);\n updatePattern.lastIndex = match.index;\n }\n return result.replace(/\\s+/g, \" \").trim();\n}\n\n// src/utils/interface-context.ts\nfunction generateInterfaceContext() {\n return `## Auto Interface Mode\n\nYou generate full page interfaces as JSON. When asked for a dashboard, form, or any UI, respond with an @interface block.\n\n### CRITICAL FORMAT RULES\n1. Wrap your JSON in: @interface[{...}]\n2. Every node MUST have: \"type\", \"id\", and \"props\" (an object)\n3. Widget properties go INSIDE \"props\", NOT at the top level\n4. The \"type\" field is the ACTUAL widget name (e.g. \"form\", \"kpi\", \"table\") \\u2014 NEVER use \"widget\" as a type\n5. Layout nodes use type: \"layout\" with a \"layout\" field for the layout kind\n\n### Node structure\n\nLayout node:\n{\"type\": \"layout\", \"id\": \"unique-id\", \"layout\": \"page|row|stack|columns|sidebar|tabs\", \"props\": {...}, \"children\": [...]}\n\nWidget node:\n{\"type\": \"kpi|text_block|form|table|chart|list|card|spacer|button_group|image\", \"id\": \"unique-id\", \"props\": {...}}\n\n### Layout types and their props\n- page: { title?, padding?: \"none\"|\"sm\"|\"md\"|\"lg\", maxWidth?: \"sm\"|\"md\"|\"lg\"|\"xl\"|\"full\" }\n- row: { columns?: number[] (e.g. [1,2] for 1/3+2/3), gap?: \"none\"|\"sm\"|\"md\"|\"lg\" }\n- stack: { gap?: \"none\"|\"sm\"|\"md\"|\"lg\", align?: \"left\"|\"center\"|\"right\"|\"stretch\" }\n- columns: { count?: number, gap?: \"none\"|\"sm\"|\"md\"|\"lg\" }\n- sidebar: { side?: \"left\"|\"right\", width?: string }\n- tabs: { labels: string[], defaultTab?: number }\n\n### Widget types and their props\n- kpi: { label: string, value: string, change?: string, trend?: \"up\"|\"down\"|\"flat\" }\n- text_block: { content: string (markdown), variant?: \"heading\"|\"body\"|\"caption\" }\n- spacer: { height?: \"sm\"|\"md\"|\"lg\", variant?: \"line\"|\"space\" }\n- card: { title: string, description?: string, image?: string, footer?: string }\n- list: { items: [{ id: string, title: string, subtitle?: string }] }\n- table: { columns: [{ key: string, label: string }], rows: [{ key: value, ... }], striped?: boolean, compact?: boolean }\n- chart: { chartType: \"line\"|\"bar\"|\"pie\", title?: string, data: { labels: string[], datasets: [{ label: string, data: number[] }] } }\n- form: { title?: string, fields: [{ name: string, type: \"text\"|\"email\"|\"select\"|\"textarea\"|\"checkbox\", label: string, required?: boolean, placeholder?: string, options?: [{ label: string, value: string }] }] }\n- button_group: { buttons: [{ id: string, label: string, variant?: string }] }\n- image: { src: string, alt: string, caption?: string }\n\n### CORRECT example\n\n@interface[{\"version\":1,\"root\":{\"type\":\"layout\",\"id\":\"root\",\"layout\":\"page\",\"props\":{\"title\":\"My Form\"},\"children\":[{\"type\":\"text_block\",\"id\":\"t1\",\"props\":{\"content\":\"Fill out the form below\",\"variant\":\"body\"}},{\"type\":\"form\",\"id\":\"f1\",\"props\":{\"fields\":[{\"name\":\"name\",\"type\":\"text\",\"label\":\"Name\",\"required\":true},{\"name\":\"email\",\"type\":\"email\",\"label\":\"Email\"}]}},{\"type\":\"button_group\",\"id\":\"b1\",\"props\":{\"buttons\":[{\"id\":\"submit\",\"label\":\"Submit\"}]}}]}}]\n\n### WRONG (do NOT do these)\n- {\"type\": \"widget\", \"props\": {\"widget\": \"form\"}} \\u2014 WRONG, type must be \"form\" directly\n- {\"type\": \"text_block\", \"content\": \"hello\"} \\u2014 WRONG, content must be inside props\n- {\"type\": \"text_block\", \"props\": {\"style\": \"heading\"}} \\u2014 WRONG, use \"variant\" not \"style\"\n\n### Guidelines\n- Always use unique IDs for every node\n- Organize content logically: KPIs in a row, charts with supporting lists, etc.\n- Use text_block for descriptions and headings within layouts\n- Use spacer with variant \"line\" to separate sections\n- You can include normal text before/after the @interface block\n- For updates use: @update[{\"op\": \"update\", \"target\": \"widget-id\", \"props\": {\"key\": \"new-value\"}}]`;\n}\nfunction generateCompactInterfaceContext() {\n return `Generate a UI interface as JSON wrapped in @interface[{...}].\n\nSTRICT FORMAT \\u2014 every node needs \"type\", \"id\", and \"props\" (object):\n- Layout: {\"type\":\"layout\",\"id\":\"x\",\"layout\":\"page|row|stack|tabs\",\"props\":{...},\"children\":[...]}\n- Widget: {\"type\":\"kpi|text_block|form|table|chart|list|card|spacer|button_group|image\",\"id\":\"x\",\"props\":{...}}\n\nNEVER use type:\"widget\". The type IS the widget name. All widget properties go INSIDE \"props\".\n\nWidget props:\n- kpi: {label,value,change?,trend?}\n- text_block: {content,variant?:\"heading\"|\"body\"|\"caption\"}\n- form: {fields:[{name,type,label,required?,placeholder?}]}\n- table: {columns:[{key,label}],rows:[{...}]}\n- chart: {chartType:\"line\"|\"bar\"|\"pie\",data:{labels,datasets:[{label,data}]}}\n- list: {items:[{id,title,subtitle?}]}\n- button_group: {buttons:[{id,label}]}\n\nRow props: {columns:[1,2]} means 1/3+2/3. Page props: {title:\"...\"}.\n\nExample: @interface[{\"version\":1,\"root\":{\"type\":\"layout\",\"id\":\"root\",\"layout\":\"page\",\"props\":{\"title\":\"Form\"},\"children\":[{\"type\":\"form\",\"id\":\"f1\",\"props\":{\"fields\":[{\"name\":\"name\",\"type\":\"text\",\"label\":\"Name\"}]}}]}}]`;\n}\n\n// src/utils/interface-operations.ts\nfunction findNode(root, id) {\n if (root.id === id) return root;\n if (root.children) {\n for (const child of root.children) {\n const found = findNode(child, id);\n if (found) return found;\n }\n }\n return null;\n}\nfunction replaceNode(root, targetId, newNode) {\n if (root.id === targetId) return newNode;\n if (!root.children) return root;\n const newChildren = root.children.map((child) => replaceNode(child, targetId, newNode));\n if (newChildren.every((child, i) => child === root.children[i])) return root;\n return { ...root, children: newChildren };\n}\nfunction updateNodeProps(root, targetId, props) {\n if (root.id === targetId) {\n return { ...root, props: { ...root.props, ...props } };\n }\n if (!root.children) return root;\n const newChildren = root.children.map((child) => updateNodeProps(child, targetId, props));\n if (newChildren.every((child, i) => child === root.children[i])) return root;\n return { ...root, children: newChildren };\n}\nfunction removeNode(root, targetId) {\n if (root.id === targetId) return null;\n if (!root.children) return root;\n const newChildren = root.children.map((child) => removeNode(child, targetId)).filter((child) => child !== null);\n if (newChildren.length === root.children.length && newChildren.every((child, i) => child === root.children[i])) return root;\n return { ...root, children: newChildren };\n}\nfunction appendNode(root, targetId, newNode) {\n if (root.id === targetId) {\n return { ...root, children: [...root.children || [], newNode] };\n }\n if (!root.children) return root;\n const newChildren = root.children.map((child) => appendNode(child, targetId, newNode));\n if (newChildren.every((child, i) => child === root.children[i])) return root;\n return { ...root, children: newChildren };\n}\nfunction prependNode(root, targetId, newNode) {\n if (root.id === targetId) {\n return { ...root, children: [newNode, ...root.children || []] };\n }\n if (!root.children) return root;\n const newChildren = root.children.map((child) => prependNode(child, targetId, newNode));\n if (newChildren.every((child, i) => child === root.children[i])) return root;\n return { ...root, children: newChildren };\n}\nfunction applyUpdate(spec, update) {\n let newRoot = spec.root;\n switch (update.op) {\n case \"replace\":\n if (!update.node) return spec;\n newRoot = replaceNode(spec.root, update.target, update.node);\n break;\n case \"update\":\n if (!update.props) return spec;\n newRoot = updateNodeProps(spec.root, update.target, update.props);\n break;\n case \"remove\":\n newRoot = removeNode(spec.root, update.target);\n if (!newRoot) return spec;\n break;\n case \"append\":\n if (!update.node) return spec;\n newRoot = appendNode(spec.root, update.target, update.node);\n break;\n case \"prepend\":\n if (!update.node) return spec;\n newRoot = prependNode(spec.root, update.target, update.node);\n break;\n default:\n return spec;\n }\n if (newRoot === spec.root) return spec;\n return { ...spec, root: newRoot };\n}\nfunction applyUpdates(spec, updates) {\n return updates.reduce((s, update) => applyUpdate(s, update), spec);\n}\n\n// src/utils/message-converter.ts\nfunction convertApiMessages(apiMessages) {\n const result = [];\n let lastAssistantSegments = null;\n for (let i = 0; i < apiMessages.length; i++) {\n const msg = apiMessages[i];\n const timestamp = msg.created_at || msg.timestamp ? new Date(msg.created_at || msg.timestamp) : /* @__PURE__ */ new Date();\n if (typeof msg.content === \"string\") {\n const message = {\n id: msg.id || `thread-msg-${i}`,\n role: msg.role,\n content: msg.content,\n timestamp\n };\n result.push(message);\n lastAssistantSegments = null;\n } else if (Array.isArray(msg.content)) {\n if (msg.role === \"assistant\") {\n const segments = [];\n let textContent = \"\";\n for (const block of msg.content) {\n if (block.type === \"text\" && block.text) {\n segments.push({ type: \"text\", content: block.text });\n textContent += block.text;\n } else if (block.type === \"tool_use\") {\n segments.push({\n type: \"tool\",\n id: block.id || `tool-${i}-${segments.length}`,\n name: block.name || \"unknown\",\n status: \"completed\"\n });\n }\n }\n const message = {\n id: msg.id || `thread-msg-${i}`,\n role: \"assistant\",\n content: textContent,\n timestamp,\n metadata: segments.length > 0 ? { content_segments: segments } : void 0\n };\n result.push(message);\n lastAssistantSegments = segments;\n } else if (msg.role === \"user\") {\n const hasToolResults = msg.content.some((b) => b.type === \"tool_result\");\n if (hasToolResults && lastAssistantSegments) {\n for (const block of msg.content) {\n if (block.type === \"tool_result\" && block.tool_use_id) {\n const toolSegment = lastAssistantSegments.find(\n (s) => s.type === \"tool\" && s.id === block.tool_use_id\n );\n if (toolSegment && toolSegment.type === \"tool\") {\n toolSegment.result = typeof block.content === \"string\" ? block.content : Array.isArray(block.content) ? block.content.map((c) => c.text || \"\").join(\"\") : void 0;\n toolSegment.status = block.is_error ? \"error\" : \"completed\";\n }\n }\n }\n } else {\n const textContent = msg.content.filter((b) => b.type === \"text\").map((b) => b.text || \"\").join(\"\");\n if (textContent) {\n result.push({\n id: msg.id || `thread-msg-${i}`,\n role: \"user\",\n content: textContent,\n timestamp\n });\n }\n lastAssistantSegments = null;\n }\n }\n }\n }\n return result;\n}\n\n// src/components/Widgets/Widgets.tsx\nimport { useEffect as useEffect5 } from \"react\";\n\n// src/components/Widgets/widget-library/Card.tsx\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nfunction Card({ widget, onAction }) {\n const { title, description, image, footer } = widget.props;\n return /* @__PURE__ */ jsxs(\"div\", { className: \"border border-neutral-200 dark:border-neutral-700 rounded-xl bg-white dark:bg-neutral-900 overflow-hidden\", children: [\n image && /* @__PURE__ */ jsx(\"img\", { src: image, alt: title, className: \"w-full h-48 object-cover\" }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"p-4\", children: [\n /* @__PURE__ */ jsx(\"h3\", { className: \"!text-lg font-semibold !text-neutral-900 dark:!text-white\", children: title }),\n description && /* @__PURE__ */ jsx(\"p\", { className: \"!text-neutral-600 dark:!text-neutral-400 mt-2\", children: description })\n ] }),\n (footer || widget.actions && widget.actions.length > 0) && /* @__PURE__ */ jsxs(\"div\", { className: \"border-t border-neutral-200 dark:border-neutral-700 p-4 flex justify-between items-center\", children: [\n footer && /* @__PURE__ */ jsx(\"span\", { className: \"!text-sm !text-neutral-600 dark:!text-neutral-400\", children: footer }),\n widget.actions && widget.actions.length > 0 && /* @__PURE__ */ jsx(\"div\", { className: \"flex gap-2\", children: widget.actions.map((action, idx) => /* @__PURE__ */ jsx(\n \"button\",\n {\n onClick: () => onAction?.({\n type: action.type,\n payload: action.payload,\n widgetId: widget.id,\n timestamp: /* @__PURE__ */ new Date()\n }),\n className: \"px-3 py-1.5 !text-sm rounded-lg font-medium transition-colors bg-blue-500 !text-white hover:bg-blue-600\",\n children: action.label\n },\n idx\n )) })\n ] })\n ] });\n}\n\n// src/components/Widgets/widget-library/List.tsx\nimport { useEffect, useRef, useState } from \"react\";\nimport { jsx as jsx2, jsxs as jsxs2 } from \"react/jsx-runtime\";\nfunction List({ widget, onAction }) {\n const { items } = widget.props;\n const isStreaming = widget.isStreaming ?? false;\n const seenItemsRef = useRef(/* @__PURE__ */ new Set());\n const [newItemIds, setNewItemIds] = useState(/* @__PURE__ */ new Set());\n useEffect(() => {\n const currentIds = new Set(items.map((item) => item.id));\n const newIds = /* @__PURE__ */ new Set();\n items.forEach((item) => {\n if (!seenItemsRef.current.has(item.id)) {\n newIds.add(item.id);\n }\n });\n items.forEach((item) => seenItemsRef.current.add(item.id));\n if (newIds.size > 0) {\n setNewItemIds(newIds);\n const timer = setTimeout(() => {\n setNewItemIds(/* @__PURE__ */ new Set());\n }, 500);\n return () => clearTimeout(timer);\n }\n }, [items]);\n return /* @__PURE__ */ jsxs2(\"div\", { className: \"border border-neutral-200 dark:border-neutral-700 rounded-xl bg-white dark:bg-neutral-900 overflow-hidden\", children: [\n items.map((item, index) => {\n const isNew = newItemIds.has(item.id);\n const isLast = index === items.length - 1;\n return /* @__PURE__ */ jsxs2(\n \"div\",\n {\n className: `apteva-list-item flex items-center p-4 transition-colors ${!isLast || isStreaming ? \"border-b border-neutral-200 dark:border-neutral-700\" : \"\"} ${!item.backgroundColor ? \"hover:bg-neutral-50 dark:hover:bg-neutral-800\" : \"\"} ${isNew ? \"apteva-list-item-new\" : \"\"}`,\n style: item.backgroundColor ? { backgroundColor: item.backgroundColor } : void 0,\n children: [\n item.image && /* @__PURE__ */ jsx2(\"img\", { src: item.image, alt: item.title, className: \"w-16 h-16 rounded object-cover\" }),\n /* @__PURE__ */ jsxs2(\"div\", { className: `flex-1 ${item.image ? \"ml-4\" : \"\"}`, children: [\n /* @__PURE__ */ jsx2(\"h4\", { className: \"font-semibold !text-neutral-900 dark:!text-white\", children: item.title }),\n item.subtitle && /* @__PURE__ */ jsx2(\"p\", { className: \"!text-sm !text-neutral-600 dark:!text-neutral-400\", children: item.subtitle }),\n item.description && /* @__PURE__ */ jsx2(\"p\", { className: \"!text-xs !text-neutral-500 dark:!text-neutral-500 mt-1\", children: item.description })\n ] }),\n widget.actions && widget.actions.length > 0 && /* @__PURE__ */ jsx2(\"div\", { className: \"flex gap-2\", children: widget.actions.map((action, idx) => /* @__PURE__ */ jsx2(\n \"button\",\n {\n onClick: () => onAction?.({\n type: action.type,\n payload: item.metadata || item,\n widgetId: widget.id,\n timestamp: /* @__PURE__ */ new Date()\n }),\n className: \"px-3 py-1.5 !text-sm rounded-lg font-medium transition-colors bg-blue-500 !text-white hover:bg-blue-600\",\n children: action.label\n },\n idx\n )) })\n ]\n },\n item.id\n );\n }),\n isStreaming && /* @__PURE__ */ jsxs2(\"div\", { className: \"apteva-list-streaming flex items-center gap-3 p-4 text-neutral-500 dark:text-neutral-400\", children: [\n /* @__PURE__ */ jsxs2(\"div\", { className: \"apteva-streaming-dots flex gap-1\", children: [\n /* @__PURE__ */ jsx2(\"span\", { className: \"w-2 h-2 bg-current rounded-full animate-pulse\", style: { animationDelay: \"0ms\" } }),\n /* @__PURE__ */ jsx2(\"span\", { className: \"w-2 h-2 bg-current rounded-full animate-pulse\", style: { animationDelay: \"150ms\" } }),\n /* @__PURE__ */ jsx2(\"span\", { className: \"w-2 h-2 bg-current rounded-full animate-pulse\", style: { animationDelay: \"300ms\" } })\n ] }),\n /* @__PURE__ */ jsx2(\"span\", { className: \"text-sm\", children: \"Loading more...\" })\n ] })\n ] });\n}\n\n// src/components/Widgets/widget-library/Button.tsx\nimport { jsx as jsx3 } from \"react/jsx-runtime\";\nfunction Button({ widget, onAction }) {\n const { label, variant = \"primary\", disabled = false } = widget.props;\n const variantClasses = {\n primary: \"bg-blue-500 !text-white hover:bg-blue-600\",\n secondary: \"bg-neutral-500 !text-white hover:bg-neutral-600\",\n outline: \"border-2 border-blue-500 !text-blue-500 hover:bg-blue-50 dark:hover:bg-blue-900\",\n ghost: \"!text-blue-500 hover:bg-blue-50 dark:hover:bg-blue-900\"\n };\n return /* @__PURE__ */ jsx3(\n \"button\",\n {\n onClick: () => widget.actions?.[0] && onAction?.({\n type: widget.actions[0].type,\n payload: widget.actions[0].payload,\n widgetId: widget.id,\n timestamp: /* @__PURE__ */ new Date()\n }),\n disabled,\n className: cn(\"px-4 py-2 rounded-lg font-medium transition-colors\", variantClasses[variant], {\n \"opacity-50 cursor-not-allowed\": disabled\n }),\n children: label\n }\n );\n}\n\n// src/components/Widgets/widget-library/ButtonGroup.tsx\nimport { jsx as jsx4 } from \"react/jsx-runtime\";\nfunction ButtonGroup({ widget, onAction }) {\n const { layout = \"horizontal\", buttons } = widget.props;\n const variantClasses = {\n primary: \"bg-blue-500 !text-white hover:bg-blue-600\",\n secondary: \"bg-neutral-200 dark:bg-neutral-700 !text-neutral-800 dark:!text-neutral-200 hover:bg-neutral-300 dark:hover:bg-neutral-600\",\n outline: \"border border-neutral-300 dark:border-neutral-600 !text-neutral-700 dark:!text-neutral-300 hover:bg-neutral-100 dark:hover:bg-neutral-800\"\n };\n const getActionForButton = (buttonId) => {\n return widget.actions?.find((action) => action.payload?.buttonId === buttonId) || widget.actions?.[0];\n };\n return /* @__PURE__ */ jsx4(\n \"div\",\n {\n className: cn(\n \"flex gap-2\",\n layout === \"vertical\" ? \"flex-col\" : \"flex-row flex-wrap\"\n ),\n children: buttons.map((button) => {\n const action = getActionForButton(button.id);\n return /* @__PURE__ */ jsx4(\n \"button\",\n {\n onClick: () => {\n if (action) {\n onAction?.({\n type: action.type,\n payload: { ...action.payload, buttonId: button.id },\n widgetId: widget.id,\n timestamp: /* @__PURE__ */ new Date()\n });\n }\n },\n className: cn(\n \"px-4 py-2 rounded-lg font-medium transition-colors text-sm\",\n variantClasses[button.variant || \"secondary\"]\n ),\n children: button.label\n },\n button.id\n );\n })\n }\n );\n}\n\n// src/components/Widgets/widget-library/Table.tsx\nimport { useEffect as useEffect2, useRef as useRef2, useState as useState2 } from \"react\";\nimport { jsx as jsx5, jsxs as jsxs3 } from \"react/jsx-runtime\";\nfunction Table({ widget, onAction }) {\n const { columns, rows, caption, compact = false, striped = false } = widget.props;\n const isStreaming = widget.isStreaming ?? false;\n const seenRowsRef = useRef2(/* @__PURE__ */ new Set());\n const [newRowIds, setNewRowIds] = useState2(/* @__PURE__ */ new Set());\n useEffect2(() => {\n const newIds = /* @__PURE__ */ new Set();\n rows.forEach((row, index) => {\n const rowId = row.id || `row-${index}`;\n if (!seenRowsRef.current.has(rowId)) {\n newIds.add(rowId);\n }\n });\n rows.forEach((row, index) => {\n const rowId = row.id || `row-${index}`;\n seenRowsRef.current.add(rowId);\n });\n if (newIds.size > 0) {\n setNewRowIds(newIds);\n const timer = setTimeout(() => {\n setNewRowIds(/* @__PURE__ */ new Set());\n }, 500);\n return () => clearTimeout(timer);\n }\n }, [rows]);\n const getAlignment = (align) => {\n switch (align) {\n case \"center\":\n return \"text-center\";\n case \"right\":\n return \"text-right\";\n default:\n return \"text-left\";\n }\n };\n return /* @__PURE__ */ jsx5(\"div\", { className: \"border border-neutral-200 dark:border-neutral-700 rounded-xl bg-white dark:bg-neutral-900 overflow-hidden\", children: /* @__PURE__ */ jsx5(\"div\", { className: \"overflow-x-auto\", children: /* @__PURE__ */ jsxs3(\"table\", { className: \"w-full\", children: [\n caption && /* @__PURE__ */ jsx5(\"caption\", { className: \"px-4 py-2 text-sm text-neutral-600 dark:text-neutral-400 text-left bg-neutral-50 dark:bg-neutral-800 border-b border-neutral-200 dark:border-neutral-700\", children: caption }),\n /* @__PURE__ */ jsx5(\"thead\", { children: /* @__PURE__ */ jsx5(\"tr\", { className: \"bg-neutral-50 dark:bg-neutral-800 border-b border-neutral-200 dark:border-neutral-700\", children: columns.map((column) => /* @__PURE__ */ jsx5(\n \"th\",\n {\n className: cn(\n \"font-semibold text-neutral-900 dark:text-white\",\n compact ? \"px-3 py-2 text-xs\" : \"px-4 py-3 text-sm\",\n getAlignment(column.align)\n ),\n style: column.width ? { width: column.width } : void 0,\n children: column.label\n },\n column.key\n )) }) }),\n /* @__PURE__ */ jsxs3(\"tbody\", { children: [\n rows.map((row, rowIndex) => {\n const rowId = row.id || `row-${rowIndex}`;\n const isNew = newRowIds.has(rowId);\n return /* @__PURE__ */ jsx5(\n \"tr\",\n {\n className: cn(\n \"apteva-table-row border-b border-neutral-200 dark:border-neutral-700 last:border-b-0\",\n \"transition-colors hover:bg-neutral-50 dark:hover:bg-neutral-800\",\n striped && rowIndex % 2 === 1 && \"bg-neutral-50/50 dark:bg-neutral-800/50\",\n isNew && \"apteva-table-row-new\"\n ),\n onClick: () => {\n if (widget.actions && widget.actions.length > 0) {\n onAction?.({\n type: widget.actions[0].type,\n payload: row,\n widgetId: widget.id,\n timestamp: /* @__PURE__ */ new Date()\n });\n }\n },\n style: { cursor: widget.actions?.length ? \"pointer\" : \"default\" },\n children: columns.map((column) => /* @__PURE__ */ jsx5(\n \"td\",\n {\n className: cn(\n \"text-neutral-700 dark:text-neutral-300\",\n compact ? \"px-3 py-2 text-xs\" : \"px-4 py-3 text-sm\",\n getAlignment(column.align)\n ),\n children: row[column.key] ?? \"\\u2014\"\n },\n column.key\n ))\n },\n rowId\n );\n }),\n rows.length === 0 && !isStreaming && /* @__PURE__ */ jsx5(\"tr\", { children: /* @__PURE__ */ jsx5(\n \"td\",\n {\n colSpan: columns.length || 1,\n className: \"px-4 py-8 text-center text-sm text-neutral-500 dark:text-neutral-400\",\n children: \"No data available\"\n }\n ) }),\n isStreaming && /* @__PURE__ */ jsx5(\"tr\", { className: \"apteva-table-streaming\", children: /* @__PURE__ */ jsx5(\n \"td\",\n {\n colSpan: columns.length || 1,\n className: \"px-4 py-3 text-center\",\n children: /* @__PURE__ */ jsxs3(\"div\", { className: \"flex items-center justify-center gap-3 text-neutral-500 dark:text-neutral-400\", children: [\n /* @__PURE__ */ jsxs3(\"div\", { className: \"flex gap-1\", children: [\n /* @__PURE__ */ jsx5(\"span\", { className: \"w-2 h-2 bg-current rounded-full animate-pulse\", style: { animationDelay: \"0ms\" } }),\n /* @__PURE__ */ jsx5(\"span\", { className: \"w-2 h-2 bg-current rounded-full animate-pulse\", style: { animationDelay: \"150ms\" } }),\n /* @__PURE__ */ jsx5(\"span\", { className: \"w-2 h-2 bg-current rounded-full animate-pulse\", style: { animationDelay: \"300ms\" } })\n ] }),\n /* @__PURE__ */ jsx5(\"span\", { className: \"text-sm\", children: \"Loading more...\" })\n ] })\n }\n ) })\n ] })\n ] }) }) });\n}\n\n// src/components/Widgets/widget-library/Form.tsx\nimport { useState as useState3, useRef as useRef3, useEffect as useEffect3, useCallback } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { jsx as jsx6, jsxs as jsxs4 } from \"react/jsx-runtime\";\nfunction PortalDropdown({\n anchorRef,\n open,\n onClose,\n width,\n children\n}) {\n const dropdownRef = useRef3(null);\n const [pos, setPos] = useState3(null);\n const [themeClass, setThemeClass] = useState3(\"\");\n useEffect3(() => {\n if (!open || !anchorRef.current) return;\n const chat = anchorRef.current.closest(\".apteva-chat\");\n if (chat) {\n if (chat.classList.contains(\"apteva-force-light\")) setThemeClass(\"apteva-force-light\");\n else if (chat.classList.contains(\"apteva-force-dark\")) setThemeClass(\"apteva-force-dark\");\n else setThemeClass(\"\");\n }\n }, [open, anchorRef]);\n useEffect3(() => {\n if (!open || !anchorRef.current) {\n setPos(null);\n return;\n }\n const update = () => {\n const rect = anchorRef.current.getBoundingClientRect();\n setPos({\n top: rect.bottom + window.scrollY + 4,\n left: rect.left + window.scrollX,\n width: rect.width\n });\n };\n update();\n window.addEventListener(\"scroll\", update, true);\n window.addEventListener(\"resize\", update);\n return () => {\n window.removeEventListener(\"scroll\", update, true);\n window.removeEventListener(\"resize\", update);\n };\n }, [open, anchorRef]);\n useEffect3(() => {\n if (!open) return;\n const handler = (e) => {\n const target = e.target;\n if (dropdownRef.current && !dropdownRef.current.contains(target) && anchorRef.current && !anchorRef.current.contains(target)) {\n onClose();\n }\n };\n document.addEventListener(\"mousedown\", handler);\n return () => document.removeEventListener(\"mousedown\", handler);\n }, [open, onClose, anchorRef]);\n useEffect3(() => {\n if (!open) return;\n const handler = (e) => {\n if (e.key === \"Escape\") onClose();\n };\n document.addEventListener(\"keydown\", handler);\n return () => document.removeEventListener(\"keydown\", handler);\n }, [open, onClose]);\n if (!open || !pos) return null;\n return createPortal(\n /* @__PURE__ */ jsx6(\n \"div\",\n {\n ref: dropdownRef,\n className: `apteva-widget ${themeClass}`,\n style: {\n position: \"absolute\",\n top: pos.top,\n left: pos.left,\n width: width === \"match\" ? pos.width : void 0,\n zIndex: 99999\n },\n children\n }\n ),\n document.body\n );\n}\nfunction CustomSelect({\n name,\n value,\n options,\n placeholder,\n required,\n onChange\n}) {\n const [open, setOpen] = useState3(false);\n const triggerRef = useRef3(null);\n const selected = options?.find((o) => o.label === value || o.value === value);\n const close = useCallback(() => setOpen(false), []);\n return /* @__PURE__ */ jsxs4(\"div\", { className: \"apteva-select relative\", children: [\n /* @__PURE__ */ jsxs4(\n \"select\",\n {\n name,\n value,\n required,\n onChange: () => {\n },\n tabIndex: -1,\n className: \"absolute inset-0 opacity-0 pointer-events-none\",\n \"aria-hidden\": true,\n children: [\n /* @__PURE__ */ jsx6(\"option\", { value: \"\" }),\n options?.map((o) => /* @__PURE__ */ jsx6(\"option\", { value: o.label, children: o.label }, o.value))\n ]\n }\n ),\n /* @__PURE__ */ jsxs4(\n \"button\",\n {\n ref: triggerRef,\n type: \"button\",\n onClick: () => setOpen(!open),\n className: \"apteva-select-trigger w-full flex items-center justify-between px-3 py-2 rounded-lg border transition-colors text-left\",\n children: [\n /* @__PURE__ */ jsx6(\"span\", { className: selected ? \"apteva-select-value\" : \"apteva-select-placeholder\", children: selected ? selected.label : placeholder || \"Select...\" }),\n /* @__PURE__ */ jsx6(\n \"svg\",\n {\n className: `apteva-select-chevron w-4 h-4 flex-shrink-0 transition-transform ${open ? \"rotate-180\" : \"\"}`,\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /* @__PURE__ */ jsx6(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M19 9l-7 7-7-7\" })\n }\n )\n ]\n }\n ),\n /* @__PURE__ */ jsx6(PortalDropdown, { anchorRef: triggerRef, open, onClose: close, width: \"match\", children: /* @__PURE__ */ jsx6(\"div\", { className: \"apteva-select-dropdown rounded-lg border shadow-lg overflow-hidden\", children: /* @__PURE__ */ jsxs4(\"div\", { className: \"max-h-48 overflow-y-auto py-1\", children: [\n options?.map((opt) => /* @__PURE__ */ jsx6(\n \"button\",\n {\n type: \"button\",\n onClick: () => {\n onChange(opt.label);\n close();\n },\n className: `apteva-select-option w-full text-left px-3 py-2 text-sm transition-colors ${value === opt.label ? \"apteva-select-option-active\" : \"\"}`,\n children: opt.label\n },\n opt.value\n )),\n (!options || options.length === 0) && /* @__PURE__ */ jsx6(\"div\", { className: \"px-3 py-2 text-sm apteva-select-placeholder\", children: \"No options\" })\n ] }) }) })\n ] });\n}\nfunction CustomDatePicker({\n name,\n value,\n placeholder,\n required,\n onChange\n}) {\n const [open, setOpen] = useState3(false);\n const triggerRef = useRef3(null);\n const close = useCallback(() => setOpen(false), []);\n const parseDate = (v) => {\n if (v) {\n const [y, m, d] = v.split(\"-\").map(Number);\n return { year: y, month: m - 1, day: d };\n }\n const now = /* @__PURE__ */ new Date();\n return { year: now.getFullYear(), month: now.getMonth(), day: 0 };\n };\n const parsed = parseDate(value);\n const [viewYear, setViewYear] = useState3(parsed.year);\n const [viewMonth, setViewMonth] = useState3(parsed.month);\n useEffect3(() => {\n if (value) {\n const p = parseDate(value);\n setViewYear(p.year);\n setViewMonth(p.month);\n }\n }, [value]);\n const daysInMonth = new Date(viewYear, viewMonth + 1, 0).getDate();\n const firstDayOfWeek = new Date(viewYear, viewMonth, 1).getDay();\n const startOffset = (firstDayOfWeek + 6) % 7;\n const prevMonth = () => {\n if (viewMonth === 0) {\n setViewMonth(11);\n setViewYear(viewYear - 1);\n } else setViewMonth(viewMonth - 1);\n };\n const nextMonth = () => {\n if (viewMonth === 11) {\n setViewMonth(0);\n setViewYear(viewYear + 1);\n } else setViewMonth(viewMonth + 1);\n };\n const selectDay = (day) => {\n const m = String(viewMonth + 1).padStart(2, \"0\");\n const d = String(day).padStart(2, \"0\");\n onChange(`${viewYear}-${m}-${d}`);\n close();\n };\n const formatDisplay = (v) => {\n if (!v) return \"\";\n const [y, m, d] = v.split(\"-\");\n return `${d}/${m}/${y}`;\n };\n const monthNames = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\n const dayLabels = [\"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\", \"Su\"];\n const isSelected = (day) => {\n if (!value) return false;\n const p = parseDate(value);\n return p.year === viewYear && p.month === viewMonth && p.day === day;\n };\n const isToday = (day) => {\n const now = /* @__PURE__ */ new Date();\n return now.getFullYear() === viewYear && now.getMonth() === viewMonth && now.getDate() === day;\n };\n return /* @__PURE__ */ jsxs4(\"div\", { className: \"apteva-datepicker relative\", children: [\n /* @__PURE__ */ jsx6(\n \"input\",\n {\n type: \"text\",\n name,\n value,\n required,\n onChange: () => {\n },\n tabIndex: -1,\n className: \"absolute inset-0 opacity-0 pointer-events-none\",\n \"aria-hidden\": true\n }\n ),\n /* @__PURE__ */ jsxs4(\n \"button\",\n {\n ref: triggerRef,\n type: \"button\",\n onClick: () => setOpen(!open),\n className: \"apteva-datepicker-trigger w-full flex items-center justify-between px-3 py-2 rounded-lg border transition-colors text-left\",\n children: [\n /* @__PURE__ */ jsx6(\"span\", { className: value ? \"apteva-datepicker-value\" : \"apteva-select-placeholder\", children: value ? formatDisplay(value) : placeholder || \"Select date...\" }),\n /* @__PURE__ */ jsx6(\"svg\", { className: \"apteva-select-chevron w-4 h-4 flex-shrink-0\", fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx6(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z\" }) })\n ]\n }\n ),\n /* @__PURE__ */ jsx6(PortalDropdown, { anchorRef: triggerRef, open, onClose: close, width: \"auto\", children: /* @__PURE__ */ jsxs4(\"div\", { className: \"apteva-datepicker-dropdown rounded-lg border shadow-lg overflow-hidden\", children: [\n /* @__PURE__ */ jsxs4(\"div\", { className: \"apteva-datepicker-header flex items-center justify-between px-3 py-2\", children: [\n /* @__PURE__ */ jsx6(\"button\", { type: \"button\", onClick: prevMonth, className: \"apteva-datepicker-nav p-1 rounded transition-colors\", children: /* @__PURE__ */ jsx6(\"svg\", { className: \"w-4 h-4\", fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx6(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M15 19l-7-7 7-7\" }) }) }),\n /* @__PURE__ */ jsxs4(\"span\", { className: \"apteva-datepicker-title text-sm font-semibold\", children: [\n monthNames[viewMonth],\n \" \",\n viewYear\n ] }),\n /* @__PURE__ */ jsx6(\"button\", { type: \"button\", onClick: nextMonth, className: \"apteva-datepicker-nav p-1 rounded transition-colors\", children: /* @__PURE__ */ jsx6(\"svg\", { className: \"w-4 h-4\", fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx6(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M9 5l7 7-7 7\" }) }) })\n ] }),\n /* @__PURE__ */ jsx6(\"div\", { className: \"grid grid-cols-7 px-2\", children: dayLabels.map((d) => /* @__PURE__ */ jsx6(\"div\", { className: \"apteva-datepicker-daylabel text-center text-xs font-medium py-1\", children: d }, d)) }),\n /* @__PURE__ */ jsxs4(\"div\", { className: \"grid grid-cols-7 px-2 pb-2\", children: [\n Array.from({ length: startOffset }).map((_, i) => /* @__PURE__ */ jsx6(\"div\", {}, `empty-${i}`)),\n Array.from({ length: daysInMonth }).map((_, i) => {\n const day = i + 1;\n const sel = isSelected(day);\n const today = isToday(day);\n return /* @__PURE__ */ jsx6(\n \"button\",\n {\n type: \"button\",\n onClick: () => selectDay(day),\n className: [\n \"apteva-datepicker-day text-center text-sm py-1 rounded transition-colors\",\n sel ? \"apteva-datepicker-day-selected\" : \"\",\n today && !sel ? \"apteva-datepicker-day-today\" : \"\"\n ].join(\" \"),\n children: day\n },\n day\n );\n })\n ] })\n ] }) })\n ] });\n}\nfunction Form({ widget, onAction }) {\n const { title, fields } = widget.props;\n const fileInputRefs = useRef3({});\n const [formData, setFormData] = useState3(() => {\n const initial = {};\n fields.forEach((field) => {\n if (field.type === \"file\") {\n initial[field.name] = [];\n } else {\n initial[field.name] = field.defaultValue ?? (field.type === \"checkbox\" ? false : \"\");\n }\n });\n return initial;\n });\n const handleChange = useCallback((name, value) => {\n setFormData((prev) => ({ ...prev, [name]: value }));\n }, []);\n const handleSubmit = (e) => {\n e.preventDefault();\n if (onAction) {\n onAction({\n type: \"submit\",\n payload: { formData },\n widgetId: widget.id,\n timestamp: /* @__PURE__ */ new Date()\n });\n }\n };\n const renderField = (field) => {\n const baseInputClass = \"apteva-input w-full px-3 py-2 rounded-lg border transition-colors focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent\";\n switch (field.type) {\n case \"text\":\n case \"password\":\n case \"number\":\n return /* @__PURE__ */ jsx6(\n \"input\",\n {\n type: field.type,\n name: field.name,\n value: formData[field.name] || \"\",\n onChange: (e) => handleChange(field.name, field.type === \"number\" ? Number(e.target.value) : e.target.value),\n placeholder: field.placeholder,\n required: field.required,\n className: baseInputClass\n }\n );\n case \"date\":\n return /* @__PURE__ */ jsx6(\n CustomDatePicker,\n {\n name: field.name,\n value: formData[field.name] || \"\",\n placeholder: field.placeholder,\n required: field.required,\n onChange: (v) => handleChange(field.name, v)\n }\n );\n case \"textarea\":\n return /* @__PURE__ */ jsx6(\n \"textarea\",\n {\n name: field.name,\n value: formData[field.name] || \"\",\n onChange: (e) => handleChange(field.name, e.target.value),\n placeholder: field.placeholder,\n required: field.required,\n rows: 3,\n className: baseInputClass\n }\n );\n case \"select\":\n return /* @__PURE__ */ jsx6(\n CustomSelect,\n {\n name: field.name,\n value: formData[field.name] || \"\",\n options: field.options,\n placeholder: field.placeholder,\n required: field.required,\n onChange: (v) => handleChange(field.name, v)\n }\n );\n case \"checkbox\":\n return /* @__PURE__ */ jsxs4(\"label\", { className: \"apteva-checkbox flex items-center gap-2 cursor-pointer\", children: [\n /* @__PURE__ */ jsx6(\n \"input\",\n {\n type: \"checkbox\",\n name: field.name,\n checked: formData[field.name] || false,\n onChange: (e) => handleChange(field.name, e.target.checked),\n className: \"w-4 h-4 rounded\"\n }\n ),\n /* @__PURE__ */ jsx6(\"span\", { children: field.label })\n ] });\n case \"file\": {\n const files = formData[field.name] || [];\n return /* @__PURE__ */ jsxs4(\"div\", { className: \"space-y-2\", children: [\n /* @__PURE__ */ jsx6(\n \"input\",\n {\n ref: (el) => {\n fileInputRefs.current[field.name] = el;\n },\n type: \"file\",\n name: field.name,\n multiple: field.multiple ?? true,\n accept: field.accept,\n onChange: (e) => {\n const newFiles = Array.from(e.target.files || []);\n if (field.multiple !== false) {\n handleChange(field.name, [...files, ...newFiles]);\n } else {\n handleChange(field.name, newFiles);\n }\n if (fileInputRefs.current[field.name]) {\n fileInputRefs.current[field.name].value = \"\";\n }\n },\n className: \"hidden\"\n }\n ),\n /* @__PURE__ */ jsx6(\n \"button\",\n {\n type: \"button\",\n onClick: () => fileInputRefs.current[field.name]?.click(),\n className: \"apteva-file-drop w-full px-3 py-3 rounded-lg border-2 border-dashed transition-colors cursor-pointer !text-sm\",\n children: field.placeholder || \"Click to add files\"\n }\n ),\n files.length > 0 && /* @__PURE__ */ jsx6(\"ul\", { className: \"space-y-1\", children: files.map((file, idx) => /* @__PURE__ */ jsxs4(\n \"li\",\n {\n className: \"apteva-file-item-row flex items-center justify-between px-2 py-1.5 rounded-lg !text-sm\",\n children: [\n /* @__PURE__ */ jsxs4(\"span\", { className: \"truncate mr-2\", children: [\n file.name,\n /* @__PURE__ */ jsxs4(\"span\", { className: \"ml-1\", style: { opacity: 0.6 }, children: [\n \"(\",\n (file.size / 1024).toFixed(0),\n \" KB)\"\n ] })\n ] }),\n /* @__PURE__ */ jsx6(\n \"button\",\n {\n type: \"button\",\n onClick: () => handleChange(field.name, files.filter((_, i) => i !== idx)),\n className: \"apteva-file-remove-btn transition-colors flex-shrink-0\",\n children: \"\\u2715\"\n }\n )\n ]\n },\n `${file.name}-${idx}`\n )) })\n ] });\n }\n default:\n return null;\n }\n };\n const submitLabel = widget.props.submitLabel || widget.actions?.find((a) => a.type === \"submit\")?.label || widget.actions?.[0]?.label || \"Submit\";\n return /* @__PURE__ */ jsxs4(\"form\", { onSubmit: handleSubmit, className: \"border rounded-xl overflow-hidden\", children: [\n /* @__PURE__ */ jsxs4(\"div\", { className: \"p-4\", children: [\n title && /* @__PURE__ */ jsx6(\"h3\", { className: \"!text-lg font-semibold mb-4\", children: title }),\n /* @__PURE__ */ jsx6(\"div\", { className: \"space-y-3\", children: fields.map((field) => /* @__PURE__ */ jsxs4(\"div\", { className: field.type === \"checkbox\" ? \"\" : \"space-y-1\", children: [\n field.type !== \"checkbox\" && /* @__PURE__ */ jsxs4(\"label\", { className: \"apteva-field-label block !text-sm font-medium\", children: [\n field.label,\n field.required && /* @__PURE__ */ jsx6(\"span\", { style: { color: \"var(--aw-danger)\" }, className: \"ml-1\", children: \"*\" })\n ] }),\n renderField(field)\n ] }, field.name)) })\n ] }),\n /* @__PURE__ */ jsx6(\"div\", { className: \"px-4 pb-4\", children: /* @__PURE__ */ jsx6(\n \"button\",\n {\n type: \"submit\",\n className: \"px-3 py-1.5 !text-sm rounded-lg font-medium transition-colors\",\n children: submitLabel\n }\n ) })\n ] });\n}\n\n// src/components/Widgets/widget-library/Image.tsx\nimport { jsx as jsx7, jsxs as jsxs5 } from \"react/jsx-runtime\";\nfunction Image({ widget }) {\n const { src, alt, caption } = widget.props;\n return /* @__PURE__ */ jsxs5(\"figure\", { className: \"overflow-hidden rounded-xl\", children: [\n /* @__PURE__ */ jsx7(\n \"img\",\n {\n src,\n alt,\n className: \"w-full h-auto object-contain bg-neutral-100 dark:bg-neutral-800\",\n loading: \"lazy\"\n }\n ),\n caption && /* @__PURE__ */ jsx7(\"figcaption\", { className: \"mt-2 text-center text-sm text-neutral-600 dark:text-neutral-400\", children: caption })\n ] });\n}\n\n// src/components/Widgets/widget-library/Flow.tsx\nimport { jsx as jsx8, jsxs as jsxs6 } from \"react/jsx-runtime\";\nfunction StepIcon({ type, status }) {\n if (status === \"completed\") {\n return /* @__PURE__ */ jsx8(\"svg\", { className: \"w-4 h-4\", fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx8(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2.5, d: \"M5 13l4 4L19 7\" }) });\n }\n if (status === \"error\") {\n return /* @__PURE__ */ jsx8(\"svg\", { className: \"w-4 h-4\", fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx8(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2.5, d: \"M6 18L18 6M6 6l12 12\" }) });\n }\n if (status === \"active\") {\n return /* @__PURE__ */ jsx8(\"div\", { className: \"w-3.5 h-3.5 rounded-full bg-current animate-pulse\" });\n }\n const iconClass = \"w-4 h-4\";\n if (type === \"time\" || type === \"schedule\" || type === \"clock\") {\n return /* @__PURE__ */ jsx8(\"svg\", { className: iconClass, fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx8(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z\" }) });\n }\n if (type === \"recurring\" || type === \"repeat\") {\n return /* @__PURE__ */ jsx8(\"svg\", { className: iconClass, fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx8(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\" }) });\n }\n if (type === \"agent\" || type?.startsWith(\"@\")) {\n return /* @__PURE__ */ jsx8(\"svg\", { className: iconClass, fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx8(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0z\" }) });\n }\n if (type === \"email\" || type === \"mail\") {\n return /* @__PURE__ */ jsx8(\"svg\", { className: iconClass, fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx8(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\" }) });\n }\n if (type === \"slack\" || type === \"message\" || type === \"chat\") {\n return /* @__PURE__ */ jsx8(\"svg\", { className: iconClass, fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx8(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z\" }) });\n }\n if (type === \"webhook\" || type === \"api\") {\n return /* @__PURE__ */ jsx8(\"svg\", { className: iconClass, fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx8(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1\" }) });\n }\n if (type === \"build\" || type === \"compile\" || type === \"package\") {\n return /* @__PURE__ */ jsx8(\"svg\", { className: iconClass, fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx8(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M20 7l-8-4-8 4m16 0l-8 4m8-4v10l-8 4m0-10L4 7m8 4v10M4 7v10l8 4\" }) });\n }\n if (type === \"test\" || type === \"check\" || type === \"verify\") {\n return /* @__PURE__ */ jsx8(\"svg\", { className: iconClass, fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx8(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\" }) });\n }\n if (type === \"deploy\" || type === \"rocket\" || type === \"launch\") {\n return /* @__PURE__ */ jsx8(\"svg\", { className: iconClass, fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx8(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M13 10V3L4 14h7v7l9-11h-7z\" }) });\n }\n if (type === \"push\" || type === \"upload\" || type === \"cloud\") {\n return /* @__PURE__ */ jsx8(\"svg\", { className: iconClass, fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx8(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M7 16a4 4 0 01-.88-7.903A5 5 0 1115.9 6L16 6a5 5 0 011 9.9M15 13l-3-3m0 0l-3 3m3-3v12\" }) });\n }\n if (type === \"generate\" || type === \"create\" || type === \"document\" || type === \"file\") {\n return /* @__PURE__ */ jsx8(\"svg\", { className: iconClass, fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx8(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\" }) });\n }\n if (type === \"review\" || type === \"inspect\" || type === \"eye\") {\n return /* @__PURE__ */ jsxs6(\"svg\", { className: iconClass, fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: [\n /* @__PURE__ */ jsx8(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M15 12a3 3 0 11-6 0 3 3 0 016 0z\" }),\n /* @__PURE__ */ jsx8(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z\" })\n ] });\n }\n if (type === \"analyze\" || type === \"research\" || type === \"chart\") {\n return /* @__PURE__ */ jsx8(\"svg\", { className: iconClass, fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx8(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z\" }) });\n }\n if (type === \"scrape\" || type === \"crawl\" || type === \"spider\") {\n return /* @__PURE__ */ jsx8(\"svg\", { className: iconClass, fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx8(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M21 12a9 9 0 01-9 9m9-9a9 9 0 00-9-9m9 9H3m9 9a9 9 0 01-9-9m9 9c1.657 0 3-4.03 3-9s-1.343-9-3-9m0 18c-1.657 0-3-4.03-3-9s1.343-9 3-9m-9 9a9 9 0 019-9\" }) });\n }\n if (type === \"data\" || type === \"database\" || type === \"storage\") {\n return /* @__PURE__ */ jsx8(\"svg\", { className: iconClass, fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx8(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M4 7v10c0 2.21 3.582 4 8 4s8-1.79 8-4V7M4 7c0 2.21 3.582 4 8 4s8-1.79 8-4M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4m0 5c0 2.21-3.582 4-8 4s-8-1.79-8-4\" }) });\n }\n if (type === \"notification\" || type === \"bell\" || type === \"alert\") {\n return /* @__PURE__ */ jsx8(\"svg\", { className: iconClass, fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx8(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9\" }) });\n }\n if (type === \"transform\" || type === \"process\" || type === \"convert\") {\n return /* @__PURE__ */ jsx8(\"svg\", { className: iconClass, fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx8(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M8 7h12m0 0l-4-4m4 4l-4 4m0 6H4m0 0l4 4m-4-4l4-4\" }) });\n }\n return /* @__PURE__ */ jsx8(\"div\", { className: \"w-2 h-2 rounded-full bg-current opacity-50\" });\n}\nfunction HeaderIcon({ icon }) {\n const baseClass = \"w-6 h-6\";\n if (icon === \"research\" || icon === \"multi-agent\" || icon === \"agents\") {\n return /* @__PURE__ */ jsx8(\"div\", { className: \"w-10 h-10 rounded-lg bg-purple-100 dark:bg-purple-500/20 flex items-center justify-center\", children: /* @__PURE__ */ jsx8(\"svg\", { className: `${baseClass} text-purple-600 dark:text-purple-400`, fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx8(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M13 10V3L4 14h7v7l9-11h-7z\" }) }) });\n }\n if (icon === \"schedule\" || icon === \"report\" || icon === \"calendar\") {\n return /* @__PURE__ */ jsx8(\"div\", { className: \"w-10 h-10 rounded-lg bg-amber-100 dark:bg-amber-500/20 flex items-center justify-center\", children: /* @__PURE__ */ jsx8(\"svg\", { className: `${baseClass} text-amber-600 dark:text-amber-400`, fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx8(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z\" }) }) });\n }\n if (icon === \"recurring\" || icon === \"repeat\" || icon === \"sync\") {\n return /* @__PURE__ */ jsx8(\"div\", { className: \"w-10 h-10 rounded-lg bg-cyan-100 dark:bg-cyan-500/20 flex items-center justify-center\", children: /* @__PURE__ */ jsx8(\"svg\", { className: `${baseClass} text-cyan-600 dark:text-cyan-400`, fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx8(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\" }) }) });\n }\n if (icon === \"analyze\" || icon === \"analysis\" || icon === \"chart\") {\n return /* @__PURE__ */ jsx8(\"div\", { className: \"w-10 h-10 rounded-lg bg-cyan-100 dark:bg-cyan-500/20 flex items-center justify-center\", children: /* @__PURE__ */ jsx8(\"svg\", { className: `${baseClass} text-cyan-600 dark:text-cyan-400`, fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx8(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z\" }) }) });\n }\n if (icon === \"deploy\" || icon === \"rocket\" || icon === \"launch\") {\n return /* @__PURE__ */ jsx8(\"div\", { className: \"w-10 h-10 rounded-lg bg-blue-100 dark:bg-blue-500/20 flex items-center justify-center\", children: /* @__PURE__ */ jsx8(\"svg\", { className: `${baseClass} text-blue-600 dark:text-blue-400`, fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx8(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M13 10V3L4 14h7v7l9-11h-7z\" }) }) });\n }\n if (icon === \"automation\" || icon === \"workflow\" || icon === \"process\") {\n return /* @__PURE__ */ jsx8(\"div\", { className: \"w-10 h-10 rounded-lg bg-indigo-100 dark:bg-indigo-500/20 flex items-center justify-center\", children: /* @__PURE__ */ jsx8(\"svg\", { className: `${baseClass} text-indigo-600 dark:text-indigo-400`, fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx8(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M4 5a1 1 0 011-1h14a1 1 0 011 1v2a1 1 0 01-1 1H5a1 1 0 01-1-1V5zM4 13a1 1 0 011-1h6a1 1 0 011 1v6a1 1 0 01-1 1H5a1 1 0 01-1-1v-6zM16 13a1 1 0 011-1h2a1 1 0 011 1v6a1 1 0 01-1 1h-2a1 1 0 01-1-1v-6z\" }) }) });\n }\n if (icon === \"data\" || icon === \"pipeline\" || icon === \"etl\") {\n return /* @__PURE__ */ jsx8(\"div\", { className: \"w-10 h-10 rounded-lg bg-emerald-100 dark:bg-emerald-500/20 flex items-center justify-center\", children: /* @__PURE__ */ jsx8(\"svg\", { className: `${baseClass} text-emerald-600 dark:text-emerald-400`, fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx8(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M4 7v10c0 2.21 3.582 4 8 4s8-1.79 8-4V7M4 7c0 2.21 3.582 4 8 4s8-1.79 8-4M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4\" }) }) });\n }\n return /* @__PURE__ */ jsx8(\"div\", { className: \"w-10 h-10 rounded-lg bg-neutral-100 dark:bg-neutral-700 flex items-center justify-center\", children: /* @__PURE__ */ jsx8(\"svg\", { className: `${baseClass} text-neutral-600 dark:text-neutral-300`, fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx8(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\" }) }) });\n}\nfunction Chevron() {\n return /* @__PURE__ */ jsx8(\"svg\", { className: \"w-4 h-4 text-neutral-400 dark:text-neutral-500 flex-shrink-0\", fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx8(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M9 5l7 7-7 7\" }) });\n}\nvar STEP_COLOR_CLASSES = {\n blue: \"bg-blue-100 dark:bg-blue-900/40 !text-blue-700 dark:!text-blue-300 border-blue-300 dark:border-blue-500\",\n purple: \"bg-purple-100 dark:bg-purple-900/40 !text-purple-700 dark:!text-purple-300 border-purple-300 dark:border-purple-500\",\n cyan: \"bg-cyan-100 dark:bg-cyan-900/40 !text-cyan-700 dark:!text-cyan-300 border-cyan-300 dark:border-cyan-500\",\n amber: \"bg-amber-100 dark:bg-amber-900/40 !text-amber-700 dark:!text-amber-300 border-amber-300 dark:border-amber-500\",\n emerald: \"bg-emerald-100 dark:bg-emerald-900/40 !text-emerald-700 dark:!text-emerald-300 border-emerald-300 dark:border-emerald-500\",\n rose: \"bg-rose-100 dark:bg-rose-900/40 !text-rose-700 dark:!text-rose-300 border-rose-300 dark:border-rose-500\",\n indigo: \"bg-indigo-100 dark:bg-indigo-900/40 !text-indigo-700 dark:!text-indigo-300 border-indigo-300 dark:border-indigo-500\",\n orange: \"bg-orange-100 dark:bg-orange-900/40 !text-orange-700 dark:!text-orange-300 border-orange-300 dark:border-orange-500\",\n neutral: \"bg-neutral-100 dark:bg-neutral-800 !text-neutral-600 dark:!text-neutral-300 border-neutral-300 dark:border-neutral-600\"\n};\nfunction getStepColorClass(step, stepType) {\n if (step.color && STEP_COLOR_CLASSES[step.color]) {\n return STEP_COLOR_CLASSES[step.color];\n }\n if (stepType === \"time\" || stepType === \"schedule\" || stepType === \"clock\") {\n return STEP_COLOR_CLASSES.blue;\n }\n if (stepType === \"agent\" || stepType?.startsWith(\"@\")) {\n return STEP_COLOR_CLASSES.purple;\n }\n if (stepType === \"email\" || stepType === \"slack\" || stepType === \"message\" || stepType === \"notification\") {\n return STEP_COLOR_CLASSES.cyan;\n }\n if (stepType === \"generate\" || stepType === \"document\" || stepType === \"create\") {\n return STEP_COLOR_CLASSES.amber;\n }\n if (stepType === \"deploy\" || stepType === \"rocket\" || stepType === \"launch\") {\n return STEP_COLOR_CLASSES.rose;\n }\n if (stepType === \"build\" || stepType === \"compile\" || stepType === \"package\") {\n return STEP_COLOR_CLASSES.indigo;\n }\n if (stepType === \"test\" || stepType === \"check\" || stepType === \"verify\") {\n return STEP_COLOR_CLASSES.emerald;\n }\n if (stepType === \"data\" || stepType === \"database\" || stepType === \"storage\") {\n return STEP_COLOR_CLASSES.orange;\n }\n return STEP_COLOR_CLASSES.blue;\n}\nfunction Flow({ widget }) {\n const { title, subtitle, icon, steps } = widget.props;\n return /* @__PURE__ */ jsxs6(\"div\", { className: \"rounded-xl bg-white dark:bg-neutral-900 border border-neutral-200 dark:border-neutral-700 overflow-hidden\", children: [\n /* @__PURE__ */ jsxs6(\"div\", { className: \"px-4 py-4 flex items-center gap-4\", children: [\n /* @__PURE__ */ jsx8(HeaderIcon, { icon }),\n /* @__PURE__ */ jsxs6(\"div\", { className: \"flex-1 min-w-0\", children: [\n /* @__PURE__ */ jsx8(\"h3\", { className: \"font-semibold text-base text-neutral-900 dark:text-white truncate\", children: title }),\n subtitle && /* @__PURE__ */ jsx8(\"p\", { className: \"text-sm text-neutral-500 dark:text-neutral-400 truncate mt-0.5\", children: subtitle })\n ] })\n ] }),\n /* @__PURE__ */ jsx8(\"div\", { className: \"px-4 pb-4\", children: /* @__PURE__ */ jsx8(\"div\", { className: \"flex flex-wrap items-center gap-2\", children: steps.map((step, index) => {\n const isLast = index === steps.length - 1;\n const isActive = step.status === \"active\";\n const isCompleted = step.status === \"completed\";\n const isError = step.status === \"error\";\n const isSkipped = step.status === \"skipped\";\n const label = step.label;\n let stepType = step.type;\n if (!stepType) {\n if (label.startsWith(\"@\")) stepType = \"agent\";\n else if (/^\\d+[ap]m$/i.test(label) || /^(mon|tue|wed|thu|fri|sat|sun)/i.test(label)) stepType = \"time\";\n else {\n const lowerLabel = label.toLowerCase();\n const typeMap = {\n \"test\": \"test\",\n \"build\": \"build\",\n \"push\": \"push\",\n \"deploy\": \"deploy\",\n \"email\": \"email\",\n \"slack\": \"slack\",\n \"generate\": \"generate\",\n \"review\": \"review\",\n \"analyze\": \"analyze\",\n \"scrape\": \"scrape\",\n \"transform\": \"transform\",\n \"notify\": \"notification\",\n \"alert\": \"notification\",\n \"webhook\": \"webhook\",\n \"api\": \"api\",\n \"data\": \"data\",\n \"process\": \"process\"\n };\n stepType = typeMap[lowerLabel];\n }\n }\n let pillClasses;\n let extraClasses = \"\";\n if (isActive) {\n pillClasses = \"bg-blue-100 dark:bg-blue-900/40 !text-blue-700 dark:!text-blue-300 border-blue-400 dark:border-blue-400 ring-2 ring-blue-400\";\n } else if (isCompleted) {\n pillClasses = \"bg-emerald-100 dark:bg-emerald-900/40 !text-emerald-700 dark:!text-emerald-300 border-emerald-400 dark:border-emerald-400\";\n } else if (isError) {\n pillClasses = \"bg-red-100 dark:bg-red-900/40 !text-red-700 dark:!text-red-300 border-red-400 dark:border-red-400\";\n } else if (isSkipped) {\n pillClasses = \"bg-neutral-100 dark:bg-neutral-800 !text-neutral-400 dark:!text-neutral-500 border-neutral-300 dark:border-neutral-600\";\n extraClasses = \"line-through\";\n } else {\n pillClasses = getStepColorClass(step, stepType);\n }\n return /* @__PURE__ */ jsxs6(\"div\", { className: \"flex items-center gap-2\", children: [\n /* @__PURE__ */ jsxs6(\"span\", { className: `inline-flex items-center gap-2 px-4 py-2 rounded-lg text-sm font-medium border transition-colors ${pillClasses} ${extraClasses}`, children: [\n /* @__PURE__ */ jsx8(StepIcon, { type: stepType, status: step.status }),\n label\n ] }),\n !isLast && /* @__PURE__ */ jsx8(Chevron, {})\n ] }, step.id);\n }) }) })\n ] });\n}\n\n// src/components/Widgets/widget-library/Kpi.tsx\nimport { jsx as jsx9, jsxs as jsxs7 } from \"react/jsx-runtime\";\nvar trendIcons = {\n up: { symbol: \"\\u2191\", color: \"text-emerald-500\" },\n down: { symbol: \"\\u2193\", color: \"text-red-500\" },\n flat: { symbol: \"\\u2192\", color: \"text-neutral-400\" }\n};\nfunction Kpi({ widget, onAction }) {\n const { title, label = \"\", value = \"\", change, trend } = widget.props || {};\n const trendInfo = trend ? trendIcons[trend] : null;\n return /* @__PURE__ */ jsxs7(\"div\", { className: \"border border-neutral-200 dark:border-neutral-700 rounded-xl bg-white dark:bg-neutral-900 p-5\", children: [\n title && /* @__PURE__ */ jsx9(\"h3\", { className: \"!text-base font-semibold !text-neutral-900 dark:!text-white mb-3\", children: title }),\n /* @__PURE__ */ jsx9(\"div\", { className: \"!text-sm font-medium !text-neutral-500 dark:!text-neutral-400 mb-1\", children: label }),\n /* @__PURE__ */ jsxs7(\"div\", { className: \"flex items-end gap-2\", children: [\n /* @__PURE__ */ jsx9(\"div\", { className: \"apteva-kpi-value !text-2xl font-bold !text-neutral-900 dark:!text-white\", children: value }),\n change && trendInfo && /* @__PURE__ */ jsxs7(\"div\", { className: `flex items-center gap-0.5 !text-sm font-medium ${trendInfo.color} mb-0.5`, children: [\n /* @__PURE__ */ jsx9(\"span\", { children: trendInfo.symbol }),\n /* @__PURE__ */ jsx9(\"span\", { children: change })\n ] }),\n change && !trendInfo && /* @__PURE__ */ jsx9(\"div\", { className: \"!text-sm font-medium !text-neutral-400 mb-0.5\", children: change })\n ] }),\n widget.actions && widget.actions.length > 0 && /* @__PURE__ */ jsx9(\"div\", { className: \"flex gap-2 mt-3 pt-3 border-t border-neutral-200 dark:border-neutral-700\", children: widget.actions.map((action, idx) => /* @__PURE__ */ jsx9(\n \"button\",\n {\n onClick: () => onAction?.({\n type: action.type,\n payload: action.payload,\n widgetId: widget.id,\n timestamp: /* @__PURE__ */ new Date()\n }),\n className: \"px-2 py-1 !text-xs rounded font-medium transition-colors bg-neutral-100 dark:bg-neutral-800 !text-neutral-600 dark:!text-neutral-300 hover:bg-neutral-200 dark:hover:bg-neutral-700\",\n children: action.label\n },\n idx\n )) })\n ] });\n}\n\n// src/components/Widgets/widget-library/TextBlock.tsx\nimport { Fragment, jsx as jsx10 } from \"react/jsx-runtime\";\nfunction TextBlock({ widget }) {\n const { content = \"\", variant = \"body\" } = widget.props || {};\n const variantClasses = {\n heading: \"!text-xl font-bold !text-neutral-900 dark:!text-white\",\n body: \"!text-sm !text-neutral-700 dark:!text-neutral-300 leading-relaxed\",\n caption: \"!text-xs !text-neutral-500 dark:!text-neutral-400\"\n };\n const renderMarkdown = (text) => {\n const lines = text.split(\"\\n\");\n const elements = [];\n let i = 0;\n while (i < lines.length) {\n const line = lines[i];\n if (line.startsWith(\"### \")) {\n elements.push(\n /* @__PURE__ */ jsx10(\"h3\", { className: \"!text-base font-semibold !text-neutral-900 dark:!text-white mt-3 mb-1\", children: renderInline(line.slice(4)) }, i)\n );\n } else if (line.startsWith(\"## \")) {\n elements.push(\n /* @__PURE__ */ jsx10(\"h2\", { className: \"!text-lg font-bold !text-neutral-900 dark:!text-white mt-4 mb-1\", children: renderInline(line.slice(3)) }, i)\n );\n } else if (/^[-*+]\\s/.test(line)) {\n const listItems = [];\n while (i < lines.length && /^[-*+]\\s/.test(lines[i])) {\n listItems.push(\n /* @__PURE__ */ jsx10(\"li\", { className: \"ml-4 list-disc\", children: renderInline(lines[i].slice(2)) }, i)\n );\n i++;\n }\n elements.push(/* @__PURE__ */ jsx10(\"ul\", { className: \"my-1 space-y-0.5\", children: listItems }, `list-${i}`));\n continue;\n } else if (line.trim() === \"\") {\n elements.push(/* @__PURE__ */ jsx10(\"div\", { className: \"h-2\" }, i));\n } else {\n elements.push(/* @__PURE__ */ jsx10(\"p\", { className: \"my-0.5\", children: renderInline(line) }, i));\n }\n i++;\n }\n return elements;\n };\n const renderInline = (text) => {\n const parts = [];\n let remaining = text;\n let key = 0;\n while (remaining.length > 0) {\n const boldMatch = remaining.match(/\\*\\*(.+?)\\*\\*/);\n const codeMatch = remaining.match(/`(.+?)`/);\n const linkMatch = remaining.match(/\\[(.+?)\\]\\((.+?)\\)/);\n const matches = [\n boldMatch ? { type: \"bold\", index: boldMatch.index, match: boldMatch } : null,\n codeMatch ? { type: \"code\", index: codeMatch.index, match: codeMatch } : null,\n linkMatch ? { type: \"link\", index: linkMatch.index, match: linkMatch } : null\n ].filter(Boolean).sort((a, b) => a.index - b.index);\n if (matches.length === 0) {\n parts.push(remaining);\n break;\n }\n const first = matches[0];\n if (first.index > 0) {\n parts.push(remaining.slice(0, first.index));\n }\n if (first.type === \"bold\") {\n parts.push(/* @__PURE__ */ jsx10(\"strong\", { className: \"font-semibold\", children: first.match[1] }, key++));\n remaining = remaining.slice(first.index + first.match[0].length);\n } else if (first.type === \"code\") {\n parts.push(\n /* @__PURE__ */ jsx10(\"code\", { className: \"px-1 py-0.5 bg-neutral-100 dark:bg-neutral-800 rounded text-xs font-mono\", children: first.match[1] }, key++)\n );\n remaining = remaining.slice(first.index + first.match[0].length);\n } else if (first.type === \"link\") {\n parts.push(\n /* @__PURE__ */ jsx10(\"a\", { href: first.match[2], className: \"text-blue-500 hover:underline\", target: \"_blank\", rel: \"noopener noreferrer\", children: first.match[1] }, key++)\n );\n remaining = remaining.slice(first.index + first.match[0].length);\n }\n }\n return parts.length === 1 ? parts[0] : /* @__PURE__ */ jsx10(Fragment, { children: parts });\n };\n return /* @__PURE__ */ jsx10(\"div\", { className: variantClasses[variant] || variantClasses.body, children: renderMarkdown(content) });\n}\n\n// src/components/Widgets/widget-library/Spacer.tsx\nimport { jsx as jsx11 } from \"react/jsx-runtime\";\nvar heightClasses = {\n sm: \"h-2\",\n md: \"h-4\",\n lg: \"h-8\"\n};\nfunction Spacer({ widget }) {\n const { height = \"md\", variant = \"space\" } = widget.props || {};\n if (variant === \"line\") {\n return /* @__PURE__ */ jsx11(\"div\", { className: heightClasses[height] || heightClasses.md + \" flex items-center\", children: /* @__PURE__ */ jsx11(\"hr\", { className: \"w-full border-neutral-200 dark:border-neutral-700\" }) });\n }\n return /* @__PURE__ */ jsx11(\"div\", { className: heightClasses[height] || heightClasses.md });\n}\n\n// src/components/Widgets/widget-library/LiveView.tsx\nimport { useState as useState4, useCallback as useCallback2, useRef as useRef4, useEffect as useEffect4 } from \"react\";\nimport { jsx as jsx12, jsxs as jsxs8 } from \"react/jsx-runtime\";\nfunction LiveView({ widget }) {\n const { src, title, height, aspectRatio = \"16/9\", allowFullscreen = true, sandbox, allow, refreshInterval, showToolbar = true } = widget.props;\n const iframeRef = useRef4(null);\n const [isLoading, setIsLoading] = useState4(true);\n const [hasError, setHasError] = useState4(false);\n const [refreshKey, setRefreshKey] = useState4(0);\n const handleRefresh = useCallback2(() => {\n setIsLoading(true);\n setHasError(false);\n setRefreshKey((k) => k + 1);\n }, []);\n const handleFullscreen = useCallback2(() => {\n iframeRef.current?.requestFullscreen?.();\n }, []);\n const handleOpenExternal = useCallback2(() => {\n window.open(src, \"_blank\", \"noopener,noreferrer\");\n }, [src]);\n useEffect4(() => {\n if (!refreshInterval || refreshInterval <= 0) return;\n const interval = setInterval(handleRefresh, refreshInterval * 1e3);\n return () => clearInterval(interval);\n }, [refreshInterval, handleRefresh]);\n const aspectMap = { \"16/9\": \"56.25%\", \"4/3\": \"75%\", \"1/1\": \"100%\" };\n const useFixedHeight = !!height;\n return /* @__PURE__ */ jsxs8(\"div\", { className: \"rounded-xl overflow-hidden border border-neutral-200 dark:border-neutral-700 bg-neutral-50 dark:bg-neutral-900\", children: [\n showToolbar && /* @__PURE__ */ jsxs8(\"div\", { className: \"flex items-center justify-between px-3 py-2 bg-neutral-100 dark:bg-neutral-800 border-b border-neutral-200 dark:border-neutral-700\", children: [\n /* @__PURE__ */ jsxs8(\"div\", { className: \"flex items-center gap-2 min-w-0\", children: [\n /* @__PURE__ */ jsx12(\"div\", { className: cn(\n \"w-2 h-2 rounded-full flex-shrink-0\",\n hasError ? \"bg-red-500\" : isLoading ? \"bg-amber-500 animate-pulse\" : \"bg-emerald-500\"\n ) }),\n /* @__PURE__ */ jsx12(\"span\", { className: \"text-sm font-medium text-neutral-700 dark:text-neutral-300 truncate\", children: title || \"Live View\" })\n ] }),\n /* @__PURE__ */ jsxs8(\"div\", { className: \"flex items-center gap-1 flex-shrink-0\", children: [\n /* @__PURE__ */ jsx12(\n \"button\",\n {\n onClick: handleRefresh,\n className: \"p-1.5 rounded-md text-neutral-500 hover:text-neutral-700 dark:hover:text-neutral-300 hover:bg-neutral-200 dark:hover:bg-neutral-700 transition-colors\",\n title: \"Refresh\",\n children: /* @__PURE__ */ jsx12(\"svg\", { className: \"w-3.5 h-3.5\", fill: \"none\", viewBox: \"0 0 24 24\", stroke: \"currentColor\", strokeWidth: 2, children: /* @__PURE__ */ jsx12(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", d: \"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\" }) })\n }\n ),\n /* @__PURE__ */ jsx12(\n \"button\",\n {\n onClick: handleOpenExternal,\n className: \"p-1.5 rounded-md text-neutral-500 hover:text-neutral-700 dark:hover:text-neutral-300 hover:bg-neutral-200 dark:hover:bg-neutral-700 transition-colors\",\n title: \"Open in new tab\",\n children: /* @__PURE__ */ jsx12(\"svg\", { className: \"w-3.5 h-3.5\", fill: \"none\", viewBox: \"0 0 24 24\", stroke: \"currentColor\", strokeWidth: 2, children: /* @__PURE__ */ jsx12(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", d: \"M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14\" }) })\n }\n ),\n allowFullscreen && /* @__PURE__ */ jsx12(\n \"button\",\n {\n onClick: handleFullscreen,\n className: \"p-1.5 rounded-md text-neutral-500 hover:text-neutral-700 dark:hover:text-neutral-300 hover:bg-neutral-200 dark:hover:bg-neutral-700 transition-colors\",\n title: \"Fullscreen\",\n children: /* @__PURE__ */ jsx12(\"svg\", { className: \"w-3.5 h-3.5\", fill: \"none\", viewBox: \"0 0 24 24\", stroke: \"currentColor\", strokeWidth: 2, children: /* @__PURE__ */ jsx12(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", d: \"M4 8V4m0 0h4M4 4l5 5m11-1V4m0 0h-4m4 0l-5 5M4 16v4m0 0h4m-4 0l5-5m11 5v-4m0 4h-4m4 0l-5-5\" }) })\n }\n )\n ] })\n ] }),\n /* @__PURE__ */ jsxs8(\n \"div\",\n {\n className: \"relative bg-white dark:bg-neutral-950\",\n style: useFixedHeight ? { height } : { paddingBottom: aspectMap[aspectRatio] || aspectMap[\"16/9\"] },\n children: [\n isLoading && /* @__PURE__ */ jsx12(\"div\", { className: \"absolute inset-0 flex items-center justify-center bg-neutral-100 dark:bg-neutral-900 z-10\", children: /* @__PURE__ */ jsxs8(\"div\", { className: \"flex flex-col items-center gap-2\", children: [\n /* @__PURE__ */ jsx12(\"div\", { className: \"w-6 h-6 border-2 border-neutral-300 dark:border-neutral-600 border-t-blue-500 rounded-full animate-spin\" }),\n /* @__PURE__ */ jsx12(\"span\", { className: \"text-xs text-neutral-500\", children: \"Loading...\" })\n ] }) }),\n hasError && /* @__PURE__ */ jsx12(\"div\", { className: \"absolute inset-0 flex items-center justify-center bg-neutral-100 dark:bg-neutral-900 z-10\", children: /* @__PURE__ */ jsxs8(\"div\", { className: \"flex flex-col items-center gap-2 text-center px-4\", children: [\n /* @__PURE__ */ jsx12(\"svg\", { className: \"w-8 h-8 text-neutral-400\", fill: \"none\", viewBox: \"0 0 24 24\", stroke: \"currentColor\", strokeWidth: 1.5, children: /* @__PURE__ */ jsx12(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", d: \"M12 9v3.75m9-.75a9 9 0 11-18 0 9 9 0 0118 0zm-9 3.75h.008v.008H12v-.008z\" }) }),\n /* @__PURE__ */ jsx12(\"span\", { className: \"text-sm text-neutral-500\", children: \"Failed to load\" }),\n /* @__PURE__ */ jsx12(\n \"button\",\n {\n onClick: handleRefresh,\n className: \"text-xs text-blue-500 hover:text-blue-600 underline\",\n children: \"Try again\"\n }\n )\n ] }) }),\n /* @__PURE__ */ jsx12(\n \"iframe\",\n {\n ref: iframeRef,\n src,\n title: title || \"Live View\",\n className: cn(\n \"border-0 bg-white dark:bg-neutral-950\",\n useFixedHeight ? \"w-full h-full\" : \"absolute inset-0 w-full h-full\"\n ),\n allowFullScreen: allowFullscreen,\n sandbox,\n allow,\n onLoad: () => setIsLoading(false),\n onError: () => {\n setIsLoading(false);\n setHasError(true);\n }\n },\n refreshKey\n )\n ]\n }\n )\n ] });\n}\n\n// src/components/Widgets/WidgetRenderer.tsx\nimport { jsx as jsx13, jsxs as jsxs9 } from \"react/jsx-runtime\";\nfunction WidgetRenderer({ widget, onAction }) {\n const renderWidget = () => {\n switch (widget.type) {\n case \"card\":\n return /* @__PURE__ */ jsx13(Card, { widget, onAction });\n case \"list\":\n return /* @__PURE__ */ jsx13(List, { widget, onAction });\n case \"button\":\n return /* @__PURE__ */ jsx13(Button, { widget, onAction });\n case \"button_group\":\n return /* @__PURE__ */ jsx13(ButtonGroup, { widget, onAction });\n case \"table\":\n return /* @__PURE__ */ jsx13(Table, { widget, onAction });\n case \"form\":\n return /* @__PURE__ */ jsx13(Form, { widget, onAction });\n case \"image\":\n return /* @__PURE__ */ jsx13(Image, { widget });\n case \"flow\":\n return /* @__PURE__ */ jsx13(Flow, { widget });\n case \"kpi\":\n return /* @__PURE__ */ jsx13(Kpi, { widget, onAction });\n case \"text_block\":\n return /* @__PURE__ */ jsx13(TextBlock, { widget });\n case \"spacer\":\n return /* @__PURE__ */ jsx13(Spacer, { widget });\n case \"live_view\":\n return /* @__PURE__ */ jsx13(LiveView, { widget });\n default:\n return /* @__PURE__ */ jsxs9(\"div\", { className: \"p-4 border border-yellow-300 bg-yellow-50 rounded-lg\", children: [\n /* @__PURE__ */ jsxs9(\"p\", { className: \"text-sm text-yellow-800\", children: [\n \"Unknown widget type: \",\n widget.type\n ] }),\n /* @__PURE__ */ jsx13(\"pre\", { className: \"text-xs mt-2 overflow-auto\", children: JSON.stringify(widget, null, 2) })\n ] });\n }\n };\n return /* @__PURE__ */ jsx13(\"div\", { className: \"apteva-widget\", children: renderWidget() });\n}\n\n// src/components/Widgets/Widgets.tsx\nimport { jsx as jsx14 } from \"react/jsx-runtime\";\nfunction Widgets({\n widgets,\n onAction,\n onWidgetMount,\n layout = \"stack\",\n spacing = \"normal\",\n columns = 3,\n className\n}) {\n useEffect5(() => {\n widgets.forEach((widget) => {\n onWidgetMount?.(widget.id);\n });\n }, [widgets, onWidgetMount]);\n const layoutClasses = {\n stack: \"flex flex-col\",\n grid: `grid grid-cols-1 md:grid-cols-${columns}`,\n masonry: \"columns-1 md:columns-2 lg:columns-3\"\n };\n const spacingClasses = {\n tight: \"gap-2\",\n normal: \"gap-4\",\n loose: \"gap-6\"\n };\n return /* @__PURE__ */ jsx14(\"div\", { className: cn(layoutClasses[layout], spacingClasses[spacing], className), children: widgets.map((widget) => /* @__PURE__ */ jsx14(WidgetRenderer, { widget, onAction }, widget.id)) });\n}\n\n// src/components/Widgets/WidgetSkeleton.tsx\nimport { jsx as jsx15, jsxs as jsxs10 } from \"react/jsx-runtime\";\nfunction WidgetSkeleton({ type, className }) {\n switch (type) {\n case \"card\":\n return /* @__PURE__ */ jsx15(\"div\", { className: cn(\"apteva-widget-skeleton animate-pulse rounded-lg border border-neutral-200 dark:border-neutral-800 overflow-hidden\", className), children: /* @__PURE__ */ jsxs10(\"div\", { className: \"p-4 space-y-3\", children: [\n /* @__PURE__ */ jsx15(\"div\", { className: \"h-4 bg-neutral-200 dark:bg-neutral-700 rounded w-3/4\" }),\n /* @__PURE__ */ jsx15(\"div\", { className: \"h-3 bg-neutral-200 dark:bg-neutral-700 rounded w-full\" }),\n /* @__PURE__ */ jsx15(\"div\", { className: \"h-3 bg-neutral-200 dark:bg-neutral-700 rounded w-5/6\" })\n ] }) });\n case \"list\":\n return /* @__PURE__ */ jsx15(\"div\", { className: cn(\"apteva-widget-skeleton animate-pulse space-y-2\", className), children: [1, 2, 3].map((i) => /* @__PURE__ */ jsxs10(\"div\", { className: \"flex items-center gap-3 p-3 rounded-lg border border-neutral-200 dark:border-neutral-800\", children: [\n /* @__PURE__ */ jsx15(\"div\", { className: \"w-10 h-10 bg-neutral-200 dark:bg-neutral-700 rounded-full flex-shrink-0\" }),\n /* @__PURE__ */ jsxs10(\"div\", { className: \"flex-1 space-y-2\", children: [\n /* @__PURE__ */ jsx15(\"div\", { className: \"h-3 bg-neutral-200 dark:bg-neutral-700 rounded w-1/2\" }),\n /* @__PURE__ */ jsx15(\"div\", { className: \"h-2 bg-neutral-200 dark:bg-neutral-700 rounded w-3/4\" })\n ] })\n ] }, i)) });\n case \"button_group\":\n return /* @__PURE__ */ jsxs10(\"div\", { className: cn(\"apteva-widget-skeleton animate-pulse flex gap-2\", className), children: [\n /* @__PURE__ */ jsx15(\"div\", { className: \"h-9 bg-neutral-200 dark:bg-neutral-700 rounded-lg w-20\" }),\n /* @__PURE__ */ jsx15(\"div\", { className: \"h-9 bg-neutral-200 dark:bg-neutral-700 rounded-lg w-20\" }),\n /* @__PURE__ */ jsx15(\"div\", { className: \"h-9 bg-neutral-200 dark:bg-neutral-700 rounded-lg w-20\" })\n ] });\n case \"form\":\n return /* @__PURE__ */ jsxs10(\"div\", { className: cn(\"apteva-widget-skeleton animate-pulse rounded-lg border border-neutral-200 dark:border-neutral-800 p-4 space-y-4\", className), children: [\n /* @__PURE__ */ jsx15(\"div\", { className: \"h-4 bg-neutral-200 dark:bg-neutral-700 rounded w-1/3\" }),\n /* @__PURE__ */ jsxs10(\"div\", { className: \"space-y-3\", children: [\n /* @__PURE__ */ jsx15(\"div\", { className: \"h-10 bg-neutral-200 dark:bg-neutral-700 rounded\" }),\n /* @__PURE__ */ jsx15(\"div\", { className: \"h-10 bg-neutral-200 dark:bg-neutral-700 rounded\" })\n ] }),\n /* @__PURE__ */ jsx15(\"div\", { className: \"h-9 bg-neutral-200 dark:bg-neutral-700 rounded w-24\" })\n ] });\n case \"chart\":\n return /* @__PURE__ */ jsxs10(\"div\", { className: cn(\"apteva-widget-skeleton animate-pulse rounded-lg border border-neutral-200 dark:border-neutral-800 p-4\", className), children: [\n /* @__PURE__ */ jsx15(\"div\", { className: \"h-4 bg-neutral-200 dark:bg-neutral-700 rounded w-1/4 mb-4\" }),\n /* @__PURE__ */ jsxs10(\"div\", { className: \"flex items-end gap-2 h-32\", children: [\n /* @__PURE__ */ jsx15(\"div\", { className: \"flex-1 bg-neutral-200 dark:bg-neutral-700 rounded-t h-1/2\" }),\n /* @__PURE__ */ jsx15(\"div\", { className: \"flex-1 bg-neutral-200 dark:bg-neutral-700 rounded-t h-3/4\" }),\n /* @__PURE__ */ jsx15(\"div\", { className: \"flex-1 bg-neutral-200 dark:bg-neutral-700 rounded-t h-1/3\" }),\n /* @__PURE__ */ jsx15(\"div\", { className: \"flex-1 bg-neutral-200 dark:bg-neutral-700 rounded-t h-full\" }),\n /* @__PURE__ */ jsx15(\"div\", { className: \"flex-1 bg-neutral-200 dark:bg-neutral-700 rounded-t h-2/3\" })\n ] })\n ] });\n case \"image\":\n return /* @__PURE__ */ jsx15(\"div\", { className: cn(\"apteva-widget-skeleton animate-pulse\", className), children: /* @__PURE__ */ jsx15(\"div\", { className: \"aspect-video bg-neutral-200 dark:bg-neutral-700 rounded-lg\" }) });\n case \"gallery\":\n return /* @__PURE__ */ jsx15(\"div\", { className: cn(\"apteva-widget-skeleton animate-pulse grid grid-cols-3 gap-2\", className), children: [1, 2, 3].map((i) => /* @__PURE__ */ jsx15(\"div\", { className: \"aspect-square bg-neutral-200 dark:bg-neutral-700 rounded-lg\" }, i)) });\n case \"map\":\n return /* @__PURE__ */ jsx15(\"div\", { className: cn(\"apteva-widget-skeleton animate-pulse\", className), children: /* @__PURE__ */ jsx15(\"div\", { className: \"h-48 bg-neutral-200 dark:bg-neutral-700 rounded-lg flex items-center justify-center\", children: /* @__PURE__ */ jsxs10(\"svg\", { className: \"w-8 h-8 text-neutral-400 dark:text-neutral-500\", fill: \"none\", viewBox: \"0 0 24 24\", stroke: \"currentColor\", children: [\n /* @__PURE__ */ jsx15(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 1.5, d: \"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z\" }),\n /* @__PURE__ */ jsx15(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 1.5, d: \"M15 11a3 3 0 11-6 0 3 3 0 016 0z\" })\n ] }) }) });\n case \"table\":\n return /* @__PURE__ */ jsxs10(\"div\", { className: cn(\"apteva-widget-skeleton animate-pulse rounded-lg border border-neutral-200 dark:border-neutral-800 overflow-hidden\", className), children: [\n /* @__PURE__ */ jsxs10(\"div\", { className: \"flex bg-neutral-100 dark:bg-neutral-800 border-b border-neutral-200 dark:border-neutral-700\", children: [\n /* @__PURE__ */ jsx15(\"div\", { className: \"flex-1 px-4 py-3\", children: /* @__PURE__ */ jsx15(\"div\", { className: \"h-3 bg-neutral-300 dark:bg-neutral-600 rounded w-16\" }) }),\n /* @__PURE__ */ jsx15(\"div\", { className: \"flex-1 px-4 py-3\", children: /* @__PURE__ */ jsx15(\"div\", { className: \"h-3 bg-neutral-300 dark:bg-neutral-600 rounded w-20\" }) }),\n /* @__PURE__ */ jsx15(\"div\", { className: \"flex-1 px-4 py-3\", children: /* @__PURE__ */ jsx15(\"div\", { className: \"h-3 bg-neutral-300 dark:bg-neutral-600 rounded w-14\" }) })\n ] }),\n [1, 2, 3].map((i) => /* @__PURE__ */ jsxs10(\"div\", { className: \"flex border-b border-neutral-200 dark:border-neutral-800 last:border-b-0\", children: [\n /* @__PURE__ */ jsx15(\"div\", { className: \"flex-1 px-4 py-3\", children: /* @__PURE__ */ jsx15(\"div\", { className: \"h-3 bg-neutral-200 dark:bg-neutral-700 rounded w-24\" }) }),\n /* @__PURE__ */ jsx15(\"div\", { className: \"flex-1 px-4 py-3\", children: /* @__PURE__ */ jsx15(\"div\", { className: \"h-3 bg-neutral-200 dark:bg-neutral-700 rounded w-16\" }) }),\n /* @__PURE__ */ jsx15(\"div\", { className: \"flex-1 px-4 py-3\", children: /* @__PURE__ */ jsx15(\"div\", { className: \"h-3 bg-neutral-200 dark:bg-neutral-700 rounded w-20\" }) })\n ] }, i))\n ] });\n default:\n return /* @__PURE__ */ jsxs10(\"div\", { className: cn(\"apteva-widget-skeleton animate-pulse rounded-lg border border-neutral-200 dark:border-neutral-800 p-4\", className), children: [\n /* @__PURE__ */ jsx15(\"div\", { className: \"h-4 bg-neutral-200 dark:bg-neutral-700 rounded w-1/2 mb-2\" }),\n /* @__PURE__ */ jsx15(\"div\", { className: \"h-3 bg-neutral-200 dark:bg-neutral-700 rounded w-full\" })\n ] });\n }\n}\n\n// src/components/Chat/MarkdownContent.tsx\nimport { jsx as jsx16, jsxs as jsxs11 } from \"react/jsx-runtime\";\nfunction isImageUrl(url) {\n const imageExtensions = /\\.(jpg|jpeg|png|gif|webp|svg|bmp|ico)(\\?.*)?$/i;\n return imageExtensions.test(url);\n}\nfunction parseInlineMarkdown(text, keyPrefix = \"\") {\n const result = [];\n const inlineRegex = /!\\[([^\\]]*)\\]\\(([^)]+)\\)|\\[([^\\]]+)\\]\\(([^)]+)\\)|(\\*\\*|__)(.+?)\\5|`([^`]+)`/g;\n let lastIndex = 0;\n let match;\n let key = 0;\n while ((match = inlineRegex.exec(text)) !== null) {\n if (match.index > lastIndex) {\n result.push(text.slice(lastIndex, match.index));\n }\n if (match[1] !== void 0 || match[2] !== void 0) {\n const alt = match[1] || \"\";\n const src = match[2];\n result.push(\n /* @__PURE__ */ jsx16(\n \"img\",\n {\n src,\n alt,\n className: \"apteva-md-img\"\n },\n `${keyPrefix}img${key++}`\n )\n );\n } else if (match[3] !== void 0 || match[4] !== void 0) {\n const linkText = match[3];\n const href = match[4];\n if (isImageUrl(href)) {\n result.push(\n /* @__PURE__ */ jsx16(\n \"img\",\n {\n src: href,\n alt: linkText,\n className: \"apteva-md-img\"\n },\n `${keyPrefix}img${key++}`\n )\n );\n } else {\n result.push(\n /* @__PURE__ */ jsx16(\n \"a\",\n {\n href,\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n className: \"apteva-md-link\",\n children: linkText\n },\n `${keyPrefix}a${key++}`\n )\n );\n }\n } else if (match[5] !== void 0) {\n result.push(/* @__PURE__ */ jsx16(\"strong\", { children: match[6] }, `${keyPrefix}b${key++}`));\n } else if (match[7] !== void 0) {\n result.push(\n /* @__PURE__ */ jsx16(\"code\", { className: \"apteva-md-inline-code\", children: match[7] }, `${keyPrefix}code${key++}`)\n );\n }\n lastIndex = match.index + match[0].length;\n }\n if (lastIndex < text.length) {\n result.push(text.slice(lastIndex));\n }\n return result.length > 0 ? result : [text];\n}\nfunction parseMarkdown(content) {\n const lines = content.split(\"\\n\");\n const result = [];\n let key = 0;\n let i = 0;\n while (i < lines.length) {\n const line = lines[i];\n const h2Match = line.match(/^##\\s+(.*)$/);\n if (h2Match) {\n result.push(\n /* @__PURE__ */ jsx16(\"h2\", { className: \"apteva-md-h2\", children: parseInlineMarkdown(h2Match[1], `${key}`) }, `h2${key++}`)\n );\n i++;\n continue;\n }\n const h3Match = line.match(/^###\\s+(.*)$/);\n if (h3Match) {\n result.push(\n /* @__PURE__ */ jsx16(\"h3\", { className: \"apteva-md-h3\", children: parseInlineMarkdown(h3Match[1], `${key}`) }, `h3${key++}`)\n );\n i++;\n continue;\n }\n const ulMatch = line.match(/^(\\s*)([-*+])\\s+(.*)$/);\n if (ulMatch) {\n const listItems = [];\n const indent = ulMatch[1].length;\n while (i < lines.length) {\n const itemMatch = lines[i].match(/^(\\s*)([-*+])\\s+(.*)$/);\n if (itemMatch && itemMatch[1].length === indent) {\n listItems.push(\n /* @__PURE__ */ jsx16(\"li\", { className: \"apteva-md-li\", children: parseInlineMarkdown(itemMatch[3], `${key}`) }, `li${key++}`)\n );\n i++;\n } else {\n break;\n }\n }\n result.push(\n /* @__PURE__ */ jsx16(\"ul\", { className: \"apteva-md-ul\", children: listItems }, `ul${key++}`)\n );\n continue;\n }\n const olMatch = line.match(/^(\\s*)(\\d+)\\.\\s+(.*)$/);\n if (olMatch) {\n const listItems = [];\n const indent = olMatch[1].length;\n while (i < lines.length) {\n const itemMatch = lines[i].match(/^(\\s*)(\\d+)\\.\\s+(.*)$/);\n if (itemMatch && itemMatch[1].length === indent) {\n listItems.push(\n /* @__PURE__ */ jsx16(\"li\", { className: \"apteva-md-li\", children: parseInlineMarkdown(itemMatch[3], `${key}`) }, `li${key++}`)\n );\n i++;\n } else {\n break;\n }\n }\n result.push(\n /* @__PURE__ */ jsx16(\"ol\", { className: \"apteva-md-ol\", children: listItems }, `ol${key++}`)\n );\n continue;\n }\n const tableMatch = line.match(/^\\|(.+)\\|$/);\n if (tableMatch && i + 1 < lines.length) {\n const separatorLine = lines[i + 1];\n const separatorMatch = separatorLine.match(/^\\|([\\s:-]+\\|)+$/);\n if (separatorMatch) {\n const headerCells = line.split(\"|\").filter((cell) => cell.trim() !== \"\").map((cell) => cell.trim());\n i += 2;\n const bodyRows = [];\n while (i < lines.length) {\n const rowMatch = lines[i].match(/^\\|(.+)\\|$/);\n if (rowMatch) {\n const cells = lines[i].split(\"|\").filter((cell) => cell.trim() !== \"\").map((cell) => cell.trim());\n bodyRows.push(cells);\n i++;\n } else {\n break;\n }\n }\n result.push(\n /* @__PURE__ */ jsx16(\"div\", { className: \"apteva-md-table-wrapper\", children: /* @__PURE__ */ jsxs11(\"table\", { className: \"apteva-md-table\", children: [\n /* @__PURE__ */ jsx16(\"thead\", { children: /* @__PURE__ */ jsx16(\"tr\", { children: headerCells.map((cell, idx) => /* @__PURE__ */ jsx16(\"th\", { className: \"apteva-md-th\", children: parseInlineMarkdown(cell, `th${key}${idx}`) }, `th${idx}`)) }) }),\n /* @__PURE__ */ jsx16(\"tbody\", { children: bodyRows.map((row, rowIdx) => /* @__PURE__ */ jsx16(\"tr\", { children: row.map((cell, cellIdx) => /* @__PURE__ */ jsx16(\"td\", { className: \"apteva-md-td\", children: parseInlineMarkdown(cell, `td${key}${rowIdx}${cellIdx}`) }, `td${cellIdx}`)) }, `tr${rowIdx}`)) })\n ] }) }, `table-wrapper${key++}`)\n );\n continue;\n }\n }\n if (line === \"\") {\n result.push(/* @__PURE__ */ jsx16(\"br\", {}, `br${key++}`));\n } else {\n result.push(\n /* @__PURE__ */ jsxs11(\"span\", { children: [\n parseInlineMarkdown(line, `${key}`),\n i < lines.length - 1 ? \"\\n\" : \"\"\n ] }, `p${key++}`)\n );\n }\n i++;\n }\n return result;\n}\nfunction MarkdownContent({ content, className = \"\" }) {\n const cleaned = content.replace(/<\\/?ui\\s*\\/?>/gi, \"\");\n return /* @__PURE__ */ jsx16(\"div\", { className: `apteva-md ${className}`, children: parseMarkdown(cleaned) });\n}\n\n// src/components/Chat/ToolCall.tsx\nimport { Fragment as Fragment2, jsx as jsx17, jsxs as jsxs12 } from \"react/jsx-runtime\";\nfunction ToolCall({ name, status, isReceiving = false, inputLength = 0, streamOutput, variant = \"card\" }) {\n if (variant === \"inline\") {\n const statusText = status === \"preparing\" ? `${name} preparing...` : status === \"running\" ? streamOutput ? `${name} \\xB7 ${streamOutput}` : `${name}...` : status === \"error\" ? `${name} failed` : name;\n return /* @__PURE__ */ jsxs12(\"div\", { className: \"apteva-tool-inline\", children: [\n /* @__PURE__ */ jsx17(\"div\", { className: \"apteva-tool-inline-line\" }),\n /* @__PURE__ */ jsxs12(\"div\", { className: \"apteva-tool-inline-content\", children: [\n status === \"running\" || status === \"preparing\" ? /* @__PURE__ */ jsxs12(\"svg\", { className: \"apteva-tool-inline-icon apteva-tool-icon-spin\", width: \"14\", height: \"14\", fill: \"none\", viewBox: \"0 0 24 24\", children: [\n /* @__PURE__ */ jsx17(\"circle\", { className: \"apteva-tool-spinner-track\", cx: \"12\", cy: \"12\", r: \"10\", stroke: \"currentColor\", strokeWidth: \"4\" }),\n /* @__PURE__ */ jsx17(\"path\", { className: \"apteva-tool-spinner-fill\", fill: \"currentColor\", d: \"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\" })\n ] }) : /* @__PURE__ */ jsx17(\"svg\", { className: \"apteva-tool-inline-icon\", width: \"14\", height: \"14\", viewBox: \"0 0 24 24\", fill: \"none\", children: /* @__PURE__ */ jsx17(\"path\", { d: \"M13 2L3 14h9l-1 8 10-12h-9l1-8z\", fill: \"currentColor\" }) }),\n /* @__PURE__ */ jsx17(\"span\", { className: \"apteva-tool-inline-text\", children: statusText })\n ] }),\n /* @__PURE__ */ jsx17(\"div\", { className: \"apteva-tool-inline-line\" })\n ] });\n }\n if (status === \"preparing\") {\n return /* @__PURE__ */ jsxs12(\"div\", { className: \"apteva-tool-card apteva-tool-card-preparing\", children: [\n /* @__PURE__ */ jsxs12(\"svg\", { className: \"apteva-tool-icon apteva-tool-icon-spin\", fill: \"none\", viewBox: \"0 0 24 24\", children: [\n /* @__PURE__ */ jsx17(\"circle\", { className: \"apteva-tool-spinner-track\", cx: \"12\", cy: \"12\", r: \"10\", stroke: \"currentColor\", strokeWidth: \"4\" }),\n /* @__PURE__ */ jsx17(\"path\", { className: \"apteva-tool-spinner-fill\", fill: \"currentColor\", d: \"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\" })\n ] }),\n /* @__PURE__ */ jsxs12(\"span\", { className: \"apteva-tool-label\", children: [\n /* @__PURE__ */ jsx17(\"strong\", { children: name }),\n /* @__PURE__ */ jsx17(\"span\", { className: \"apteva-tool-status-text\", children: \" preparing...\" })\n ] })\n ] });\n }\n if (status === \"running\") {\n return /* @__PURE__ */ jsxs12(\"div\", { className: \"apteva-tool-card apteva-tool-card-running\", children: [\n /* @__PURE__ */ jsxs12(\"svg\", { className: \"apteva-tool-icon apteva-tool-icon-spin\", fill: \"none\", viewBox: \"0 0 24 24\", children: [\n /* @__PURE__ */ jsx17(\"circle\", { className: \"apteva-tool-spinner-track\", cx: \"12\", cy: \"12\", r: \"10\", stroke: \"currentColor\", strokeWidth: \"4\" }),\n /* @__PURE__ */ jsx17(\"path\", { className: \"apteva-tool-spinner-fill\", fill: \"currentColor\", d: \"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\" })\n ] }),\n /* @__PURE__ */ jsxs12(\"span\", { className: \"apteva-tool-label\", children: [\n /* @__PURE__ */ jsx17(\"strong\", { children: name }),\n streamOutput ? /* @__PURE__ */ jsx17(\"span\", { className: \"apteva-tool-stream-separator\", children: \" \\xB7 \" }) : null,\n streamOutput ? /* @__PURE__ */ jsx17(\"span\", { className: \"apteva-tool-stream-output\", children: streamOutput }) : /* @__PURE__ */ jsxs12(Fragment2, { children: [\n /* @__PURE__ */ jsx17(\"span\", { className: \"apteva-tool-status-text\", children: \" running\" }),\n /* @__PURE__ */ jsxs12(\"span\", { className: \"apteva-tool-dots\", children: [\n /* @__PURE__ */ jsx17(\"span\", { children: \".\" }),\n /* @__PURE__ */ jsx17(\"span\", { children: \".\" }),\n /* @__PURE__ */ jsx17(\"span\", { children: \".\" })\n ] })\n ] })\n ] })\n ] });\n }\n if (status === \"completed\") {\n return /* @__PURE__ */ jsxs12(\"div\", { className: \"apteva-tool-card apteva-tool-card-completed\", children: [\n /* @__PURE__ */ jsx17(\"svg\", { className: \"apteva-tool-icon\", fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx17(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M5 13l4 4L19 7\" }) }),\n /* @__PURE__ */ jsx17(\"span\", { className: \"apteva-tool-label\", children: name })\n ] });\n }\n return /* @__PURE__ */ jsxs12(\"div\", { className: \"apteva-tool-card apteva-tool-card-error\", children: [\n /* @__PURE__ */ jsx17(\"svg\", { className: \"apteva-tool-icon\", fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx17(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M6 18L18 6M6 6l12 12\" }) }),\n /* @__PURE__ */ jsxs12(\"span\", { className: \"apteva-tool-label\", children: [\n name,\n \" failed\"\n ] })\n ] });\n}\n\n// src/components/Chat/ToolCallGroup.tsx\nimport { useState as useState5 } from \"react\";\nimport { jsx as jsx18, jsxs as jsxs13 } from \"react/jsx-runtime\";\nfunction formatResultPreview(result) {\n if (result == null) return \"\";\n const str = typeof result === \"string\" ? result : JSON.stringify(result);\n const oneLine = str.replace(/\\s+/g, \" \").trim();\n return oneLine.length > 120 ? oneLine.slice(0, 117) + \"...\" : oneLine;\n}\nfunction ToolCallGroup({ tools }) {\n const completed = tools.filter((t) => t.status === \"completed\").length;\n const errored = tools.filter((t) => t.status === \"error\").length;\n const total = tools.length;\n const allDone = completed + errored === total;\n const [expanded, setExpanded] = useState5(false);\n const isExpanded = expanded;\n const activeTool = tools.find((t) => t.status === \"running\") || tools.find((t) => t.status === \"preparing\");\n let statusText;\n if (allDone) {\n if (errored > 0) {\n statusText = `Used ${total} tools \\xB7 ${errored} failed`;\n } else {\n statusText = `Used ${total} tools`;\n }\n } else {\n const parts = [`Using ${total} tools`];\n if (completed > 0) parts.push(`${completed} done`);\n if (activeTool) {\n const activeLabel = activeTool.streamOutput || (activeTool.status === \"preparing\" ? \"preparing\" : \"running\");\n parts.push(`${activeTool.name} ${activeLabel === \"preparing\" || activeLabel === \"running\" ? activeLabel + \"...\" : \"\\xB7 \" + activeLabel}`);\n }\n statusText = parts.join(\" \\xB7 \");\n }\n const cardClass = allDone ? errored > 0 ? \"apteva-tool-group apteva-tool-group-error\" : \"apteva-tool-group apteva-tool-group-completed\" : \"apteva-tool-group apteva-tool-group-running\";\n return /* @__PURE__ */ jsxs13(\"div\", { className: cardClass, children: [\n /* @__PURE__ */ jsxs13(\n \"button\",\n {\n className: \"apteva-tool-group-header\",\n onClick: () => setExpanded(!expanded),\n children: [\n /* @__PURE__ */ jsxs13(\"div\", { className: \"apteva-tool-group-header-left\", children: [\n allDone ? /* @__PURE__ */ jsx18(\"svg\", { className: \"apteva-tool-group-icon\", width: \"14\", height: \"14\", fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx18(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M5 13l4 4L19 7\" }) }) : /* @__PURE__ */ jsxs13(\"svg\", { className: \"apteva-tool-group-icon apteva-tool-icon-spin\", width: \"14\", height: \"14\", fill: \"none\", viewBox: \"0 0 24 24\", children: [\n /* @__PURE__ */ jsx18(\"circle\", { className: \"apteva-tool-spinner-track\", cx: \"12\", cy: \"12\", r: \"10\", stroke: \"currentColor\", strokeWidth: \"4\" }),\n /* @__PURE__ */ jsx18(\"path\", { className: \"apteva-tool-spinner-fill\", fill: \"currentColor\", d: \"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\" })\n ] }),\n /* @__PURE__ */ jsx18(\"span\", { className: \"apteva-tool-group-status\", children: statusText })\n ] }),\n /* @__PURE__ */ jsx18(\n \"svg\",\n {\n className: `apteva-tool-group-chevron ${isExpanded ? \"apteva-tool-group-chevron-open\" : \"\"}`,\n width: \"14\",\n height: \"14\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /* @__PURE__ */ jsx18(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M19 9l-7 7-7-7\" })\n }\n )\n ]\n }\n ),\n isExpanded && /* @__PURE__ */ jsx18(\"div\", { className: \"apteva-tool-group-list\", children: tools.map((tool) => {\n const resultPreview = tool.status === \"completed\" && tool.result ? formatResultPreview(tool.result) : \"\";\n const hasDetail = tool.status === \"running\" && tool.streamOutput || resultPreview;\n return /* @__PURE__ */ jsxs13(\"div\", { className: `apteva-tool-group-item ${hasDetail ? \"apteva-tool-group-item-has-detail\" : \"\"}`, children: [\n /* @__PURE__ */ jsxs13(\"div\", { className: \"apteva-tool-group-item-row\", children: [\n tool.status === \"completed\" ? /* @__PURE__ */ jsx18(\"svg\", { className: \"apteva-tool-group-item-icon apteva-tool-group-item-done\", width: \"12\", height: \"12\", fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx18(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 3, d: \"M5 13l4 4L19 7\" }) }) : tool.status === \"error\" ? /* @__PURE__ */ jsx18(\"svg\", { className: \"apteva-tool-group-item-icon apteva-tool-group-item-error\", width: \"12\", height: \"12\", fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx18(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 3, d: \"M6 18L18 6M6 6l12 12\" }) }) : /* @__PURE__ */ jsx18(\"div\", { className: \"apteva-tool-group-item-icon apteva-tool-group-item-spinner\" }),\n /* @__PURE__ */ jsx18(\"span\", { className: \"apteva-tool-group-item-name\", children: tool.name }),\n tool.status === \"running\" && !tool.streamOutput && /* @__PURE__ */ jsx18(\"span\", { className: \"apteva-tool-group-item-running-label\", children: \"running...\" }),\n tool.status === \"preparing\" && /* @__PURE__ */ jsx18(\"span\", { className: \"apteva-tool-group-item-running-label\", children: \"preparing...\" })\n ] }),\n tool.status === \"running\" && tool.streamOutput && /* @__PURE__ */ jsx18(\"div\", { className: \"apteva-tool-group-item-detail\", children: tool.streamOutput }),\n resultPreview && /* @__PURE__ */ jsx18(\"div\", { className: \"apteva-tool-group-item-detail apteva-tool-group-item-result-text\", children: resultPreview })\n ] }, tool.id);\n }) })\n ] });\n}\n\n// src/components/Chat/PersistentWidgetRef.tsx\nimport { jsx as jsx19, jsxs as jsxs14 } from \"react/jsx-runtime\";\nfunction PersistentWidgetRef({ widget }) {\n const title = widget.props.title || widget.type.replace(/_/g, \" \");\n return /* @__PURE__ */ jsxs14(\"div\", { className: \"flex items-center gap-2 px-3 py-2 rounded-lg bg-neutral-100 dark:bg-neutral-800 border border-neutral-200 dark:border-neutral-700 text-sm\", children: [\n /* @__PURE__ */ jsx19(\"div\", { className: \"w-2 h-2 rounded-full bg-emerald-500 animate-pulse flex-shrink-0\" }),\n /* @__PURE__ */ jsx19(\"span\", { className: \"text-neutral-600 dark:text-neutral-400 capitalize\", children: title }),\n /* @__PURE__ */ jsx19(\"span\", { className: \"text-neutral-400 dark:text-neutral-500 text-xs ml-auto\", children: \"pinned above\" })\n ] });\n}\n\n// src/components/Chat/Message.tsx\nimport { Fragment as Fragment3, jsx as jsx20, jsxs as jsxs15 } from \"react/jsx-runtime\";\nfunction Message({ message, onAction, enableWidgets, onWidgetRender, persistentWidgetIds, toolCallStyle = \"card\" }) {\n const isUser = message.role === \"user\";\n const contentSegments = message.metadata?.content_segments;\n const isStreaming = message.metadata?.isStreaming === true;\n const hasContent = message.content || contentSegments && contentSegments.length > 0;\n const reportedWidgetsRef = useRef5(/* @__PURE__ */ new Set());\n const parsedWidgets = useMemo(() => {\n if (!enableWidgets || isUser || !message.content) {\n return [];\n }\n const parsed = parseWidgetsFromText(message.content);\n return parsed.segments.filter((seg) => seg.type === \"widget\" && !!seg.widget).map((seg) => seg.widget);\n }, [enableWidgets, isUser, message.content]);\n useEffect6(() => {\n if (onWidgetRender && message.widgets) {\n for (const widget of message.widgets) {\n if (!reportedWidgetsRef.current.has(widget.id)) {\n reportedWidgetsRef.current.add(widget.id);\n onWidgetRender(widget);\n }\n }\n }\n }, [message.widgets, onWidgetRender]);\n useEffect6(() => {\n if (onWidgetRender && parsedWidgets.length > 0) {\n for (const widget of parsedWidgets) {\n if (!reportedWidgetsRef.current.has(widget.id)) {\n reportedWidgetsRef.current.add(widget.id);\n onWidgetRender(widget);\n }\n }\n }\n }, [parsedWidgets, onWidgetRender]);\n const renderTextContent = (text) => {\n if (!enableWidgets || isUser) {\n return /* @__PURE__ */ jsx20(MarkdownContent, { content: text });\n }\n const parsed = parseWidgetsFromText(text);\n const cleanedText = parsed.segments.filter((seg) => seg.type === \"text\" && seg.content).map((seg) => seg.content).join(\"\");\n if (!cleanedText.trim()) {\n return null;\n }\n return /* @__PURE__ */ jsx20(MarkdownContent, { content: cleanedText });\n };\n const renderContentWithWidgets = () => {\n if (!enableWidgets || isUser || !message.content) {\n return null;\n }\n const parsed = parseWidgetsFromText(message.content);\n const elements = [];\n let textBuffer = \"\";\n parsed.segments.forEach((segment, index) => {\n if (segment.type === \"text\" && segment.content) {\n textBuffer += segment.content;\n } else if (segment.type === \"widget\" && segment.widget) {\n if (textBuffer.trim()) {\n elements.push(\n /* @__PURE__ */ jsx20(\"div\", { className: \"apteva-message-bubble apteva-message-assistant\", children: /* @__PURE__ */ jsx20(\"div\", { className: \"apteva-message-content-assistant\", children: /* @__PURE__ */ jsx20(MarkdownContent, { content: textBuffer }) }) }, `text-${index}`)\n );\n textBuffer = \"\";\n }\n elements.push(\n /* @__PURE__ */ jsx20(\"div\", { className: \"apteva-widget-standalone\", children: /* @__PURE__ */ jsx20(WidgetRenderer, { widget: segment.widget, onAction }) }, `widget-${index}`)\n );\n } else if (segment.type === \"widget_pending\" && segment.pendingType) {\n if (textBuffer.trim()) {\n elements.push(\n /* @__PURE__ */ jsx20(\"div\", { className: \"apteva-message-bubble apteva-message-assistant\", children: /* @__PURE__ */ jsx20(\"div\", { className: \"apteva-message-content-assistant\", children: /* @__PURE__ */ jsx20(MarkdownContent, { content: textBuffer }) }) }, `text-${index}`)\n );\n textBuffer = \"\";\n }\n elements.push(\n /* @__PURE__ */ jsx20(\"div\", { className: \"apteva-widget-standalone\", children: /* @__PURE__ */ jsx20(WidgetSkeleton, { type: segment.pendingType }) }, `pending-${index}`)\n );\n }\n });\n if (textBuffer.trim()) {\n elements.push(\n /* @__PURE__ */ jsx20(\"div\", { className: \"apteva-message-bubble apteva-message-assistant\", children: /* @__PURE__ */ jsx20(\"div\", { className: \"apteva-message-content-assistant\", children: /* @__PURE__ */ jsx20(MarkdownContent, { content: textBuffer }) }) }, \"text-final\")\n );\n }\n return elements.length > 0 ? elements : null;\n };\n const attachments = message.metadata?.attachments || [];\n const hasAttachments = attachments.length > 0;\n const renderAttachments = () => {\n if (!hasAttachments) return null;\n return /* @__PURE__ */ jsx20(\"div\", { className: \"apteva-message-attachments flex flex-wrap gap-2 mb-2 justify-end\", children: attachments.map((att, index) => {\n const isImage = att.type.startsWith(\"image/\");\n const isPdf = att.type === \"application/pdf\";\n if (isImage && att.preview) {\n return /* @__PURE__ */ jsx20(\"div\", { className: \"apteva-attachment-image relative rounded-lg overflow-hidden shadow-sm\", children: /* @__PURE__ */ jsx20(\n \"img\",\n {\n src: att.preview,\n alt: att.name,\n className: \"max-w-[150px] max-h-[150px] object-cover\"\n }\n ) }, index);\n }\n return /* @__PURE__ */ jsxs15(\n \"div\",\n {\n className: \"apteva-attachment-doc flex items-center gap-3 px-4 py-3 bg-neutral-100 dark:bg-neutral-800 border border-neutral-200 dark:border-neutral-700 rounded-xl shadow-sm\",\n children: [\n /* @__PURE__ */ jsx20(\"div\", { className: \"w-10 h-10 flex items-center justify-center bg-red-100 dark:bg-red-900/30 rounded-lg text-red-600 dark:text-red-400\", children: isPdf ? /* @__PURE__ */ jsx20(\"svg\", { className: \"w-5 h-5\", fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx20(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z\" }) }) : /* @__PURE__ */ jsx20(\"svg\", { className: \"w-5 h-5\", fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx20(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\" }) }) }),\n /* @__PURE__ */ jsxs15(\"div\", { className: \"flex flex-col min-w-0\", children: [\n /* @__PURE__ */ jsx20(\"span\", { className: \"text-sm font-medium text-neutral-800 dark:text-neutral-200 truncate max-w-[180px]\", children: att.name }),\n /* @__PURE__ */ jsxs15(\"span\", { className: \"text-xs text-neutral-500 dark:text-neutral-400\", children: [\n isPdf ? \"PDF\" : \"Document\",\n \" \\xB7 \",\n formatFileSize(att.size)\n ] })\n ] })\n ]\n },\n index\n );\n }) });\n };\n const renderContent = () => {\n if (isUser) {\n return /* @__PURE__ */ jsx20(\"div\", { className: \"apteva-message-text\", children: message.content });\n }\n if (isStreaming && !hasContent) {\n return /* @__PURE__ */ jsxs15(\"div\", { className: \"apteva-typing-indicator\", children: [\n /* @__PURE__ */ jsx20(\"span\", {}),\n /* @__PURE__ */ jsx20(\"span\", {}),\n /* @__PURE__ */ jsx20(\"span\", {})\n ] });\n }\n if (contentSegments && contentSegments.length > 0) {\n return null;\n }\n return renderTextContent(message.content);\n };\n const renderTextSegmentWithWidgets = (text, keyPrefix) => {\n if (!enableWidgets) {\n return /* @__PURE__ */ jsx20(\"div\", { className: \"apteva-message-bubble apteva-message-assistant\", children: /* @__PURE__ */ jsx20(\"div\", { className: \"apteva-message-content-assistant\", children: /* @__PURE__ */ jsx20(MarkdownContent, { content: text }) }) }, keyPrefix);\n }\n const parsed = parseWidgetsFromText(text);\n const elements = [];\n let textBuffer = \"\";\n parsed.segments.forEach((seg, idx) => {\n if (seg.type === \"text\" && seg.content) {\n textBuffer += seg.content;\n } else if (seg.type === \"widget\" && seg.widget) {\n if (textBuffer.trim()) {\n elements.push(\n /* @__PURE__ */ jsx20(\"div\", { className: \"apteva-message-bubble apteva-message-assistant\", children: /* @__PURE__ */ jsx20(\"div\", { className: \"apteva-message-content-assistant\", children: /* @__PURE__ */ jsx20(MarkdownContent, { content: textBuffer }) }) }, `${keyPrefix}-text-${idx}`)\n );\n textBuffer = \"\";\n }\n elements.push(\n /* @__PURE__ */ jsx20(\"div\", { className: \"apteva-widget-standalone\", children: /* @__PURE__ */ jsx20(WidgetRenderer, { widget: seg.widget, onAction }) }, `${keyPrefix}-widget-${idx}`)\n );\n } else if (seg.type === \"widget_pending\" && seg.pendingType) {\n if (textBuffer.trim()) {\n elements.push(\n /* @__PURE__ */ jsx20(\"div\", { className: \"apteva-message-bubble apteva-message-assistant\", children: /* @__PURE__ */ jsx20(\"div\", { className: \"apteva-message-content-assistant\", children: /* @__PURE__ */ jsx20(MarkdownContent, { content: textBuffer }) }) }, `${keyPrefix}-text-${idx}`)\n );\n textBuffer = \"\";\n }\n elements.push(\n /* @__PURE__ */ jsx20(\"div\", { className: \"apteva-widget-standalone\", children: /* @__PURE__ */ jsx20(WidgetSkeleton, { type: seg.pendingType }) }, `${keyPrefix}-pending-${idx}`)\n );\n }\n });\n if (textBuffer.trim()) {\n elements.push(\n /* @__PURE__ */ jsx20(\"div\", { className: \"apteva-message-bubble apteva-message-assistant\", children: /* @__PURE__ */ jsx20(\"div\", { className: \"apteva-message-content-assistant\", children: /* @__PURE__ */ jsx20(MarkdownContent, { content: textBuffer }) }) }, `${keyPrefix}-text-final`)\n );\n }\n return elements;\n };\n const renderSegmentedContent = () => {\n if (!contentSegments || contentSegments.length === 0) {\n return null;\n }\n const groups = [];\n let currentToolRun = [];\n const flushToolRun = () => {\n if (currentToolRun.length > 0) {\n groups.push({ type: \"tools\", tools: [...currentToolRun] });\n currentToolRun = [];\n }\n };\n contentSegments.forEach((segment, index) => {\n if (segment.type === \"tool\") {\n currentToolRun.push(segment);\n } else {\n flushToolRun();\n if (segment.type === \"text\" && segment.content) {\n groups.push({ type: \"text\", content: segment.content, index });\n }\n }\n });\n flushToolRun();\n const elements = [];\n groups.forEach((group, groupIndex) => {\n if (group.type === \"text\") {\n const textElements = renderTextSegmentWithWidgets(group.content, `seg-${group.index}`);\n if (Array.isArray(textElements)) {\n elements.push(...textElements);\n } else {\n elements.push(textElements);\n }\n } else if (group.type === \"tools\") {\n if (toolCallStyle === \"inline\") {\n group.tools.forEach((segment) => {\n if (segment.type === \"tool\") {\n elements.push(\n /* @__PURE__ */ jsx20(\"div\", { className: \"apteva-tool-call-standalone\", children: /* @__PURE__ */ jsx20(\n ToolCall,\n {\n name: segment.name,\n status: segment.status || (segment.result !== void 0 ? \"completed\" : \"running\"),\n isReceiving: segment.isReceiving,\n inputLength: segment.inputLength,\n streamOutput: segment.streamOutput,\n variant: \"inline\"\n }\n ) }, segment.id)\n );\n }\n });\n } else if (group.tools.length >= 3) {\n const toolData = group.tools.map((t) => {\n const tool = t;\n return {\n id: tool.id,\n name: tool.name,\n status: tool.status || (tool.result !== void 0 ? \"completed\" : \"running\"),\n isReceiving: tool.isReceiving,\n streamOutput: tool.streamOutput,\n result: tool.result\n };\n });\n elements.push(\n /* @__PURE__ */ jsx20(\"div\", { className: \"apteva-tool-call-standalone\", children: /* @__PURE__ */ jsx20(ToolCallGroup, { tools: toolData }) }, `tool-group-${groupIndex}`)\n );\n } else {\n group.tools.forEach((segment) => {\n if (segment.type === \"tool\") {\n elements.push(\n /* @__PURE__ */ jsx20(\"div\", { className: \"apteva-tool-call-standalone\", children: /* @__PURE__ */ jsx20(\n ToolCall,\n {\n name: segment.name,\n status: segment.status || (segment.result !== void 0 ? \"completed\" : \"running\"),\n isReceiving: segment.isReceiving,\n inputLength: segment.inputLength,\n streamOutput: segment.streamOutput\n }\n ) }, segment.id)\n );\n }\n });\n }\n }\n });\n return elements;\n };\n const renderMessageWidgets = () => {\n if (!message.widgets || message.widgets.length === 0) return null;\n const inlineWidgets = message.widgets.filter((w) => !persistentWidgetIds?.has(w.id));\n const persistentRefs = message.widgets.filter((w) => persistentWidgetIds?.has(w.id));\n return /* @__PURE__ */ jsxs15(Fragment3, { children: [\n persistentRefs.map((w) => /* @__PURE__ */ jsx20(\"div\", { className: \"apteva-widget-standalone\", children: /* @__PURE__ */ jsx20(PersistentWidgetRef, { widget: w }) }, `ref-${w.id}`)),\n inlineWidgets.length > 0 && /* @__PURE__ */ jsx20(\"div\", { className: \"apteva-widget-standalone\", children: /* @__PURE__ */ jsx20(Widgets, { widgets: inlineWidgets, onAction, layout: \"stack\" }) })\n ] });\n };\n if (!isUser && (contentSegments && contentSegments.length > 0)) {\n return /* @__PURE__ */ jsxs15(\"div\", { className: \"apteva-message-segmented\", children: [\n renderSegmentedContent(),\n renderMessageWidgets(),\n /* @__PURE__ */ jsx20(\"div\", { className: \"apteva-message-timestamp apteva-message-timestamp-assistant\", suppressHydrationWarning: true, children: message.timestamp.toLocaleTimeString([], { hour: \"2-digit\", minute: \"2-digit\" }) })\n ] });\n }\n const widgetContent = renderContentWithWidgets();\n if (!isUser && enableWidgets && widgetContent) {\n return /* @__PURE__ */ jsxs15(\"div\", { className: \"apteva-message-segmented\", children: [\n widgetContent,\n renderMessageWidgets(),\n /* @__PURE__ */ jsx20(\"div\", { className: \"apteva-message-timestamp apteva-message-timestamp-assistant\", suppressHydrationWarning: true, children: message.timestamp.toLocaleTimeString([], { hour: \"2-digit\", minute: \"2-digit\" }) })\n ] });\n }\n if (isUser && hasAttachments) {\n return /* @__PURE__ */ jsxs15(\"div\", { className: \"apteva-message-segmented apteva-message-user-with-attachments flex flex-col items-end\", children: [\n renderAttachments(),\n message.content && /* @__PURE__ */ jsx20(\"div\", { className: \"apteva-message-bubble apteva-message-user\", children: /* @__PURE__ */ jsx20(\"div\", { className: \"apteva-message-content-user\", children: /* @__PURE__ */ jsx20(\"div\", { className: \"apteva-message-text\", children: message.content }) }) }),\n /* @__PURE__ */ jsx20(\"div\", { className: \"apteva-message-timestamp apteva-message-timestamp-user\", suppressHydrationWarning: true, children: message.timestamp.toLocaleTimeString([], { hour: \"2-digit\", minute: \"2-digit\" }) })\n ] });\n }\n return /* @__PURE__ */ jsxs15(\n \"div\",\n {\n className: cn(\n \"apteva-message-bubble\",\n isUser ? \"apteva-message-user\" : \"apteva-message-assistant\"\n ),\n children: [\n /* @__PURE__ */ jsx20(\"div\", { className: isUser ? \"apteva-message-content-user\" : \"apteva-message-content-assistant\", children: renderContent() }),\n renderMessageWidgets(),\n /* @__PURE__ */ jsx20(\"div\", { className: cn(\"apteva-message-timestamp\", isUser ? \"apteva-message-timestamp-user\" : \"apteva-message-timestamp-assistant\"), suppressHydrationWarning: true, children: message.timestamp.toLocaleTimeString([], { hour: \"2-digit\", minute: \"2-digit\" }) })\n ]\n }\n );\n}\n\n// src/components/Chat/WelcomeScreen.tsx\nimport { jsx as jsx21, jsxs as jsxs16 } from \"react/jsx-runtime\";\nvar DefaultIcon = () => /* @__PURE__ */ jsx21(\"svg\", { className: \"w-12 h-12 sm:w-16 sm:h-16\", fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx21(\n \"path\",\n {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 1.5,\n d: \"M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z\"\n }\n) });\nvar ArrowIcon = () => /* @__PURE__ */ jsx21(\"svg\", { className: \"w-4 h-4\", fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx21(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M13 7l5 5m0 0l-5 5m5-5H6\" }) });\nfunction WelcomeScreen({\n title,\n subtitle,\n icon,\n prompts,\n variant = \"centered\",\n chatVariant = \"default\",\n onPromptClick\n}) {\n const normalizedPrompts = (prompts || []).map(\n (p) => typeof p === \"string\" ? { text: p } : p\n );\n const hasPrompts = normalizedPrompts.length > 0;\n const hasHeader = title || subtitle || icon;\n if (!hasHeader && !hasPrompts) {\n return /* @__PURE__ */ jsx21(\"div\", { className: \"apteva-welcome-empty flex items-center justify-center h-full\", children: /* @__PURE__ */ jsxs16(\"div\", { className: \"text-center space-y-2\", children: [\n /* @__PURE__ */ jsx21(\"div\", { className: \"flex justify-center\", children: /* @__PURE__ */ jsx21(DefaultIcon, {}) }),\n /* @__PURE__ */ jsx21(\"p\", { className: \"text-sm\", children: \"No messages yet. Start a conversation!\" })\n ] }) });\n }\n if (variant === \"minimal\") {\n return /* @__PURE__ */ jsxs16(\"div\", { className: \"flex flex-col h-full px-4 py-4\", children: [\n hasHeader && /* @__PURE__ */ jsxs16(\"div\", { className: \"mb-4\", children: [\n title && /* @__PURE__ */ jsx21(\"h2\", { className: \"apteva-welcome-title text-lg font-semibold\", children: title }),\n subtitle && /* @__PURE__ */ jsx21(\"p\", { className: \"apteva-welcome-subtitle text-sm mt-1\", children: subtitle })\n ] }),\n hasPrompts && /* @__PURE__ */ jsx21(\"div\", { className: \"flex-1 space-y-2\", children: normalizedPrompts.map((prompt, index) => /* @__PURE__ */ jsx21(\n \"button\",\n {\n onClick: () => onPromptClick(prompt.text),\n className: cn(\n \"apteva-prompt-card w-full text-left px-4 py-3 rounded-xl\",\n \"border transition-all duration-200\",\n \"group\"\n ),\n children: /* @__PURE__ */ jsxs16(\"div\", { className: \"flex items-center gap-3\", children: [\n /* @__PURE__ */ jsx21(\"div\", { className: \"apteva-prompt-icon flex-shrink-0 transition-colors\", children: prompt.icon || /* @__PURE__ */ jsx21(ArrowIcon, {}) }),\n /* @__PURE__ */ jsxs16(\"div\", { className: \"flex-1 min-w-0\", children: [\n /* @__PURE__ */ jsx21(\"p\", { className: \"apteva-prompt-text text-sm font-medium truncate\", children: prompt.text }),\n prompt.description && /* @__PURE__ */ jsx21(\"p\", { className: \"apteva-prompt-desc text-xs mt-0.5 truncate\", children: prompt.description })\n ] })\n ] })\n },\n index\n )) })\n ] });\n }\n return /* @__PURE__ */ jsxs16(\"div\", { className: \"flex flex-col items-center justify-center h-full px-4 py-6 sm:py-8\", children: [\n /* @__PURE__ */ jsxs16(\"div\", { className: \"text-center mb-6 sm:mb-8 max-w-md\", children: [\n /* @__PURE__ */ jsx21(\"div\", { className: \"apteva-welcome-icon mb-4 flex justify-center\", children: icon || /* @__PURE__ */ jsx21(DefaultIcon, {}) }),\n title && /* @__PURE__ */ jsx21(\"h1\", { className: \"apteva-welcome-title text-xl sm:text-2xl font-semibold mb-2\", children: title }),\n subtitle && /* @__PURE__ */ jsx21(\"p\", { className: \"apteva-welcome-subtitle text-sm sm:text-base\", children: subtitle })\n ] }),\n hasPrompts && /* @__PURE__ */ jsxs16(\"div\", { className: \"w-full max-w-2xl\", children: [\n /* @__PURE__ */ jsx21(\"div\", { className: \"sm:hidden space-y-2\", children: normalizedPrompts.map((prompt, index) => /* @__PURE__ */ jsx21(\n \"button\",\n {\n onClick: () => onPromptClick(prompt.text),\n className: cn(\n \"apteva-prompt-card w-full text-left px-4 py-3 rounded-xl\",\n \"border transition-all duration-200\",\n \"active:scale-[0.98]\",\n \"shadow-sm hover:shadow\",\n \"group\"\n ),\n children: /* @__PURE__ */ jsxs16(\"div\", { className: \"flex items-center gap-3\", children: [\n /* @__PURE__ */ jsx21(\"div\", { className: \"apteva-prompt-icon-box flex-shrink-0 w-8 h-8 rounded-lg flex items-center justify-center transition-colors\", children: prompt.icon || /* @__PURE__ */ jsx21(ArrowIcon, {}) }),\n /* @__PURE__ */ jsxs16(\"div\", { className: \"flex-1 min-w-0\", children: [\n /* @__PURE__ */ jsx21(\"p\", { className: \"apteva-prompt-text text-sm font-medium\", children: prompt.text }),\n prompt.description && /* @__PURE__ */ jsx21(\"p\", { className: \"apteva-prompt-desc text-xs mt-0.5 line-clamp-1\", children: prompt.description })\n ] }),\n /* @__PURE__ */ jsx21(\n \"svg\",\n {\n className: \"apteva-prompt-chevron w-4 h-4 transition-colors flex-shrink-0\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /* @__PURE__ */ jsx21(\n \"path\",\n {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M9 5l7 7-7 7\"\n }\n )\n }\n )\n ] })\n },\n index\n )) }),\n /* @__PURE__ */ jsx21(\"div\", { className: \"hidden sm:grid sm:grid-cols-2 gap-3\", children: normalizedPrompts.map((prompt, index) => /* @__PURE__ */ jsx21(\n \"button\",\n {\n onClick: () => onPromptClick(prompt.text),\n className: cn(\n \"apteva-prompt-card text-left p-4 rounded-xl\",\n \"border transition-all duration-200\",\n \"hover:shadow-md\",\n \"active:scale-[0.98]\",\n \"group\"\n ),\n children: /* @__PURE__ */ jsxs16(\"div\", { className: \"flex items-start gap-3\", children: [\n /* @__PURE__ */ jsx21(\"div\", { className: \"apteva-prompt-icon-box flex-shrink-0 w-9 h-9 rounded-lg flex items-center justify-center transition-colors\", children: prompt.icon || /* @__PURE__ */ jsx21(ArrowIcon, {}) }),\n /* @__PURE__ */ jsxs16(\"div\", { className: \"flex-1 min-w-0\", children: [\n /* @__PURE__ */ jsx21(\"p\", { className: \"apteva-prompt-text text-sm font-medium leading-snug\", children: prompt.text }),\n prompt.description && /* @__PURE__ */ jsx21(\"p\", { className: \"apteva-prompt-desc text-xs mt-1 line-clamp-2\", children: prompt.description })\n ] })\n ] })\n },\n index\n )) })\n ] })\n ] });\n}\n\n// src/components/Chat/MessageList.tsx\nimport { jsx as jsx22 } from \"react/jsx-runtime\";\nfunction MessageList({\n messages,\n onAction,\n welcomeTitle,\n welcomeSubtitle,\n welcomeIcon,\n suggestedPrompts,\n welcomeVariant,\n chatVariant,\n onPromptClick,\n enableWidgets,\n onWidgetRender,\n persistentWidgetIds,\n toolCallStyle\n}) {\n const listRef = useRef6(null);\n const isNearBottomRef = useRef6(true);\n const lastScrollHeightRef = useRef6(0);\n const handleScroll = () => {\n if (listRef.current) {\n const { scrollTop, scrollHeight, clientHeight } = listRef.current;\n isNearBottomRef.current = scrollHeight - scrollTop - clientHeight < 100;\n }\n };\n useEffect7(() => {\n if (listRef.current && isNearBottomRef.current) {\n const currentScrollHeight = listRef.current.scrollHeight;\n if (currentScrollHeight !== lastScrollHeightRef.current) {\n listRef.current.scrollTop = currentScrollHeight;\n lastScrollHeightRef.current = currentScrollHeight;\n }\n }\n }, [messages]);\n return /* @__PURE__ */ jsx22(\"div\", { ref: listRef, className: \"apteva-message-list apteva-scrollbar-hidden\", onScroll: handleScroll, children: messages.length === 0 ? /* @__PURE__ */ jsx22(\n WelcomeScreen,\n {\n title: welcomeTitle,\n subtitle: welcomeSubtitle,\n icon: welcomeIcon,\n prompts: suggestedPrompts,\n variant: welcomeVariant,\n chatVariant,\n onPromptClick: onPromptClick || (() => {\n })\n }\n ) : messages.map((message) => /* @__PURE__ */ jsx22(\"div\", { className: message.role === \"user\" ? \"apteva-message-row-user\" : \"apteva-message-row-assistant\", children: /* @__PURE__ */ jsx22(Message, { message, onAction, enableWidgets, onWidgetRender, persistentWidgetIds, toolCallStyle }) }, message.id)) });\n}\n\n// src/components/Chat/Composer.tsx\nimport { useState as useState6, useEffect as useEffect8, useCallback as useCallback3, useRef as useRef7 } from \"react\";\nimport { Fragment as Fragment4, jsx as jsx23, jsxs as jsxs17 } from \"react/jsx-runtime\";\nvar getSpeechRecognition = () => {\n if (typeof window === \"undefined\") return null;\n return window.SpeechRecognition || window.webkitSpeechRecognition || null;\n};\nfunction Composer({ onSendMessage, placeholder = \"Type a message...\", disabled = false, isLoading = false, onStop, onFileUpload, onSwitchMode, speechToText, enableVoice = false, voiceState = \"idle\", voicePartialTranscript = \"\", voiceDuration = 0, onVoiceStart, onVoiceStop }) {\n const [text, setText] = useState6(\"\");\n const [showMenu, setShowMenu] = useState6(false);\n const [pendingFiles, setPendingFiles] = useState6([]);\n const [fileError, setFileError] = useState6(null);\n const [isMultiLine, setIsMultiLine] = useState6(false);\n const textareaRef = useRef7(null);\n const fileInputRef = useRef7(null);\n const menuButtonRef = useRef7(null);\n const [isRecording, setIsRecording] = useState6(false);\n const [recordingTime, setRecordingTime] = useState6(0);\n const [transcriptFlash, setTranscriptFlash] = useState6(null);\n const recognitionRef = useRef7(null);\n const mediaStreamRef = useRef7(null);\n const audioContextRef = useRef7(null);\n const analyserRef = useRef7(null);\n const canvasRef = useRef7(null);\n const animFrameRef = useRef7(0);\n const silenceTimerRef = useRef7(null);\n const recordingTimerRef = useRef7(null);\n const finalTranscriptRef = useRef7(\"\");\n const manualStopRef = useRef7(false);\n const sttConfig = speechToText ? typeof speechToText === \"object\" ? speechToText : {} : null;\n const sttSupported = !!sttConfig && !!getSpeechRecognition();\n const silenceTimeout = sttConfig?.silenceTimeout ?? 2e3;\n const autoSend = sttConfig?.autoSend !== false;\n useEffect8(() => {\n return () => {\n stopRecording(true);\n };\n }, []);\n const startWaveformLoop = useCallback3(() => {\n const canvas = canvasRef.current;\n const analyser = analyserRef.current;\n if (!canvas || !analyser) return;\n const dpr = window.devicePixelRatio || 1;\n const rect = canvas.getBoundingClientRect();\n canvas.width = rect.width * dpr;\n canvas.height = rect.height * dpr;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) return;\n ctx.scale(dpr, dpr);\n const bufferLength = analyser.frequencyBinCount;\n const dataArray = new Uint8Array(bufferLength);\n const smoothed = new Float32Array(40).fill(2);\n const draw = () => {\n animFrameRef.current = requestAnimationFrame(draw);\n analyser.getByteTimeDomainData(dataArray);\n const w = rect.width;\n const h = rect.height;\n ctx.clearRect(0, 0, w, h);\n const barCount = 40;\n const gap = 2;\n const barWidth = Math.max(2, (w - (barCount - 1) * gap) / barCount);\n const samplesPerBar = Math.floor(bufferLength / barCount);\n for (let i = 0; i < barCount; i++) {\n let sumSq = 0;\n for (let j = 0; j < samplesPerBar; j++) {\n const val = (dataArray[i * samplesPerBar + j] - 128) / 128;\n sumSq += val * val;\n }\n const rms = Math.sqrt(sumSq / samplesPerBar);\n const target = Math.max(2, rms * h * 3);\n smoothed[i] += (target - smoothed[i]) * (target > smoothed[i] ? 0.4 : 0.15);\n const barHeight = Math.min(smoothed[i], h - 2);\n const x = i * (barWidth + gap);\n const y = (h - barHeight) / 2;\n const radius = Math.min(barWidth / 2, barHeight / 2);\n ctx.fillStyle = \"#3b82f6\";\n ctx.beginPath();\n ctx.roundRect(x, y, barWidth, barHeight, radius);\n ctx.fill();\n }\n };\n draw();\n }, []);\n useEffect8(() => {\n if (isRecording && canvasRef.current && analyserRef.current) {\n startWaveformLoop();\n }\n }, [isRecording, startWaveformLoop]);\n const startRecording = useCallback3(async () => {\n const SpeechRecognitionCtor = getSpeechRecognition();\n if (!SpeechRecognitionCtor) return;\n try {\n const stream = await navigator.mediaDevices.getUserMedia({ audio: true });\n mediaStreamRef.current = stream;\n const audioCtx = new AudioContext();\n audioContextRef.current = audioCtx;\n const source = audioCtx.createMediaStreamSource(stream);\n const analyser = audioCtx.createAnalyser();\n analyser.fftSize = 256;\n source.connect(analyser);\n analyserRef.current = analyser;\n const recognition = new SpeechRecognitionCtor();\n recognition.continuous = true;\n recognition.interimResults = true;\n recognition.lang = sttConfig?.language || navigator.language || \"en-US\";\n recognitionRef.current = recognition;\n finalTranscriptRef.current = \"\";\n manualStopRef.current = false;\n recognition.onresult = (event) => {\n let final = \"\";\n let interim = \"\";\n for (let i = 0; i < event.results.length; i++) {\n const result = event.results[i];\n if (result.isFinal) {\n final += result[0].transcript;\n } else {\n interim += result[0].transcript;\n }\n }\n finalTranscriptRef.current = final;\n if (silenceTimerRef.current) {\n clearTimeout(silenceTimerRef.current);\n }\n silenceTimerRef.current = setTimeout(() => {\n stopRecording(false);\n }, silenceTimeout);\n };\n recognition.onerror = (event) => {\n if (event.error !== \"aborted\") {\n console.warn(\"Speech recognition error:\", event.error);\n }\n stopRecording(true);\n };\n recognition.onend = () => {\n if (!manualStopRef.current && isRecording) {\n finishRecording();\n }\n };\n recognition.start();\n setIsRecording(true);\n setRecordingTime(0);\n recordingTimerRef.current = setInterval(() => {\n setRecordingTime((t) => t + 1);\n }, 1e3);\n silenceTimerRef.current = setTimeout(() => {\n stopRecording(false);\n }, silenceTimeout + 1e3);\n } catch (err) {\n console.warn(\"Microphone access denied or error:\", err);\n setFileError(\"Microphone access denied\");\n setTimeout(() => setFileError(null), 3e3);\n }\n }, [sttConfig?.language, silenceTimeout]);\n const finishRecording = useCallback3(() => {\n const transcript = finalTranscriptRef.current.trim();\n setIsRecording(false);\n setRecordingTime(0);\n if (transcript) {\n if (autoSend) {\n setTranscriptFlash(transcript);\n setTimeout(() => {\n setTranscriptFlash(null);\n onSendMessage(transcript);\n }, 600);\n } else {\n setText((prev) => prev ? `${prev} ${transcript}` : transcript);\n }\n }\n }, [autoSend, onSendMessage]);\n const stopRecording = useCallback3((isCleanupOnly) => {\n manualStopRef.current = true;\n if (silenceTimerRef.current) {\n clearTimeout(silenceTimerRef.current);\n silenceTimerRef.current = null;\n }\n if (recordingTimerRef.current) {\n clearInterval(recordingTimerRef.current);\n recordingTimerRef.current = null;\n }\n if (animFrameRef.current) {\n cancelAnimationFrame(animFrameRef.current);\n animFrameRef.current = 0;\n }\n if (recognitionRef.current) {\n try {\n recognitionRef.current.stop();\n } catch (_e) {\n }\n recognitionRef.current = null;\n }\n if (mediaStreamRef.current) {\n mediaStreamRef.current.getTracks().forEach((t) => t.stop());\n mediaStreamRef.current = null;\n }\n if (audioContextRef.current) {\n try {\n audioContextRef.current.close();\n } catch (_e) {\n }\n audioContextRef.current = null;\n }\n analyserRef.current = null;\n if (!isCleanupOnly) {\n finishRecording();\n } else {\n setIsRecording(false);\n setRecordingTime(0);\n }\n }, [finishRecording]);\n const formatTime = (seconds) => {\n const m = Math.floor(seconds / 60);\n const s = seconds % 60;\n return `${m.toString().padStart(2, \"0\")}:${s.toString().padStart(2, \"0\")}`;\n };\n const handleKeyDown = (e) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n handleSend();\n }\n };\n const handleSend = () => {\n const hasText = text.trim();\n const hasFiles = pendingFiles.length > 0;\n if ((hasText || hasFiles) && !disabled) {\n const filesToSend = pendingFiles.map((pf) => pf.file);\n onSendMessage(text.trim(), filesToSend.length > 0 ? filesToSend : void 0);\n setText(\"\");\n setPendingFiles([]);\n setFileError(null);\n setIsMultiLine(false);\n if (textareaRef.current) {\n textareaRef.current.style.height = \"auto\";\n }\n }\n };\n const handleChange = (e) => {\n setText(e.target.value);\n e.target.style.height = \"auto\";\n const scrollHeight = e.target.scrollHeight;\n e.target.style.height = `${scrollHeight}px`;\n const hasNewline = e.target.value.includes(\"\\n\");\n const singleLineHeight = 36;\n const isOverflowing = scrollHeight > singleLineHeight;\n if (!isMultiLine && (hasNewline || isOverflowing)) {\n setIsMultiLine(true);\n } else if (isMultiLine && !hasNewline && !isOverflowing && e.target.value.length < 20) {\n setIsMultiLine(false);\n }\n };\n const handleFileSelect = (e) => {\n if (e.target.files && e.target.files.length > 0) {\n const files = Array.from(e.target.files);\n const validFiles = [];\n const errors = [];\n files.forEach((file) => {\n const validation = validateFile(file);\n if (validation.valid) {\n const pending = { file };\n if (file.type.startsWith(\"image/\")) {\n pending.preview = URL.createObjectURL(file);\n }\n validFiles.push(pending);\n } else {\n errors.push(validation.error || \"Invalid file\");\n }\n });\n if (validFiles.length > 0) {\n setPendingFiles((prev) => [...prev, ...validFiles]);\n }\n if (errors.length > 0) {\n setFileError(errors.join(\", \"));\n setTimeout(() => setFileError(null), 5e3);\n }\n onFileUpload?.(e.target.files);\n setShowMenu(false);\n e.target.value = \"\";\n }\n };\n const removeFile = (index) => {\n setPendingFiles((prev) => {\n const file = prev[index];\n if (file.preview) {\n URL.revokeObjectURL(file.preview);\n }\n return prev.filter((_, i) => i !== index);\n });\n };\n const getFileIcon = (mimeType) => {\n if (mimeType.startsWith(\"image/\")) {\n return /* @__PURE__ */ jsx23(\"svg\", { className: \"w-4 h-4\", fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx23(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z\" }) });\n }\n if (mimeType === \"application/pdf\") {\n return /* @__PURE__ */ jsx23(\"svg\", { className: \"w-4 h-4\", fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx23(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z\" }) });\n }\n return /* @__PURE__ */ jsx23(\"svg\", { className: \"w-4 h-4\", fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx23(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\" }) });\n };\n const hasMic = sttSupported && !isRecording;\n const gridCols = hasMic ? \"auto 1fr auto auto\" : \"auto 1fr auto\";\n const gridAreas = isRecording ? '\"plus waveform waveform stop\"' : isMultiLine ? hasMic ? '\"textarea textarea textarea textarea\" \"plus . mic send\"' : '\"textarea textarea textarea\" \"plus . send\"' : hasMic ? '\"plus textarea mic send\"' : '\"plus textarea send\"';\n const gridColsRecording = \"auto 1fr auto\";\n const voiceActive = voiceState === \"active\" || voiceState === \"connecting\";\n const formatVoiceDuration = (s) => {\n const m = Math.floor(s / 60);\n const sec = s % 60;\n return `${m}:${sec.toString().padStart(2, \"0\")}`;\n };\n const showMicButton = enableVoice && !text.trim() && pendingFiles.length === 0 && !isLoading && !voiceActive;\n if (voiceActive) {\n return /* @__PURE__ */ jsx23(\"div\", { className: \"px-4 py-3 relative\", children: /* @__PURE__ */ jsxs17(\"div\", { className: \"apteva-voice-overlay\", children: [\n /* @__PURE__ */ jsx23(\"div\", { className: \"apteva-voice-transcript-area\", children: voicePartialTranscript ? /* @__PURE__ */ jsx23(\"span\", { className: \"apteva-voice-partial\", children: voicePartialTranscript }) : voiceState === \"connecting\" ? /* @__PURE__ */ jsx23(\"span\", { className: \"apteva-voice-connecting\", children: \"Connecting...\" }) : /* @__PURE__ */ jsx23(\"span\", { className: \"apteva-voice-listening\", children: \"Listening...\" }) }),\n /* @__PURE__ */ jsxs17(\"div\", { className: \"apteva-voice-controls\", children: [\n /* @__PURE__ */ jsx23(\"span\", { className: \"apteva-voice-duration\", children: formatVoiceDuration(voiceDuration) }),\n /* @__PURE__ */ jsx23(\n \"button\",\n {\n onClick: onVoiceStop,\n className: \"apteva-voice-stop-btn\",\n title: \"Stop voice mode\",\n children: /* @__PURE__ */ jsx23(\"svg\", { width: \"16\", height: \"16\", viewBox: \"0 0 16 16\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", children: /* @__PURE__ */ jsx23(\"rect\", { x: \"3\", y: \"3\", width: \"10\", height: \"10\", rx: \"1\", fill: \"currentColor\" }) })\n }\n )\n ] }),\n /* @__PURE__ */ jsx23(\"div\", { className: \"apteva-voice-indicator\", children: /* @__PURE__ */ jsx23(\"div\", { className: `apteva-voice-pulse ${voiceState === \"active\" ? \"apteva-voice-pulse-active\" : \"\"}` }) })\n ] }) });\n }\n return /* @__PURE__ */ jsxs17(\"div\", { className: \"px-4 py-3 relative\", children: [\n fileError && /* @__PURE__ */ jsx23(\"div\", { className: \"apteva-file-error\", children: /* @__PURE__ */ jsxs17(\"div\", { className: \"apteva-file-error-content\", children: [\n /* @__PURE__ */ jsx23(\"svg\", { fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx23(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" }) }),\n /* @__PURE__ */ jsx23(\"span\", { children: fileError })\n ] }) }),\n transcriptFlash && /* @__PURE__ */ jsx23(\"div\", { className: \"apteva-transcript-flash\", children: /* @__PURE__ */ jsx23(\"span\", { children: transcriptFlash }) }),\n pendingFiles.length > 0 && !isRecording && /* @__PURE__ */ jsx23(\"div\", { className: \"apteva-file-preview\", children: pendingFiles.map((pf, index) => /* @__PURE__ */ jsxs17(\"div\", { className: \"apteva-file-item\", children: [\n pf.preview ? /* @__PURE__ */ jsx23(\"img\", { src: pf.preview, alt: pf.file.name, className: \"apteva-file-thumb\" }) : /* @__PURE__ */ jsx23(\"div\", { className: \"apteva-file-icon\", children: getFileIcon(pf.file.type) }),\n /* @__PURE__ */ jsxs17(\"div\", { className: \"apteva-file-info\", children: [\n /* @__PURE__ */ jsx23(\"span\", { className: \"apteva-file-name\", children: pf.file.name }),\n /* @__PURE__ */ jsx23(\"span\", { className: \"apteva-file-size\", children: formatFileSize(pf.file.size) })\n ] }),\n /* @__PURE__ */ jsx23(\n \"button\",\n {\n onClick: () => removeFile(index),\n className: \"apteva-file-remove\",\n title: \"Remove file\",\n children: /* @__PURE__ */ jsx23(\"svg\", { fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx23(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M6 18L18 6M6 6l12 12\" }) })\n }\n )\n ] }, index)) }),\n /* @__PURE__ */ jsxs17(\n \"div\",\n {\n className: \"apteva-composer\",\n style: {\n gridTemplateColumns: isRecording ? gridColsRecording : gridCols,\n gridTemplateAreas: isRecording ? '\"plus waveform stop\"' : gridAreas,\n alignItems: isRecording ? \"center\" : \"end\"\n },\n children: [\n /* @__PURE__ */ jsx23(\"div\", { className: \"relative flex-shrink-0\", style: { gridArea: \"plus\", alignSelf: isRecording ? \"center\" : \"end\" }, children: isRecording ? /* @__PURE__ */ jsx23(\"div\", { className: \"apteva-composer-rec-dot\", title: \"Recording...\", children: /* @__PURE__ */ jsx23(\"span\", {}) }) : /* @__PURE__ */ jsxs17(Fragment4, { children: [\n /* @__PURE__ */ jsx23(\n \"button\",\n {\n ref: menuButtonRef,\n onClick: () => setShowMenu(!showMenu),\n className: \"apteva-composer-menu-btn w-8 h-8 rounded-lg flex items-center justify-center transition-all\",\n title: \"More options\",\n children: /* @__PURE__ */ jsx23(\"svg\", { width: \"20\", height: \"20\", viewBox: \"0 0 20 20\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", children: /* @__PURE__ */ jsx23(\"path\", { d: \"M10 5v10M5 10h10\", stroke: \"currentColor\", strokeWidth: \"2\", strokeLinecap: \"round\", strokeLinejoin: \"round\" }) })\n }\n ),\n showMenu && /* @__PURE__ */ jsxs17(Fragment4, { children: [\n /* @__PURE__ */ jsx23(\"div\", { className: \"fixed inset-0 z-[9998]\", onClick: () => setShowMenu(false) }),\n /* @__PURE__ */ jsxs17(\n \"div\",\n {\n className: \"apteva-composer-menu fixed rounded-xl shadow-lg overflow-hidden z-[9999] min-w-[200px]\",\n style: {\n left: menuButtonRef.current?.getBoundingClientRect().left ?? 0,\n bottom: window.innerHeight - (menuButtonRef.current?.getBoundingClientRect().top ?? 0) + 8\n },\n children: [\n /* @__PURE__ */ jsxs17(\n \"button\",\n {\n onClick: () => {\n fileInputRef.current?.click();\n setShowMenu(false);\n },\n className: \"apteva-composer-menu-item w-full flex items-center gap-3 px-4 py-3 transition-colors text-left\",\n children: [\n /* @__PURE__ */ jsx23(\"svg\", { width: \"18\", height: \"18\", viewBox: \"0 0 20 20\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", children: /* @__PURE__ */ jsx23(\"path\", { d: \"M10.5 3.5L5.5 8.5C4.67157 9.32843 4.67157 10.6716 5.5 11.5C6.32843 12.3284 7.67157 12.3284 8.5 11.5L14.5 5.5C15.8807 4.11929 15.8807 1.88071 14.5 0.5C13.1193 -0.880711 10.8807 -0.880711 9.5 0.5L3.5 6.5C1.56846 8.43154 1.56846 11.5685 3.5 13.5C5.43154 15.4315 8.56846 15.4315 10.5 13.5L15.5 8.5\", stroke: \"currentColor\", strokeWidth: \"1.5\", strokeLinecap: \"round\", strokeLinejoin: \"round\", transform: \"translate(2, 3)\" }) }),\n /* @__PURE__ */ jsx23(\"span\", { className: \"!text-sm font-medium\", children: \"Add photos & files\" })\n ]\n }\n ),\n onSwitchMode && /* @__PURE__ */ jsxs17(\n \"button\",\n {\n onClick: () => {\n onSwitchMode();\n setShowMenu(false);\n },\n className: \"apteva-composer-menu-item w-full flex items-center gap-3 px-4 py-3 transition-colors text-left apteva-composer-menu-item-border\",\n children: [\n /* @__PURE__ */ jsx23(\"svg\", { className: \"w-4.5 h-4.5\", fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx23(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M13 10V3L4 14h7v7l9-11h-7z\" }) }),\n /* @__PURE__ */ jsx23(\"span\", { className: \"!text-sm font-medium\", children: \"Switch to command mode\" })\n ]\n }\n )\n ]\n }\n )\n ] })\n ] }) }),\n isRecording ? /* @__PURE__ */ jsxs17(Fragment4, { children: [\n /* @__PURE__ */ jsxs17(\"div\", { className: \"apteva-composer-waveform\", style: { gridArea: \"waveform\" }, children: [\n /* @__PURE__ */ jsx23(\n \"canvas\",\n {\n ref: canvasRef,\n className: \"apteva-composer-waveform-canvas\"\n }\n ),\n /* @__PURE__ */ jsx23(\"span\", { className: \"apteva-composer-recording-timer\", children: formatTime(recordingTime) })\n ] }),\n /* @__PURE__ */ jsx23(\"div\", { className: \"self-center\", style: { gridArea: \"stop\" }, children: /* @__PURE__ */ jsx23(\n \"button\",\n {\n onClick: () => stopRecording(false),\n className: \"apteva-composer-stop-btn\",\n title: \"Stop recording\",\n children: /* @__PURE__ */ jsx23(\"svg\", { width: \"14\", height: \"14\", viewBox: \"0 0 14 14\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", children: /* @__PURE__ */ jsx23(\"rect\", { x: \"2\", y: \"2\", width: \"10\", height: \"10\", rx: \"1\", fill: \"currentColor\" }) })\n }\n ) })\n ] }) : /* @__PURE__ */ jsxs17(Fragment4, { children: [\n /* @__PURE__ */ jsx23(\n \"textarea\",\n {\n ref: textareaRef,\n value: text,\n onChange: handleChange,\n onKeyDown: handleKeyDown,\n placeholder,\n className: \"apteva-composer-textarea resize-none bg-transparent border-none focus:outline-none !text-neutral-900 dark:!text-neutral-100 placeholder-neutral-400 dark:placeholder-neutral-500 py-1 overflow-y-auto max-h-[200px]\",\n style: { gridArea: \"textarea\" },\n rows: 1\n }\n ),\n sttSupported && /* @__PURE__ */ jsx23(\"div\", { className: \"self-end\", style: { gridArea: \"mic\" }, children: /* @__PURE__ */ jsx23(\n \"button\",\n {\n onClick: startRecording,\n disabled: disabled || isLoading,\n className: \"apteva-composer-mic-btn\",\n title: \"Voice input\",\n children: /* @__PURE__ */ jsxs17(\"svg\", { width: \"16\", height: \"16\", viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", children: [\n /* @__PURE__ */ jsx23(\"path\", { d: \"M12 1a3 3 0 00-3 3v8a3 3 0 006 0V4a3 3 0 00-3-3z\", fill: \"currentColor\" }),\n /* @__PURE__ */ jsx23(\"path\", { d: \"M19 10v2a7 7 0 01-14 0v-2\", stroke: \"currentColor\", strokeWidth: \"2\", strokeLinecap: \"round\", strokeLinejoin: \"round\" }),\n /* @__PURE__ */ jsx23(\"path\", { d: \"M12 19v4M8 23h8\", stroke: \"currentColor\", strokeWidth: \"2\", strokeLinecap: \"round\", strokeLinejoin: \"round\" })\n ] })\n }\n ) }),\n /* @__PURE__ */ jsx23(\"div\", { className: \"self-end\", style: { gridArea: \"send\" }, children: isLoading && onStop ? /* @__PURE__ */ jsx23(\n \"button\",\n {\n onClick: onStop,\n className: \"apteva-composer-stop-btn\",\n title: \"Stop generation\",\n children: /* @__PURE__ */ jsx23(\"svg\", { width: \"14\", height: \"14\", viewBox: \"0 0 14 14\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", children: /* @__PURE__ */ jsx23(\"rect\", { x: \"2\", y: \"2\", width: \"10\", height: \"10\", rx: \"1\", fill: \"currentColor\" }) })\n }\n ) : showMicButton ? /* @__PURE__ */ jsx23(\n \"button\",\n {\n onClick: onVoiceStart,\n className: \"apteva-composer-voice-btn w-8 h-8 rounded-lg flex items-center justify-center transition-all flex-shrink-0\",\n title: \"Start voice mode\",\n children: /* @__PURE__ */ jsxs17(\"svg\", { width: \"16\", height: \"16\", viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", children: [\n /* @__PURE__ */ jsx23(\"path\", { d: \"M12 1a3 3 0 00-3 3v8a3 3 0 006 0V4a3 3 0 00-3-3z\", fill: \"currentColor\" }),\n /* @__PURE__ */ jsx23(\"path\", { d: \"M19 10v2a7 7 0 01-14 0v-2\", stroke: \"currentColor\", strokeWidth: \"2\", strokeLinecap: \"round\", strokeLinejoin: \"round\" }),\n /* @__PURE__ */ jsx23(\"path\", { d: \"M12 19v4M8 23h8\", stroke: \"currentColor\", strokeWidth: \"2\", strokeLinecap: \"round\", strokeLinejoin: \"round\" })\n ] })\n }\n ) : /* @__PURE__ */ jsx23(\n \"button\",\n {\n onClick: handleSend,\n disabled: !text.trim() && pendingFiles.length === 0 || disabled,\n className: \"apteva-composer-send-btn w-8 h-8 rounded-lg flex items-center justify-center font-bold transition-all flex-shrink-0 border border-neutral-300 dark:border-neutral-600 bg-white dark:bg-neutral-800 !text-neutral-700 dark:!text-neutral-300 hover:bg-neutral-50 dark:hover:bg-neutral-700 disabled:opacity-30 disabled:cursor-not-allowed !text-lg\",\n title: \"Send message\",\n children: /* @__PURE__ */ jsx23(\"svg\", { width: \"16\", height: \"16\", viewBox: \"0 0 16 16\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", children: /* @__PURE__ */ jsx23(\"path\", { d: \"M8 3L8 13M8 3L4 7M8 3L12 7\", stroke: \"currentColor\", strokeWidth: \"2\", strokeLinecap: \"round\", strokeLinejoin: \"round\" }) })\n }\n ) })\n ] })\n ]\n }\n ),\n /* @__PURE__ */ jsx23(\n \"input\",\n {\n ref: fileInputRef,\n type: \"file\",\n multiple: true,\n onChange: handleFileSelect,\n className: \"hidden\",\n accept: \"image/*,application/pdf,.doc,.docx,.txt\"\n }\n )\n ] });\n}\n\n// src/components/Chat/CommandComposer.tsx\nimport { useState as useState7, useRef as useRef8 } from \"react\";\nimport { Fragment as Fragment5, jsx as jsx24, jsxs as jsxs18 } from \"react/jsx-runtime\";\nfunction CommandComposer({\n onExecute,\n state,\n response,\n error,\n plan,\n streamedContent,\n toolName,\n onApprove,\n onReject,\n onReset,\n onStop,\n onExpand,\n placeholder = \"Enter your command...\",\n disabled = false\n}) {\n const [input, setInput] = useState7(\"\");\n const [pendingFiles, setPendingFiles] = useState7([]);\n const [fileError, setFileError] = useState7(null);\n const [showMenu, setShowMenu] = useState7(false);\n const inputRef = useRef8(null);\n const fileInputRef = useRef8(null);\n const menuButtonRef = useRef8(null);\n const handleSubmit = () => {\n const hasText = input.trim();\n const hasFiles = pendingFiles.length > 0;\n if ((hasText || hasFiles) && !disabled && state === \"idle\") {\n const filesToSend = pendingFiles.map((pf) => pf.file);\n onExecute(input.trim(), filesToSend.length > 0 ? filesToSend : void 0);\n setInput(\"\");\n setPendingFiles([]);\n }\n };\n const handleKeyDown = (e) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n handleSubmit();\n }\n };\n const handleNewCommand = () => {\n onReset?.();\n inputRef.current?.focus();\n };\n const handleInputChange = (value) => {\n setInput(value);\n if (inputRef.current) {\n inputRef.current.style.height = \"auto\";\n inputRef.current.style.height = `${Math.min(inputRef.current.scrollHeight, 120)}px`;\n }\n };\n const handleFileSelect = (e) => {\n if (e.target.files && e.target.files.length > 0) {\n const files = Array.from(e.target.files);\n const validFiles = [];\n const errors = [];\n files.forEach((file) => {\n const validation = validateFile(file);\n if (validation.valid) {\n const pending = { file };\n if (file.type.startsWith(\"image/\")) {\n pending.preview = URL.createObjectURL(file);\n }\n validFiles.push(pending);\n } else {\n errors.push(validation.error || \"Invalid file\");\n }\n });\n if (validFiles.length > 0) {\n setPendingFiles((prev) => [...prev, ...validFiles]);\n }\n if (errors.length > 0) {\n setFileError(errors.join(\", \"));\n setTimeout(() => setFileError(null), 5e3);\n }\n setShowMenu(false);\n e.target.value = \"\";\n }\n };\n const removeFile = (index) => {\n setPendingFiles((prev) => {\n const file = prev[index];\n if (file.preview) {\n URL.revokeObjectURL(file.preview);\n }\n return prev.filter((_, i) => i !== index);\n });\n };\n const getFileIcon = (mimeType) => {\n if (mimeType.startsWith(\"image/\")) {\n return /* @__PURE__ */ jsx24(\"svg\", { className: \"w-4 h-4\", fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx24(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z\" }) });\n }\n if (mimeType === \"application/pdf\") {\n return /* @__PURE__ */ jsx24(\"svg\", { className: \"w-4 h-4\", fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx24(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z\" }) });\n }\n return /* @__PURE__ */ jsx24(\"svg\", { className: \"w-4 h-4\", fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx24(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\" }) });\n };\n const getDisplayContent = () => {\n if (state === \"loading\") {\n if (toolName) {\n return { text: toolName, isToolCall: true };\n }\n if (streamedContent) {\n return { text: streamedContent, isToolCall: false };\n }\n return { text: \"Processing...\", isToolCall: false };\n }\n if (state === \"success\" && response) {\n return { text: response, isToolCall: false };\n }\n if (state === \"error\" && error) {\n return { text: error, isToolCall: false };\n }\n if (state === \"plan-pending\" && plan) {\n return { text: plan, isToolCall: false };\n }\n return { text: \"\", isToolCall: false };\n };\n const isShowingResult = state !== \"idle\";\n const { text: displayContent, isToolCall } = getDisplayContent();\n return /* @__PURE__ */ jsxs18(\"div\", { className: \"w-full relative\", children: [\n fileError && /* @__PURE__ */ jsx24(\"div\", { className: \"apteva-file-error\", style: { top: \"-3rem\", bottom: \"auto\" }, children: /* @__PURE__ */ jsxs18(\"div\", { className: \"apteva-file-error-content\", children: [\n /* @__PURE__ */ jsx24(\"svg\", { fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx24(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" }) }),\n /* @__PURE__ */ jsx24(\"span\", { children: fileError })\n ] }) }),\n /* @__PURE__ */ jsxs18(\n \"div\",\n {\n className: cn(\n \"apteva-composer flex items-center gap-2 px-3 py-2 border-2 bg-white dark:bg-neutral-900 transition-all duration-200\",\n state === \"idle\" && \"border-neutral-200 dark:border-neutral-700\",\n state === \"loading\" && \"border-blue-400 dark:border-blue-500\",\n state === \"plan-pending\" && \"border-amber-400 dark:border-amber-500\",\n state === \"success\" && \"border-green-400 dark:border-green-500\",\n state === \"error\" && \"border-red-400 dark:border-red-500\"\n ),\n children: [\n /* @__PURE__ */ jsxs18(\"div\", { className: \"w-8 h-8 flex items-center justify-center flex-shrink-0\", children: [\n state === \"idle\" && /* @__PURE__ */ jsxs18(\"div\", { className: \"relative\", children: [\n /* @__PURE__ */ jsx24(\n \"button\",\n {\n ref: menuButtonRef,\n onClick: () => setShowMenu(!showMenu),\n className: \"apteva-composer-menu-btn w-8 h-8 rounded-lg flex items-center justify-center transition-all !text-neutral-500 dark:!text-neutral-400 hover:!text-neutral-700 dark:hover:!text-neutral-200 hover:bg-neutral-100 dark:hover:bg-neutral-800\",\n title: \"More options\",\n children: /* @__PURE__ */ jsx24(\"svg\", { width: \"18\", height: \"18\", viewBox: \"0 0 20 20\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", children: /* @__PURE__ */ jsx24(\"path\", { d: \"M10 5v10M5 10h10\", stroke: \"currentColor\", strokeWidth: \"2\", strokeLinecap: \"round\", strokeLinejoin: \"round\" }) })\n }\n ),\n showMenu && /* @__PURE__ */ jsxs18(Fragment5, { children: [\n /* @__PURE__ */ jsx24(\"div\", { className: \"fixed inset-0 z-[9998]\", onClick: () => setShowMenu(false) }),\n /* @__PURE__ */ jsxs18(\n \"div\",\n {\n className: \"apteva-composer-menu fixed bg-neutral-800 dark:bg-neutral-800 rounded-xl shadow-lg overflow-hidden z-[9999] min-w-[200px]\",\n style: {\n left: menuButtonRef.current?.getBoundingClientRect().left ?? 0,\n top: (menuButtonRef.current?.getBoundingClientRect().bottom ?? 0) + 8\n },\n children: [\n /* @__PURE__ */ jsxs18(\n \"button\",\n {\n onClick: () => {\n fileInputRef.current?.click();\n setShowMenu(false);\n },\n className: \"w-full flex items-center gap-3 px-4 py-3 hover:bg-neutral-700 dark:hover:bg-neutral-700 transition-colors !text-white text-left\",\n children: [\n /* @__PURE__ */ jsx24(\"svg\", { width: \"18\", height: \"18\", viewBox: \"0 0 20 20\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", children: /* @__PURE__ */ jsx24(\"path\", { d: \"M10.5 3.5L5.5 8.5C4.67157 9.32843 4.67157 10.6716 5.5 11.5C6.32843 12.3284 7.67157 12.3284 8.5 11.5L14.5 5.5C15.8807 4.11929 15.8807 1.88071 14.5 0.5C13.1193 -0.880711 10.8807 -0.880711 9.5 0.5L3.5 6.5C1.56846 8.43154 1.56846 11.5685 3.5 13.5C5.43154 15.4315 8.56846 15.4315 10.5 13.5L15.5 8.5\", stroke: \"currentColor\", strokeWidth: \"1.5\", strokeLinecap: \"round\", strokeLinejoin: \"round\", transform: \"translate(2, 3)\" }) }),\n /* @__PURE__ */ jsx24(\"span\", { className: \"!text-sm font-medium\", children: \"Add photos & files\" })\n ]\n }\n ),\n onExpand && /* @__PURE__ */ jsxs18(\n \"button\",\n {\n onClick: () => {\n onExpand();\n setShowMenu(false);\n },\n className: \"w-full flex items-center gap-3 px-4 py-3 hover:bg-neutral-700 dark:hover:bg-neutral-700 transition-colors !text-white text-left border-t border-neutral-700 dark:border-neutral-700\",\n children: [\n /* @__PURE__ */ jsx24(\"svg\", { className: \"w-4.5 h-4.5\", fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx24(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z\" }) }),\n /* @__PURE__ */ jsx24(\"span\", { className: \"!text-sm font-medium\", children: \"Expand to chat\" })\n ]\n }\n )\n ]\n }\n )\n ] })\n ] }),\n state === \"loading\" && !toolName && /* @__PURE__ */ jsx24(\"div\", { className: \"w-4 h-4 border-2 border-blue-200 border-t-blue-500 rounded-full animate-spin\" }),\n state === \"loading\" && toolName && /* @__PURE__ */ jsx24(\"div\", { className: \"w-2 h-2 rounded-full bg-blue-500 animate-pulse\" })\n ] }),\n pendingFiles.length > 0 && state === \"idle\" && /* @__PURE__ */ jsx24(\"div\", { className: \"apteva-file-badges\", children: pendingFiles.map((pf, index) => /* @__PURE__ */ jsxs18(\"div\", { className: \"apteva-file-badge\", title: pf.file.name, children: [\n pf.preview ? /* @__PURE__ */ jsx24(\"img\", { src: pf.preview, alt: pf.file.name, className: \"apteva-file-badge-img\" }) : /* @__PURE__ */ jsx24(\"span\", { className: \"apteva-file-badge-icon\", children: getFileIcon(pf.file.type) }),\n /* @__PURE__ */ jsx24(\n \"button\",\n {\n onClick: () => removeFile(index),\n className: \"apteva-file-badge-remove\",\n title: \"Remove\",\n children: /* @__PURE__ */ jsx24(\"svg\", { fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx24(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M6 18L18 6M6 6l12 12\" }) })\n }\n )\n ] }, index)) }),\n state === \"idle\" ? /* @__PURE__ */ jsx24(\n \"textarea\",\n {\n ref: inputRef,\n value: input,\n onChange: (e) => handleInputChange(e.target.value),\n onKeyDown: handleKeyDown,\n placeholder: pendingFiles.length > 0 ? \"Add a message...\" : placeholder,\n disabled,\n rows: 1,\n className: cn(\n \"flex-1 resize-none bg-transparent border-none focus:outline-none\",\n \"!text-neutral-900 dark:!text-neutral-100 placeholder-neutral-400 dark:placeholder-neutral-500\",\n \"text-sm leading-relaxed py-1\",\n \"disabled:opacity-50\"\n ),\n style: { minHeight: \"24px\", maxHeight: \"120px\" }\n }\n ) : /* @__PURE__ */ jsx24(\n \"div\",\n {\n className: cn(\n \"flex-1 text-sm py-1 truncate flex items-center gap-2\",\n state === \"loading\" && !isToolCall && \"!text-neutral-600 dark:!text-neutral-400\",\n state === \"loading\" && isToolCall && \"!text-blue-600 dark:!text-blue-400\",\n state === \"success\" && \"!text-neutral-900 dark:!text-neutral-100\",\n state === \"error\" && \"!text-red-600 dark:!text-red-400\",\n state === \"plan-pending\" && \"!text-amber-700 dark:!text-amber-300\"\n ),\n children: isToolCall ? /* @__PURE__ */ jsxs18(Fragment5, { children: [\n /* @__PURE__ */ jsx24(\"span\", { className: \"font-mono\", children: displayContent }),\n /* @__PURE__ */ jsx24(\"span\", { className: \"text-neutral-400 dark:text-neutral-500\", children: \"Running...\" })\n ] }) : displayContent\n }\n ),\n /* @__PURE__ */ jsx24(\"div\", { className: \"w-8 h-8 flex items-center justify-center flex-shrink-0\", children: state === \"plan-pending\" ? /* @__PURE__ */ jsxs18(\"div\", { className: \"flex items-center gap-1\", children: [\n /* @__PURE__ */ jsx24(\n \"button\",\n {\n onClick: onApprove,\n className: \"px-2 py-1 bg-amber-500 text-white rounded-lg hover:bg-amber-600 transition-colors text-xs font-medium\",\n children: \"Approve\"\n }\n ),\n /* @__PURE__ */ jsx24(\n \"button\",\n {\n onClick: onReject,\n className: \"px-2 py-1 bg-neutral-200 dark:bg-neutral-700 text-neutral-700 dark:text-neutral-300 rounded-lg hover:bg-neutral-300 dark:hover:bg-neutral-600 transition-colors text-xs font-medium\",\n children: \"Modify\"\n }\n )\n ] }) : /* @__PURE__ */ jsxs18(Fragment5, { children: [\n state === \"loading\" && onStop && /* @__PURE__ */ jsx24(\n \"button\",\n {\n onClick: onStop,\n className: \"apteva-composer-stop-btn\",\n title: \"Stop generation\",\n children: /* @__PURE__ */ jsx24(\"svg\", { width: \"14\", height: \"14\", viewBox: \"0 0 14 14\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", children: /* @__PURE__ */ jsx24(\"rect\", { x: \"2\", y: \"2\", width: \"10\", height: \"10\", rx: \"1\", fill: \"currentColor\" }) })\n }\n ),\n (state === \"success\" || state === \"error\") && /* @__PURE__ */ jsx24(\n \"button\",\n {\n onClick: handleNewCommand,\n className: \"w-8 h-8 rounded-lg flex items-center justify-center !text-neutral-400 hover:!text-neutral-600 dark:hover:!text-neutral-300 hover:bg-neutral-100 dark:hover:bg-neutral-800 transition-colors\",\n title: \"New command\",\n children: /* @__PURE__ */ jsx24(\"svg\", { className: \"w-4 h-4\", fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx24(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M6 18L18 6M6 6l12 12\" }) })\n }\n ),\n state === \"idle\" && /* @__PURE__ */ jsx24(\n \"button\",\n {\n onClick: handleSubmit,\n disabled: !input.trim() && pendingFiles.length === 0 || disabled,\n className: cn(\n \"apteva-composer-send-btn w-8 h-8 rounded-lg flex items-center justify-center transition-all\",\n \"border border-neutral-200 dark:border-neutral-700\",\n \"disabled:opacity-30 disabled:cursor-not-allowed\",\n input.trim() || pendingFiles.length > 0 ? \"bg-neutral-900 dark:bg-white !text-white dark:!text-neutral-900 border-neutral-900 dark:border-white\" : \"bg-white dark:bg-neutral-800 !text-neutral-400\"\n ),\n title: \"Execute command\",\n children: /* @__PURE__ */ jsx24(\"svg\", { className: \"w-4 h-4\", fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx24(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M5 12h14M12 5l7 7-7 7\" }) })\n }\n )\n ] }) })\n ]\n }\n ),\n /* @__PURE__ */ jsx24(\n \"input\",\n {\n ref: fileInputRef,\n type: \"file\",\n multiple: true,\n onChange: handleFileSelect,\n className: \"hidden\",\n accept: \"image/*,application/pdf,.doc,.docx,.txt\"\n }\n )\n ] });\n}\n\n// src/lib/apteva-client.ts\nvar AptevaClient = class {\n constructor(config) {\n __publicField(this, \"config\");\n this.config = {\n apiUrl: config?.apiUrl ?? \"\",\n apiKey: config?.apiKey ?? \"\"\n };\n }\n /**\n * Update client configuration (optional - users can override defaults)\n */\n configure(config) {\n if (config.apiUrl !== void 0) this.config.apiUrl = config.apiUrl;\n if (config.apiKey !== void 0) this.config.apiKey = config.apiKey;\n }\n /**\n * Get current configuration\n */\n getConfig() {\n return { ...this.config };\n }\n /**\n * Send a chat message to an agent\n */\n async chat(request) {\n try {\n console.log(\"[AptevaClient] Chat request:\", {\n agent_id: request.agent_id,\n message: typeof request.message === \"string\" ? request.message.substring(0, 100) + \"...\" : \"[multi-part message]\",\n system: request.system,\n stream: request.stream\n });\n const response = await fetch(`${this.config.apiUrl}/chat`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-API-Key\": this.config.apiKey\n },\n body: JSON.stringify(request)\n });\n if (!response.ok) {\n const error = await response.json().catch(() => ({ error: \"Request failed\" }));\n throw new Error(error.error || `Request failed with status ${response.status}`);\n }\n const data = await response.json();\n return {\n message: data.response || data.message || \"\",\n thread_id: data.thread_id,\n widgets: data.widgets\n };\n } catch (error) {\n console.error(\"Chat API error:\", error);\n throw error;\n }\n }\n /**\n * Send a chat message with streaming response\n */\n async chatStream(request, onChunk, onComplete, onError) {\n try {\n console.log(\"[AptevaClient] Chat stream request:\", {\n agent_id: request.agent_id,\n message: typeof request.message === \"string\" ? request.message.substring(0, 100) + \"...\" : \"[multi-part message]\",\n system: request.system,\n stream: request.stream\n });\n const response = await fetch(`${this.config.apiUrl}/chat`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-API-Key\": this.config.apiKey,\n \"Accept\": \"text/event-stream\"\n },\n body: JSON.stringify({\n ...request,\n stream: true\n })\n });\n if (!response.ok) {\n const error = await response.json().catch(() => ({ error: \"Request failed\" }));\n throw new Error(error.error || `Request failed with status ${response.status}`);\n }\n const reader = response.body?.getReader();\n if (!reader) {\n throw new Error(\"Response body is not readable\");\n }\n const decoder = new TextDecoder();\n let buffer = \"\";\n let threadId = \"\";\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() || \"\";\n for (const line of lines) {\n if (!line.trim() || line.startsWith(\":\")) continue;\n if (line.startsWith(\"data: \")) {\n const data = line.slice(6);\n if (data === \"[DONE]\") {\n onComplete?.(threadId);\n return;\n }\n try {\n const chunk = JSON.parse(data);\n if (chunk.thread_id) {\n threadId = chunk.thread_id;\n }\n onChunk(chunk);\n } catch (e) {\n console.warn(\"[AptevaClient] Failed to parse SSE data:\", data);\n }\n }\n }\n }\n onComplete?.(threadId);\n } catch (error) {\n const err = error instanceof Error ? error : new Error(\"Unknown error\");\n onError?.(err);\n throw err;\n }\n }\n /**\n * Create a new thread\n */\n async createThread(agentId, metadata) {\n const response = await fetch(`${this.config.apiUrl}/agents/${agentId}/threads`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-API-Key\": this.config.apiKey\n },\n body: JSON.stringify({ metadata })\n });\n if (!response.ok) {\n const error = await response.json().catch(() => ({ error: \"Request failed\" }));\n throw new Error(error.error || `Request failed with status ${response.status}`);\n }\n const data = await response.json();\n return data.thread_id;\n }\n /**\n * Get thread messages\n */\n async getThreadMessages(threadId) {\n const response = await fetch(`${this.config.apiUrl}/threads/${threadId}/messages`, {\n method: \"GET\",\n headers: {\n \"X-API-Key\": this.config.apiKey\n }\n });\n if (!response.ok) {\n const error = await response.json().catch(() => ({ error: \"Request failed\" }));\n throw new Error(error.error || `Request failed with status ${response.status}`);\n }\n const data = await response.json();\n return data.messages;\n }\n /**\n * Cancel an in-progress request\n */\n async cancelRequest(agentId, requestId) {\n try {\n const response = await fetch(`${this.config.apiUrl}/agents/${agentId}/requests/${requestId}/cancel`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-API-Key\": this.config.apiKey\n }\n });\n if (!response.ok) {\n const error = await response.json().catch(() => ({ error: \"Cancel request failed\" }));\n throw new Error(error.error || `Cancel request failed with status ${response.status}`);\n }\n } catch (error) {\n console.error(\"[AptevaClient] Cancel request error:\", error);\n throw error;\n }\n }\n};\nvar aptevaClient = new AptevaClient();\n\n// src/components/Chat/PersistentWidgetPanel.tsx\nimport { useState as useState8 } from \"react\";\nimport { jsx as jsx25, jsxs as jsxs19 } from \"react/jsx-runtime\";\nfunction PersistentWidgetPanel({ widgets, onAction }) {\n const [collapsed, setCollapsed] = useState8(false);\n if (widgets.length === 0) return null;\n return /* @__PURE__ */ jsxs19(\"div\", { className: \"apteva-persistent-panel border-b border-neutral-200 dark:border-neutral-700 bg-neutral-50 dark:bg-neutral-900\", children: [\n /* @__PURE__ */ jsxs19(\"div\", { className: \"flex items-center justify-between px-3 py-1.5\", children: [\n /* @__PURE__ */ jsxs19(\"div\", { className: \"flex items-center gap-2\", children: [\n /* @__PURE__ */ jsx25(\"div\", { className: \"w-1.5 h-1.5 rounded-full bg-emerald-500 animate-pulse\" }),\n /* @__PURE__ */ jsx25(\"span\", { className: \"text-xs font-medium text-neutral-500 dark:text-neutral-400 uppercase tracking-wider\", children: \"Live\" })\n ] }),\n /* @__PURE__ */ jsx25(\n \"button\",\n {\n onClick: () => setCollapsed((c) => !c),\n className: \"p-1 rounded text-neutral-400 hover:text-neutral-600 dark:hover:text-neutral-300 hover:bg-neutral-200 dark:hover:bg-neutral-700 transition-colors\",\n children: /* @__PURE__ */ jsx25(\n \"svg\",\n {\n className: cn(\"w-3.5 h-3.5 transition-transform\", collapsed && \"rotate-180\"),\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n children: /* @__PURE__ */ jsx25(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", d: \"M19 9l-7 7-7-7\" })\n }\n )\n }\n )\n ] }),\n !collapsed && /* @__PURE__ */ jsx25(\"div\", { className: \"px-3 pb-3 flex flex-col gap-3\", children: widgets.map((widget) => /* @__PURE__ */ jsx25(WidgetRenderer, { widget, onAction }, widget.id)) })\n ] });\n}\n\n// src/hooks/useVoiceSession.ts\nimport { useState as useState9, useRef as useRef9, useCallback as useCallback4, useEffect as useEffect9 } from \"react\";\n\n// src/utils/audio-utils.ts\nfunction float32ToInt16(float32Array) {\n const int16Array = new Int16Array(float32Array.length);\n for (let i = 0; i < float32Array.length; i++) {\n const s = Math.max(-1, Math.min(1, float32Array[i]));\n int16Array[i] = s < 0 ? s * 32768 : s * 32767;\n }\n return int16Array;\n}\nfunction int16ToBase64(int16Array) {\n const uint8Array = new Uint8Array(int16Array.buffer);\n let binary = \"\";\n for (let i = 0; i < uint8Array.length; i++) {\n binary += String.fromCharCode(uint8Array[i]);\n }\n return btoa(binary);\n}\nfunction base64ToFloat32(base64) {\n const binaryString = atob(base64);\n const int16Array = new Int16Array(binaryString.length / 2);\n for (let i = 0; i < int16Array.length; i++) {\n int16Array[i] = binaryString.charCodeAt(i * 2 + 1) << 8 | binaryString.charCodeAt(i * 2);\n }\n const float32Array = new Float32Array(int16Array.length);\n for (let i = 0; i < int16Array.length; i++) {\n float32Array[i] = int16Array[i] / (int16Array[i] < 0 ? 32768 : 32767);\n }\n return float32Array;\n}\nfunction resampleAudio(inputData, inputSampleRate, outputSampleRate) {\n if (inputSampleRate === outputSampleRate) {\n return inputData;\n }\n const ratio = inputSampleRate / outputSampleRate;\n const outputLength = Math.floor(inputData.length / ratio);\n const output = new Float32Array(outputLength);\n for (let i = 0; i < outputLength; i++) {\n const srcIndex = i * ratio;\n const srcIndexFloor = Math.floor(srcIndex);\n const srcIndexCeil = Math.min(srcIndexFloor + 1, inputData.length - 1);\n const t = srcIndex - srcIndexFloor;\n output[i] = inputData[srcIndexFloor] * (1 - t) + inputData[srcIndexCeil] * t;\n }\n return output;\n}\n\n// src/hooks/useVoiceSession.ts\nfunction useVoiceSession(config) {\n const [state, setState] = useState9(\"idle\");\n const [partialTranscript, setPartialTranscript] = useState9(\"\");\n const [duration, setDuration] = useState9(0);\n const wsRef = useRef9(null);\n const captureCtxRef = useRef9(null);\n const playbackCtxRef = useRef9(null);\n const mediaStreamRef = useRef9(null);\n const processorRef = useRef9(null);\n const nextPlayTimeRef = useRef9(0);\n const durationIntervalRef = useRef9(null);\n const startTimeRef = useRef9(0);\n const configRef = useRef9(config);\n configRef.current = config;\n const cleanup = useCallback4(() => {\n if (durationIntervalRef.current) {\n clearInterval(durationIntervalRef.current);\n durationIntervalRef.current = null;\n }\n if (processorRef.current) {\n processorRef.current.disconnect();\n processorRef.current = null;\n }\n if (mediaStreamRef.current) {\n mediaStreamRef.current.getTracks().forEach((t) => t.stop());\n mediaStreamRef.current = null;\n }\n if (captureCtxRef.current) {\n try {\n captureCtxRef.current.close();\n } catch (_) {\n }\n captureCtxRef.current = null;\n }\n if (playbackCtxRef.current) {\n try {\n playbackCtxRef.current.close();\n } catch (_) {\n }\n playbackCtxRef.current = null;\n }\n if (wsRef.current) {\n try {\n wsRef.current.close();\n } catch (_) {\n }\n wsRef.current = null;\n }\n nextPlayTimeRef.current = 0;\n setPartialTranscript(\"\");\n setDuration(0);\n }, []);\n useEffect9(() => {\n return () => {\n cleanup();\n };\n }, [cleanup]);\n const playAudioChunk = useCallback4((base64Audio) => {\n if (!playbackCtxRef.current) {\n playbackCtxRef.current = new AudioContext({ sampleRate: 24e3 });\n }\n const ctx = playbackCtxRef.current;\n if (ctx.state === \"suspended\") {\n ctx.resume();\n }\n const float32Data = base64ToFloat32(base64Audio);\n const audioBuffer = ctx.createBuffer(1, float32Data.length, 24e3);\n audioBuffer.getChannelData(0).set(float32Data);\n const source = ctx.createBufferSource();\n source.buffer = audioBuffer;\n source.connect(ctx.destination);\n const currentTime = ctx.currentTime;\n const startTime = Math.max(currentTime, nextPlayTimeRef.current);\n source.start(startTime);\n nextPlayTimeRef.current = startTime + audioBuffer.duration;\n }, []);\n const handleMessage = useCallback4((msg) => {\n const cfg = configRef.current;\n switch (msg.type) {\n case \"session_created\":\n setState(\"active\");\n startTimeRef.current = Date.now();\n durationIntervalRef.current = setInterval(() => {\n setDuration(Math.floor((Date.now() - startTimeRef.current) / 1e3));\n }, 1e3);\n break;\n case \"audio_delta\":\n if (msg.data?.chunk) {\n playAudioChunk(msg.data.chunk);\n }\n break;\n case \"transcript\":\n if (msg.data) {\n if (msg.data.partial) {\n setPartialTranscript(msg.data.content);\n } else {\n setPartialTranscript(\"\");\n cfg.onTranscript?.({\n id: `vt-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`,\n role: msg.data.role,\n content: msg.data.content,\n partial: false,\n timestamp: /* @__PURE__ */ new Date()\n });\n }\n }\n break;\n case \"tool_call\":\n if (msg.data) {\n nextPlayTimeRef.current = 0;\n cfg.onTranscript?.({\n id: `vt-tool-${Date.now()}`,\n role: \"system\",\n content: `Using ${msg.data.name}...`,\n partial: false,\n timestamp: /* @__PURE__ */ new Date()\n });\n }\n break;\n case \"tool_result\":\n if (msg.data) {\n nextPlayTimeRef.current = 0;\n }\n break;\n case \"error\":\n setState(\"error\");\n cfg.onError?.(new Error(msg.data?.message || \"Voice session error\"));\n break;\n }\n }, [playAudioChunk]);\n const startCapture = useCallback4(async () => {\n const ws = wsRef.current;\n if (!ws) return;\n try {\n captureCtxRef.current = new AudioContext();\n const nativeSampleRate = captureCtxRef.current.sampleRate;\n mediaStreamRef.current = await navigator.mediaDevices.getUserMedia({ audio: true });\n const source = captureCtxRef.current.createMediaStreamSource(mediaStreamRef.current);\n processorRef.current = captureCtxRef.current.createScriptProcessor(2048, 1, 1);\n processorRef.current.onaudioprocess = (e) => {\n if (!ws || ws.readyState !== WebSocket.OPEN) return;\n const inputData = e.inputBuffer.getChannelData(0);\n const resampledData = resampleAudio(inputData, nativeSampleRate, 16e3);\n const int16Data = float32ToInt16(resampledData);\n const base64Data = int16ToBase64(int16Data);\n ws.send(JSON.stringify({\n type: \"audio\",\n data: { chunk: base64Data }\n }));\n };\n source.connect(processorRef.current);\n processorRef.current.connect(captureCtxRef.current.destination);\n } catch (e) {\n configRef.current.onError?.(new Error(\"Microphone access denied\"));\n cleanup();\n setState(\"idle\");\n }\n }, [cleanup]);\n const start = useCallback4(() => {\n if (state !== \"idle\") return;\n setState(\"connecting\");\n const protocol = window.location.protocol === \"https:\" ? \"wss:\" : \"ws:\";\n const wsUrl = `${protocol}//${window.location.host}${config.apiUrl}/voice`;\n const ws = new WebSocket(wsUrl);\n wsRef.current = ws;\n ws.onopen = () => {\n const provider = configRef.current.provider || \"openai\";\n const voice = configRef.current.voice || \"ash\";\n ws.send(JSON.stringify({\n type: \"start\",\n data: { provider, voice }\n }));\n startCapture();\n };\n ws.onmessage = (event) => {\n try {\n const msg = JSON.parse(event.data);\n handleMessage(msg);\n } catch (_) {\n }\n };\n ws.onerror = () => {\n setState(\"error\");\n configRef.current.onError?.(new Error(\"WebSocket connection failed\"));\n };\n ws.onclose = () => {\n cleanup();\n setState(\"idle\");\n };\n }, [state, config.apiUrl, startCapture, handleMessage, cleanup]);\n const stop = useCallback4(() => {\n cleanup();\n setState(\"idle\");\n }, [cleanup]);\n const sendText = useCallback4((text) => {\n const ws = wsRef.current;\n if (!ws || ws.readyState !== WebSocket.OPEN) return;\n ws.send(JSON.stringify({\n type: \"text\",\n data: { content: text }\n }));\n }, []);\n return { state, partialTranscript, duration, start, stop, sendText };\n}\n\n// src/components/Chat/Chat.tsx\nimport { Fragment as Fragment6, jsx as jsx26, jsxs as jsxs20 } from \"react/jsx-runtime\";\nvar Chat = forwardRef(function Chat2({\n agentId,\n threadId,\n initialMessages = [],\n context,\n apiUrl,\n apiKey,\n useMock = false,\n // Mode switching\n initialMode = \"chat\",\n showModeToggle = false,\n onModeChange,\n // Command mode options\n commandVariant = \"default\",\n planMode = false,\n onPlanModeChange,\n enableStreaming = true,\n showProgress = true,\n loadingText = \"Processing...\",\n // Welcome screen\n welcomeTitle,\n welcomeSubtitle,\n welcomeIcon,\n suggestedPrompts,\n welcomeVariant,\n // Events\n onThreadChange,\n onMessageSent,\n onAction,\n onFileUpload,\n onComplete,\n onError,\n onToolCall,\n onToolResult,\n // UI\n variant = \"default\",\n theme,\n placeholder,\n showHeader = true,\n headerTitle = \"Chat\",\n onHeaderBack,\n // Tool call display\n toolCallStyle = \"card\",\n // Widget detection\n enableWidgets = false,\n availableWidgets,\n compactWidgetContext = false,\n onWidgetRender,\n // Speech to text\n speechToText,\n // Realtime voice\n enableVoice = false,\n voiceProvider,\n voiceId,\n className\n}, ref) {\n const [messages, setMessages] = useState10(initialMessages);\n const [isLoading, setIsLoading] = useState10(false);\n const [currentThreadId, setCurrentThreadId] = useState10(threadId || null);\n const [mode, setMode] = useState10(initialMode);\n const [chatToolName, setChatToolName] = useState10(null);\n const [commandState, setCommandState] = useState10(\"idle\");\n const [commandResult, setCommandResult] = useState10(null);\n const [commandError, setCommandError] = useState10(null);\n const [progress, setProgress] = useState10(0);\n const [commandInput, setCommandInput] = useState10(\"\");\n const [streamedContent, setStreamedContent] = useState10(\"\");\n const [currentToolName, setCurrentToolName] = useState10(null);\n const [currentRequestId, setCurrentRequestId] = useState10(null);\n const [plan, setPlan] = useState10(\"\");\n const [pendingCommand, setPendingCommand] = useState10(\"\");\n const [internalPlanMode, setInternalPlanMode] = useState10(planMode);\n const [showSettingsMenu, setShowSettingsMenu] = useState10(false);\n const fileInputRef = useRef10(null);\n const handleVoiceTranscript = useCallback5((entry) => {\n const msg = {\n id: entry.id,\n role: entry.role === \"system\" ? \"assistant\" : entry.role,\n content: entry.content,\n timestamp: entry.timestamp,\n metadata: entry.role === \"system\" ? { isVoiceSystem: true } : { isVoice: true }\n };\n setMessages((prev) => [...prev, msg]);\n }, []);\n const voice = useVoiceSession({\n apiUrl: apiUrl || \"\",\n provider: voiceProvider,\n voice: voiceId,\n onTranscript: handleVoiceTranscript,\n onError\n });\n const [persistentWidgets, setPersistentWidgets] = useState10(/* @__PURE__ */ new Map());\n const updatePersistentWidgets = useCallback5((msgs) => {\n setPersistentWidgets((prev) => {\n const next = new Map(prev);\n let changed = false;\n for (const msg of msgs) {\n if (!msg.widgets) continue;\n for (const w of msg.widgets) {\n if (!w.persistent) continue;\n const existing = next.get(w.id);\n if (!existing || existing !== w) {\n next.set(w.id, w);\n changed = true;\n }\n }\n }\n return changed ? next : prev;\n });\n }, []);\n useEffect10(() => {\n updatePersistentWidgets(messages);\n }, [messages, updatePersistentWidgets]);\n const persistentWidgetList = useMemo2(() => Array.from(persistentWidgets.values()), [persistentWidgets]);\n const persistentWidgetIds = useMemo2(() => new Set(persistentWidgets.keys()), [persistentWidgets]);\n const handleSendMessageRef = useRef10(null);\n useImperativeHandle(ref, () => ({\n sendMessage: async (text) => {\n if (handleSendMessageRef.current) {\n await handleSendMessageRef.current(text);\n }\n },\n sendSystemMessage: async (text) => {\n if (handleSendMessageRef.current) {\n await handleSendMessageRef.current(text, void 0, true);\n }\n },\n getMessages: () => messages,\n clearMessages: () => setMessages([])\n }), [messages]);\n const effectiveContext = useMemo2(() => {\n if (!enableWidgets) return context;\n const widgetContext = compactWidgetContext ? generateCompactWidgetContext(availableWidgets) : generateWidgetContext(availableWidgets);\n return context ? `${context}\n${widgetContext}` : widgetContext;\n }, [context, enableWidgets, availableWidgets, compactWidgetContext]);\n useEffect10(() => {\n if (apiUrl || apiKey) {\n aptevaClient.configure({\n ...apiUrl && { apiUrl },\n ...apiKey && { apiKey }\n });\n }\n }, [apiUrl, apiKey]);\n useEffect10(() => {\n if (threadId) {\n onThreadChange?.(threadId);\n }\n }, [threadId, onThreadChange]);\n useEffect10(() => {\n setInternalPlanMode(planMode);\n }, [planMode]);\n useEffect10(() => {\n const handleClickOutside = (event) => {\n const target = event.target;\n if (showSettingsMenu && !target.closest(\".settings-menu-container\")) {\n setShowSettingsMenu(false);\n }\n };\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, [showSettingsMenu]);\n const handleModeChange = (newMode) => {\n setMode(newMode);\n onModeChange?.(newMode);\n if (newMode === \"command\") {\n setCommandState(\"idle\");\n setCommandResult(null);\n setCommandError(null);\n }\n };\n const defaultPlaceholder = mode === \"chat\" ? \"Type a message...\" : \"Enter your command...\";\n const handleWidgetAction = useCallback5((action) => {\n onAction?.(action);\n if (action.type === \"submit\" && action.payload?.formData) {\n const formData = action.payload.formData;\n const lines = [];\n for (const [key, value] of Object.entries(formData)) {\n if (Array.isArray(value) && value.length > 0 && value[0] instanceof File) {\n const fileNames = value.map((f) => f.name).join(\", \");\n lines.push(`${key}: ${fileNames}`);\n } else if (value !== \"\" && value !== false && value != null) {\n lines.push(`${key}: ${value}`);\n }\n }\n if (lines.length > 0 && handleSendMessageRef.current) {\n const files = [];\n for (const value of Object.values(formData)) {\n if (Array.isArray(value) && value.length > 0 && value[0] instanceof File) {\n files.push(...value);\n }\n }\n handleSendMessageRef.current(lines.join(\"\\n\"), files.length > 0 ? files : void 0);\n }\n }\n }, [onAction]);\n const handleSendMessage = async (text, files, isSystem) => {\n const hasFiles = files && files.length > 0;\n const attachments = hasFiles ? files.map((f) => ({\n name: f.name,\n type: f.type,\n size: f.size,\n preview: f.type.startsWith(\"image/\") ? URL.createObjectURL(f) : void 0\n })) : [];\n if (!isSystem) {\n const userMessage = {\n id: `msg-${Date.now()}`,\n role: \"user\",\n content: text,\n timestamp: /* @__PURE__ */ new Date(),\n metadata: hasFiles ? { attachments } : void 0\n };\n setMessages((prev) => [...prev, userMessage]);\n onMessageSent?.(userMessage);\n }\n setIsLoading(true);\n try {\n const messagePayload = await buildMessageWithAttachments(text, files);\n if (useMock) {\n const response = await generateMockResponse(1e3);\n setMessages((prev) => [...prev, response]);\n } else {\n let contentSegments = [];\n let currentTextBuffer = \"\";\n let accumulatedWidgets = [];\n let responseThreadId = currentThreadId;\n const toolInputBuffers = {};\n const receivingTimeouts = {};\n const streamingMessageId = `msg-${Date.now()}-res`;\n const updateMessage = () => {\n const segments = [...contentSegments];\n if (currentTextBuffer) {\n const lastSegment = segments[segments.length - 1];\n if (lastSegment && lastSegment.type === \"text\") {\n lastSegment.content = currentTextBuffer;\n } else {\n segments.push({ type: \"text\", content: currentTextBuffer });\n }\n }\n setMessages((prev) => {\n const lastMessage = prev[prev.length - 1];\n if (lastMessage && lastMessage.role === \"assistant\") {\n return [\n ...prev.slice(0, -1),\n {\n ...lastMessage,\n content: currentTextBuffer,\n widgets: accumulatedWidgets.length > 0 ? accumulatedWidgets : void 0,\n metadata: { ...lastMessage.metadata, content_segments: segments, isStreaming: true }\n }\n ];\n } else {\n return [\n ...prev,\n {\n id: streamingMessageId,\n role: \"assistant\",\n content: currentTextBuffer,\n widgets: accumulatedWidgets.length > 0 ? accumulatedWidgets : void 0,\n timestamp: /* @__PURE__ */ new Date(),\n metadata: { content_segments: segments, isStreaming: true }\n }\n ];\n }\n });\n };\n await aptevaClient.chatStream(\n {\n agent_id: agentId,\n message: messagePayload,\n stream: true,\n ...currentThreadId && { thread_id: currentThreadId },\n ...effectiveContext && { system: effectiveContext }\n },\n (chunk) => {\n switch (chunk.type) {\n case \"thread_id\":\n if (chunk.thread_id) {\n responseThreadId = chunk.thread_id;\n if (!currentThreadId) {\n setCurrentThreadId(chunk.thread_id);\n onThreadChange?.(chunk.thread_id);\n }\n }\n break;\n case \"request_id\":\n if (chunk.request_id) {\n setCurrentRequestId(chunk.request_id);\n }\n break;\n case \"content\":\n case \"token\":\n if (chunk.content) {\n if (!currentTextBuffer) {\n currentTextBuffer = chunk.content.trimStart();\n } else {\n currentTextBuffer += chunk.content;\n }\n if (currentTextBuffer) {\n updateMessage();\n }\n }\n break;\n case \"tool_call\":\n if (chunk.tool_id && chunk.tool_name) {\n const displayName = chunk.tool_display_name || chunk.tool_name;\n if (currentTextBuffer) {\n contentSegments.push({ type: \"text\", content: currentTextBuffer.trimEnd() });\n currentTextBuffer = \"\";\n }\n contentSegments.push({ type: \"tool\", id: chunk.tool_id, name: displayName, status: \"preparing\" });\n toolInputBuffers[chunk.tool_id] = \"\";\n setChatToolName(displayName);\n onToolCall?.(chunk.tool_name, chunk.tool_id);\n updateMessage();\n }\n break;\n case \"tool_input_delta\":\n if (chunk.tool_id && chunk.content) {\n const toolId = chunk.tool_id;\n if (toolInputBuffers[toolId] === void 0) {\n toolInputBuffers[toolId] = \"\";\n }\n toolInputBuffers[toolId] += chunk.content;\n const toolSegment = contentSegments.find((s) => s.type === \"tool\" && s.id === toolId);\n if (toolSegment) {\n toolSegment.isReceiving = true;\n toolSegment.inputLength = toolInputBuffers[toolId].length;\n updateMessage();\n if (receivingTimeouts[toolId]) clearTimeout(receivingTimeouts[toolId]);\n receivingTimeouts[toolId] = setTimeout(() => {\n if (toolSegment.status === \"preparing\") {\n toolSegment.isReceiving = false;\n updateMessage();\n }\n }, 150);\n }\n }\n break;\n case \"tool_use\":\n if (chunk.tool_id) {\n const toolSegment = contentSegments.find((s) => s.type === \"tool\" && s.id === chunk.tool_id);\n if (toolSegment && toolSegment.status === \"preparing\") {\n toolSegment.status = \"running\";\n toolSegment.isReceiving = false;\n updateMessage();\n }\n }\n break;\n case \"tool_stream\":\n if (chunk.tool_id) {\n const toolSegment = contentSegments.find((s) => s.type === \"tool\" && s.id === chunk.tool_id);\n if (toolSegment) {\n if (chunk.event === \"chunk\" && chunk.content) {\n if (toolSegment.pendingReset) {\n toolSegment.streamOutput = \"\";\n toolSegment.pendingReset = false;\n }\n toolSegment.streamOutput = (toolSegment.streamOutput || \"\") + chunk.content;\n updateMessage();\n } else if (chunk.event === \"log\" || chunk.event === \"progress\") {\n toolSegment.pendingReset = true;\n }\n }\n }\n break;\n case \"tool_result\":\n if (chunk.tool_id) {\n const toolSegment = contentSegments.find((s) => s.type === \"tool\" && s.id === chunk.tool_id);\n if (toolSegment) {\n toolSegment.result = chunk.content;\n toolSegment.status = \"completed\";\n toolSegment.isReceiving = false;\n onToolResult?.(toolSegment.name, chunk.content);\n }\n setChatToolName(null);\n updateMessage();\n }\n break;\n case \"widget\":\n if (chunk.widget) {\n accumulatedWidgets.push(chunk.widget);\n updateMessage();\n }\n break;\n case \"error\":\n throw new Error(chunk.message || \"Stream error\");\n }\n },\n (threadId2) => {\n currentTextBuffer = currentTextBuffer.trimEnd();\n if (currentTextBuffer) {\n const lastSegment = contentSegments[contentSegments.length - 1];\n if (lastSegment && lastSegment.type === \"text\") {\n lastSegment.content = currentTextBuffer;\n } else {\n contentSegments.push({ type: \"text\", content: currentTextBuffer });\n }\n }\n setMessages((prev) => {\n const lastMessage = prev[prev.length - 1];\n if (lastMessage && lastMessage.role === \"assistant\") {\n return [\n ...prev.slice(0, -1),\n {\n ...lastMessage,\n // Keep the same ID to avoid React remounting the component\n content: currentTextBuffer || \"Response received\",\n widgets: accumulatedWidgets.length > 0 ? accumulatedWidgets : void 0,\n metadata: { thread_id: threadId2, content_segments: contentSegments, isStreaming: false }\n }\n ];\n }\n return prev;\n });\n if (threadId2 && threadId2 !== currentThreadId) {\n setCurrentThreadId(threadId2);\n onThreadChange?.(threadId2);\n }\n setIsLoading(false);\n setCurrentRequestId(null);\n setChatToolName(null);\n },\n (error) => {\n const errorMessage = {\n id: `msg-${Date.now()}-error`,\n role: \"assistant\",\n content: `Error: ${error.message}`,\n timestamp: /* @__PURE__ */ new Date(),\n metadata: { error: true }\n };\n setMessages((prev) => {\n const lastMessage = prev[prev.length - 1];\n if (lastMessage && lastMessage.id.includes(\"streaming\")) {\n return [...prev.slice(0, -1), errorMessage];\n }\n return [...prev, errorMessage];\n });\n setIsLoading(false);\n setCurrentRequestId(null);\n setChatToolName(null);\n onError?.(error);\n }\n );\n }\n } catch (error) {\n const errorMessage = {\n id: `msg-${Date.now()}-error`,\n role: \"assistant\",\n content: error instanceof Error ? `Error: ${error.message}` : \"An error occurred\",\n timestamp: /* @__PURE__ */ new Date(),\n metadata: { error: true }\n };\n setMessages((prev) => [...prev, errorMessage]);\n onError?.(error instanceof Error ? error : new Error(\"Unknown error\"));\n } finally {\n setIsLoading(false);\n }\n };\n handleSendMessageRef.current = handleSendMessage;\n const executeCommand = async (commandOverride, files) => {\n const currentCommand = commandOverride || commandInput;\n if (!currentCommand.trim() && (!files || files.length === 0)) {\n setCommandError(new Error(\"Please enter a command\"));\n setCommandState(\"error\");\n return;\n }\n if (internalPlanMode && commandState !== \"plan-pending\") {\n setCommandState(\"loading\");\n setCommandError(null);\n setCommandInput(\"\");\n if (useMock) {\n setTimeout(() => {\n const mockPlan = `1. Analyze the request: \"${currentCommand}\"\n2. Process the data\n3. Generate response\n4. Return results`;\n setPlan(mockPlan);\n setPendingCommand(currentCommand);\n setCommandState(\"plan-pending\");\n }, 800);\n } else {\n try {\n const planningInstruction = `CRITICAL PLANNING MODE: You are ONLY creating a plan. Write a numbered list of steps describing what WOULD be done. DO NOT execute anything.`;\n const systemMessage = effectiveContext ? `${effectiveContext}\n\n${planningInstruction}` : planningInstruction;\n const response = await aptevaClient.chat({\n agent_id: agentId,\n message: currentCommand,\n stream: false,\n system: systemMessage\n });\n setPlan(response.message);\n setPendingCommand(currentCommand);\n setCommandState(\"plan-pending\");\n } catch (err) {\n const error = err instanceof Error ? err : new Error(\"Failed to generate plan\");\n setCommandError(error);\n setCommandState(\"error\");\n onError?.(error);\n }\n }\n return;\n }\n setCommandState(\"loading\");\n setCommandError(null);\n setProgress(0);\n setStreamedContent(\"\");\n setCommandInput(\"\");\n try {\n if (useMock) {\n if (enableStreaming) {\n let accumulatedContent = \"\";\n generateMockCommandStream(\n currentCommand,\n (chunk) => {\n if (chunk.type === \"token\" && chunk.content) {\n accumulatedContent += chunk.content;\n setStreamedContent(accumulatedContent);\n const estimatedProgress = Math.min(Math.round(accumulatedContent.length / 10), 90);\n setProgress(estimatedProgress);\n }\n },\n (threadId2) => {\n const result = {\n success: true,\n data: { summary: accumulatedContent, thread_id: threadId2 },\n message: accumulatedContent || \"Command executed successfully\"\n };\n setCommandResult(result);\n setCommandState(\"success\");\n setProgress(100);\n onComplete?.(result);\n },\n (error) => {\n setCommandError(error);\n setCommandState(\"error\");\n onError?.(error);\n }\n );\n } else {\n await new Promise((resolve) => setTimeout(resolve, 1500));\n const result = {\n success: true,\n data: { summary: `Executed: ${currentCommand}` },\n message: `Command executed successfully`\n };\n setCommandResult(result);\n setCommandState(\"success\");\n setProgress(100);\n onComplete?.(result);\n }\n } else {\n const commandInstruction = `CRITICAL COMMAND MODE: Maximum 10 words per response. Execute the command immediately. Make reasonable assumptions based on context. Use sensible defaults for missing details. DO NOT ask questions unless something is truly impossible without user input (e.g., missing required password). State what you're doing or the result. Examples: \"Analyzing customer data from last quarter...\" or \"Created 5 new database entries successfully\" or \"Search complete: found 12 matching results\". NO greetings, NO filler words, NO clarification requests. Action/result only.`;\n const systemMessage = effectiveContext ? `${effectiveContext}\n\n${commandInstruction}` : commandInstruction;\n const messagePayload = files && files.length > 0 ? await buildMessageWithAttachments(currentCommand, files) : currentCommand;\n if (enableStreaming) {\n let accumulatedContent = \"\";\n let lastToolName = \"\";\n await aptevaClient.chatStream(\n {\n agent_id: agentId,\n message: messagePayload,\n stream: true,\n ...currentThreadId && { thread_id: currentThreadId },\n system: systemMessage\n },\n (chunk) => {\n if ((chunk.type === \"token\" || chunk.type === \"content\") && chunk.content) {\n accumulatedContent += chunk.content;\n setStreamedContent(accumulatedContent);\n setCurrentToolName(null);\n const estimatedProgress = Math.min(Math.round(accumulatedContent.length / 10), 90);\n setProgress(estimatedProgress);\n } else if (chunk.type === \"tool_call\" && chunk.tool_name) {\n const displayName = chunk.tool_display_name || chunk.tool_name;\n lastToolName = chunk.tool_name;\n setCurrentToolName(displayName);\n onToolCall?.(chunk.tool_name, chunk.tool_id || \"\");\n accumulatedContent = \"\";\n setStreamedContent(\"\");\n } else if (chunk.type === \"tool_result\") {\n onToolResult?.(lastToolName, chunk.content);\n setCurrentToolName(null);\n } else if (chunk.type === \"thread_id\" && chunk.thread_id) {\n if (!currentThreadId) {\n setCurrentThreadId(chunk.thread_id);\n onThreadChange?.(chunk.thread_id);\n }\n } else if (chunk.type === \"request_id\" && chunk.request_id) {\n setCurrentRequestId(chunk.request_id);\n }\n },\n (threadId2) => {\n const result = {\n success: true,\n data: { summary: accumulatedContent, thread_id: threadId2 },\n message: accumulatedContent || \"Command executed successfully\"\n };\n setCommandResult(result);\n setCommandState(\"success\");\n setProgress(100);\n setCurrentRequestId(null);\n onComplete?.(result);\n },\n (error) => {\n setCommandError(error);\n setCommandState(\"error\");\n setCurrentRequestId(null);\n onError?.(error);\n }\n );\n } else {\n const response = await aptevaClient.chat({\n agent_id: agentId,\n message: messagePayload,\n stream: false,\n ...currentThreadId && { thread_id: currentThreadId },\n system: systemMessage\n });\n const result = {\n success: true,\n data: { summary: response.message, thread_id: response.thread_id },\n widgets: response.widgets,\n message: response.message\n };\n setCommandResult(result);\n setCommandState(\"success\");\n setProgress(100);\n onComplete?.(result);\n }\n }\n } catch (err) {\n const error = err instanceof Error ? err : new Error(\"Unknown error\");\n setCommandError(error);\n setCommandState(\"error\");\n onError?.(error);\n }\n };\n const resetCommand = () => {\n setCommandState(\"idle\");\n setCommandResult(null);\n setCommandError(null);\n setProgress(0);\n setCommandInput(\"\");\n setPlan(\"\");\n setPendingCommand(\"\");\n setStreamedContent(\"\");\n setCurrentToolName(null);\n };\n const approvePlan = () => {\n const planToExecute = plan;\n setPlan(\"\");\n setPendingCommand(\"\");\n const executionMessage = `Execute this plan now:\n\n${planToExecute}`;\n executeCommand(executionMessage);\n };\n const rejectPlan = () => {\n setCommandInput(pendingCommand);\n setPlan(\"\");\n setPendingCommand(\"\");\n setCommandState(\"idle\");\n };\n const handleStop = async () => {\n if (currentRequestId && agentId) {\n try {\n await aptevaClient.cancelRequest(agentId, currentRequestId);\n } catch (error) {\n console.error(\"Failed to cancel request:\", error);\n }\n }\n setIsLoading(false);\n if (commandState === \"loading\") {\n setCommandState(\"idle\");\n setStreamedContent(\"\");\n setCurrentToolName(null);\n setProgress(0);\n }\n setCurrentRequestId(null);\n };\n const isCompact = commandVariant === \"compact\";\n return /* @__PURE__ */ jsxs20(\"div\", { className: cn(\"apteva-chat flex flex-col h-full\", variant !== \"default\" && `apteva-chat-${variant}`, theme === \"dark\" && \"apteva-force-dark\", theme === \"light\" && \"apteva-force-light\", className), children: [\n showHeader && mode === \"chat\" && /* @__PURE__ */ jsx26(\"div\", { className: \"apteva-chat-header px-4 py-3\", children: /* @__PURE__ */ jsxs20(\"div\", { style: { display: \"flex\", alignItems: \"center\", gap: \"0.5rem\" }, children: [\n onHeaderBack && /* @__PURE__ */ jsx26(\"button\", { onClick: onHeaderBack, className: \"apteva-chat-back\", style: { flexShrink: 0 }, children: /* @__PURE__ */ jsx26(\"svg\", { width: \"16\", height: \"16\", viewBox: \"0 0 16 16\", fill: \"none\", stroke: \"currentColor\", strokeWidth: \"2\", strokeLinecap: \"round\", strokeLinejoin: \"round\", children: /* @__PURE__ */ jsx26(\"path\", { d: \"M10 12L6 8l4-4\" }) }) }),\n /* @__PURE__ */ jsxs20(\"div\", { children: [\n /* @__PURE__ */ jsx26(\"div\", { className: \"apteva-chat-title\", children: headerTitle }),\n /* @__PURE__ */ jsx26(\"div\", { className: cn(\n \"apteva-chat-status\",\n voice.state === \"active\" ? \"apteva-chat-status-voice\" : voice.state === \"connecting\" ? \"apteva-chat-status-thinking\" : isLoading ? chatToolName ? \"apteva-chat-status-tool\" : \"apteva-chat-status-thinking\" : \"apteva-chat-status-ready\"\n ), children: voice.state === \"active\" ? \"Voice active\" : voice.state === \"connecting\" ? \"Connecting voice...\" : isLoading ? chatToolName ? `Using ${chatToolName}...` : \"Thinking...\" : \"Ready\" })\n ] })\n ] }) }),\n mode === \"chat\" && /* @__PURE__ */ jsxs20(Fragment6, { children: [\n persistentWidgetList.length > 0 && /* @__PURE__ */ jsx26(PersistentWidgetPanel, { widgets: persistentWidgetList, onAction: handleWidgetAction }),\n /* @__PURE__ */ jsx26(\n MessageList,\n {\n messages,\n onAction: handleWidgetAction,\n welcomeTitle,\n welcomeSubtitle,\n welcomeIcon,\n suggestedPrompts,\n welcomeVariant,\n chatVariant: variant,\n onPromptClick: (prompt) => handleSendMessage(prompt),\n enableWidgets,\n onWidgetRender,\n persistentWidgetIds,\n toolCallStyle\n }\n ),\n /* @__PURE__ */ jsx26(\n Composer,\n {\n onSendMessage: handleSendMessage,\n placeholder: placeholder || defaultPlaceholder,\n disabled: isLoading,\n isLoading,\n onStop: handleStop,\n onFileUpload,\n onSwitchMode: showModeToggle ? () => handleModeChange(\"command\") : void 0,\n speechToText,\n enableVoice,\n voiceState: voice.state,\n voicePartialTranscript: voice.partialTranscript,\n voiceDuration: voice.duration,\n onVoiceStart: voice.start,\n onVoiceStop: voice.stop\n }\n )\n ] }),\n mode === \"command\" && /* @__PURE__ */ jsx26(\"div\", { className: \"w-full\", children: /* @__PURE__ */ jsx26(\n CommandComposer,\n {\n onExecute: (text, files) => {\n setCommandInput(text);\n executeCommand(text, files);\n },\n state: commandState,\n response: commandResult?.data?.summary || commandResult?.message,\n error: commandError?.message,\n plan,\n streamedContent,\n toolName: currentToolName,\n onApprove: approvePlan,\n onReject: rejectPlan,\n onReset: resetCommand,\n onStop: handleStop,\n onExpand: showModeToggle ? () => handleModeChange(\"chat\") : void 0,\n placeholder: placeholder || \"Enter your command...\"\n }\n ) }),\n /* @__PURE__ */ jsx26(\"style\", { dangerouslySetInnerHTML: {\n __html: `\n @keyframes pulse-border {\n 0%, 100% { border-color: rgb(59, 130, 246); }\n 50% { border-color: rgb(147, 197, 253); }\n }\n .animate-pulse-border {\n animation: pulse-border 2s ease-in-out infinite;\n }\n .apteva-composer {\n border-radius: var(--apteva-border-radius, 1rem) !important;\n }\n `\n } })\n ] });\n});\n\n// src/components/Chat/CommandOutput.tsx\nimport { useState as useState11 } from \"react\";\nimport { jsx as jsx27, jsxs as jsxs21 } from \"react/jsx-runtime\";\n\n// src/components/Command/Command.tsx\nimport React, { useState as useState12, useEffect as useEffect11 } from \"react\";\nimport { Fragment as Fragment7, jsx as jsx28, jsxs as jsxs22 } from \"react/jsx-runtime\";\nfunction Command({\n agentId,\n command: initialCommand,\n context,\n autoExecute = false,\n allowInput = true,\n placeholder = \"Enter your command...\",\n submitButtonText = \"Execute\",\n variant = \"default\",\n useMock = false,\n planMode = false,\n onPlanModeChange,\n enableFileUpload = true,\n onStart,\n onProgress,\n onChunk,\n onComplete,\n onError,\n onFileUpload,\n onAction,\n loadingText = \"Processing...\",\n showProgress = true,\n enableStreaming = false,\n resultRenderer,\n className\n}) {\n const [state, setState] = useState12(\"idle\");\n const [result, setResult] = useState12(null);\n const [error, setError] = useState12(null);\n const [progress, setProgress] = useState12(0);\n const [command, setCommand] = useState12(initialCommand || \"\");\n const [streamedContent, setStreamedContent] = useState12(\"\");\n const [plan, setPlan] = useState12(\"\");\n const [pendingCommand, setPendingCommand] = useState12(\"\");\n const [showPlanDetails, setShowPlanDetails] = useState12(false);\n const [uploadedFiles, setUploadedFiles] = useState12([]);\n const [showSettingsMenu, setShowSettingsMenu] = useState12(false);\n const [internalPlanMode, setInternalPlanMode] = useState12(planMode);\n const fileInputRef = React.useRef(null);\n useEffect11(() => {\n if (autoExecute && state === \"idle\" && command) {\n executeCommand();\n }\n }, [autoExecute]);\n useEffect11(() => {\n setInternalPlanMode(planMode);\n }, [planMode]);\n useEffect11(() => {\n const handleClickOutside = (event) => {\n const target = event.target;\n if (showSettingsMenu && !target.closest(\".settings-menu-container\")) {\n setShowSettingsMenu(false);\n }\n };\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, [showSettingsMenu]);\n const executeCommand = async (commandOverride) => {\n const currentCommand = commandOverride || command;\n if (!currentCommand.trim()) {\n setError(new Error(\"Please enter a command\"));\n setState(\"error\");\n return;\n }\n if (internalPlanMode && state !== \"plan-pending\") {\n setState(\"loading\");\n setError(null);\n setCommand(\"\");\n if (useMock) {\n setTimeout(() => {\n const mockPlan = generateMockPlan(currentCommand);\n setPlan(mockPlan);\n setPendingCommand(currentCommand);\n setState(\"plan-pending\");\n }, 800);\n } else {\n try {\n let messageContent;\n if (uploadedFiles.length > 0) {\n messageContent = [\n {\n type: \"text\",\n text: currentCommand\n },\n ...uploadedFiles.map((file) => ({\n type: file.type,\n source: {\n type: \"base64\",\n media_type: file.mediaType,\n data: file.data\n }\n }))\n ];\n } else {\n messageContent = currentCommand;\n }\n let systemMessage = context || \"\";\n const planningInstruction = `CRITICAL PLANNING MODE - READ CAREFULLY:\n\nYou are ONLY creating a plan. You are NOT executing anything.\n\nYOUR TASK: Write a numbered list of steps describing what WOULD be done.\nDO NOT: Execute any actions, make API calls, access databases, modify data, or perform any operations.\nDO NOT: Ask questions or clarifications. Make reasonable assumptions.\nDO: Describe the steps as \"Step 1: Would search database...\", \"Step 2: Would analyze results...\", etc.\nDO: Use default values or best practices if details are missing.\n\nFORMAT REQUIRED:\n1. [First action that would be taken]\n2. [Second action that would be taken]\n3. [Third action that would be taken]\n...\n\nIMPORTANT: This is COMMAND MODE - figure things out yourself. Make intelligent assumptions based on context. ONLY ask questions if something is absolutely impossible to proceed without (e.g., missing required credentials). Otherwise, use sensible defaults and proceed with the plan.\n\nREMEMBER: This is ONLY a plan. The user will approve it, THEN it will be executed. Right now you are just describing what would happen - NOT doing it.`;\n systemMessage = systemMessage ? `${systemMessage}\n\n${planningInstruction}` : planningInstruction;\n aptevaClient.chat({\n agent_id: agentId,\n message: messageContent,\n stream: false,\n system: systemMessage\n }).then((response) => {\n setPlan(response.message);\n setPendingCommand(currentCommand);\n setState(\"plan-pending\");\n }).catch((err) => {\n const error2 = err instanceof Error ? err : new Error(\"Failed to generate plan\");\n setError(error2);\n setState(\"error\");\n onError?.(error2);\n });\n } catch (err) {\n const error2 = err instanceof Error ? err : new Error(\"Failed to generate plan\");\n setError(error2);\n setState(\"error\");\n onError?.(error2);\n }\n }\n return;\n }\n setState(\"loading\");\n setError(null);\n setProgress(0);\n setStreamedContent(\"\");\n setCommand(\"\");\n setUploadedFiles([]);\n onStart?.();\n try {\n if (useMock) {\n if (enableStreaming) {\n let accumulatedContent = \"\";\n generateMockCommandStream(\n currentCommand,\n (chunk) => {\n if (chunk.type === \"token\" && chunk.content) {\n accumulatedContent += chunk.content;\n setStreamedContent(accumulatedContent);\n onChunk?.(chunk.content);\n const estimatedProgress = Math.min(Math.round(accumulatedContent.length / 10), 90);\n setProgress(estimatedProgress);\n onProgress?.(estimatedProgress);\n } else if (chunk.type === \"widget\" && chunk.widget) {\n const widget = chunk.widget;\n setResult((prev) => ({\n success: true,\n data: prev?.data || {},\n widgets: [...prev?.widgets || [], widget],\n message: accumulatedContent || \"Command executed successfully\"\n }));\n }\n },\n (threadId) => {\n const result2 = {\n success: true,\n data: {\n summary: accumulatedContent,\n thread_id: threadId,\n agentId,\n context,\n timestamp: (/* @__PURE__ */ new Date()).toISOString()\n },\n message: accumulatedContent || \"Command executed successfully\"\n };\n setResult(result2);\n setState(\"success\");\n setProgress(100);\n onComplete?.(result2);\n },\n (error2) => {\n setError(error2);\n setState(\"error\");\n onError?.(error2);\n }\n );\n } else {\n const progressInterval = setInterval(() => {\n setProgress((prev) => {\n const next = Math.min(prev + 10, 90);\n onProgress?.(next);\n return next;\n });\n }, 200);\n await new Promise((resolve) => setTimeout(resolve, 1500));\n clearInterval(progressInterval);\n const mockResponse = generateMockCommandWithWidgets(currentCommand);\n const result2 = {\n success: true,\n data: {\n summary: mockResponse.message,\n thread_id: `mock_thread_${Date.now()}`,\n agentId,\n context,\n timestamp: (/* @__PURE__ */ new Date()).toISOString(),\n action: mockResponse.action\n // Include agent action intent\n },\n widgets: mockResponse.widgets,\n message: mockResponse.message\n };\n setResult(result2);\n setState(\"success\");\n setProgress(100);\n onComplete?.(result2);\n }\n } else {\n if (enableStreaming) {\n let accumulatedContent = \"\";\n let messageContent;\n if (uploadedFiles.length > 0) {\n messageContent = [\n {\n type: \"text\",\n text: currentCommand\n },\n ...uploadedFiles.map((file) => ({\n type: file.type,\n // 'image' or 'document'\n source: {\n type: \"base64\",\n media_type: file.mediaType,\n data: file.data\n }\n }))\n ];\n } else {\n messageContent = currentCommand;\n }\n let systemMessage = context || \"\";\n let commandInstruction;\n if (isCompact) {\n commandInstruction = 'CRITICAL COMMAND MODE: Maximum 10 words per response. Execute immediately, make intelligent assumptions, use defaults when needed. NO questions unless absolutely critical (missing required credentials). State action or result ONLY. Examples: \"Searching database for matching records...\" or \"Found 3 user records in database\" or \"Task completed successfully\". NO greetings, NO explanations, NO clarification requests. Just execute and report.';\n } else {\n commandInstruction = `CRITICAL COMMAND MODE: Maximum 10 words per response. Execute the command immediately. Make reasonable assumptions based on context. Use sensible defaults for missing details. DO NOT ask questions unless something is truly impossible without user input (e.g., missing required password). State what you're doing or the result. Examples: \"Analyzing customer data from last quarter...\" or \"Created 5 new database entries successfully\" or \"Search complete: found 12 matching results\". NO greetings, NO filler words, NO clarification requests. Action/result only.`;\n }\n systemMessage = systemMessage ? `${systemMessage}\n\n${commandInstruction}` : commandInstruction;\n await aptevaClient.chatStream(\n {\n agent_id: agentId,\n message: messageContent,\n stream: true,\n ...systemMessage && { system: systemMessage }\n },\n (chunk) => {\n if (chunk.type === \"token\" && chunk.content) {\n accumulatedContent += chunk.content;\n setStreamedContent(accumulatedContent);\n onChunk?.(chunk.content);\n const estimatedProgress = Math.min(Math.round(accumulatedContent.length / 10), 90);\n setProgress(estimatedProgress);\n onProgress?.(estimatedProgress);\n } else if (chunk.type === \"widget\" && chunk.widget) {\n const widget = chunk.widget;\n setResult((prev) => ({\n success: true,\n data: prev?.data || {},\n widgets: [...prev?.widgets || [], widget],\n message: accumulatedContent || \"Command executed successfully\"\n }));\n }\n },\n (threadId) => {\n const result2 = {\n success: true,\n data: {\n summary: accumulatedContent,\n thread_id: threadId,\n agentId,\n context,\n timestamp: (/* @__PURE__ */ new Date()).toISOString()\n },\n message: accumulatedContent || \"Command executed successfully\"\n };\n setResult(result2);\n setState(\"success\");\n setProgress(100);\n onComplete?.(result2);\n },\n (error2) => {\n const err = error2 instanceof Error ? error2 : new Error(\"Unknown error\");\n setError(err);\n setState(\"error\");\n onError?.(err);\n }\n );\n } else {\n const progressInterval = setInterval(() => {\n setProgress((prev) => {\n const next = Math.min(prev + 10, 90);\n onProgress?.(next);\n return next;\n });\n }, 200);\n let messageContent;\n if (uploadedFiles.length > 0) {\n messageContent = [\n {\n type: \"text\",\n text: currentCommand\n },\n ...uploadedFiles.map((file) => ({\n type: file.type,\n // 'image' or 'document'\n source: {\n type: \"base64\",\n media_type: file.mediaType,\n data: file.data\n }\n }))\n ];\n } else {\n messageContent = currentCommand;\n }\n let systemMessage = context || \"\";\n let commandInstruction;\n if (isCompact) {\n commandInstruction = 'CRITICAL COMMAND MODE: Maximum 10 words per response. Execute immediately, make intelligent assumptions, use defaults when needed. NO questions unless absolutely critical (missing required credentials). State action or result ONLY. Examples: \"Searching database for matching records...\" or \"Found 3 user records in database\" or \"Task completed successfully\". NO greetings, NO explanations, NO clarification requests. Just execute and report.';\n } else {\n commandInstruction = `CRITICAL COMMAND MODE: Maximum 10 words per response. Execute the command immediately. Make reasonable assumptions based on context. Use sensible defaults for missing details. DO NOT ask questions unless something is truly impossible without user input (e.g., missing required password). State what you're doing or the result. Examples: \"Analyzing customer data from last quarter...\" or \"Created 5 new database entries successfully\" or \"Search complete: found 12 matching results\". NO greetings, NO filler words, NO clarification requests. Action/result only.`;\n }\n systemMessage = systemMessage ? `${systemMessage}\n\n${commandInstruction}` : commandInstruction;\n const response = await aptevaClient.chat({\n agent_id: agentId,\n message: messageContent,\n stream: false,\n ...systemMessage && { system: systemMessage }\n });\n clearInterval(progressInterval);\n const result2 = {\n success: true,\n data: {\n summary: response.message,\n thread_id: response.thread_id,\n agentId,\n context,\n timestamp: (/* @__PURE__ */ new Date()).toISOString()\n },\n widgets: response.widgets,\n message: response.message\n };\n setResult(result2);\n setState(\"success\");\n setProgress(100);\n onComplete?.(result2);\n }\n }\n } catch (err) {\n const error2 = err instanceof Error ? err : new Error(\"Unknown error\");\n setError(error2);\n setState(\"error\");\n onError?.(error2);\n }\n };\n const resetCommand = () => {\n setState(\"idle\");\n setResult(null);\n setError(null);\n setProgress(0);\n setCommand(\"\");\n setPlan(\"\");\n setPendingCommand(\"\");\n setShowPlanDetails(false);\n setUploadedFiles([]);\n };\n const approvePlan = () => {\n setShowPlanDetails(false);\n const planToExecute = plan;\n setPlan(\"\");\n setPendingCommand(\"\");\n const executionMessage = `Execute this plan now:\n\n${planToExecute}`;\n executeCommand(executionMessage);\n };\n const rejectPlan = () => {\n setCommand(pendingCommand);\n setPlan(\"\");\n setPendingCommand(\"\");\n setShowPlanDetails(false);\n setState(\"idle\");\n };\n const handleFileSelect = async (e) => {\n if (e.target.files && e.target.files.length > 0) {\n onFileUpload?.(e.target.files);\n const files = [];\n for (let i = 0; i < e.target.files.length; i++) {\n const file = e.target.files[i];\n const reader = new FileReader();\n await new Promise((resolve) => {\n reader.onload = (event) => {\n if (event.target?.result) {\n const fullDataUrl = event.target.result;\n const base64Data = fullDataUrl.split(\",\")[1];\n if (file.type.startsWith(\"image/\")) {\n files.push({\n type: \"image\",\n data: base64Data,\n mediaType: file.type,\n preview: fullDataUrl,\n // Keep full data URL for preview\n name: file.name\n });\n } else if (file.type === \"application/pdf\" || file.type.startsWith(\"application/\")) {\n files.push({\n type: \"document\",\n data: base64Data,\n mediaType: file.type,\n name: file.name\n });\n }\n }\n resolve();\n };\n reader.readAsDataURL(file);\n });\n }\n setUploadedFiles((prev) => [...prev, ...files]);\n }\n };\n const removeFile = (index) => {\n setUploadedFiles((prev) => prev.filter((_, i) => i !== index));\n };\n const isCompact = variant === \"compact\";\n return /* @__PURE__ */ jsxs22(\n \"div\",\n {\n className: cn(\n \"relative border-2 rounded-xl bg-white dark:bg-neutral-900 transition-all duration-300 flex flex-col\",\n state === \"loading\" && \"animate-pulse-border\",\n state === \"idle\" && \"border-neutral-300 dark:border-neutral-700\",\n state === \"loading\" && \"border-blue-500\",\n state === \"plan-pending\" && \"border-blue-400\",\n state === \"success\" && \"border-green-500\",\n state === \"error\" && \"border-red-500\",\n className\n ),\n style: { minHeight: isCompact ? \"auto\" : \"180px\" },\n children: [\n /* @__PURE__ */ jsxs22(\"div\", { className: cn(\"flex-1 flex\", isCompact ? \"flex-row items-center p-3 gap-3\" : \"flex-col p-4\"), children: [\n state === \"idle\" && allowInput && !isCompact && /* @__PURE__ */ jsxs22(Fragment7, { children: [\n /* @__PURE__ */ jsx28(\n \"textarea\",\n {\n value: command,\n onChange: (e) => setCommand(e.target.value),\n onKeyDown: (e) => {\n if (e.key === \"Enter\" && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n executeCommand();\n }\n },\n placeholder,\n className: \"flex-1 w-full resize-none bg-transparent border-none focus:outline-none !text-neutral-900 dark:!text-neutral-100 placeholder-neutral-400 dark:placeholder-neutral-500\",\n rows: 6\n }\n ),\n uploadedFiles.length > 0 && /* @__PURE__ */ jsx28(\"div\", { className: \"flex flex-wrap gap-2 mt-2\", children: uploadedFiles.map((file, index) => /* @__PURE__ */ jsxs22(\"div\", { className: \"relative group\", children: [\n file.type === \"image\" ? /* @__PURE__ */ jsx28(\n \"img\",\n {\n src: file.preview,\n alt: file.name,\n className: \"w-20 h-20 object-cover rounded-lg border-2 border-neutral-300 dark:border-neutral-600\"\n }\n ) : /* @__PURE__ */ jsxs22(\"div\", { className: \"w-20 h-20 flex flex-col items-center justify-center rounded-lg border-2 border-neutral-300 dark:border-neutral-600 bg-neutral-50 dark:bg-neutral-800\", children: [\n /* @__PURE__ */ jsx28(\"svg\", { className: \"w-8 h-8 text-neutral-500 dark:text-neutral-400\", fill: \"currentColor\", viewBox: \"0 0 20 20\", children: /* @__PURE__ */ jsx28(\"path\", { fillRule: \"evenodd\", d: \"M4 4a2 2 0 012-2h4.586A2 2 0 0112 2.586L15.414 6A2 2 0 0116 7.414V16a2 2 0 01-2 2H6a2 2 0 01-2-2V4zm2 6a1 1 0 011-1h6a1 1 0 110 2H7a1 1 0 01-1-1zm1 3a1 1 0 100 2h6a1 1 0 100-2H7z\", clipRule: \"evenodd\" }) }),\n /* @__PURE__ */ jsx28(\"span\", { className: \"text-[8px] text-neutral-500 dark:text-neutral-400 mt-1 px-1 truncate max-w-full\", children: file.name.length > 12 ? file.name.slice(0, 12) + \"...\" : file.name })\n ] }),\n /* @__PURE__ */ jsx28(\n \"button\",\n {\n onClick: () => removeFile(index),\n className: \"absolute -top-2 -right-2 w-6 h-6 bg-red-500 hover:bg-red-600 text-white rounded-full flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity\",\n title: `Remove ${file.type}`,\n children: /* @__PURE__ */ jsx28(\"svg\", { className: \"w-4 h-4\", fill: \"none\", viewBox: \"0 0 24 24\", stroke: \"currentColor\", children: /* @__PURE__ */ jsx28(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M6 18L18 6M6 6l12 12\" }) })\n }\n )\n ] }, index)) })\n ] }),\n state === \"idle\" && allowInput && isCompact && /* @__PURE__ */ jsxs22(Fragment7, { children: [\n /* @__PURE__ */ jsxs22(\"div\", { className: \"flex items-center gap-0.5 flex-shrink-0\", children: [\n enableFileUpload && /* @__PURE__ */ jsx28(\n \"button\",\n {\n onClick: () => fileInputRef.current?.click(),\n className: \"w-8 h-8 rounded-lg flex items-center justify-center transition-all flex-shrink-0 !text-neutral-500 dark:!text-neutral-500 hover:bg-neutral-100 dark:hover:bg-neutral-800\",\n title: \"Attach file\",\n children: /* @__PURE__ */ jsx28(\"svg\", { width: \"16\", height: \"16\", viewBox: \"0 0 16 16\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", children: /* @__PURE__ */ jsx28(\"path\", { d: \"M8.4 2.8L4.4 6.8C3.736 7.464 3.736 8.536 4.4 9.2C5.064 9.864 6.136 9.864 6.8 9.2L11.6 4.4C12.704 3.296 12.704 1.504 11.6 0.4C10.496 -0.704 8.704 -0.704 7.6 0.4L2.8 5.2C1.256 6.744 1.256 9.256 2.8 10.8C4.344 12.344 6.856 12.344 8.4 10.8L12.4 6.8\", stroke: \"currentColor\", strokeWidth: \"1.2\", strokeLinecap: \"round\", strokeLinejoin: \"round\", transform: \"translate(1.6, 2.4)\" }) })\n }\n ),\n planMode && /* @__PURE__ */ jsxs22(\"div\", { className: \"relative settings-menu-container\", children: [\n /* @__PURE__ */ jsx28(\n \"button\",\n {\n onClick: () => setShowSettingsMenu(!showSettingsMenu),\n className: cn(\n \"w-8 h-8 rounded-lg flex items-center justify-center transition-all flex-shrink-0 hover:bg-neutral-100 dark:hover:bg-neutral-800\",\n internalPlanMode ? \"!text-blue-600 dark:!text-blue-400\" : \"!text-neutral-500 dark:!text-neutral-500\"\n ),\n title: \"Settings\",\n children: /* @__PURE__ */ jsxs22(\"svg\", { width: \"14\", height: \"14\", viewBox: \"0 0 24 24\", fill: \"none\", stroke: \"currentColor\", strokeWidth: \"2\", strokeLinecap: \"round\", strokeLinejoin: \"round\", children: [\n /* @__PURE__ */ jsx28(\"line\", { x1: \"4\", y1: \"21\", x2: \"4\", y2: \"14\" }),\n /* @__PURE__ */ jsx28(\"line\", { x1: \"4\", y1: \"10\", x2: \"4\", y2: \"3\" }),\n /* @__PURE__ */ jsx28(\"line\", { x1: \"12\", y1: \"21\", x2: \"12\", y2: \"12\" }),\n /* @__PURE__ */ jsx28(\"line\", { x1: \"12\", y1: \"8\", x2: \"12\", y2: \"3\" }),\n /* @__PURE__ */ jsx28(\"line\", { x1: \"20\", y1: \"21\", x2: \"20\", y2: \"16\" }),\n /* @__PURE__ */ jsx28(\"line\", { x1: \"20\", y1: \"12\", x2: \"20\", y2: \"3\" }),\n /* @__PURE__ */ jsx28(\"line\", { x1: \"1\", y1: \"14\", x2: \"7\", y2: \"14\" }),\n /* @__PURE__ */ jsx28(\"line\", { x1: \"9\", y1: \"8\", x2: \"15\", y2: \"8\" }),\n /* @__PURE__ */ jsx28(\"line\", { x1: \"17\", y1: \"16\", x2: \"23\", y2: \"16\" })\n ] })\n }\n ),\n showSettingsMenu && /* @__PURE__ */ jsx28(\"div\", { className: \"absolute top-10 left-0 z-50 w-56 bg-white dark:bg-neutral-800 border border-neutral-200 dark:border-neutral-700 rounded-lg shadow-lg p-2.5 settings-menu-container\", children: /* @__PURE__ */ jsxs22(\"label\", { className: \"flex items-center justify-between cursor-pointer group\", children: [\n /* @__PURE__ */ jsxs22(\"div\", { className: \"flex items-center gap-2\", children: [\n /* @__PURE__ */ jsx28(\"svg\", { className: \"w-3.5 h-3.5 text-neutral-500 dark:text-neutral-400\", fill: \"none\", viewBox: \"0 0 24 24\", stroke: \"currentColor\", children: /* @__PURE__ */ jsx28(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-3 7h3m-3 4h3m-6-4h.01M9 16h.01\" }) }),\n /* @__PURE__ */ jsxs22(\"div\", { children: [\n /* @__PURE__ */ jsx28(\"div\", { className: \"text-xs font-medium text-neutral-700 dark:text-neutral-300\", children: \"Plan Mode\" }),\n /* @__PURE__ */ jsx28(\"div\", { className: \"text-[10px] text-neutral-500 dark:text-neutral-400\", children: \"Review first\" })\n ] })\n ] }),\n /* @__PURE__ */ jsx28(\n \"button\",\n {\n onClick: (e) => {\n e.stopPropagation();\n setInternalPlanMode(!internalPlanMode);\n },\n className: cn(\n \"relative inline-flex h-4 w-8 items-center rounded-full transition-colors\",\n internalPlanMode ? \"bg-blue-600\" : \"bg-neutral-300 dark:bg-neutral-600\"\n ),\n type: \"button\",\n children: /* @__PURE__ */ jsx28(\n \"span\",\n {\n className: cn(\n \"inline-block h-3 w-3 transform rounded-full bg-white transition-transform\",\n internalPlanMode ? \"translate-x-4.5\" : \"translate-x-0.5\"\n )\n }\n )\n }\n )\n ] }) })\n ] })\n ] }),\n uploadedFiles.length > 0 && /* @__PURE__ */ jsx28(\"div\", { className: \"flex gap-1 flex-shrink-0\", children: uploadedFiles.map((file, index) => /* @__PURE__ */ jsxs22(\"div\", { className: \"relative group\", children: [\n file.type === \"image\" ? /* @__PURE__ */ jsx28(\n \"img\",\n {\n src: file.preview,\n alt: file.name,\n className: \"w-8 h-8 object-cover rounded border border-neutral-300 dark:border-neutral-600\"\n }\n ) : /* @__PURE__ */ jsx28(\"div\", { className: \"w-8 h-8 flex items-center justify-center rounded border border-neutral-300 dark:border-neutral-600 bg-neutral-50 dark:bg-neutral-800\", title: file.name, children: /* @__PURE__ */ jsx28(\"svg\", { className: \"w-4 h-4 text-neutral-500 dark:text-neutral-400\", fill: \"currentColor\", viewBox: \"0 0 20 20\", children: /* @__PURE__ */ jsx28(\"path\", { fillRule: \"evenodd\", d: \"M4 4a2 2 0 012-2h4.586A2 2 0 0112 2.586L15.414 6A2 2 0 0116 7.414V16a2 2 0 01-2 2H6a2 2 0 01-2-2V4zm2 6a1 1 0 011-1h6a1 1 0 110 2H7a1 1 0 01-1-1zm1 3a1 1 0 100 2h6a1 1 0 100-2H7z\", clipRule: \"evenodd\" }) }) }),\n /* @__PURE__ */ jsx28(\n \"button\",\n {\n onClick: () => removeFile(index),\n className: \"absolute -top-1 -right-1 w-4 h-4 bg-red-500 hover:bg-red-600 text-white rounded-full flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity\",\n title: \"Remove\",\n children: /* @__PURE__ */ jsx28(\"svg\", { className: \"w-2.5 h-2.5\", fill: \"none\", viewBox: \"0 0 24 24\", stroke: \"currentColor\", strokeWidth: 3, children: /* @__PURE__ */ jsx28(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", d: \"M6 18L18 6M6 6l12 12\" }) })\n }\n )\n ] }, index)) }),\n /* @__PURE__ */ jsx28(\n \"input\",\n {\n type: \"text\",\n value: command,\n onChange: (e) => setCommand(e.target.value),\n onKeyDown: (e) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n executeCommand();\n }\n },\n placeholder,\n className: \"flex-1 bg-transparent border-none focus:outline-none !text-neutral-900 dark:!text-neutral-100 placeholder-neutral-400 dark:placeholder-neutral-500 py-1\"\n }\n ),\n /* @__PURE__ */ jsx28(\n \"button\",\n {\n onClick: () => executeCommand(),\n disabled: !command.trim(),\n className: cn(\n \"w-8 h-8 rounded-lg flex items-center justify-center font-bold transition-all flex-shrink-0\",\n \"border border-neutral-300 dark:border-neutral-600\",\n \"bg-white dark:bg-neutral-800\",\n \"!text-neutral-700 dark:!text-neutral-300\",\n \"hover:bg-neutral-50 dark:hover:bg-neutral-700\",\n \"disabled:opacity-30 disabled:cursor-not-allowed\",\n \"!text-lg\",\n !command.trim() && \"border-neutral-200 dark:border-neutral-700 !text-neutral-400 dark:!text-neutral-600\"\n ),\n title: \"Execute\",\n children: /* @__PURE__ */ jsx28(\"svg\", { width: \"16\", height: \"16\", viewBox: \"0 0 16 16\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", children: /* @__PURE__ */ jsx28(\"path\", { d: \"M8 3L8 13M8 3L4 7M8 3L12 7\", stroke: \"currentColor\", strokeWidth: \"2\", strokeLinecap: \"round\", strokeLinejoin: \"round\" }) })\n }\n )\n ] }),\n state === \"loading\" && !isCompact && /* @__PURE__ */ jsxs22(\"div\", { className: \"flex-1 flex flex-col items-center justify-center space-y-4 py-8\", children: [\n /* @__PURE__ */ jsx28(\"div\", { className: \"w-6 h-6 border-2 border-neutral-300 border-t-blue-500 rounded-full animate-spin\" }),\n /* @__PURE__ */ jsx28(\"div\", { className: \"text-neutral-600 dark:text-neutral-400 text-sm text-center max-w-md\", children: enableStreaming && streamedContent ? streamedContent : loadingText }),\n showProgress && /* @__PURE__ */ jsxs22(\"div\", { className: \"w-full max-w-sm\", children: [\n /* @__PURE__ */ jsx28(\"div\", { className: \"w-full bg-neutral-200 dark:bg-neutral-700 rounded-full h-1.5\", children: /* @__PURE__ */ jsx28(\n \"div\",\n {\n className: \"bg-blue-500 h-1.5 rounded-full transition-all duration-300\",\n style: { width: `${progress}%` }\n }\n ) }),\n /* @__PURE__ */ jsxs22(\"p\", { className: \"text-xs text-neutral-500 mt-2 text-center\", children: [\n progress,\n \"%\"\n ] })\n ] })\n ] }),\n state === \"loading\" && isCompact && /* @__PURE__ */ jsxs22(Fragment7, { children: [\n /* @__PURE__ */ jsxs22(\"div\", { className: \"flex-1 flex items-center gap-3 py-1\", children: [\n /* @__PURE__ */ jsx28(\"div\", { className: \"w-4 h-4 border-2 border-neutral-300 border-t-blue-500 rounded-full animate-spin\" }),\n /* @__PURE__ */ jsx28(\"div\", { className: \"text-neutral-600 dark:text-neutral-400 text-sm truncate\", children: enableStreaming && streamedContent ? streamedContent : loadingText })\n ] }),\n /* @__PURE__ */ jsx28(\n \"button\",\n {\n disabled: true,\n className: cn(\n \"w-8 h-8 rounded-lg flex items-center justify-center font-bold transition-all flex-shrink-0\",\n \"border border-neutral-200 dark:border-neutral-700\",\n \"bg-white dark:bg-neutral-800\",\n \"!text-neutral-400 dark:!text-neutral-600\",\n \"!text-lg\",\n \"opacity-30 cursor-not-allowed\"\n ),\n children: /* @__PURE__ */ jsx28(\"svg\", { width: \"16\", height: \"16\", viewBox: \"0 0 16 16\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", children: /* @__PURE__ */ jsx28(\"path\", { d: \"M8 3L8 13M8 3L4 7M8 3L12 7\", stroke: \"currentColor\", strokeWidth: \"2\", strokeLinecap: \"round\", strokeLinejoin: \"round\" }) })\n }\n )\n ] }),\n state === \"plan-pending\" && !isCompact && /* @__PURE__ */ jsx28(\"div\", { className: \"flex-1 flex flex-col\", children: /* @__PURE__ */ jsxs22(\"div\", { className: \"mb-4 p-4 bg-blue-50 dark:bg-blue-900/20 border border-blue-200 dark:border-blue-800 rounded-lg\", children: [\n /* @__PURE__ */ jsxs22(\"div\", { className: \"flex items-start gap-2 mb-3\", children: [\n /* @__PURE__ */ jsx28(\"svg\", { className: \"w-5 h-5 text-blue-600 dark:text-blue-400 mt-0.5 flex-shrink-0\", fill: \"none\", viewBox: \"0 0 24 24\", stroke: \"currentColor\", children: /* @__PURE__ */ jsx28(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-3 7h3m-3 4h3m-6-4h.01M9 16h.01\" }) }),\n /* @__PURE__ */ jsxs22(\"div\", { className: \"flex-1\", children: [\n /* @__PURE__ */ jsx28(\"h3\", { className: \"text-sm font-semibold text-blue-800 dark:text-blue-300 mb-1\", children: \"Proposed Plan\" }),\n /* @__PURE__ */ jsx28(\"div\", { className: \"text-blue-700 dark:text-blue-300 text-sm whitespace-pre-line leading-relaxed\", children: plan })\n ] })\n ] }),\n /* @__PURE__ */ jsxs22(\"div\", { className: \"flex gap-2 mt-4\", children: [\n /* @__PURE__ */ jsx28(\n \"button\",\n {\n onClick: approvePlan,\n className: \"flex-1 px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors text-sm font-medium\",\n children: \"Approve & Execute\"\n }\n ),\n /* @__PURE__ */ jsx28(\n \"button\",\n {\n onClick: rejectPlan,\n className: \"flex-1 px-4 py-2 bg-neutral-200 dark:bg-neutral-700 text-neutral-700 dark:text-neutral-300 rounded-lg hover:bg-neutral-300 dark:hover:bg-neutral-600 transition-colors text-sm font-medium\",\n children: \"Modify\"\n }\n )\n ] })\n ] }) }),\n state === \"plan-pending\" && isCompact && /* @__PURE__ */ jsxs22(Fragment7, { children: [\n /* @__PURE__ */ jsxs22(\n \"button\",\n {\n onClick: () => setShowPlanDetails(true),\n className: \"flex-1 flex items-center gap-2 px-3 py-2 bg-blue-50 dark:bg-blue-900/30 hover:bg-blue-100 dark:hover:bg-blue-900/40 border border-blue-200 dark:border-blue-800 rounded-lg transition-colors\",\n children: [\n /* @__PURE__ */ jsx28(\"svg\", { className: \"w-4 h-4 text-blue-600 dark:text-blue-400 flex-shrink-0\", fill: \"none\", viewBox: \"0 0 24 24\", stroke: \"currentColor\", children: /* @__PURE__ */ jsx28(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-3 7h3m-3 4h3m-6-4h.01M9 16h.01\" }) }),\n /* @__PURE__ */ jsx28(\"span\", { className: \"text-sm font-medium text-blue-700 dark:text-blue-300 truncate flex-1\", children: \"View Execution Plan\" })\n ]\n }\n ),\n /* @__PURE__ */ jsxs22(\"div\", { className: \"flex gap-2 flex-shrink-0\", children: [\n /* @__PURE__ */ jsx28(\n \"button\",\n {\n onClick: approvePlan,\n className: \"px-3 py-1.5 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors text-xs font-medium\",\n children: \"Approve\"\n }\n ),\n /* @__PURE__ */ jsx28(\n \"button\",\n {\n onClick: rejectPlan,\n className: \"px-3 py-1.5 bg-neutral-200 dark:bg-neutral-700 text-neutral-700 dark:text-neutral-300 rounded-lg hover:bg-neutral-300 dark:hover:bg-neutral-600 transition-colors text-xs font-medium\",\n children: \"Modify\"\n }\n )\n ] })\n ] }),\n state === \"error\" && /* @__PURE__ */ jsxs22(\"div\", { className: \"flex-1 flex flex-col\", children: [\n /* @__PURE__ */ jsx28(\"div\", { className: \"mb-4 p-3 bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800 rounded-lg\", children: /* @__PURE__ */ jsxs22(\"div\", { className: \"flex items-start gap-2\", children: [\n /* @__PURE__ */ jsx28(\"svg\", { className: \"w-5 h-5 text-red-600 mt-0.5 flex-shrink-0\", fill: \"none\", viewBox: \"0 0 24 24\", stroke: \"currentColor\", children: /* @__PURE__ */ jsx28(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" }) }),\n /* @__PURE__ */ jsxs22(\"div\", { children: [\n /* @__PURE__ */ jsx28(\"h3\", { className: \"text-sm font-semibold text-red-800 dark:text-red-400\", children: \"Error\" }),\n /* @__PURE__ */ jsx28(\"p\", { className: \"text-red-700 dark:text-red-300 text-sm mt-1\", children: error?.message })\n ] })\n ] }) }),\n allowInput && /* @__PURE__ */ jsx28(\n \"textarea\",\n {\n value: command,\n onChange: (e) => setCommand(e.target.value),\n onKeyDown: (e) => {\n if (e.key === \"Enter\" && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n executeCommand();\n }\n },\n placeholder,\n className: \"flex-1 w-full resize-none bg-transparent border-none focus:outline-none text-neutral-900 dark:text-white placeholder-neutral-400\",\n rows: 4\n }\n )\n ] }),\n state === \"success\" && result && !isCompact && /* @__PURE__ */ jsx28(\"div\", { className: \"flex-1 overflow-auto\", children: resultRenderer ? resultRenderer(result.data) : /* @__PURE__ */ jsxs22(\"div\", { className: \"space-y-4\", children: [\n /* @__PURE__ */ jsxs22(\"div\", { className: \"flex items-start gap-3 p-3 bg-green-50 dark:bg-green-900/20 border border-green-200 dark:border-green-800 rounded-lg\", children: [\n /* @__PURE__ */ jsx28(\"svg\", { className: \"w-5 h-5 text-green-600 mt-0.5 flex-shrink-0\", fill: \"none\", viewBox: \"0 0 24 24\", stroke: \"currentColor\", children: /* @__PURE__ */ jsx28(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z\" }) }),\n /* @__PURE__ */ jsxs22(\"div\", { className: \"flex-1\", children: [\n /* @__PURE__ */ jsx28(\"h3\", { className: \"text-sm font-semibold text-green-800 dark:text-green-400 mb-1\", children: \"Success\" }),\n /* @__PURE__ */ jsx28(\"p\", { className: \"text-green-700 dark:text-green-300 text-sm\", children: \"Command executed successfully\" })\n ] })\n ] }),\n result.data?.summary && /* @__PURE__ */ jsx28(\"div\", { className: \"text-neutral-700 dark:text-neutral-300 text-sm leading-relaxed whitespace-pre-line\", children: result.data.summary }),\n result.widgets && result.widgets.length > 0 && /* @__PURE__ */ jsx28(\"div\", { className: \"space-y-3\", children: result.widgets.map((widget) => /* @__PURE__ */ jsx28(\n WidgetRenderer,\n {\n widget,\n onAction\n },\n widget.id\n )) })\n ] }) }),\n state === \"success\" && result && isCompact && /* @__PURE__ */ jsxs22(Fragment7, { children: [\n /* @__PURE__ */ jsxs22(\n \"div\",\n {\n className: \"flex-1 flex items-center gap-2 py-1 cursor-text min-w-0\",\n onClick: () => {\n setState(\"idle\");\n setResult(null);\n },\n children: [\n /* @__PURE__ */ jsx28(\"svg\", { className: \"w-4 h-4 text-green-600 flex-shrink-0\", fill: \"none\", viewBox: \"0 0 24 24\", stroke: \"currentColor\", children: /* @__PURE__ */ jsx28(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z\" }) }),\n /* @__PURE__ */ jsx28(\"div\", { className: \"text-green-700 dark:text-green-300 text-sm truncate flex-1 min-w-0\", children: resultRenderer ? resultRenderer(result.data) : result.message || \"Command executed successfully\" })\n ]\n }\n ),\n /* @__PURE__ */ jsx28(\n \"button\",\n {\n onClick: () => {\n setState(\"idle\");\n setResult(null);\n },\n className: cn(\n \"w-8 h-8 rounded-lg flex items-center justify-center font-bold transition-all flex-shrink-0\",\n \"border border-neutral-300 dark:border-neutral-600\",\n \"bg-white dark:bg-neutral-800\",\n \"!text-neutral-700 dark:!text-neutral-300\",\n \"hover:bg-neutral-50 dark:hover:bg-neutral-700\",\n \"!text-lg\"\n ),\n title: \"New command\",\n children: /* @__PURE__ */ jsx28(\"svg\", { width: \"16\", height: \"16\", viewBox: \"0 0 16 16\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", children: /* @__PURE__ */ jsx28(\"path\", { d: \"M8 3L8 13M8 3L4 7M8 3L12 7\", stroke: \"currentColor\", strokeWidth: \"2\", strokeLinecap: \"round\", strokeLinejoin: \"round\" }) })\n }\n )\n ] })\n ] }),\n !isCompact && /* @__PURE__ */ jsxs22(\"div\", { className: \"p-3 flex items-center justify-between gap-2\", children: [\n /* @__PURE__ */ jsx28(\"div\", { className: \"flex items-center gap-1\", children: state === \"idle\" && allowInput && /* @__PURE__ */ jsxs22(Fragment7, { children: [\n enableFileUpload && /* @__PURE__ */ jsx28(\n \"button\",\n {\n onClick: () => fileInputRef.current?.click(),\n className: \"w-8 h-8 rounded-lg flex items-center justify-center transition-all flex-shrink-0 !text-neutral-500 dark:!text-neutral-500 hover:bg-neutral-100 dark:hover:bg-neutral-800\",\n title: \"Attach file\",\n children: /* @__PURE__ */ jsx28(\"svg\", { width: \"16\", height: \"16\", viewBox: \"0 0 16 16\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", children: /* @__PURE__ */ jsx28(\"path\", { d: \"M8.4 2.8L4.4 6.8C3.736 7.464 3.736 8.536 4.4 9.2C5.064 9.864 6.136 9.864 6.8 9.2L11.6 4.4C12.704 3.296 12.704 1.504 11.6 0.4C10.496 -0.704 8.704 -0.704 7.6 0.4L2.8 5.2C1.256 6.744 1.256 9.256 2.8 10.8C4.344 12.344 6.856 12.344 8.4 10.8L12.4 6.8\", stroke: \"currentColor\", strokeWidth: \"1.2\", strokeLinecap: \"round\", strokeLinejoin: \"round\", transform: \"translate(1.6, 2.4)\" }) })\n }\n ),\n planMode && /* @__PURE__ */ jsxs22(\"div\", { className: \"relative settings-menu-container\", children: [\n /* @__PURE__ */ jsx28(\n \"button\",\n {\n onClick: () => setShowSettingsMenu(!showSettingsMenu),\n className: cn(\n \"w-8 h-8 rounded-lg flex items-center justify-center transition-all flex-shrink-0 hover:bg-neutral-100 dark:hover:bg-neutral-800\",\n internalPlanMode ? \"!text-blue-600 dark:!text-blue-400\" : \"!text-neutral-500 dark:!text-neutral-500\"\n ),\n title: \"Settings\",\n children: /* @__PURE__ */ jsxs22(\"svg\", { width: \"16\", height: \"16\", viewBox: \"0 0 24 24\", fill: \"none\", stroke: \"currentColor\", strokeWidth: \"2\", strokeLinecap: \"round\", strokeLinejoin: \"round\", children: [\n /* @__PURE__ */ jsx28(\"line\", { x1: \"4\", y1: \"21\", x2: \"4\", y2: \"14\" }),\n /* @__PURE__ */ jsx28(\"line\", { x1: \"4\", y1: \"10\", x2: \"4\", y2: \"3\" }),\n /* @__PURE__ */ jsx28(\"line\", { x1: \"12\", y1: \"21\", x2: \"12\", y2: \"12\" }),\n /* @__PURE__ */ jsx28(\"line\", { x1: \"12\", y1: \"8\", x2: \"12\", y2: \"3\" }),\n /* @__PURE__ */ jsx28(\"line\", { x1: \"20\", y1: \"21\", x2: \"20\", y2: \"16\" }),\n /* @__PURE__ */ jsx28(\"line\", { x1: \"20\", y1: \"12\", x2: \"20\", y2: \"3\" }),\n /* @__PURE__ */ jsx28(\"line\", { x1: \"1\", y1: \"14\", x2: \"7\", y2: \"14\" }),\n /* @__PURE__ */ jsx28(\"line\", { x1: \"9\", y1: \"8\", x2: \"15\", y2: \"8\" }),\n /* @__PURE__ */ jsx28(\"line\", { x1: \"17\", y1: \"16\", x2: \"23\", y2: \"16\" })\n ] })\n }\n ),\n showSettingsMenu && /* @__PURE__ */ jsx28(\"div\", { className: \"absolute top-10 left-0 z-50 w-64 bg-white dark:bg-neutral-800 border border-neutral-200 dark:border-neutral-700 rounded-lg shadow-lg p-3 settings-menu-container\", children: /* @__PURE__ */ jsxs22(\"label\", { className: \"flex items-center justify-between cursor-pointer group\", children: [\n /* @__PURE__ */ jsxs22(\"div\", { className: \"flex items-center gap-2\", children: [\n /* @__PURE__ */ jsx28(\"svg\", { className: \"w-4 h-4 text-neutral-500 dark:text-neutral-400\", fill: \"none\", viewBox: \"0 0 24 24\", stroke: \"currentColor\", children: /* @__PURE__ */ jsx28(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-3 7h3m-3 4h3m-6-4h.01M9 16h.01\" }) }),\n /* @__PURE__ */ jsxs22(\"div\", { children: [\n /* @__PURE__ */ jsx28(\"div\", { className: \"text-sm font-medium text-neutral-700 dark:text-neutral-300\", children: \"Plan Mode\" }),\n /* @__PURE__ */ jsx28(\"div\", { className: \"text-xs text-neutral-500 dark:text-neutral-400\", children: \"Review before executing\" })\n ] })\n ] }),\n /* @__PURE__ */ jsx28(\n \"button\",\n {\n onClick: (e) => {\n e.stopPropagation();\n setInternalPlanMode(!internalPlanMode);\n },\n className: cn(\n \"relative inline-flex h-5 w-9 items-center rounded-full transition-colors\",\n internalPlanMode ? \"bg-blue-600\" : \"bg-neutral-300 dark:bg-neutral-600\"\n ),\n type: \"button\",\n children: /* @__PURE__ */ jsx28(\n \"span\",\n {\n className: cn(\n \"inline-block h-3.5 w-3.5 transform rounded-full bg-white transition-transform\",\n internalPlanMode ? \"translate-x-5\" : \"translate-x-0.5\"\n )\n }\n )\n }\n )\n ] }) })\n ] })\n ] }) }),\n !(state === \"idle\" && allowInput) && /* @__PURE__ */ jsx28(\"div\", {}),\n /* @__PURE__ */ jsxs22(\"div\", { className: \"flex items-center gap-2\", children: [\n (state === \"success\" || state === \"error\") && allowInput && /* @__PURE__ */ jsx28(\n \"button\",\n {\n onClick: resetCommand,\n className: \"px-3 py-1.5 text-sm text-neutral-600 dark:text-neutral-400 hover:text-neutral-900 dark:hover:text-white transition-colors\",\n children: \"Reset\"\n }\n ),\n (state === \"idle\" || state === \"error\") && /* @__PURE__ */ jsx28(\n \"button\",\n {\n onClick: () => executeCommand(),\n disabled: !command.trim(),\n className: cn(\n \"w-8 h-8 rounded-lg flex items-center justify-center font-bold transition-all\",\n \"border border-neutral-300 dark:border-neutral-600\",\n \"bg-white dark:bg-neutral-800\",\n \"!text-neutral-700 dark:!text-neutral-300\",\n \"hover:bg-neutral-50 dark:hover:bg-neutral-700\",\n \"disabled:opacity-30 disabled:cursor-not-allowed\",\n \"!text-lg\",\n !command.trim() && \"border-neutral-200 dark:border-neutral-700 !text-neutral-400 dark:!text-neutral-600\"\n ),\n title: state === \"error\" ? \"Retry\" : \"Execute\",\n children: state === \"error\" ? /* @__PURE__ */ jsx28(\"svg\", { width: \"16\", height: \"16\", viewBox: \"0 0 16 16\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", children: /* @__PURE__ */ jsx28(\"path\", { d: \"M13 8C13 10.7614 10.7614 13 8 13C5.23858 13 3 10.7614 3 8C3 5.23858 5.23858 3 8 3C9.65685 3 11.1257 3.82818 12 5.09091M12 3V5.09091M12 5.09091H9.81818\", stroke: \"currentColor\", strokeWidth: \"2\", strokeLinecap: \"round\", strokeLinejoin: \"round\" }) }) : /* @__PURE__ */ jsx28(\"svg\", { width: \"16\", height: \"16\", viewBox: \"0 0 16 16\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", children: /* @__PURE__ */ jsx28(\"path\", { d: \"M8 3L8 13M8 3L4 7M8 3L12 7\", stroke: \"currentColor\", strokeWidth: \"2\", strokeLinecap: \"round\", strokeLinejoin: \"round\" }) })\n }\n )\n ] })\n ] }),\n showPlanDetails && isCompact && state === \"plan-pending\" && /* @__PURE__ */ jsx28(\"div\", { className: \"fixed inset-0 bg-black/50 flex items-center justify-center z-50 p-4\", onClick: () => setShowPlanDetails(false), children: /* @__PURE__ */ jsxs22(\"div\", { className: \"bg-white dark:bg-neutral-900 rounded-2xl shadow-2xl max-w-2xl w-full max-h-[80vh] overflow-hidden\", onClick: (e) => e.stopPropagation(), children: [\n /* @__PURE__ */ jsxs22(\"div\", { className: \"flex items-center justify-between p-6 border-b border-neutral-200 dark:border-neutral-700\", children: [\n /* @__PURE__ */ jsxs22(\"div\", { className: \"flex items-center gap-3\", children: [\n /* @__PURE__ */ jsx28(\"svg\", { className: \"w-6 h-6 text-blue-600 dark:text-blue-400\", fill: \"none\", viewBox: \"0 0 24 24\", stroke: \"currentColor\", children: /* @__PURE__ */ jsx28(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-3 7h3m-3 4h3m-6-4h.01M9 16h.01\" }) }),\n /* @__PURE__ */ jsx28(\"h2\", { className: \"text-xl font-semibold text-neutral-900 dark:text-white\", children: \"Proposed Execution Plan\" })\n ] }),\n /* @__PURE__ */ jsx28(\n \"button\",\n {\n onClick: () => setShowPlanDetails(false),\n className: \"text-neutral-400 hover:text-neutral-600 dark:hover:text-neutral-300 transition-colors\",\n children: /* @__PURE__ */ jsx28(\"svg\", { className: \"w-6 h-6\", fill: \"none\", viewBox: \"0 0 24 24\", stroke: \"currentColor\", children: /* @__PURE__ */ jsx28(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M6 18L18 6M6 6l12 12\" }) })\n }\n )\n ] }),\n /* @__PURE__ */ jsx28(\"div\", { className: \"p-6 overflow-y-auto max-h-[calc(80vh-180px)]\", children: /* @__PURE__ */ jsx28(\"div\", { className: \"prose prose-sm dark:prose-invert max-w-none\", children: /* @__PURE__ */ jsx28(\"div\", { className: \"text-neutral-700 dark:text-neutral-300 whitespace-pre-line leading-relaxed\", children: plan }) }) }),\n /* @__PURE__ */ jsxs22(\"div\", { className: \"flex items-center justify-end gap-3 p-6 border-t border-neutral-200 dark:border-neutral-700 bg-neutral-50 dark:bg-neutral-800/50\", children: [\n /* @__PURE__ */ jsx28(\n \"button\",\n {\n onClick: rejectPlan,\n className: \"px-6 py-2.5 bg-neutral-200 dark:bg-neutral-700 text-neutral-700 dark:text-neutral-300 rounded-lg hover:bg-neutral-300 dark:hover:bg-neutral-600 transition-colors font-medium\",\n children: \"Modify Command\"\n }\n ),\n /* @__PURE__ */ jsx28(\n \"button\",\n {\n onClick: approvePlan,\n className: \"px-6 py-2.5 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors font-medium\",\n children: \"Approve & Execute\"\n }\n )\n ] })\n ] }) }),\n /* @__PURE__ */ jsx28(\n \"input\",\n {\n ref: fileInputRef,\n type: \"file\",\n multiple: true,\n onChange: handleFileSelect,\n className: \"hidden\",\n accept: \"image/*,application/pdf,.doc,.docx,.txt\"\n }\n ),\n /* @__PURE__ */ jsx28(\"style\", { dangerouslySetInnerHTML: {\n __html: `\n @keyframes pulse-border {\n 0%, 100% {\n border-color: rgb(59, 130, 246);\n }\n 50% {\n border-color: rgb(147, 197, 253);\n }\n }\n .animate-pulse-border {\n animation: pulse-border 2s ease-in-out infinite;\n }\n `\n } })\n ]\n }\n );\n}\n\n// src/components/Prompt/Prompt.tsx\nimport { useState as useState13 } from \"react\";\nimport { jsx as jsx29, jsxs as jsxs23 } from \"react/jsx-runtime\";\nfunction Prompt({\n agentId,\n placeholder = \"Enter your prompt...\",\n initialValue = \"\",\n useMock = true,\n submitOn = \"button\",\n debounceMs = 0,\n minLength = 0,\n maxLength,\n onSubmit,\n onResult,\n onChange,\n variant = \"inline\",\n showSuggestions = false,\n className\n}) {\n const [value, setValue] = useState13(initialValue);\n const [isLoading, setIsLoading] = useState13(false);\n const [suggestions] = useState13([\"Plan a trip\", \"Write a description\", \"Analyze data\"]);\n const handleChange = (e) => {\n const newValue = e.target.value;\n if (!maxLength || newValue.length <= maxLength) {\n setValue(newValue);\n onChange?.(newValue);\n }\n };\n const handleSubmit = async () => {\n if (value.length < minLength) return;\n onSubmit?.(value);\n setIsLoading(true);\n try {\n if (useMock) {\n await new Promise((resolve) => setTimeout(resolve, 1500));\n const mockResult = `Enhanced version: ${value} [AI-generated content]`;\n onResult?.(mockResult);\n setValue(\"\");\n } else {\n const response = await aptevaClient.chat({\n agent_id: agentId,\n message: value\n });\n onResult?.(response.message);\n setValue(\"\");\n }\n } catch (error) {\n console.error(\"Error processing prompt:\", error);\n } finally {\n setIsLoading(false);\n }\n };\n const handleKeyDown = (e) => {\n if (submitOn === \"enter\" && e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n handleSubmit();\n }\n };\n const handleBlur = () => {\n if (submitOn === \"blur\" && value.trim()) {\n handleSubmit();\n }\n };\n return /* @__PURE__ */ jsxs23(\"div\", { className: cn(\"space-y-2\", className), children: [\n /* @__PURE__ */ jsxs23(\"div\", { className: \"flex gap-2\", children: [\n /* @__PURE__ */ jsx29(\n \"input\",\n {\n type: \"text\",\n value,\n onChange: handleChange,\n onKeyDown: handleKeyDown,\n onBlur: handleBlur,\n placeholder,\n disabled: isLoading,\n className: \"flex-1 px-4 py-2 border border-neutral-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-apteva-500 dark:bg-neutral-800 dark:border-neutral-600 dark:text-white\"\n }\n ),\n submitOn === \"button\" && /* @__PURE__ */ jsx29(\n \"button\",\n {\n onClick: handleSubmit,\n disabled: isLoading || value.length < minLength,\n className: \"px-6 py-2 bg-apteva-500 text-white rounded-lg hover:bg-apteva-600 disabled:opacity-50 disabled:cursor-not-allowed transition-colors font-medium\",\n children: isLoading ? \"Processing...\" : \"Generate\"\n }\n )\n ] }),\n maxLength && /* @__PURE__ */ jsxs23(\"p\", { className: \"text-xs text-neutral-500\", children: [\n value.length,\n \" / \",\n maxLength,\n \" characters\"\n ] }),\n showSuggestions && !value && /* @__PURE__ */ jsx29(\"div\", { className: \"flex flex-wrap gap-2\", children: suggestions.map((suggestion, idx) => /* @__PURE__ */ jsx29(\n \"button\",\n {\n onClick: () => setValue(suggestion),\n className: \"px-3 py-1 text-sm bg-neutral-100 hover:bg-neutral-200 text-neutral-700 rounded-full transition-colors\",\n children: suggestion\n },\n idx\n )) }),\n isLoading && /* @__PURE__ */ jsxs23(\"div\", { className: \"flex items-center gap-2 text-sm text-neutral-500\", children: [\n /* @__PURE__ */ jsx29(\"div\", { className: \"w-4 h-4 border-2 border-apteva-500 border-t-transparent rounded-full animate-spin\" }),\n /* @__PURE__ */ jsx29(\"span\", { children: \"AI is processing your request...\" })\n ] })\n ] });\n}\n\n// src/components/Stream/Stream.tsx\nimport { useState as useState14, useEffect as useEffect12 } from \"react\";\nimport { jsx as jsx30, jsxs as jsxs24 } from \"react/jsx-runtime\";\nfunction Stream({\n agentId,\n prompt,\n context,\n autoStart = false,\n useMock = true,\n onStart,\n onChunk,\n onComplete,\n onError,\n variant = \"prose\",\n showCursor = true,\n typingSpeed = 30,\n className\n}) {\n const [text, setText] = useState14(\"\");\n const [isStreaming, setIsStreaming] = useState14(false);\n const [isComplete, setIsComplete] = useState14(false);\n useEffect12(() => {\n if (autoStart && !isStreaming && !isComplete) {\n startStreaming();\n }\n }, [autoStart]);\n const startStreaming = async () => {\n setIsStreaming(true);\n onStart?.();\n try {\n if (useMock) {\n const mockText = \"This is a simulated streaming response from the AI agent. In a real implementation, this would stream data from your backend API. The text appears word by word to simulate the streaming effect. You can customize the typing speed and styling based on your needs.\";\n await generateMockStreamingResponse(\n mockText,\n (chunk) => {\n setText((prev) => prev + chunk);\n onChunk?.(chunk);\n },\n typingSpeed\n );\n setIsComplete(true);\n setIsStreaming(false);\n onComplete?.(text + mockText);\n } else {\n let accumulatedText = \"\";\n await aptevaClient.chatStream(\n {\n agent_id: agentId,\n message: prompt,\n stream: true\n },\n (chunk) => {\n if (chunk.type === \"token\" && chunk.content) {\n accumulatedText += chunk.content;\n setText(accumulatedText);\n onChunk?.(chunk.content);\n }\n },\n () => {\n setIsComplete(true);\n setIsStreaming(false);\n onComplete?.(accumulatedText);\n },\n (error) => {\n const err = error instanceof Error ? error : new Error(\"Streaming error\");\n onError?.(err);\n setIsStreaming(false);\n }\n );\n }\n } catch (error) {\n const err = error instanceof Error ? error : new Error(\"Streaming error\");\n onError?.(err);\n setIsStreaming(false);\n }\n };\n const variantClasses = {\n prose: \"prose prose-sm max-w-none dark:prose-invert\",\n code: \"font-mono text-sm bg-neutral-900 text-green-400 p-4 rounded-lg\",\n plain: \"text-neutral-900 dark:text-neutral-100\"\n };\n if (!isStreaming && !isComplete) {\n return /* @__PURE__ */ jsx30(\"div\", { className: cn(\"p-4\", className), children: /* @__PURE__ */ jsx30(\n \"button\",\n {\n onClick: startStreaming,\n className: \"px-6 py-3 bg-apteva-500 text-white rounded-lg hover:bg-apteva-600 transition-colors font-medium\",\n children: \"Start Streaming\"\n }\n ) });\n }\n return /* @__PURE__ */ jsxs24(\"div\", { className: cn(variantClasses[variant], className), children: [\n text,\n isStreaming && showCursor && /* @__PURE__ */ jsx30(\"span\", { className: \"apteva-stream-cursor\" })\n ] });\n}\n\n// src/components/Threads/ThreadList.tsx\nimport { useState as useState15 } from \"react\";\n\n// src/components/Threads/ThreadItem.tsx\nimport { jsx as jsx31, jsxs as jsxs25 } from \"react/jsx-runtime\";\nfunction ThreadItem({ thread, isActive = false, onSelect, onDelete }) {\n return /* @__PURE__ */ jsxs25(\n \"div\",\n {\n className: cn(\"apteva-thread-item\", {\n \"apteva-thread-item-active\": isActive\n }),\n onClick: onSelect,\n children: [\n /* @__PURE__ */ jsxs25(\"div\", { className: \"flex-1 min-w-0\", children: [\n /* @__PURE__ */ jsx31(\"h4\", { className: \"font-semibold text-neutral-900 dark:text-white truncate\", children: thread.title }),\n thread.preview && /* @__PURE__ */ jsx31(\"p\", { className: \"text-sm text-neutral-600 dark:text-neutral-400 truncate\", children: thread.preview }),\n /* @__PURE__ */ jsxs25(\"div\", { className: \"flex items-center gap-2 mt-1 text-xs text-neutral-500\", children: [\n /* @__PURE__ */ jsxs25(\"span\", { children: [\n thread.messageCount,\n \" messages\"\n ] }),\n /* @__PURE__ */ jsx31(\"span\", { children: \"\\u2022\" }),\n /* @__PURE__ */ jsx31(\"span\", { children: formatRelativeTime(thread.updatedAt) })\n ] })\n ] }),\n onDelete && /* @__PURE__ */ jsx31(\n \"button\",\n {\n onClick: (e) => {\n e.stopPropagation();\n onDelete();\n },\n className: \"p-2 text-neutral-400 hover:text-red-500 hover:bg-red-50 rounded transition-colors\",\n title: \"Delete thread\",\n children: \"\\u{1F5D1}\\uFE0F\"\n }\n )\n ]\n }\n );\n}\nfunction formatRelativeTime(date) {\n const now = /* @__PURE__ */ new Date();\n const diff = now.getTime() - date.getTime();\n const minutes = Math.floor(diff / 6e4);\n const hours = Math.floor(diff / 36e5);\n const days = Math.floor(diff / 864e5);\n if (minutes < 1) return \"Just now\";\n if (minutes < 60) return `${minutes}m ago`;\n if (hours < 24) return `${hours}h ago`;\n if (days < 7) return `${days}d ago`;\n return date.toLocaleDateString();\n}\n\n// src/components/Threads/ThreadList.tsx\nimport { jsx as jsx32, jsxs as jsxs26 } from \"react/jsx-runtime\";\nfunction ThreadList({\n threads,\n currentThreadId,\n onThreadSelect,\n onThreadDelete,\n showSearch = false,\n groupBy = \"none\"\n}) {\n const [searchQuery, setSearchQuery] = useState15(\"\");\n const filteredThreads = threads.filter(\n (thread) => thread.title.toLowerCase().includes(searchQuery.toLowerCase()) || thread.preview?.toLowerCase().includes(searchQuery.toLowerCase())\n );\n const groupedThreads = groupBy === \"date\" ? groupThreadsByDate(filteredThreads) : { All: filteredThreads };\n return /* @__PURE__ */ jsxs26(\"div\", { className: \"flex flex-col h-full\", children: [\n showSearch && /* @__PURE__ */ jsx32(\"div\", { className: \"p-3 border-b border-neutral-200 dark:border-neutral-700\", children: /* @__PURE__ */ jsx32(\n \"input\",\n {\n type: \"text\",\n placeholder: \"Search conversations...\",\n value: searchQuery,\n onChange: (e) => setSearchQuery(e.target.value),\n className: \"w-full px-3 py-2 text-sm border border-neutral-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-apteva-500 dark:bg-neutral-800 dark:border-neutral-600 dark:text-white\"\n }\n ) }),\n /* @__PURE__ */ jsxs26(\"div\", { className: \"flex-1 overflow-y-auto\", children: [\n Object.entries(groupedThreads).map(([group, groupThreads]) => /* @__PURE__ */ jsxs26(\"div\", { children: [\n groupBy !== \"none\" && /* @__PURE__ */ jsx32(\"div\", { className: \"px-3 py-2 text-xs font-semibold text-neutral-500 uppercase\", children: group }),\n groupThreads.map((thread) => /* @__PURE__ */ jsx32(\n ThreadItem,\n {\n thread,\n isActive: thread.id === currentThreadId,\n onSelect: () => onThreadSelect?.(thread.id),\n onDelete: () => onThreadDelete?.(thread.id)\n },\n thread.id\n ))\n ] }, group)),\n filteredThreads.length === 0 && /* @__PURE__ */ jsxs26(\"div\", { className: \"p-8 text-center text-neutral-500\", children: [\n /* @__PURE__ */ jsx32(\"svg\", { className: \"w-10 h-10 mx-auto mb-2 opacity-50\", fill: \"none\", stroke: \"currentColor\", viewBox: \"0 0 24 24\", children: /* @__PURE__ */ jsx32(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 1.5, d: \"M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z\" }) }),\n /* @__PURE__ */ jsx32(\"p\", { children: \"No conversations found\" })\n ] })\n ] })\n ] });\n}\nfunction groupThreadsByDate(threads) {\n const now = /* @__PURE__ */ new Date();\n const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n const yesterday = new Date(today);\n yesterday.setDate(yesterday.getDate() - 1);\n const lastWeek = new Date(today);\n lastWeek.setDate(lastWeek.getDate() - 7);\n return threads.reduce(\n (groups, thread) => {\n const threadDate = new Date(thread.updatedAt);\n let group = \"Older\";\n if (threadDate >= today) {\n group = \"Today\";\n } else if (threadDate >= yesterday) {\n group = \"Yesterday\";\n } else if (threadDate >= lastWeek) {\n group = \"Last 7 Days\";\n }\n if (!groups[group]) groups[group] = [];\n groups[group].push(thread);\n return groups;\n },\n {}\n );\n}\n\n// src/components/Threads/Threads.tsx\nimport { jsx as jsx33, jsxs as jsxs27 } from \"react/jsx-runtime\";\nfunction Threads({\n threads,\n currentThreadId,\n onThreadSelect,\n onThreadDelete,\n onNewThread,\n variant = \"sidebar\",\n showSearch = false,\n showNewButton = true,\n groupBy = \"none\",\n className\n}) {\n const variantClasses = {\n sidebar: \"h-full border-r border-neutral-200 dark:border-neutral-700 bg-white dark:bg-neutral-900\",\n dropdown: \"absolute top-full left-0 right-0 mt-2 bg-white dark:bg-neutral-800 rounded-lg shadow-lg border border-neutral-200 dark:border-neutral-700 max-h-96 overflow-hidden\",\n tabs: \"flex gap-2 border-b border-neutral-200 dark:border-neutral-700 overflow-x-auto\"\n };\n if (variant === \"tabs\") {\n return /* @__PURE__ */ jsxs27(\"div\", { className: cn(variantClasses[variant], className), children: [\n threads.slice(0, 5).map((thread) => /* @__PURE__ */ jsx33(\n \"button\",\n {\n onClick: () => onThreadSelect?.(thread.id),\n className: cn(\n \"px-4 py-2 whitespace-nowrap font-medium transition-colors\",\n thread.id === currentThreadId ? \"border-b-2 border-apteva-500 text-apteva-500\" : \"text-neutral-600 hover:text-neutral-900\"\n ),\n children: thread.title\n },\n thread.id\n )),\n showNewButton && onNewThread && /* @__PURE__ */ jsx33(\n \"button\",\n {\n onClick: onNewThread,\n className: \"px-4 py-2 text-neutral-600 hover:text-apteva-500 transition-colors font-medium\",\n children: \"+ New\"\n }\n )\n ] });\n }\n return /* @__PURE__ */ jsxs27(\"div\", { className: cn(variantClasses[variant], \"flex flex-col\", className), children: [\n showNewButton && onNewThread && /* @__PURE__ */ jsx33(\"div\", { className: \"p-3 border-b border-neutral-200 dark:border-neutral-700\", children: /* @__PURE__ */ jsx33(\n \"button\",\n {\n onClick: onNewThread,\n className: \"w-full px-4 py-2 bg-apteva-500 text-white rounded-lg hover:bg-apteva-600 transition-colors font-medium\",\n children: \"+ New Conversation\"\n }\n ) }),\n /* @__PURE__ */ jsx33(\n ThreadList,\n {\n threads,\n currentThreadId,\n onThreadSelect,\n onThreadDelete,\n showSearch,\n groupBy\n }\n )\n ] });\n}\n\n// src/components/AutoInterface/AutoInterface.tsx\nimport { useState as useState17, useRef as useRef11, useCallback as useCallback6, useEffect as useEffect13 } from \"react\";\n\n// src/components/AutoInterface/LayoutRenderer.tsx\nimport { useState as useState16 } from \"react\";\nimport { Fragment as Fragment8, jsx as jsx34, jsxs as jsxs28 } from \"react/jsx-runtime\";\nvar gapClasses = {\n none: \"gap-0\",\n sm: \"gap-2\",\n md: \"gap-4\",\n lg: \"gap-6\"\n};\nvar paddingClasses = {\n none: \"p-0\",\n sm: \"p-2\",\n md: \"p-4\",\n lg: \"p-6\"\n};\nvar maxWidthClasses = {\n sm: \"max-w-2xl\",\n md: \"max-w-4xl\",\n lg: \"max-w-6xl\",\n xl: \"max-w-7xl\",\n full: \"max-w-full\"\n};\nfunction LayoutRenderer({ node, onAction, renderNode }) {\n const children = node.children || [];\n switch (node.layout) {\n case \"page\":\n return /* @__PURE__ */ jsx34(PageLayout, { node, renderNode });\n case \"row\":\n return /* @__PURE__ */ jsx34(RowLayout, { node, renderNode });\n case \"columns\":\n return /* @__PURE__ */ jsx34(ColumnsLayout, { node, renderNode });\n case \"stack\":\n return /* @__PURE__ */ jsx34(StackLayout, { node, renderNode });\n case \"sidebar\":\n return /* @__PURE__ */ jsx34(SidebarLayout, { node, renderNode });\n case \"tabs\":\n return /* @__PURE__ */ jsx34(TabsLayout, { node, renderNode });\n default:\n return /* @__PURE__ */ jsx34(\"div\", { className: \"space-y-4\", children: children.map((child) => /* @__PURE__ */ jsx34(\"div\", { children: renderNode(child) }, child.id)) });\n }\n}\nfunction PageLayout({ node, renderNode }) {\n const { title, padding = \"md\", maxWidth = \"xl\" } = node.props || {};\n const children = node.children || [];\n return /* @__PURE__ */ jsxs28(\"div\", { className: cn(\"w-full mx-auto\", paddingClasses[padding], maxWidthClasses[maxWidth]), children: [\n title && /* @__PURE__ */ jsx34(\"h1\", { className: \"!text-2xl font-bold !text-neutral-900 dark:!text-white mb-6\", children: title }),\n /* @__PURE__ */ jsx34(\"div\", { className: \"space-y-6\", children: children.map((child) => /* @__PURE__ */ jsx34(\"div\", { children: renderNode(child) }, child.id)) })\n ] });\n}\nfunction RowLayout({ node, renderNode }) {\n const { columns, gap = \"md\", align = \"stretch\" } = node.props || {};\n const children = node.children || [];\n const templateColumns = columns ? columns.map((c) => `${c}fr`).join(\" \") : `repeat(${children.length}, 1fr)`;\n const alignClasses = {\n start: \"items-start\",\n center: \"items-center\",\n end: \"items-end\",\n stretch: \"items-stretch\"\n };\n return /* @__PURE__ */ jsx34(\n \"div\",\n {\n className: cn(\"grid\", gapClasses[gap], alignClasses[align]),\n style: { gridTemplateColumns: templateColumns },\n children: children.map((child) => /* @__PURE__ */ jsx34(\"div\", { children: renderNode(child) }, child.id))\n }\n );\n}\nfunction ColumnsLayout({ node, renderNode }) {\n const { count, gap = \"md\" } = node.props || {};\n const children = node.children || [];\n const colCount = count || children.length;\n return /* @__PURE__ */ jsx34(\n \"div\",\n {\n className: cn(\"grid\", gapClasses[gap]),\n style: { gridTemplateColumns: `repeat(${colCount}, 1fr)` },\n children: children.map((child) => /* @__PURE__ */ jsx34(\"div\", { children: renderNode(child) }, child.id))\n }\n );\n}\nfunction StackLayout({ node, renderNode }) {\n const { gap = \"md\", align = \"stretch\" } = node.props || {};\n const children = node.children || [];\n const alignClasses = {\n left: \"items-start\",\n center: \"items-center\",\n right: \"items-end\",\n stretch: \"items-stretch\"\n };\n return /* @__PURE__ */ jsx34(\"div\", { className: cn(\"flex flex-col\", gapClasses[gap], alignClasses[align]), children: children.map((child) => /* @__PURE__ */ jsx34(\"div\", { children: renderNode(child) }, child.id)) });\n}\nfunction SidebarLayout({ node, renderNode }) {\n const { side = \"left\", width = \"280px\" } = node.props || {};\n const children = node.children || [];\n const [sidebarChild, ...mainChildren] = side === \"left\" ? children : [...children].reverse();\n if (!sidebarChild) return null;\n const sidebar = /* @__PURE__ */ jsx34(\n \"div\",\n {\n className: \"flex-shrink-0 overflow-y-auto border-neutral-200 dark:border-neutral-700\",\n style: { width },\n children: renderNode(sidebarChild)\n }\n );\n const main = /* @__PURE__ */ jsx34(\"div\", { className: \"flex-1 overflow-y-auto min-w-0\", children: mainChildren.map((child) => /* @__PURE__ */ jsx34(\"div\", { children: renderNode(child) }, child.id)) });\n return /* @__PURE__ */ jsx34(\"div\", { className: \"flex h-full gap-4\", children: side === \"left\" ? /* @__PURE__ */ jsxs28(Fragment8, { children: [\n sidebar,\n main\n ] }) : /* @__PURE__ */ jsxs28(Fragment8, { children: [\n main,\n sidebar\n ] }) });\n}\nfunction TabsLayout({ node, renderNode }) {\n const { labels = [], defaultTab = 0 } = node.props || {};\n const children = node.children || [];\n const [activeTab, setActiveTab] = useState16(defaultTab);\n return /* @__PURE__ */ jsxs28(\"div\", { children: [\n /* @__PURE__ */ jsx34(\"div\", { className: \"flex border-b border-neutral-200 dark:border-neutral-700 mb-4\", children: labels.map((label, idx) => /* @__PURE__ */ jsx34(\n \"button\",\n {\n onClick: () => setActiveTab(idx),\n className: cn(\n \"px-4 py-2 !text-sm font-medium transition-colors border-b-2 -mb-px\",\n activeTab === idx ? \"border-blue-500 !text-blue-600 dark:!text-blue-400\" : \"border-transparent !text-neutral-500 hover:!text-neutral-700 dark:hover:!text-neutral-300\"\n ),\n children: label\n },\n idx\n )) }),\n children[activeTab] && renderNode(children[activeTab])\n ] });\n}\n\n// src/components/AutoInterface/InterfaceRenderer.tsx\nimport { Fragment as Fragment9, jsx as jsx35 } from \"react/jsx-runtime\";\nvar STRUCTURAL_KEYS = /* @__PURE__ */ new Set([\"type\", \"id\", \"layout\", \"props\", \"children\", \"actions\", \"metadata\", \"isStreaming\"]);\nfunction normalizeNode(n) {\n let node = { ...n };\n if (node.type === \"widget\" && node.props?.widget) {\n node.type = node.props.widget;\n const { widget: _, ...rest } = node.props;\n node.props = rest;\n }\n const explicit = node.props || {};\n const extra = {};\n for (const key of Object.keys(node)) {\n if (!STRUCTURAL_KEYS.has(key)) {\n extra[key] = node[key];\n }\n }\n node.props = { ...extra, ...explicit };\n if (node.props.style && !node.props.variant) {\n node.props.variant = node.props.style;\n delete node.props.style;\n }\n if (node.children) {\n node.children = node.children.map(normalizeNode);\n }\n return node;\n}\nfunction InterfaceRenderer({ node, onAction }) {\n const renderNode = (rawNode) => {\n const n = normalizeNode(rawNode);\n if (n.type === \"layout\" && n.layout) {\n return /* @__PURE__ */ jsx35(\n LayoutRenderer,\n {\n node: n,\n onAction,\n renderNode\n },\n n.id\n );\n }\n return /* @__PURE__ */ jsx35(\n WidgetRenderer,\n {\n widget: {\n type: n.type,\n id: n.id,\n props: n.props || {},\n actions: n.actions,\n metadata: n.metadata,\n isStreaming: n.isStreaming\n },\n onAction\n },\n n.id\n );\n };\n return /* @__PURE__ */ jsx35(Fragment9, { children: renderNode(node) });\n}\n\n// src/components/AutoInterface/InterfaceSkeleton.tsx\nimport { jsx as jsx36, jsxs as jsxs29 } from \"react/jsx-runtime\";\nfunction InterfaceSkeleton({ className }) {\n return /* @__PURE__ */ jsxs29(\"div\", { className: cn(\"animate-pulse space-y-6 p-6\", className), children: [\n /* @__PURE__ */ jsx36(\"div\", { className: \"h-7 bg-neutral-200 dark:bg-neutral-700 rounded w-1/3\" }),\n /* @__PURE__ */ jsx36(\"div\", { className: \"grid grid-cols-4 gap-4\", children: [1, 2, 3, 4].map((i) => /* @__PURE__ */ jsxs29(\"div\", { className: \"border border-neutral-200 dark:border-neutral-700 rounded-xl p-5 space-y-2\", children: [\n /* @__PURE__ */ jsx36(\"div\", { className: \"h-4 bg-neutral-200 dark:bg-neutral-700 rounded w-2/3\" }),\n /* @__PURE__ */ jsx36(\"div\", { className: \"h-8 bg-neutral-200 dark:bg-neutral-700 rounded w-1/2\" })\n ] }, i)) }),\n /* @__PURE__ */ jsxs29(\"div\", { className: \"grid grid-cols-3 gap-4\", children: [\n /* @__PURE__ */ jsxs29(\"div\", { className: \"col-span-2 border border-neutral-200 dark:border-neutral-700 rounded-xl p-5 space-y-3\", children: [\n /* @__PURE__ */ jsx36(\"div\", { className: \"h-4 bg-neutral-200 dark:bg-neutral-700 rounded w-1/4\" }),\n /* @__PURE__ */ jsx36(\"div\", { className: \"h-40 bg-neutral-200 dark:bg-neutral-700 rounded\" })\n ] }),\n /* @__PURE__ */ jsxs29(\"div\", { className: \"border border-neutral-200 dark:border-neutral-700 rounded-xl p-5 space-y-3\", children: [\n /* @__PURE__ */ jsx36(\"div\", { className: \"h-4 bg-neutral-200 dark:bg-neutral-700 rounded w-1/2\" }),\n [1, 2, 3].map((i) => /* @__PURE__ */ jsx36(\"div\", { className: \"h-10 bg-neutral-200 dark:bg-neutral-700 rounded\" }, i))\n ] })\n ] })\n ] });\n}\n\n// src/components/AutoInterface/AutoInterface.tsx\nimport { jsx as jsx37, jsxs as jsxs30 } from \"react/jsx-runtime\";\nasync function generateInitialInterface(apiUrl, apiKey, agentId, prompt) {\n const systemContext = generateCompactInterfaceContext();\n const message = `${systemContext}\n\nGenerate an interface for: ${prompt}`;\n const headers = { \"Content-Type\": \"application/json\" };\n if (apiKey) headers[\"X-API-Key\"] = apiKey;\n const response = await fetch(`${apiUrl}/chat`, {\n method: \"POST\",\n headers,\n body: JSON.stringify({\n agent_id: agentId,\n message,\n stream: false\n })\n });\n if (!response.ok) {\n const err = await response.json().catch(() => ({ error: \"Request failed\" }));\n throw new Error(err.error || `Request failed with status ${response.status}`);\n }\n const data = await response.json();\n const text = data.response || data.message || \"\";\n console.log(\"[AutoInterface] Raw API response:\", data);\n console.log(\"[AutoInterface] Extracted text (\" + text.length + \" chars):\", text.substring(0, 500));\n const spec = parseInterfaceFromText(text);\n console.log(\"[AutoInterface] Parsed spec:\", spec ? \"OK\" : \"null\", spec ? JSON.stringify(spec).substring(0, 300) + \"...\" : \"\");\n return { spec, threadId: data.thread_id || null };\n}\nfunction AutoInterface({\n agentId,\n threadId,\n initialPrompt,\n initialInterface,\n context,\n apiUrl,\n apiKey,\n onInterfaceChange,\n onAction,\n onThreadChange,\n onError,\n chatPosition = \"right\",\n chatWidth = \"380px\",\n chatCollapsible = true,\n chatPlaceholder = \"Ask the AI to generate or update the interface...\",\n chatWelcomeTitle = \"Auto Interface\",\n useMock,\n theme,\n className\n}) {\n const [interfaceSpec, setInterfaceSpec] = useState17(initialInterface || null);\n const [isGenerating, setIsGenerating] = useState17(false);\n const [chatCollapsed, setChatCollapsed] = useState17(false);\n const chatRef = useRef11(null);\n const systemContext = [\n generateInterfaceContext(),\n context || \"\"\n ].filter(Boolean).join(\"\\n\\n\");\n const updateInterface = useCallback6((newSpec) => {\n setInterfaceSpec(newSpec);\n onInterfaceChange?.(newSpec);\n }, [onInterfaceChange]);\n const handleAction = useCallback6((action) => {\n onAction?.(action);\n if (chatRef.current) {\n chatRef.current.sendMessage(\n `[Action: ${action.type} on widget ${action.widgetId || \"unknown\"}. Payload: ${JSON.stringify(action.payload)}]`\n );\n }\n }, [onAction]);\n const handleMessageComplete = useCallback6((result) => {\n if (!result?.data) return;\n const text = typeof result.data === \"string\" ? result.data : result.data.message || \"\";\n console.log(\"[AutoInterface] Chat message complete, text (\" + text.length + \" chars):\", text.substring(0, 300));\n const parsed = parseInterfaceFromText(text);\n if (parsed) {\n console.log(\"[AutoInterface] Parsed full interface from chat\");\n updateInterface(parsed);\n setIsGenerating(false);\n return;\n }\n const updates = parseUpdatesFromText(text);\n if (updates.length > 0 && interfaceSpec) {\n console.log(\"[AutoInterface] Parsed\", updates.length, \"updates from chat\");\n const newSpec = applyUpdates(interfaceSpec, updates);\n updateInterface(newSpec);\n } else {\n console.log(\"[AutoInterface] No interface or updates found in chat message\");\n }\n setIsGenerating(false);\n }, [interfaceSpec, updateInterface]);\n useEffect13(() => {\n if (!initialPrompt || initialInterface || useMock) return;\n if (!apiUrl) return;\n let cancelled = false;\n setIsGenerating(true);\n console.log(\"[AutoInterface] Generating initial interface for prompt:\", initialPrompt);\n console.log(\"[AutoInterface] API URL:\", apiUrl, \"| Agent:\", agentId);\n generateInitialInterface(apiUrl, apiKey, agentId, initialPrompt).then(({ spec, threadId: threadId2 }) => {\n if (cancelled) return;\n console.log(\"[AutoInterface] Generation complete. Spec:\", spec ? \"parsed OK\" : \"null\", \"| Thread:\", threadId2);\n if (spec) {\n console.log(\"[AutoInterface] Setting interface with\", JSON.stringify(spec).length, \"bytes\");\n updateInterface(spec);\n } else {\n console.warn(\"[AutoInterface] Agent did not return a parseable @interface block\");\n }\n setIsGenerating(false);\n }).catch((err) => {\n if (cancelled) return;\n console.error(\"[AutoInterface] Initial generation failed:\", err);\n onError?.(err instanceof Error ? err : new Error(String(err)));\n setIsGenerating(false);\n });\n return () => {\n cancelled = true;\n };\n }, [initialPrompt]);\n const hasInterface = interfaceSpec !== null;\n const showSkeleton = isGenerating && !hasInterface;\n return /* @__PURE__ */ jsxs30(\"div\", { className: cn(\n \"flex h-full bg-neutral-50 dark:bg-black\",\n chatPosition === \"bottom\" ? \"flex-col\" : \"flex-row\",\n className\n ), children: [\n /* @__PURE__ */ jsxs30(\"div\", { className: cn(\n \"flex-1 overflow-y-auto min-w-0\",\n hasInterface || showSkeleton ? \"\" : \"hidden\"\n ), children: [\n showSkeleton && /* @__PURE__ */ jsx37(InterfaceSkeleton, {}),\n hasInterface && interfaceSpec && /* @__PURE__ */ jsx37(\"div\", { className: \"p-4\", children: /* @__PURE__ */ jsx37(\n InterfaceRenderer,\n {\n node: interfaceSpec.root,\n onAction: handleAction\n }\n ) })\n ] }),\n chatCollapsible && hasInterface && chatPosition === \"right\" && /* @__PURE__ */ jsx37(\n \"button\",\n {\n onClick: () => setChatCollapsed(!chatCollapsed),\n className: \"flex-shrink-0 w-6 flex items-center justify-center border-l border-neutral-200 dark:border-neutral-700 bg-neutral-100 dark:bg-neutral-800 hover:bg-neutral-200 dark:hover:bg-neutral-700 transition-colors\",\n title: chatCollapsed ? \"Show chat\" : \"Hide chat\",\n children: /* @__PURE__ */ jsx37(\"span\", { className: \"!text-xs !text-neutral-500 dark:!text-neutral-400\", children: chatCollapsed ? \"\\u25C0\" : \"\\u25B6\" })\n }\n ),\n /* @__PURE__ */ jsx37(\n \"div\",\n {\n className: cn(\n \"flex-shrink-0 border-neutral-200 dark:border-neutral-700\",\n chatPosition === \"right\" ? \"border-l\" : \"border-t\",\n chatCollapsed && \"hidden\",\n // When no interface is generated yet, chat takes full width\n !hasInterface && !showSkeleton && \"flex-1\"\n ),\n style: hasInterface || showSkeleton ? chatPosition === \"right\" ? { width: chatWidth } : { height: \"300px\" } : void 0,\n children: /* @__PURE__ */ jsx37(\n Chat,\n {\n ref: chatRef,\n agentId,\n threadId,\n apiUrl,\n apiKey,\n useMock,\n context: systemContext,\n placeholder: chatPlaceholder,\n welcomeTitle: chatWelcomeTitle,\n welcomeSubtitle: \"Describe the interface you want to create\",\n enableStreaming: true,\n enableWidgets: true,\n showHeader: true,\n headerTitle: \"Chat\",\n onThreadChange,\n onComplete: handleMessageComplete,\n onError,\n className: \"h-full\",\n suggestedPrompts: !hasInterface ? [\n \"Show me a sales dashboard\",\n \"Create a user management panel\",\n \"Build a project overview page\"\n ] : void 0\n }\n )\n }\n )\n ] });\n}\n\n// src/utils/theme-script.ts\nvar themeScript = `\n(function() {\n try {\n // Get system preference\n const isDark = window.matchMedia('(prefers-color-scheme: dark)').matches;\n const colorMode = isDark ? 'dark' : 'light';\n\n // Set attributes before render\n document.documentElement.setAttribute('data-color-mode', colorMode);\n\n // Add dark class for Tailwind\n if (isDark) {\n document.documentElement.classList.add('dark');\n }\n } catch (e) {\n console.error('Failed to initialize theme:', e);\n }\n})();\n`;\nfunction getThemeScript() {\n return themeScript;\n}\n\n// src/hooks/useInterfaceState.ts\nimport { useState as useState18, useCallback as useCallback7 } from \"react\";\nfunction useInterfaceState(initialSpec) {\n const [spec, setSpec] = useState18(initialSpec || null);\n const [isStreaming, setIsStreaming] = useState18(false);\n const setInterface = useCallback7((newSpec) => {\n setSpec(newSpec);\n }, []);\n const clearInterface = useCallback7(() => {\n setSpec(null);\n }, []);\n const applyInterfaceUpdate = useCallback7((update) => {\n setSpec((prev) => {\n if (!prev) return prev;\n return applyUpdate(prev, update);\n });\n }, []);\n const applyInterfaceUpdates = useCallback7((updates) => {\n setSpec((prev) => {\n if (!prev) return prev;\n return applyUpdates(prev, updates);\n });\n }, []);\n const getNode = useCallback7((id) => {\n if (!spec) return null;\n return findNode(spec.root, id);\n }, [spec]);\n return {\n spec,\n isStreaming,\n setInterface,\n clearInterface,\n applyInterfaceUpdate,\n applyInterfaceUpdates,\n setIsStreaming,\n getNode\n };\n}\n\n// src/hooks/useInterfaceAI.ts\nimport { useCallback as useCallback8, useRef as useRef12 } from \"react\";\nfunction useInterfaceAI({\n agentId,\n apiUrl,\n apiKey,\n context,\n onInterface,\n onUpdates,\n onError,\n onStreamStart,\n onStreamEnd\n}) {\n const threadIdRef = useRef12(null);\n const accumulatedTextRef = useRef12(\"\");\n if (apiUrl || apiKey) {\n aptevaClient.configure({\n ...apiUrl && { apiUrl },\n ...apiKey && { apiKey }\n });\n }\n const sendMessage = useCallback8(async (message) => {\n accumulatedTextRef.current = \"\";\n onStreamStart?.();\n const systemPrompt = [\n generateInterfaceContext(),\n context || \"\"\n ].filter(Boolean).join(\"\\n\\n\");\n try {\n await aptevaClient.chatStream(\n {\n agent_id: agentId,\n message,\n thread_id: threadIdRef.current || void 0,\n stream: true,\n system: systemPrompt\n },\n // onChunk\n (chunk) => {\n if (chunk.thread_id) {\n threadIdRef.current = chunk.thread_id;\n }\n if (chunk.type === \"content\" || chunk.type === \"token\") {\n accumulatedTextRef.current += chunk.content || \"\";\n const parsed = parseInterfaceFromText(accumulatedTextRef.current);\n if (parsed) {\n onInterface?.(parsed);\n }\n const updates = parseUpdatesFromText(accumulatedTextRef.current);\n if (updates.length > 0) {\n onUpdates?.(updates);\n }\n }\n },\n // onComplete\n () => {\n onStreamEnd?.();\n },\n // onError\n (error) => {\n onError?.(error);\n onStreamEnd?.();\n }\n );\n } catch (error) {\n onError?.(error instanceof Error ? error : new Error(\"Unknown error\"));\n onStreamEnd?.();\n }\n }, [agentId, context, onInterface, onUpdates, onError, onStreamStart, onStreamEnd]);\n return {\n sendMessage,\n threadId: threadIdRef.current\n };\n}\nexport {\n AptevaClient,\n AutoInterface,\n Button,\n Card,\n Chat,\n Command,\n InterfaceRenderer,\n InterfaceSkeleton,\n Kpi,\n LayoutRenderer,\n List,\n LiveView,\n PersistentWidgetPanel,\n Prompt,\n Spacer,\n Stream,\n TextBlock,\n Threads,\n Widgets,\n applyUpdate,\n applyUpdates,\n aptevaClient,\n cn,\n containsInterface,\n convertApiMessages,\n findNode,\n generateCompactInterfaceContext,\n generateInterfaceContext,\n getThemeScript,\n mockMessages,\n mockThreads,\n mockWidgets,\n parseInterfaceFromText,\n parseUpdatesFromText,\n stripInterface,\n useInterfaceAI,\n useInterfaceState\n};\n//# sourceMappingURL=index.mjs.map",
8
+ "const CLASS_PART_SEPARATOR = '-';\nconst createClassGroupUtils = config => {\n const classMap = createClassMap(config);\n const {\n conflictingClassGroups,\n conflictingClassGroupModifiers\n } = config;\n const getClassGroupId = className => {\n const classParts = className.split(CLASS_PART_SEPARATOR);\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and remove it from classParts.\n if (classParts[0] === '' && classParts.length !== 1) {\n classParts.shift();\n }\n return getGroupRecursive(classParts, classMap) || getGroupIdForArbitraryProperty(className);\n };\n const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {\n const conflicts = conflictingClassGroups[classGroupId] || [];\n if (hasPostfixModifier && conflictingClassGroupModifiers[classGroupId]) {\n return [...conflicts, ...conflictingClassGroupModifiers[classGroupId]];\n }\n return conflicts;\n };\n return {\n getClassGroupId,\n getConflictingClassGroupIds\n };\n};\nconst getGroupRecursive = (classParts, classPartObject) => {\n if (classParts.length === 0) {\n return classPartObject.classGroupId;\n }\n const currentClassPart = classParts[0];\n const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);\n const classGroupFromNextClassPart = nextClassPartObject ? getGroupRecursive(classParts.slice(1), nextClassPartObject) : undefined;\n if (classGroupFromNextClassPart) {\n return classGroupFromNextClassPart;\n }\n if (classPartObject.validators.length === 0) {\n return undefined;\n }\n const classRest = classParts.join(CLASS_PART_SEPARATOR);\n return classPartObject.validators.find(({\n validator\n }) => validator(classRest))?.classGroupId;\n};\nconst arbitraryPropertyRegex = /^\\[(.+)\\]$/;\nconst getGroupIdForArbitraryProperty = className => {\n if (arbitraryPropertyRegex.test(className)) {\n const arbitraryPropertyClassName = arbitraryPropertyRegex.exec(className)[1];\n const property = arbitraryPropertyClassName?.substring(0, arbitraryPropertyClassName.indexOf(':'));\n if (property) {\n // I use two dots here because one dot is used as prefix for class groups in plugins\n return 'arbitrary..' + property;\n }\n }\n};\n/**\n * Exported for testing only\n */\nconst createClassMap = config => {\n const {\n theme,\n prefix\n } = config;\n const classMap = {\n nextPart: new Map(),\n validators: []\n };\n const prefixedClassGroupEntries = getPrefixedClassGroupEntries(Object.entries(config.classGroups), prefix);\n prefixedClassGroupEntries.forEach(([classGroupId, classGroup]) => {\n processClassesRecursively(classGroup, classMap, classGroupId, theme);\n });\n return classMap;\n};\nconst processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {\n classGroup.forEach(classDefinition => {\n if (typeof classDefinition === 'string') {\n const classPartObjectToEdit = classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition);\n classPartObjectToEdit.classGroupId = classGroupId;\n return;\n }\n if (typeof classDefinition === 'function') {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);\n return;\n }\n classPartObject.validators.push({\n validator: classDefinition,\n classGroupId\n });\n return;\n }\n Object.entries(classDefinition).forEach(([key, classGroup]) => {\n processClassesRecursively(classGroup, getPart(classPartObject, key), classGroupId, theme);\n });\n });\n};\nconst getPart = (classPartObject, path) => {\n let currentClassPartObject = classPartObject;\n path.split(CLASS_PART_SEPARATOR).forEach(pathPart => {\n if (!currentClassPartObject.nextPart.has(pathPart)) {\n currentClassPartObject.nextPart.set(pathPart, {\n nextPart: new Map(),\n validators: []\n });\n }\n currentClassPartObject = currentClassPartObject.nextPart.get(pathPart);\n });\n return currentClassPartObject;\n};\nconst isThemeGetter = func => func.isThemeGetter;\nconst getPrefixedClassGroupEntries = (classGroupEntries, prefix) => {\n if (!prefix) {\n return classGroupEntries;\n }\n return classGroupEntries.map(([classGroupId, classGroup]) => {\n const prefixedClassGroup = classGroup.map(classDefinition => {\n if (typeof classDefinition === 'string') {\n return prefix + classDefinition;\n }\n if (typeof classDefinition === 'object') {\n return Object.fromEntries(Object.entries(classDefinition).map(([key, value]) => [prefix + key, value]));\n }\n return classDefinition;\n });\n return [classGroupId, prefixedClassGroup];\n });\n};\n\n// LRU cache inspired from hashlru (https://github.com/dominictarr/hashlru/blob/v1.0.4/index.js) but object replaced with Map to improve performance\nconst createLruCache = maxCacheSize => {\n if (maxCacheSize < 1) {\n return {\n get: () => undefined,\n set: () => {}\n };\n }\n let cacheSize = 0;\n let cache = new Map();\n let previousCache = new Map();\n const update = (key, value) => {\n cache.set(key, value);\n cacheSize++;\n if (cacheSize > maxCacheSize) {\n cacheSize = 0;\n previousCache = cache;\n cache = new Map();\n }\n };\n return {\n get(key) {\n let value = cache.get(key);\n if (value !== undefined) {\n return value;\n }\n if ((value = previousCache.get(key)) !== undefined) {\n update(key, value);\n return value;\n }\n },\n set(key, value) {\n if (cache.has(key)) {\n cache.set(key, value);\n } else {\n update(key, value);\n }\n }\n };\n};\nconst IMPORTANT_MODIFIER = '!';\nconst createParseClassName = config => {\n const {\n separator,\n experimentalParseClassName\n } = config;\n const isSeparatorSingleCharacter = separator.length === 1;\n const firstSeparatorCharacter = separator[0];\n const separatorLength = separator.length;\n // parseClassName inspired by https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n const parseClassName = className => {\n const modifiers = [];\n let bracketDepth = 0;\n let modifierStart = 0;\n let postfixModifierPosition;\n for (let index = 0; index < className.length; index++) {\n let currentCharacter = className[index];\n if (bracketDepth === 0) {\n if (currentCharacter === firstSeparatorCharacter && (isSeparatorSingleCharacter || className.slice(index, index + separatorLength) === separator)) {\n modifiers.push(className.slice(modifierStart, index));\n modifierStart = index + separatorLength;\n continue;\n }\n if (currentCharacter === '/') {\n postfixModifierPosition = index;\n continue;\n }\n }\n if (currentCharacter === '[') {\n bracketDepth++;\n } else if (currentCharacter === ']') {\n bracketDepth--;\n }\n }\n const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.substring(modifierStart);\n const hasImportantModifier = baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER);\n const baseClassName = hasImportantModifier ? baseClassNameWithImportantModifier.substring(1) : baseClassNameWithImportantModifier;\n const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;\n return {\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n };\n };\n if (experimentalParseClassName) {\n return className => experimentalParseClassName({\n className,\n parseClassName\n });\n }\n return parseClassName;\n};\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nconst sortModifiers = modifiers => {\n if (modifiers.length <= 1) {\n return modifiers;\n }\n const sortedModifiers = [];\n let unsortedModifiers = [];\n modifiers.forEach(modifier => {\n const isArbitraryVariant = modifier[0] === '[';\n if (isArbitraryVariant) {\n sortedModifiers.push(...unsortedModifiers.sort(), modifier);\n unsortedModifiers = [];\n } else {\n unsortedModifiers.push(modifier);\n }\n });\n sortedModifiers.push(...unsortedModifiers.sort());\n return sortedModifiers;\n};\nconst createConfigUtils = config => ({\n cache: createLruCache(config.cacheSize),\n parseClassName: createParseClassName(config),\n ...createClassGroupUtils(config)\n});\nconst SPLIT_CLASSES_REGEX = /\\s+/;\nconst mergeClassList = (classList, configUtils) => {\n const {\n parseClassName,\n getClassGroupId,\n getConflictingClassGroupIds\n } = configUtils;\n /**\n * Set of classGroupIds in following format:\n * `{importantModifier}{variantModifiers}{classGroupId}`\n * @example 'float'\n * @example 'hover:focus:bg-color'\n * @example 'md:!pr'\n */\n const classGroupsInConflict = [];\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);\n let result = '';\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\n const originalClassName = classNames[index];\n const {\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n } = parseClassName(originalClassName);\n let hasPostfixModifier = Boolean(maybePostfixModifierPosition);\n let classGroupId = getClassGroupId(hasPostfixModifier ? baseClassName.substring(0, maybePostfixModifierPosition) : baseClassName);\n if (!classGroupId) {\n if (!hasPostfixModifier) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n classGroupId = getClassGroupId(baseClassName);\n if (!classGroupId) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n hasPostfixModifier = false;\n }\n const variantModifier = sortModifiers(modifiers).join(':');\n const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;\n const classId = modifierId + classGroupId;\n if (classGroupsInConflict.includes(classId)) {\n // Tailwind class omitted due to conflict\n continue;\n }\n classGroupsInConflict.push(classId);\n const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);\n for (let i = 0; i < conflictGroups.length; ++i) {\n const group = conflictGroups[i];\n classGroupsInConflict.push(modifierId + group);\n }\n // Tailwind class not in conflict\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n }\n return result;\n};\n\n/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n */\nfunction twJoin() {\n let index = 0;\n let argument;\n let resolvedValue;\n let string = '';\n while (index < arguments.length) {\n if (argument = arguments[index++]) {\n if (resolvedValue = toValue(argument)) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n}\nconst toValue = mix => {\n if (typeof mix === 'string') {\n return mix;\n }\n let resolvedValue;\n let string = '';\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if (resolvedValue = toValue(mix[k])) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nfunction createTailwindMerge(createConfigFirst, ...createConfigRest) {\n let configUtils;\n let cacheGet;\n let cacheSet;\n let functionToCall = initTailwindMerge;\n function initTailwindMerge(classList) {\n const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());\n configUtils = createConfigUtils(config);\n cacheGet = configUtils.cache.get;\n cacheSet = configUtils.cache.set;\n functionToCall = tailwindMerge;\n return tailwindMerge(classList);\n }\n function tailwindMerge(classList) {\n const cachedResult = cacheGet(classList);\n if (cachedResult) {\n return cachedResult;\n }\n const result = mergeClassList(classList, configUtils);\n cacheSet(classList, result);\n return result;\n }\n return function callTailwindMerge() {\n return functionToCall(twJoin.apply(null, arguments));\n };\n}\nconst fromTheme = key => {\n const themeGetter = theme => theme[key] || [];\n themeGetter.isThemeGetter = true;\n return themeGetter;\n};\nconst arbitraryValueRegex = /^\\[(?:([a-z-]+):)?(.+)\\]$/i;\nconst fractionRegex = /^\\d+\\/\\d+$/;\nconst stringLengths = /*#__PURE__*/new Set(['px', 'full', 'screen']);\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/;\nconst lengthUnitRegex = /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/;\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch))\\(.+\\)$/;\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/;\nconst imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/;\nconst isLength = value => isNumber(value) || stringLengths.has(value) || fractionRegex.test(value);\nconst isArbitraryLength = value => getIsArbitraryValue(value, 'length', isLengthOnly);\nconst isNumber = value => Boolean(value) && !Number.isNaN(Number(value));\nconst isArbitraryNumber = value => getIsArbitraryValue(value, 'number', isNumber);\nconst isInteger = value => Boolean(value) && Number.isInteger(Number(value));\nconst isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1));\nconst isArbitraryValue = value => arbitraryValueRegex.test(value);\nconst isTshirtSize = value => tshirtUnitRegex.test(value);\nconst sizeLabels = /*#__PURE__*/new Set(['length', 'size', 'percentage']);\nconst isArbitrarySize = value => getIsArbitraryValue(value, sizeLabels, isNever);\nconst isArbitraryPosition = value => getIsArbitraryValue(value, 'position', isNever);\nconst imageLabels = /*#__PURE__*/new Set(['image', 'url']);\nconst isArbitraryImage = value => getIsArbitraryValue(value, imageLabels, isImage);\nconst isArbitraryShadow = value => getIsArbitraryValue(value, '', isShadow);\nconst isAny = () => true;\nconst getIsArbitraryValue = (value, label, testValue) => {\n const result = arbitraryValueRegex.exec(value);\n if (result) {\n if (result[1]) {\n return typeof label === 'string' ? result[1] === label : label.has(result[1]);\n }\n return testValue(result[2]);\n }\n return false;\n};\nconst isLengthOnly = value =>\n// `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n// For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n// I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\nlengthUnitRegex.test(value) && !colorFunctionRegex.test(value);\nconst isNever = () => false;\nconst isShadow = value => shadowRegex.test(value);\nconst isImage = value => imageRegex.test(value);\nconst validators = /*#__PURE__*/Object.defineProperty({\n __proto__: null,\n isAny,\n isArbitraryImage,\n isArbitraryLength,\n isArbitraryNumber,\n isArbitraryPosition,\n isArbitraryShadow,\n isArbitrarySize,\n isArbitraryValue,\n isInteger,\n isLength,\n isNumber,\n isPercent,\n isTshirtSize\n}, Symbol.toStringTag, {\n value: 'Module'\n});\nconst getDefaultConfig = () => {\n const colors = fromTheme('colors');\n const spacing = fromTheme('spacing');\n const blur = fromTheme('blur');\n const brightness = fromTheme('brightness');\n const borderColor = fromTheme('borderColor');\n const borderRadius = fromTheme('borderRadius');\n const borderSpacing = fromTheme('borderSpacing');\n const borderWidth = fromTheme('borderWidth');\n const contrast = fromTheme('contrast');\n const grayscale = fromTheme('grayscale');\n const hueRotate = fromTheme('hueRotate');\n const invert = fromTheme('invert');\n const gap = fromTheme('gap');\n const gradientColorStops = fromTheme('gradientColorStops');\n const gradientColorStopPositions = fromTheme('gradientColorStopPositions');\n const inset = fromTheme('inset');\n const margin = fromTheme('margin');\n const opacity = fromTheme('opacity');\n const padding = fromTheme('padding');\n const saturate = fromTheme('saturate');\n const scale = fromTheme('scale');\n const sepia = fromTheme('sepia');\n const skew = fromTheme('skew');\n const space = fromTheme('space');\n const translate = fromTheme('translate');\n const getOverscroll = () => ['auto', 'contain', 'none'];\n const getOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'];\n const getSpacingWithAutoAndArbitrary = () => ['auto', isArbitraryValue, spacing];\n const getSpacingWithArbitrary = () => [isArbitraryValue, spacing];\n const getLengthWithEmptyAndArbitrary = () => ['', isLength, isArbitraryLength];\n const getNumberWithAutoAndArbitrary = () => ['auto', isNumber, isArbitraryValue];\n const getPositions = () => ['bottom', 'center', 'left', 'left-bottom', 'left-top', 'right', 'right-bottom', 'right-top', 'top'];\n const getLineStyles = () => ['solid', 'dashed', 'dotted', 'double', 'none'];\n const getBlendModes = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];\n const getAlign = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch'];\n const getZeroAndEmpty = () => ['', '0', isArbitraryValue];\n const getBreaks = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];\n const getNumberAndArbitrary = () => [isNumber, isArbitraryValue];\n return {\n cacheSize: 500,\n separator: ':',\n theme: {\n colors: [isAny],\n spacing: [isLength, isArbitraryLength],\n blur: ['none', '', isTshirtSize, isArbitraryValue],\n brightness: getNumberAndArbitrary(),\n borderColor: [colors],\n borderRadius: ['none', '', 'full', isTshirtSize, isArbitraryValue],\n borderSpacing: getSpacingWithArbitrary(),\n borderWidth: getLengthWithEmptyAndArbitrary(),\n contrast: getNumberAndArbitrary(),\n grayscale: getZeroAndEmpty(),\n hueRotate: getNumberAndArbitrary(),\n invert: getZeroAndEmpty(),\n gap: getSpacingWithArbitrary(),\n gradientColorStops: [colors],\n gradientColorStopPositions: [isPercent, isArbitraryLength],\n inset: getSpacingWithAutoAndArbitrary(),\n margin: getSpacingWithAutoAndArbitrary(),\n opacity: getNumberAndArbitrary(),\n padding: getSpacingWithArbitrary(),\n saturate: getNumberAndArbitrary(),\n scale: getNumberAndArbitrary(),\n sepia: getZeroAndEmpty(),\n skew: getNumberAndArbitrary(),\n space: getSpacingWithArbitrary(),\n translate: getSpacingWithArbitrary()\n },\n classGroups: {\n // Layout\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [{\n aspect: ['auto', 'square', 'video', isArbitraryValue]\n }],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n */\n container: ['container'],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [{\n columns: [isTshirtSize]\n }],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n 'break-after': [{\n 'break-after': getBreaks()\n }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{\n 'break-before': getBreaks()\n }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{\n 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column']\n }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{\n 'box-decoration': ['slice', 'clone']\n }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{\n box: ['border', 'content']\n }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: ['block', 'inline-block', 'inline', 'flex', 'inline-flex', 'table', 'inline-table', 'table-caption', 'table-cell', 'table-column', 'table-column-group', 'table-footer-group', 'table-header-group', 'table-row-group', 'table-row', 'flow-root', 'grid', 'inline-grid', 'contents', 'list-item', 'hidden'],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n float: [{\n float: ['right', 'left', 'none', 'start', 'end']\n }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{\n clear: ['left', 'right', 'both', 'none', 'start', 'end']\n }],\n /**\n * Isolation\n * @see https://tailwindcss.com/docs/isolation\n */\n isolation: ['isolate', 'isolation-auto'],\n /**\n * Object Fit\n * @see https://tailwindcss.com/docs/object-fit\n */\n 'object-fit': [{\n object: ['contain', 'cover', 'fill', 'none', 'scale-down']\n }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [{\n object: [...getPositions(), isArbitraryValue]\n }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{\n overflow: getOverflow()\n }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{\n 'overflow-x': getOverflow()\n }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{\n 'overflow-y': getOverflow()\n }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{\n overscroll: getOverscroll()\n }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{\n 'overscroll-x': getOverscroll()\n }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{\n 'overscroll-y': getOverscroll()\n }],\n /**\n * Position\n * @see https://tailwindcss.com/docs/position\n */\n position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n /**\n * Top / Right / Bottom / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n inset: [{\n inset: [inset]\n }],\n /**\n * Right / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{\n 'inset-x': [inset]\n }],\n /**\n * Top / Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{\n 'inset-y': [inset]\n }],\n /**\n * Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n start: [{\n start: [inset]\n }],\n /**\n * End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n end: [{\n end: [inset]\n }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{\n top: [inset]\n }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{\n right: [inset]\n }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{\n bottom: [inset]\n }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{\n left: [inset]\n }],\n /**\n * Visibility\n * @see https://tailwindcss.com/docs/visibility\n */\n visibility: ['visible', 'invisible', 'collapse'],\n /**\n * Z-Index\n * @see https://tailwindcss.com/docs/z-index\n */\n z: [{\n z: ['auto', isInteger, isArbitraryValue]\n }],\n // Flexbox and Grid\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [{\n basis: getSpacingWithAutoAndArbitrary()\n }],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{\n flex: ['row', 'row-reverse', 'col', 'col-reverse']\n }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{\n flex: ['wrap', 'wrap-reverse', 'nowrap']\n }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{\n flex: ['1', 'auto', 'initial', 'none', isArbitraryValue]\n }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{\n grow: getZeroAndEmpty()\n }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{\n shrink: getZeroAndEmpty()\n }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [{\n order: ['first', 'last', 'none', isInteger, isArbitraryValue]\n }],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{\n 'grid-cols': [isAny]\n }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [{\n col: ['auto', {\n span: ['full', isInteger, isArbitraryValue]\n }, isArbitraryValue]\n }],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{\n 'col-start': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{\n 'col-end': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{\n 'grid-rows': [isAny]\n }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [{\n row: ['auto', {\n span: [isInteger, isArbitraryValue]\n }, isArbitraryValue]\n }],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{\n 'row-start': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{\n 'row-end': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{\n 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense']\n }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{\n 'auto-cols': ['auto', 'min', 'max', 'fr', isArbitraryValue]\n }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{\n 'auto-rows': ['auto', 'min', 'max', 'fr', isArbitraryValue]\n }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{\n gap: [gap]\n }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{\n 'gap-x': [gap]\n }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{\n 'gap-y': [gap]\n }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{\n justify: ['normal', ...getAlign()]\n }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{\n 'justify-items': ['start', 'end', 'center', 'stretch']\n }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{\n 'justify-self': ['auto', 'start', 'end', 'center', 'stretch']\n }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{\n content: ['normal', ...getAlign(), 'baseline']\n }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{\n items: ['start', 'end', 'center', 'baseline', 'stretch']\n }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [{\n self: ['auto', 'start', 'end', 'center', 'stretch', 'baseline']\n }],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{\n 'place-content': [...getAlign(), 'baseline']\n }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{\n 'place-items': ['start', 'end', 'center', 'baseline', 'stretch']\n }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{\n 'place-self': ['auto', 'start', 'end', 'center', 'stretch']\n }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{\n p: [padding]\n }],\n /**\n * Padding X\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{\n px: [padding]\n }],\n /**\n * Padding Y\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{\n py: [padding]\n }],\n /**\n * Padding Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{\n ps: [padding]\n }],\n /**\n * Padding End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{\n pe: [padding]\n }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{\n pt: [padding]\n }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{\n pr: [padding]\n }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{\n pb: [padding]\n }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{\n pl: [padding]\n }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{\n m: [margin]\n }],\n /**\n * Margin X\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{\n mx: [margin]\n }],\n /**\n * Margin Y\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{\n my: [margin]\n }],\n /**\n * Margin Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{\n ms: [margin]\n }],\n /**\n * Margin End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{\n me: [margin]\n }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{\n mt: [margin]\n }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{\n mr: [margin]\n }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{\n mb: [margin]\n }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{\n ml: [margin]\n }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/space\n */\n 'space-x': [{\n 'space-x': [space]\n }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/space\n */\n 'space-x-reverse': ['space-x-reverse'],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/space\n */\n 'space-y': [{\n 'space-y': [space]\n }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/space\n */\n 'space-y-reverse': ['space-y-reverse'],\n // Sizing\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [{\n w: ['auto', 'min', 'max', 'fit', 'svw', 'lvw', 'dvw', isArbitraryValue, spacing]\n }],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [{\n 'min-w': [isArbitraryValue, spacing, 'min', 'max', 'fit']\n }],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [{\n 'max-w': [isArbitraryValue, spacing, 'none', 'full', 'min', 'max', 'fit', 'prose', {\n screen: [isTshirtSize]\n }, isTshirtSize]\n }],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [{\n h: [isArbitraryValue, spacing, 'auto', 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\n }],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [{\n 'min-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\n }],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [{\n 'max-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\n }],\n /**\n * Size\n * @see https://tailwindcss.com/docs/size\n */\n size: [{\n size: [isArbitraryValue, spacing, 'auto', 'min', 'max', 'fit']\n }],\n // Typography\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n 'font-size': [{\n text: ['base', isTshirtSize, isArbitraryLength]\n }],\n /**\n * Font Smoothing\n * @see https://tailwindcss.com/docs/font-smoothing\n */\n 'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n /**\n * Font Style\n * @see https://tailwindcss.com/docs/font-style\n */\n 'font-style': ['italic', 'not-italic'],\n /**\n * Font Weight\n * @see https://tailwindcss.com/docs/font-weight\n */\n 'font-weight': [{\n font: ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black', isArbitraryNumber]\n }],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n 'font-family': [{\n font: [isAny]\n }],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-normal': ['normal-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-ordinal': ['ordinal'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-slashed-zero': ['slashed-zero'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [{\n tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest', isArbitraryValue]\n }],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n 'line-clamp': [{\n 'line-clamp': ['none', isNumber, isArbitraryNumber]\n }],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [{\n leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose', isLength, isArbitraryValue]\n }],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{\n 'list-image': ['none', isArbitraryValue]\n }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n 'list-style-type': [{\n list: ['none', 'disc', 'decimal', isArbitraryValue]\n }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{\n list: ['inside', 'outside']\n }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/placeholder-color\n */\n 'placeholder-color': [{\n placeholder: [colors]\n }],\n /**\n * Placeholder Opacity\n * @see https://tailwindcss.com/docs/placeholder-opacity\n */\n 'placeholder-opacity': [{\n 'placeholder-opacity': [opacity]\n }],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n 'text-alignment': [{\n text: ['left', 'center', 'right', 'justify', 'start', 'end']\n }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{\n text: [colors]\n }],\n /**\n * Text Opacity\n * @see https://tailwindcss.com/docs/text-opacity\n */\n 'text-opacity': [{\n 'text-opacity': [opacity]\n }],\n /**\n * Text Decoration\n * @see https://tailwindcss.com/docs/text-decoration\n */\n 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n /**\n * Text Decoration Style\n * @see https://tailwindcss.com/docs/text-decoration-style\n */\n 'text-decoration-style': [{\n decoration: [...getLineStyles(), 'wavy']\n }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [{\n decoration: ['auto', 'from-font', isLength, isArbitraryLength]\n }],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n 'underline-offset': [{\n 'underline-offset': ['auto', isLength, isArbitraryValue]\n }],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{\n decoration: [colors]\n }],\n /**\n * Text Transform\n * @see https://tailwindcss.com/docs/text-transform\n */\n 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n /**\n * Text Overflow\n * @see https://tailwindcss.com/docs/text-overflow\n */\n 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n /**\n * Text Wrap\n * @see https://tailwindcss.com/docs/text-wrap\n */\n 'text-wrap': [{\n text: ['wrap', 'nowrap', 'balance', 'pretty']\n }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{\n indent: getSpacingWithArbitrary()\n }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [{\n align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryValue]\n }],\n /**\n * Whitespace\n * @see https://tailwindcss.com/docs/whitespace\n */\n whitespace: [{\n whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces']\n }],\n /**\n * Word Break\n * @see https://tailwindcss.com/docs/word-break\n */\n break: [{\n break: ['normal', 'words', 'all', 'keep']\n }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{\n hyphens: ['none', 'manual', 'auto']\n }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{\n content: ['none', isArbitraryValue]\n }],\n // Backgrounds\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{\n bg: ['fixed', 'local', 'scroll']\n }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{\n 'bg-clip': ['border', 'padding', 'content', 'text']\n }],\n /**\n * Background Opacity\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/background-opacity\n */\n 'bg-opacity': [{\n 'bg-opacity': [opacity]\n }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{\n 'bg-origin': ['border', 'padding', 'content']\n }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [{\n bg: [...getPositions(), isArbitraryPosition]\n }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{\n bg: ['no-repeat', {\n repeat: ['', 'x', 'y', 'round', 'space']\n }]\n }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [{\n bg: ['auto', 'cover', 'contain', isArbitrarySize]\n }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [{\n bg: ['none', {\n 'gradient-to': ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl']\n }, isArbitraryImage]\n }],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{\n bg: [colors]\n }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{\n from: [gradientColorStopPositions]\n }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{\n via: [gradientColorStopPositions]\n }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{\n to: [gradientColorStopPositions]\n }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{\n from: [gradientColorStops]\n }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{\n via: [gradientColorStops]\n }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{\n to: [gradientColorStops]\n }],\n // Borders\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{\n rounded: [borderRadius]\n }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{\n 'rounded-s': [borderRadius]\n }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{\n 'rounded-e': [borderRadius]\n }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{\n 'rounded-t': [borderRadius]\n }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{\n 'rounded-r': [borderRadius]\n }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{\n 'rounded-b': [borderRadius]\n }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{\n 'rounded-l': [borderRadius]\n }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{\n 'rounded-ss': [borderRadius]\n }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{\n 'rounded-se': [borderRadius]\n }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{\n 'rounded-ee': [borderRadius]\n }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{\n 'rounded-es': [borderRadius]\n }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{\n 'rounded-tl': [borderRadius]\n }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{\n 'rounded-tr': [borderRadius]\n }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{\n 'rounded-br': [borderRadius]\n }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{\n 'rounded-bl': [borderRadius]\n }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{\n border: [borderWidth]\n }],\n /**\n * Border Width X\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{\n 'border-x': [borderWidth]\n }],\n /**\n * Border Width Y\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{\n 'border-y': [borderWidth]\n }],\n /**\n * Border Width Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{\n 'border-s': [borderWidth]\n }],\n /**\n * Border Width End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{\n 'border-e': [borderWidth]\n }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{\n 'border-t': [borderWidth]\n }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{\n 'border-r': [borderWidth]\n }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{\n 'border-b': [borderWidth]\n }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{\n 'border-l': [borderWidth]\n }],\n /**\n * Border Opacity\n * @see https://tailwindcss.com/docs/border-opacity\n */\n 'border-opacity': [{\n 'border-opacity': [opacity]\n }],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n 'border-style': [{\n border: [...getLineStyles(), 'hidden']\n }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-x': [{\n 'divide-x': [borderWidth]\n }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-x-reverse': ['divide-x-reverse'],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-y': [{\n 'divide-y': [borderWidth]\n }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-y-reverse': ['divide-y-reverse'],\n /**\n * Divide Opacity\n * @see https://tailwindcss.com/docs/divide-opacity\n */\n 'divide-opacity': [{\n 'divide-opacity': [opacity]\n }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/divide-style\n */\n 'divide-style': [{\n divide: getLineStyles()\n }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{\n border: [borderColor]\n }],\n /**\n * Border Color X\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{\n 'border-x': [borderColor]\n }],\n /**\n * Border Color Y\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{\n 'border-y': [borderColor]\n }],\n /**\n * Border Color S\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-s': [{\n 'border-s': [borderColor]\n }],\n /**\n * Border Color E\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-e': [{\n 'border-e': [borderColor]\n }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{\n 'border-t': [borderColor]\n }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{\n 'border-r': [borderColor]\n }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{\n 'border-b': [borderColor]\n }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{\n 'border-l': [borderColor]\n }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{\n divide: [borderColor]\n }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{\n outline: ['', ...getLineStyles()]\n }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n 'outline-offset': [{\n 'outline-offset': [isLength, isArbitraryValue]\n }],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n 'outline-w': [{\n outline: [isLength, isArbitraryLength]\n }],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n 'outline-color': [{\n outline: [colors]\n }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/ring-width\n */\n 'ring-w': [{\n ring: getLengthWithEmptyAndArbitrary()\n }],\n /**\n * Ring Width Inset\n * @see https://tailwindcss.com/docs/ring-width\n */\n 'ring-w-inset': ['ring-inset'],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/ring-color\n */\n 'ring-color': [{\n ring: [colors]\n }],\n /**\n * Ring Opacity\n * @see https://tailwindcss.com/docs/ring-opacity\n */\n 'ring-opacity': [{\n 'ring-opacity': [opacity]\n }],\n /**\n * Ring Offset Width\n * @see https://tailwindcss.com/docs/ring-offset-width\n */\n 'ring-offset-w': [{\n 'ring-offset': [isLength, isArbitraryLength]\n }],\n /**\n * Ring Offset Color\n * @see https://tailwindcss.com/docs/ring-offset-color\n */\n 'ring-offset-color': [{\n 'ring-offset': [colors]\n }],\n // Effects\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [{\n shadow: ['', 'inner', 'none', isTshirtSize, isArbitraryShadow]\n }],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow-color\n */\n 'shadow-color': [{\n shadow: [isAny]\n }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{\n opacity: [opacity]\n }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{\n 'mix-blend': [...getBlendModes(), 'plus-lighter', 'plus-darker']\n }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{\n 'bg-blend': getBlendModes()\n }],\n // Filters\n /**\n * Filter\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [{\n filter: ['', 'none']\n }],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{\n blur: [blur]\n }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{\n brightness: [brightness]\n }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{\n contrast: [contrast]\n }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [{\n 'drop-shadow': ['', 'none', isTshirtSize, isArbitraryValue]\n }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{\n grayscale: [grayscale]\n }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{\n 'hue-rotate': [hueRotate]\n }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{\n invert: [invert]\n }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{\n saturate: [saturate]\n }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{\n sepia: [sepia]\n }],\n /**\n * Backdrop Filter\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [{\n 'backdrop-filter': ['', 'none']\n }],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{\n 'backdrop-blur': [blur]\n }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n 'backdrop-brightness': [{\n 'backdrop-brightness': [brightness]\n }],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n 'backdrop-contrast': [{\n 'backdrop-contrast': [contrast]\n }],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n 'backdrop-grayscale': [{\n 'backdrop-grayscale': [grayscale]\n }],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n 'backdrop-hue-rotate': [{\n 'backdrop-hue-rotate': [hueRotate]\n }],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n 'backdrop-invert': [{\n 'backdrop-invert': [invert]\n }],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n 'backdrop-opacity': [{\n 'backdrop-opacity': [opacity]\n }],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n 'backdrop-saturate': [{\n 'backdrop-saturate': [saturate]\n }],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n 'backdrop-sepia': [{\n 'backdrop-sepia': [sepia]\n }],\n // Tables\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{\n border: ['collapse', 'separate']\n }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{\n 'border-spacing': [borderSpacing]\n }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{\n 'border-spacing-x': [borderSpacing]\n }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{\n 'border-spacing-y': [borderSpacing]\n }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{\n table: ['auto', 'fixed']\n }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{\n caption: ['top', 'bottom']\n }],\n // Transitions and Animation\n /**\n * Tranisition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [{\n transition: ['none', 'all', '', 'colors', 'opacity', 'shadow', 'transform', isArbitraryValue]\n }],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{\n duration: getNumberAndArbitrary()\n }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [{\n ease: ['linear', 'in', 'out', 'in-out', isArbitraryValue]\n }],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{\n delay: getNumberAndArbitrary()\n }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{\n animate: ['none', 'spin', 'ping', 'pulse', 'bounce', isArbitraryValue]\n }],\n // Transforms\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [{\n transform: ['', 'gpu', 'none']\n }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{\n scale: [scale]\n }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{\n 'scale-x': [scale]\n }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{\n 'scale-y': [scale]\n }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{\n rotate: [isInteger, isArbitraryValue]\n }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{\n 'translate-x': [translate]\n }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{\n 'translate-y': [translate]\n }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{\n 'skew-x': [skew]\n }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{\n 'skew-y': [skew]\n }],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n 'transform-origin': [{\n origin: ['center', 'top', 'top-right', 'right', 'bottom-right', 'bottom', 'bottom-left', 'left', 'top-left', isArbitraryValue]\n }],\n // Interactivity\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{\n accent: ['auto', colors]\n }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{\n appearance: ['none', 'auto']\n }],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [{\n cursor: ['auto', 'default', 'pointer', 'wait', 'text', 'move', 'help', 'not-allowed', 'none', 'context-menu', 'progress', 'cell', 'crosshair', 'vertical-text', 'alias', 'copy', 'no-drop', 'grab', 'grabbing', 'all-scroll', 'col-resize', 'row-resize', 'n-resize', 'e-resize', 's-resize', 'w-resize', 'ne-resize', 'nw-resize', 'se-resize', 'sw-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'zoom-in', 'zoom-out', isArbitraryValue]\n }],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{\n caret: [colors]\n }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{\n 'pointer-events': ['none', 'auto']\n }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{\n resize: ['none', 'y', 'x', '']\n }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{\n scroll: ['auto', 'smooth']\n }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{\n 'scroll-m': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin X\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{\n 'scroll-mx': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Y\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{\n 'scroll-my': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{\n 'scroll-ms': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{\n 'scroll-me': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{\n 'scroll-mt': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{\n 'scroll-mr': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{\n 'scroll-mb': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{\n 'scroll-ml': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{\n 'scroll-p': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding X\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{\n 'scroll-px': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Y\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{\n 'scroll-py': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{\n 'scroll-ps': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{\n 'scroll-pe': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{\n 'scroll-pt': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{\n 'scroll-pr': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{\n 'scroll-pb': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{\n 'scroll-pl': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{\n snap: ['start', 'end', 'center', 'align-none']\n }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{\n snap: ['normal', 'always']\n }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{\n snap: ['none', 'x', 'y', 'both']\n }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{\n snap: ['mandatory', 'proximity']\n }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [{\n touch: ['auto', 'none', 'manipulation']\n }],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-x': [{\n 'touch-pan': ['x', 'left', 'right']\n }],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-y': [{\n 'touch-pan': ['y', 'up', 'down']\n }],\n /**\n * Touch Action Pinch Zoom\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-pz': ['touch-pinch-zoom'],\n /**\n * User Select\n * @see https://tailwindcss.com/docs/user-select\n */\n select: [{\n select: ['none', 'text', 'all', 'auto']\n }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [{\n 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryValue]\n }],\n // SVG\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{\n fill: [colors, 'none']\n }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [{\n stroke: [isLength, isArbitraryLength, isArbitraryNumber]\n }],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{\n stroke: [colors, 'none']\n }],\n // Accessibility\n /**\n * Screen Readers\n * @see https://tailwindcss.com/docs/screen-readers\n */\n sr: ['sr-only', 'not-sr-only'],\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n 'forced-color-adjust': [{\n 'forced-color-adjust': ['auto', 'none']\n }]\n },\n conflictingClassGroups: {\n overflow: ['overflow-x', 'overflow-y'],\n overscroll: ['overscroll-x', 'overscroll-y'],\n inset: ['inset-x', 'inset-y', 'start', 'end', 'top', 'right', 'bottom', 'left'],\n 'inset-x': ['right', 'left'],\n 'inset-y': ['top', 'bottom'],\n flex: ['basis', 'grow', 'shrink'],\n gap: ['gap-x', 'gap-y'],\n p: ['px', 'py', 'ps', 'pe', 'pt', 'pr', 'pb', 'pl'],\n px: ['pr', 'pl'],\n py: ['pt', 'pb'],\n m: ['mx', 'my', 'ms', 'me', 'mt', 'mr', 'mb', 'ml'],\n mx: ['mr', 'ml'],\n my: ['mt', 'mb'],\n size: ['w', 'h'],\n 'font-size': ['leading'],\n 'fvn-normal': ['fvn-ordinal', 'fvn-slashed-zero', 'fvn-figure', 'fvn-spacing', 'fvn-fraction'],\n 'fvn-ordinal': ['fvn-normal'],\n 'fvn-slashed-zero': ['fvn-normal'],\n 'fvn-figure': ['fvn-normal'],\n 'fvn-spacing': ['fvn-normal'],\n 'fvn-fraction': ['fvn-normal'],\n 'line-clamp': ['display', 'overflow'],\n rounded: ['rounded-s', 'rounded-e', 'rounded-t', 'rounded-r', 'rounded-b', 'rounded-l', 'rounded-ss', 'rounded-se', 'rounded-ee', 'rounded-es', 'rounded-tl', 'rounded-tr', 'rounded-br', 'rounded-bl'],\n 'rounded-s': ['rounded-ss', 'rounded-es'],\n 'rounded-e': ['rounded-se', 'rounded-ee'],\n 'rounded-t': ['rounded-tl', 'rounded-tr'],\n 'rounded-r': ['rounded-tr', 'rounded-br'],\n 'rounded-b': ['rounded-br', 'rounded-bl'],\n 'rounded-l': ['rounded-tl', 'rounded-bl'],\n 'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n 'border-w': ['border-w-s', 'border-w-e', 'border-w-t', 'border-w-r', 'border-w-b', 'border-w-l'],\n 'border-w-x': ['border-w-r', 'border-w-l'],\n 'border-w-y': ['border-w-t', 'border-w-b'],\n 'border-color': ['border-color-s', 'border-color-e', 'border-color-t', 'border-color-r', 'border-color-b', 'border-color-l'],\n 'border-color-x': ['border-color-r', 'border-color-l'],\n 'border-color-y': ['border-color-t', 'border-color-b'],\n 'scroll-m': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-mt', 'scroll-mr', 'scroll-mb', 'scroll-ml'],\n 'scroll-mx': ['scroll-mr', 'scroll-ml'],\n 'scroll-my': ['scroll-mt', 'scroll-mb'],\n 'scroll-p': ['scroll-px', 'scroll-py', 'scroll-ps', 'scroll-pe', 'scroll-pt', 'scroll-pr', 'scroll-pb', 'scroll-pl'],\n 'scroll-px': ['scroll-pr', 'scroll-pl'],\n 'scroll-py': ['scroll-pt', 'scroll-pb'],\n touch: ['touch-x', 'touch-y', 'touch-pz'],\n 'touch-x': ['touch'],\n 'touch-y': ['touch'],\n 'touch-pz': ['touch']\n },\n conflictingClassGroupModifiers: {\n 'font-size': ['leading']\n }\n };\n};\n\n/**\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\n * @param configExtension Partial config to merge into the `baseConfig`.\n */\nconst mergeConfigs = (baseConfig, {\n cacheSize,\n prefix,\n separator,\n experimentalParseClassName,\n extend = {},\n override = {}\n}) => {\n overrideProperty(baseConfig, 'cacheSize', cacheSize);\n overrideProperty(baseConfig, 'prefix', prefix);\n overrideProperty(baseConfig, 'separator', separator);\n overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName);\n for (const configKey in override) {\n overrideConfigProperties(baseConfig[configKey], override[configKey]);\n }\n for (const key in extend) {\n mergeConfigProperties(baseConfig[key], extend[key]);\n }\n return baseConfig;\n};\nconst overrideProperty = (baseObject, overrideKey, overrideValue) => {\n if (overrideValue !== undefined) {\n baseObject[overrideKey] = overrideValue;\n }\n};\nconst overrideConfigProperties = (baseObject, overrideObject) => {\n if (overrideObject) {\n for (const key in overrideObject) {\n overrideProperty(baseObject, key, overrideObject[key]);\n }\n }\n};\nconst mergeConfigProperties = (baseObject, mergeObject) => {\n if (mergeObject) {\n for (const key in mergeObject) {\n const mergeValue = mergeObject[key];\n if (mergeValue !== undefined) {\n baseObject[key] = (baseObject[key] || []).concat(mergeValue);\n }\n }\n }\n};\nconst extendTailwindMerge = (configExtension, ...createConfig) => typeof configExtension === 'function' ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig) : createTailwindMerge(() => mergeConfigs(getDefaultConfig(), configExtension), ...createConfig);\nconst twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);\nexport { createTailwindMerge, extendTailwindMerge, fromTheme, getDefaultConfig, mergeConfigs, twJoin, twMerge, validators };\n//# sourceMappingURL=bundle-mjs.mjs.map\n"
9
+ ],
10
+ "mappings": "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",
11
+ "debugId": "5E94DC841F4524F564756E2164756E21",
12
+ "names": []
13
+ }