@k2b/ui 0.17.0 → 0.18.0

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 (88) hide show
  1. package/dist/browser/chat/ChatComposer.js +261 -274
  2. package/dist/browser/chat/ChatComposer.js.map +1 -1
  3. package/dist/browser/chat/ChatPrimitives.js +9 -6
  4. package/dist/browser/chat/ChatPrimitives.js.map +1 -1
  5. package/dist/browser/content/FileView.js +62 -36
  6. package/dist/browser/content/FileView.js.map +1 -1
  7. package/dist/browser/content/MarkdownView.js +9 -3
  8. package/dist/browser/content/MarkdownView.js.map +1 -1
  9. package/dist/browser/content/VideoPlayer.js +279 -0
  10. package/dist/browser/content/VideoPlayer.js.map +1 -0
  11. package/dist/browser/content/file-view-preview.js +2 -2
  12. package/dist/browser/content/file-view-preview.js.map +1 -1
  13. package/dist/browser/content/index.js +2 -0
  14. package/dist/browser/content/index.js.map +1 -1
  15. package/dist/browser/content/markdown-links.js +178 -0
  16. package/dist/browser/content/markdown-links.js.map +1 -0
  17. package/dist/browser/inputs/FileDropTarget.js +129 -0
  18. package/dist/browser/inputs/FileDropTarget.js.map +1 -0
  19. package/dist/browser/inputs/FileInputs.js +37 -11
  20. package/dist/browser/inputs/FileInputs.js.map +1 -1
  21. package/dist/browser/inputs/file-drop.js +338 -0
  22. package/dist/browser/inputs/file-drop.js.map +1 -0
  23. package/dist/browser/inputs/index.js +1 -0
  24. package/dist/browser/inputs/index.js.map +1 -1
  25. package/dist/browser/inputs/markdown/MarkdownEditor.js +72 -78
  26. package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -1
  27. package/dist/browser/intl/messages.js +97 -4
  28. package/dist/browser/intl/messages.js.map +1 -1
  29. package/dist/browser/layout/AppWorkspace.js +210 -44
  30. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  31. package/dist/browser/layout/Navigation.js +274 -197
  32. package/dist/browser/layout/Navigation.js.map +1 -1
  33. package/dist/browser/layout/index.js.map +1 -1
  34. package/dist/browser/layout/navigation-model.js +2 -0
  35. package/dist/browser/layout/navigation-model.js.map +1 -1
  36. package/dist/browser/surfaces/NoticeCard.js +47 -44
  37. package/dist/browser/surfaces/NoticeCard.js.map +1 -1
  38. package/dist/ssr/chat/ChatComposer.js +59 -48
  39. package/dist/ssr/chat/ChatComposer.js.map +1 -1
  40. package/dist/ssr/chat/ChatPrimitives.js +9 -6
  41. package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
  42. package/dist/ssr/content/FileView.js +30 -6
  43. package/dist/ssr/content/FileView.js.map +1 -1
  44. package/dist/ssr/content/MarkdownView.js +9 -3
  45. package/dist/ssr/content/MarkdownView.js.map +1 -1
  46. package/dist/ssr/content/VideoPlayer.js +208 -0
  47. package/dist/ssr/content/VideoPlayer.js.map +1 -0
  48. package/dist/ssr/content/file-view-preview.js +2 -2
  49. package/dist/ssr/content/file-view-preview.js.map +1 -1
  50. package/dist/ssr/content/index.js +2 -0
  51. package/dist/ssr/content/index.js.map +1 -1
  52. package/dist/ssr/content/markdown-links.js +178 -0
  53. package/dist/ssr/content/markdown-links.js.map +1 -0
  54. package/dist/ssr/inputs/FileDropTarget.js +103 -0
  55. package/dist/ssr/inputs/FileDropTarget.js.map +1 -0
  56. package/dist/ssr/inputs/FileInputs.js +32 -10
  57. package/dist/ssr/inputs/FileInputs.js.map +1 -1
  58. package/dist/ssr/inputs/file-drop.js +338 -0
  59. package/dist/ssr/inputs/file-drop.js.map +1 -0
  60. package/dist/ssr/inputs/index.js +1 -0
  61. package/dist/ssr/inputs/index.js.map +1 -1
  62. package/dist/ssr/inputs/markdown/MarkdownEditor.js +14 -2
  63. package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -1
  64. package/dist/ssr/intl/messages.js +97 -4
  65. package/dist/ssr/intl/messages.js.map +1 -1
  66. package/dist/ssr/layout/AppWorkspace.js +173 -27
  67. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  68. package/dist/ssr/layout/Navigation.js +169 -122
  69. package/dist/ssr/layout/Navigation.js.map +1 -1
  70. package/dist/ssr/layout/index.js.map +1 -1
  71. package/dist/ssr/layout/navigation-model.js +2 -0
  72. package/dist/ssr/layout/navigation-model.js.map +1 -1
  73. package/dist/ssr/surfaces/NoticeCard.js +17 -12
  74. package/dist/ssr/surfaces/NoticeCard.js.map +1 -1
  75. package/dist/styles.css +1 -1
  76. package/dist/types/chat/ChatPrimitives.d.ts +1 -1
  77. package/dist/types/content/VideoPlayer.d.ts +41 -0
  78. package/dist/types/content/index.d.ts +2 -0
  79. package/dist/types/content/markdown-links.d.ts +66 -0
  80. package/dist/types/inputs/FileDropTarget.d.ts +23 -0
  81. package/dist/types/inputs/FileInputs.d.ts +2 -0
  82. package/dist/types/inputs/file-drop.d.ts +80 -0
  83. package/dist/types/inputs/index.d.ts +2 -0
  84. package/dist/types/intl/messages.d.ts +47 -0
  85. package/dist/types/layout/AppWorkspace.d.ts +21 -0
  86. package/dist/types/layout/index.d.ts +2 -2
  87. package/dist/types/layout/navigation-model.d.ts +18 -0
  88. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["chat/ChatComposer.tsx"],"sourcesContent":["import {\n children,\n createEffect,\n createMemo,\n createSignal,\n createUniqueId,\n For,\n type JSX,\n onCleanup,\n onMount,\n Show,\n untrack,\n} from \"solid-js\";\nimport { Dropdown, type DropdownItem as DropdownItemData } from \"../actions/Dropdown\";\nimport { Tooltip } from \"../feedback/Tooltip\";\nimport { SelectChip } from \"../inputs/SelectChip\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { ChatContextUsage as ContextUsage } from \"./ChatPrimitives\";\nimport { executeChatAction, nextChatCommandIndex, reportChatFailure, runChatSubmission } from \"./chat-behavior\";\nimport { chatCommandQuery, chatMentionSegments, reconcileChatMentions } from \"./composer-document\";\nimport type {\n ChatAction,\n ChatAttachment,\n ChatComposerState,\n ChatContextUsageData,\n ChatMention,\n ChatModelOption,\n ChatSubmitInput,\n} from \"./types\";\n\nconst composerMaxInputHeight = 309;\n// Keep editor undo text within approximately 2 MiB, plus the current edit.\nconst composerUndoBudgetChars = 1_000_000;\n\nexport type ChatCommandContext = {\n setValue: (value: string) => void;\n submit: () => void;\n focus: () => void;\n};\n\nexport type ChatCommand = {\n name: string;\n description: string;\n icon?: string;\n action?: (context: ChatCommandContext) => void | Promise<void>;\n /** Selecting a reference inserts its display name and retains its opaque payload. */\n mention?: ChatAttachment;\n label?: string;\n disabled?: boolean;\n};\n\nexport type ChatFileSelection = {\n onSelect: (files: readonly File[]) => void | Promise<void>;\n onError?: (error: unknown) => void;\n accept?: string;\n multiple?: boolean;\n disabled?: boolean;\n label?: string;\n};\n\nexport type ChatPasteHandler = (event: ClipboardEvent & { currentTarget: HTMLTextAreaElement; target: Element }) => void;\n\nexport type ChatComposerProps = {\n value: string;\n onValueChange: (value: string) => void;\n onSubmit: (input: ChatSubmitInput) => boolean | void | Promise<boolean | void>;\n /** Submit intent used for drafts entered while a response is running. Defaults to `steer`. */\n runningSubmitIntent?: \"steer\" | \"queue\";\n onStop?: () => void | Promise<void>;\n onError?: (error: unknown) => void;\n state?: ChatComposerState;\n attachments?: readonly ChatAttachment[];\n onAttachmentsChange?: (attachments: readonly ChatAttachment[]) => void;\n fileSelection?: ChatFileSelection;\n /** Handle non-file clipboard content. Pasted files already use `fileSelection`. */\n onPaste?: ChatPasteHandler;\n menuActions?: readonly ChatAction[];\n models?: readonly ChatModelOption[];\n selectedModelId?: string | null;\n onModelChange?: (modelId: string) => void;\n /** Compact application-owned details immediately after the model selector. */\n modelDetails?: JSX.Element;\n commands?: readonly ChatCommand[];\n searchCommands?: (query: string, signal: AbortSignal) => Promise<readonly ChatCommand[]>;\n mentions?: readonly ChatMention[];\n onMentionsChange?: (mentions: readonly ChatMention[]) => void;\n /** Shared surface above the editor; suggestions temporarily replace this content. */\n accessory?: JSX.Element;\n contextUsage?: ChatContextUsageData;\n contextActions?: readonly ChatAction[];\n /** Optional action inside the context details popup. */\n contextPopupAction?: ChatAction;\n /** Additional compact controls rendered with the add/model controls. */\n footerTools?: JSX.Element;\n /** Compact application controls immediately before the send/stop button. */\n submitTools?: JSX.Element;\n /** Replaces footer controls during an application-owned interaction, preserving the editor. */\n footerContent?: JSX.Element;\n placeholder?: string;\n label?: string;\n inputLabel?: string;\n disabled?: boolean;\n error?: string;\n focusToken?: unknown;\n draftKey?: unknown;\n class?: string;\n};\n\nconst attachmentIcon = (attachment: ChatAttachment): string =>\n attachment.icon ?? (attachment.kind === \"image\" ? \"ti ti-photo\" : attachment.kind === \"resource\" ? \"ti ti-link\" : \"ti ti-file\");\n\nexport function ChatComposer(props: ChatComposerProps): JSX.Element {\n const accessory = children(() => props.accessory);\n const hasAccessory = () => accessory.toArray().some((item) => item != null && typeof item !== \"boolean\" && item !== \"\");\n const messages = useUiMessages();\n const commandListId = `k2b-chat-commands-${createUniqueId().replace(/[^A-Za-z0-9_-]/g, \"-\")}`;\n const [selectedCommandIndex, setSelectedCommandIndex] = createSignal(0);\n const [dragActive, setDragActive] = createSignal(false);\n const [addingFiles, setAddingFiles] = createSignal(false);\n const [submitting, setSubmitting] = createSignal(false);\n let composerRef: HTMLElement | undefined;\n let textareaRef: HTMLTextAreaElement | undefined;\n let fileInputRef: HTMLInputElement | undefined;\n let sawRunning = props.state === \"running\";\n\n const state = () => props.state ?? \"idle\";\n const running = () => state() === \"running\";\n const stopping = () => state() === \"stopping\";\n const runningSubmitIntent = () => props.runningSubmitIntent ?? \"steer\";\n const attachments = () => props.attachments ?? [];\n const [caret, setCaret] = createSignal(0);\n const [selectionEnd, setSelectionEnd] = createSignal(0);\n const [dismissed, setDismissed] = createSignal(false);\n const [composing, setComposing] = createSignal(false);\n const [searchResults, setSearchResults] = createSignal<readonly ChatCommand[]>([]);\n const [searching, setSearching] = createSignal(false);\n const [searchError, setSearchError] = createSignal(false);\n const [executing, setExecuting] = createSignal(false);\n let highlightRef: HTMLDivElement | undefined;\n let commandListRef: HTMLDivElement | undefined;\n const mentions = () => props.mentions ?? [];\n const commandQuery = createMemo(() => (dismissed() || composing() ? null : chatCommandQuery(props.value, caret(), selectionEnd())));\n const commandMatches = createMemo(() => {\n const token = commandQuery();\n if (!token) return [];\n return [\n ...(props.commands ?? []).filter((command) => command.name.toLowerCase().includes(token.query.toLowerCase())),\n ...searchResults(),\n ];\n });\n const commandsOpen = () => Boolean(commandQuery() && (props.commands?.length || props.searchCommands));\n createEffect(() => {\n if (!commandsOpen()) return;\n let disposed = false;\n const measure = () => {\n if (disposed || !commandListRef) return;\n let top = window.visualViewport?.offsetTop ?? 0;\n for (let parent = commandListRef.parentElement; parent; parent = parent.parentElement) {\n if (/(auto|scroll|hidden|clip)/.test(window.getComputedStyle(parent).overflowY)) {\n top = Math.max(top, parent.getBoundingClientRect().top);\n }\n }\n const bottom = commandListRef.parentElement!.getBoundingClientRect().bottom;\n commandListRef.style.setProperty(\"--k2b-chat-command-space\", `${Math.max(40, bottom - top - 8)}px`);\n };\n queueMicrotask(measure);\n window.addEventListener(\"resize\", measure);\n window.addEventListener(\"scroll\", measure, true);\n window.visualViewport?.addEventListener(\"resize\", measure);\n onCleanup(() => {\n disposed = true;\n window.removeEventListener(\"resize\", measure);\n window.removeEventListener(\"scroll\", measure, true);\n window.visualViewport?.removeEventListener(\"resize\", measure);\n });\n });\n createEffect(() => {\n const token = commandQuery();\n setSearchResults([]);\n setSearchError(false);\n if (!token || !props.searchCommands) {\n setSearching(false);\n return;\n }\n const abort = new AbortController();\n setSearching(true);\n const timer = setTimeout(() => {\n Promise.resolve(props.searchCommands!(token.query, abort.signal))\n .then((results) => {\n if (!abort.signal.aborted) setSearchResults(results);\n })\n .catch(() => {\n if (!abort.signal.aborted) setSearchError(true);\n })\n .finally(() => {\n if (!abort.signal.aborted) setSearching(false);\n });\n }, 120);\n onCleanup(() => {\n clearTimeout(timer);\n abort.abort();\n });\n });\n const history: { value: string; mentions: readonly ChatMention[]; caret: number }[] = [];\n let historyIndex = -1;\n createEffect(() => {\n props.draftKey;\n untrack(() => {\n history.length = 0;\n historyIndex = -1;\n setDismissed(true);\n });\n });\n const snapshot = () => ({ value: props.value, mentions: [...mentions()], caret: textareaRef?.selectionStart ?? 0 });\n const sameMentions = (a: readonly ChatMention[], b: readonly ChatMention[]) =>\n a.length === b.length &&\n a.every((item, index) => item.start === b[index]?.start && item.end === b[index]?.end && item.attachment === b[index]?.attachment);\n const record = () => {\n if (history[historyIndex]?.value !== props.value || !sameMentions(history[historyIndex]?.mentions ?? [], mentions())) {\n history.splice(historyIndex + 1);\n history.push(snapshot());\n let size = history.reduce((total, entry) => total + entry.value.length, 0);\n while (history.length > 2 && size > composerUndoBudgetChars) size -= history.shift()!.value.length;\n historyIndex = history.length - 1;\n }\n };\n const edit = (value: string, nextMentions = reconcileChatMentions(props.value, value, mentions())) => {\n record();\n props.onValueChange(value);\n props.onMentionsChange?.(nextMentions);\n record();\n setDismissed(false);\n };\n const restoreHistory = (direction: -1 | 1) => {\n record();\n const next = history[historyIndex + direction];\n if (!next) return;\n historyIndex += direction;\n props.onValueChange(next.value);\n props.onMentionsChange?.(next.mentions);\n queueMicrotask(() => {\n textareaRef?.setSelectionRange(next.caret, next.caret);\n syncCaret();\n });\n };\n const syncCaret = () => {\n setCaret(textareaRef?.selectionStart ?? props.value.length);\n setSelectionEnd(textareaRef?.selectionEnd ?? props.value.length);\n };\n const selectedCommand = () => commandMatches()[selectedCommandIndex()];\n const blocked = () => Boolean(props.disabled || stopping() || state() === \"submitting\" || executing() || addingFiles() || submitting());\n const hasDraft = () => Boolean(props.value.trim() || (!running() && attachments().length > 0));\n const canSubmit = () => !blocked() && hasDraft() && !(running() && runningSubmitIntent() === \"steer\" && mentions().length);\n const canSelectFiles = () => Boolean(props.fileSelection && !props.fileSelection.disabled && !running() && !blocked());\n const hasAddMenu = () => Boolean(props.fileSelection || props.menuActions?.length);\n const hasContextUsage = () => {\n if (props.contextPopupAction) return true;\n const context = props.contextUsage;\n if (!context || typeof context.contextWindow !== \"number\" || !Number.isFinite(context.contextWindow) || context.contextWindow <= 0) {\n return false;\n }\n return [context.usage?.total, context.usage?.input, context.usage?.output].some(\n (value) => typeof value === \"number\" && Number.isFinite(value) && value >= 0,\n );\n };\n\n const menuItems = (): readonly DropdownItemData[] => {\n const items: DropdownItemData[] = [];\n if (props.fileSelection) {\n items.push({\n icon: addingFiles() ? \"ti ti-loader-2 k2b-spin\" : \"ti ti-paperclip\",\n label: props.fileSelection.label ?? messages().attachFiles,\n disabled: !canSelectFiles(),\n action: () => fileInputRef?.click(),\n });\n }\n for (const action of props.menuActions ?? []) {\n items.push({\n icon: action.icon,\n label: action.label,\n variant: action.variant,\n disabled: action.disabled,\n action: () => reportChatFailure(() => executeChatAction(action), props.onError),\n });\n }\n return items;\n };\n\n const autoResize = () => {\n if (!textareaRef) return;\n textareaRef.style.height = \"auto\";\n textareaRef.style.height = `${Math.min(textareaRef.scrollHeight, composerMaxInputHeight)}px`;\n };\n\n const focus = () => textareaRef?.focus();\n\n onMount(() => {\n autoResize();\n if (props.focusToken !== undefined) focus();\n });\n\n createEffect(() => {\n commandMatches();\n setSelectedCommandIndex(0);\n });\n\n createEffect(() => {\n const index = selectedCommandIndex();\n commandMatches();\n queueMicrotask(() => {\n const list = commandListRef;\n const item = list?.querySelector<HTMLElement>(`[id=\"${commandListId}-${index}\"]`);\n if (!list || !item?.isConnected) return;\n if (item.offsetTop < list.scrollTop) list.scrollTop = item.offsetTop;\n else if (item.offsetTop + item.offsetHeight > list.scrollTop + list.clientHeight) {\n list.scrollTop = item.offsetTop + item.offsetHeight - list.clientHeight;\n }\n });\n });\n\n createEffect(() => {\n props.value;\n queueMicrotask(autoResize);\n });\n\n createEffect(() => {\n props.focusToken;\n if (props.focusToken !== undefined) queueMicrotask(focus);\n });\n\n createEffect(() => {\n const active = running();\n if (sawRunning && !active && !props.disabled && typeof document !== \"undefined\") {\n const focused = document.activeElement as HTMLElement | null;\n const insideComposer = Boolean(focused && composerRef?.contains(focused));\n const editingElsewhere = Boolean(\n focused &&\n focused !== document.body &&\n !insideComposer &&\n (focused.matches(\"input, textarea, select\") || focused.isContentEditable || focused.closest(\"[role='dialog'], [popover]\")),\n );\n if (!editingElsewhere) queueMicrotask(focus);\n }\n sawRunning = active;\n });\n\n const setAttachments = (next: readonly ChatAttachment[]) => props.onAttachmentsChange?.(next);\n\n const renderAttachmentCopy = (attachment: ChatAttachment) => (\n <span>\n <strong title={attachment.name}>{attachment.name}</strong>\n </span>\n );\n\n const runFiles = async (files: FileList | readonly File[]) => {\n if (!canSelectFiles()) return;\n const selected = Array.from(files);\n if (selected.length === 0) return;\n setAddingFiles(true);\n try {\n await props.fileSelection?.onSelect(selected);\n } catch (error) {\n (props.fileSelection?.onError ?? props.onError)?.(error);\n } finally {\n setAddingFiles(false);\n if (fileInputRef) fileInputRef.value = \"\";\n queueMicrotask(focus);\n }\n };\n\n const submit = async () => {\n if (!canSubmit()) return;\n const intent = running() ? runningSubmitIntent() : \"send\";\n const previousValue = props.value;\n const previousAttachments = attachments();\n const previousMentions = mentions();\n const input: ChatSubmitInput = {\n intent,\n text: previousValue,\n mentions: previousMentions,\n attachments: intent !== \"steer\" ? previousAttachments : [],\n };\n\n setSubmitting(true);\n try {\n await runChatSubmission({\n clear: () => {\n props.onValueChange(\"\");\n props.onMentionsChange?.([]);\n if (intent !== \"steer\") setAttachments([]);\n },\n perform: () => props.onSubmit(input),\n restore: () => {\n props.onValueChange(previousValue);\n props.onMentionsChange?.(previousMentions);\n if (intent !== \"steer\") setAttachments(previousAttachments);\n },\n onError: props.onError,\n });\n } finally {\n setSubmitting(false);\n queueMicrotask(() => {\n autoResize();\n focus();\n });\n }\n };\n\n const executeCommand = async (command: ChatCommand) => {\n const token = commandQuery();\n if (!token || command.disabled || blocked()) return;\n const previous = snapshot();\n const key = props.draftKey;\n const replacement = command.mention ? command.mention.name + \" \" : \"\";\n const nextValue = props.value.slice(0, token.start) + replacement + props.value.slice(token.end);\n const nextMentions = reconcileChatMentions(props.value, nextValue, mentions());\n if (command.mention)\n nextMentions.push({ start: token.start, end: token.start + command.mention.name.length, attachment: command.mention });\n edit(nextValue, nextMentions);\n setDismissed(true);\n setExecuting(true);\n let submitRequested = false;\n try {\n await command.action?.({\n setValue: (value) => edit(value),\n submit: () => {\n submitRequested = true;\n },\n focus,\n });\n } catch (error) {\n submitRequested = false;\n if (props.draftKey === key && props.value === nextValue) {\n props.onValueChange(previous.value);\n props.onMentionsChange?.(previous.mentions);\n }\n props.onError?.(error);\n } finally {\n setExecuting(false);\n }\n if (submitRequested && props.draftKey === key) await submit();\n queueMicrotask(() => {\n if (props.draftKey !== key) return;\n textareaRef?.setSelectionRange(token.start + replacement.length, token.start + replacement.length);\n syncCaret();\n autoResize();\n focus();\n });\n };\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.isComposing || composing()) return;\n if ((event.ctrlKey || event.metaKey) && event.key.toLowerCase() === \"z\") {\n event.preventDefault();\n restoreHistory(event.shiftKey ? 1 : -1);\n return;\n }\n const matches = commandMatches();\n if (commandsOpen()) {\n if (event.key === \"ArrowUp\" || event.key === \"ArrowDown\") {\n event.preventDefault();\n setSelectedCommandIndex((index) => nextChatCommandIndex(index, matches.length, event.key === \"ArrowUp\" ? -1 : 1));\n return;\n }\n if ((event.key === \"Enter\" || event.key === \"Tab\") && matches.length > 0) {\n event.preventDefault();\n const command = selectedCommand();\n if (command) void executeCommand(command);\n return;\n }\n if (event.key === \"Escape\") {\n event.preventDefault();\n setDismissed(true);\n return;\n }\n }\n if (event.key === \"Enter\" && !event.shiftKey && !event.isComposing) {\n event.preventDefault();\n void submit();\n }\n };\n\n return (\n <div class=\"k2b-chat-composer-shell\">\n <Show when={commandsOpen() || hasAccessory()}>\n <div class=\"k2b-chat-composer-slot\">\n <div style={{ visibility: commandsOpen() ? \"hidden\" : undefined }} inert={commandsOpen()}>\n {accessory()}\n </div>\n <Show when={commandsOpen()}>\n <div class=\"k2b-chat-composer-accessory\">\n <div\n ref={commandListRef}\n id={commandListId}\n class=\"k2b-chat-composer__commands\"\n role=\"listbox\"\n aria-label={messages().commands}\n >\n <For each={commandMatches()}>\n {(command, index) => (\n <button\n id={`${commandListId}-${index()}`}\n type=\"button\"\n role=\"option\"\n tabIndex={-1}\n aria-selected={index() === selectedCommandIndex()}\n aria-disabled={command.disabled}\n data-active={index() === selectedCommandIndex() ? \"true\" : undefined}\n onPointerDown={(event) => event.preventDefault()}\n onClick={() => void executeCommand(command)}\n >\n <i class={command.icon ?? \"ti ti-slash\"} aria-hidden=\"true\" />\n <strong>{command.label ?? `/${command.name}`}</strong>\n <small>{command.description}</small>\n </button>\n )}\n </For>\n <Show when={searching()}>\n <div role=\"status\" class=\"k2b-chat-composer__loading\">\n <i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\" />\n <strong>{messages().loading}</strong>\n </div>\n </Show>\n <Show when={searchError()}>\n <div role=\"status\">\n <i class=\"ti ti-alert-circle\" /> {messages().error}\n </div>\n </Show>\n <Show when={!searching() && !searchError() && commandMatches().length === 0}>\n <div role=\"status\">{messages().noResults}</div>\n </Show>\n </div>\n </div>\n </Show>\n </div>\n </Show>\n <section\n ref={composerRef}\n class={`k2b-chat-composer ${props.class ?? \"\"}`}\n data-running={running() ? \"true\" : undefined}\n data-drag-active={dragActive() ? \"true\" : undefined}\n role=\"group\"\n aria-label={props.label ?? messages().messageComposer}\n >\n <Show when={attachments().length > 0}>\n <div class=\"k2b-chat-composer__attachments\" role=\"list\" aria-label={messages().attachments} tabIndex={0}>\n <For each={attachments()}>\n {(attachment) => (\n <div class=\"k2b-chat-composer__attachment\" role=\"listitem\">\n <div\n class=\"k2b-chat-composer__attachment-content\"\n classList={{ \"k2b-chat-composer__attachment-content--action\": Boolean(attachment.action) }}\n >\n <Show\n when={attachment.href}\n fallback={\n <div class=\"k2b-chat-composer__attachment-identity\">\n <Show\n when={attachment.kind === \"image\" && attachment.previewUrl}\n fallback={<i class={attachmentIcon(attachment)} aria-hidden=\"true\" />}\n >\n <img src={attachment.previewUrl} alt={attachment.alt ?? \"\"} />\n </Show>\n {renderAttachmentCopy(attachment)}\n </div>\n }\n >\n {(href) => (\n <a\n class=\"k2b-chat-composer__attachment-link\"\n href={href()}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n aria-label={messages().openInNewTab({ name: attachment.name })}\n >\n <Show\n when={attachment.kind === \"image\" && attachment.previewUrl}\n fallback={<i class={attachmentIcon(attachment)} aria-hidden=\"true\" />}\n >\n <img src={attachment.previewUrl} alt={attachment.alt ?? \"\"} />\n </Show>\n {renderAttachmentCopy(attachment)}\n </a>\n )}\n </Show>\n <Show when={attachment.action}>\n {(action) => (\n <button\n type=\"button\"\n class=\"k2b-chat-composer__attachment-action\"\n disabled={blocked() || action().disabled}\n onClick={() => reportChatFailure(() => executeChatAction(action()), props.onError)}\n >\n <Show when={action().icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>\n {action().label}\n </button>\n )}\n </Show>\n </div>\n <Show when={props.onAttachmentsChange}>\n <button\n type=\"button\"\n class=\"k2b-chat-composer__attachment-remove\"\n aria-label={messages().removeNamed({ name: attachment.name })}\n disabled={blocked()}\n onClick={() => setAttachments(attachments().filter((candidate) => candidate.id !== attachment.id))}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </button>\n </Show>\n </div>\n )}\n </For>\n </div>\n </Show>\n\n <div\n class=\"k2b-chat-composer__input\"\n role=\"group\"\n aria-label={messages().messageInput}\n onDragEnter={(event) => {\n if (!canSelectFiles() || !event.dataTransfer?.types.includes(\"Files\")) return;\n event.preventDefault();\n setDragActive(true);\n }}\n onDragOver={(event) => {\n if (!canSelectFiles() || !event.dataTransfer?.types.includes(\"Files\")) return;\n event.preventDefault();\n setDragActive(true);\n }}\n onDragLeave={(event) => {\n if (!event.currentTarget.contains(event.relatedTarget as Node | null)) setDragActive(false);\n }}\n onDrop={(event) => {\n if (!event.dataTransfer?.types.includes(\"Files\")) return;\n event.preventDefault();\n setDragActive(false);\n if (canSelectFiles() && event.dataTransfer.files.length) void runFiles(event.dataTransfer.files);\n }}\n >\n <Show when={dragActive()}>\n <div class=\"k2b-chat-composer__drop\" aria-hidden=\"true\">\n {messages().dropFilesToAttach}\n </div>\n </Show>\n <Show when={mentions().length > 0}>\n <div ref={highlightRef} class=\"k2b-chat-composer__highlight\" aria-hidden=\"true\">\n <For each={chatMentionSegments(props.value, mentions())}>\n {(part) => <span classList={{ \"k2b-chat-composer__mention\": Boolean(part.mention) }}>{part.text}</span>}\n </For>\n {\"\\n\"}\n </div>\n </Show>\n {/* biome-ignore lint/a11y/useAriaPropsSupportedByRole: popup attributes are conditional with the combobox role */}\n <textarea\n ref={textareaRef}\n classList={{ \"k2b-chat-composer__textarea--highlighted\": mentions().length > 0 }}\n rows={1}\n value={props.value}\n disabled={blocked()}\n placeholder={props.placeholder ?? (running() ? messages().addGuidance : messages().writeMessage)}\n aria-label={props.inputLabel ?? messages().message}\n role={commandsOpen() ? \"combobox\" : undefined}\n aria-autocomplete={commandsOpen() ? \"list\" : undefined}\n aria-controls={commandsOpen() ? commandListId : undefined}\n aria-expanded={commandsOpen() ? \"true\" : undefined}\n aria-activedescendant={selectedCommand() ? `${commandListId}-${selectedCommandIndex()}` : undefined}\n onInput={(event) => {\n edit(event.currentTarget.value);\n syncCaret();\n autoResize();\n }}\n onPaste={(event) => {\n const clipboardData = event.clipboardData;\n if (canSelectFiles() && clipboardData?.files.length) {\n event.preventDefault();\n void runFiles(clipboardData.files);\n return;\n }\n props.onPaste?.(event);\n }}\n onSelect={syncCaret}\n onBlur={() => setDismissed(true)}\n onClick={() => {\n setDismissed(false);\n syncCaret();\n }}\n onKeyUp={syncCaret}\n onCompositionStart={() => setComposing(true)}\n onCompositionEnd={() => {\n setComposing(false);\n syncCaret();\n }}\n onScroll={() => {\n if (highlightRef && textareaRef) highlightRef.scrollTop = textareaRef.scrollTop;\n }}\n onBeforeInput={(event) => {\n if (event.inputType === \"historyUndo\" || event.inputType === \"historyRedo\") {\n event.preventDefault();\n restoreHistory(event.inputType === \"historyUndo\" ? -1 : 1);\n }\n }}\n onKeyDown={onKeyDown}\n />\n </div>\n\n <Show when={props.error}>\n <div class=\"k2b-chat-composer__error\" role=\"alert\">\n <i class=\"ti ti-alert-circle\" aria-hidden=\"true\" />\n {props.error}\n </div>\n </Show>\n\n <footer class=\"k2b-chat-composer__footer\">\n <Show\n when={props.footerContent}\n fallback={\n <>\n <div class=\"k2b-chat-composer__tools\">\n {props.footerTools}\n <Show when={hasAddMenu()}>\n <Dropdown.Root position=\"top-right\" label={messages().addToChat} items={menuItems()} disabled={blocked()}>\n <Dropdown.Trigger\n appearance=\"plain\"\n class=\"k2b-chat-composer__icon-action\"\n label={messages().addToChat}\n tooltip={messages().addToChat}\n >\n <i class=\"ti ti-plus\" aria-hidden=\"true\" />\n </Dropdown.Trigger>\n </Dropdown.Root>\n </Show>\n <Show when={props.fileSelection}>\n <input\n ref={fileInputRef}\n class=\"k2b-sr-only\"\n type=\"file\"\n tabIndex={-1}\n aria-hidden=\"true\"\n accept={props.fileSelection?.accept}\n multiple={props.fileSelection?.multiple ?? true}\n onChange={(event) => {\n if (event.currentTarget.files?.length) void runFiles(event.currentTarget.files);\n }}\n />\n </Show>\n <Show when={(props.models?.length ?? 0) > 0}>\n <SelectChip\n aria-label={messages().chooseModel}\n position=\"top-right\"\n class=\"k2b-chat-composer__model\"\n menuWidth=\"15rem\"\n placeholder={messages().model}\n value={() => props.selectedModelId ?? \"\"}\n options={(props.models ?? []).map((model) => ({\n value: model.id,\n label: model.label,\n description: model.description,\n icon: model.icon,\n image: model.image,\n }))}\n disabled={blocked() || running() || !props.onModelChange}\n onValueChange={(modelId) => {\n props.onModelChange?.(modelId);\n queueMicrotask(focus);\n }}\n />\n </Show>\n {props.modelDetails}\n </div>\n\n <div class=\"k2b-chat-composer__submit\">\n <For each={props.contextActions}>\n {(action) => (\n <Tooltip.Trigger\n type=\"button\"\n class=\"k2b-chat-composer__icon-action\"\n data-tone={action.variant === \"danger\" ? \"danger\" : undefined}\n disabled={action.disabled}\n aria-pressed={action.pressed}\n aria-label={action.label}\n content={action.label}\n onClick={() => reportChatFailure(() => executeChatAction(action), props.onError)}\n >\n <i class={action.icon ?? \"ti ti-dots\"} aria-hidden=\"true\" />\n </Tooltip.Trigger>\n )}\n </For>\n <Show when={hasContextUsage() ? (props.contextUsage ?? {}) : undefined}>\n {(usage) => <ContextUsage {...usage()} action={props.contextPopupAction} onActionError={props.onError} />}\n </Show>\n {props.submitTools}\n <Show\n when={running() && !hasDraft() && props.onStop}\n fallback={\n <Tooltip.Trigger\n type=\"button\"\n class=\"k2b-chat-composer__send\"\n disabled={!canSubmit()}\n aria-label={\n submitting()\n ? running()\n ? runningSubmitIntent() === \"queue\"\n ? messages().queueing\n : messages().steering\n : messages().sending\n : running()\n ? runningSubmitIntent() === \"queue\"\n ? messages().queueMessage\n : messages().steerResponse\n : messages().sendMessage\n }\n content={\n running()\n ? runningSubmitIntent() === \"queue\"\n ? messages().queueMessage\n : messages().steerResponse\n : messages().sendMessage\n }\n onClick={() => void submit()}\n >\n <i class={submitting() ? \"ti ti-loader-2 k2b-spin\" : \"ti ti-arrow-up\"} aria-hidden=\"true\" />\n </Tooltip.Trigger>\n }\n >\n <Tooltip.Trigger\n type=\"button\"\n class=\"k2b-chat-composer__stop\"\n disabled={stopping()}\n aria-label={stopping() ? messages().stopping : messages().stopResponse}\n content={messages().stopResponse}\n onClick={() => reportChatFailure(() => props.onStop?.(), props.onError)}\n >\n <i class={stopping() ? \"ti ti-loader-2 k2b-spin\" : \"ti ti-player-stop\"} aria-hidden=\"true\" />\n </Tooltip.Trigger>\n </Show>\n </div>\n </>\n }\n >\n {(content) => content()}\n </Show>\n </footer>\n </section>\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["chat/ChatComposer.tsx"],"sourcesContent":["import {\n children,\n createEffect,\n createMemo,\n createSignal,\n createUniqueId,\n For,\n type JSX,\n onCleanup,\n onMount,\n Show,\n untrack,\n} from \"solid-js\";\nimport { Dropdown, type DropdownItem as DropdownItemData } from \"../actions/Dropdown\";\nimport { Tooltip } from \"../feedback/Tooltip\";\nimport { FileDropTarget } from \"../inputs/FileDropTarget\";\nimport { SelectChip } from \"../inputs/SelectChip\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { ChatContextUsage as ContextUsage } from \"./ChatPrimitives\";\nimport { executeChatAction, nextChatCommandIndex, reportChatFailure, runChatSubmission } from \"./chat-behavior\";\nimport { chatCommandQuery, chatMentionSegments, reconcileChatMentions } from \"./composer-document\";\nimport type {\n ChatAction,\n ChatAttachment,\n ChatComposerState,\n ChatContextUsageData,\n ChatMention,\n ChatModelOption,\n ChatSubmitInput,\n} from \"./types\";\n\nconst composerMaxInputHeight = 309;\n// Keep editor undo text within approximately 2 MiB, plus the current edit.\nconst composerUndoBudgetChars = 1_000_000;\n\nexport type ChatCommandContext = {\n setValue: (value: string) => void;\n submit: () => void;\n focus: () => void;\n};\n\nexport type ChatCommand = {\n name: string;\n description: string;\n icon?: string;\n action?: (context: ChatCommandContext) => void | Promise<void>;\n /** Selecting a reference inserts its display name and retains its opaque payload. */\n mention?: ChatAttachment;\n label?: string;\n disabled?: boolean;\n};\n\nexport type ChatFileSelection = {\n onSelect: (files: readonly File[]) => void | Promise<void>;\n onError?: (error: unknown) => void;\n accept?: string;\n multiple?: boolean;\n disabled?: boolean;\n label?: string;\n};\n\nexport type ChatPasteHandler = (event: ClipboardEvent & { currentTarget: HTMLTextAreaElement; target: Element }) => void;\n\nexport type ChatComposerProps = {\n value: string;\n onValueChange: (value: string) => void;\n onSubmit: (input: ChatSubmitInput) => boolean | void | Promise<boolean | void>;\n /** Submit intent used for drafts entered while a response is running. Defaults to `steer`. */\n runningSubmitIntent?: \"steer\" | \"queue\";\n onStop?: () => void | Promise<void>;\n onError?: (error: unknown) => void;\n state?: ChatComposerState;\n attachments?: readonly ChatAttachment[];\n onAttachmentsChange?: (attachments: readonly ChatAttachment[]) => void;\n fileSelection?: ChatFileSelection;\n /** Handle non-file clipboard content. Pasted files already use `fileSelection`. */\n onPaste?: ChatPasteHandler;\n menuActions?: readonly ChatAction[];\n models?: readonly ChatModelOption[];\n selectedModelId?: string | null;\n onModelChange?: (modelId: string) => void;\n /** Compact application-owned details immediately after the model selector. */\n modelDetails?: JSX.Element;\n commands?: readonly ChatCommand[];\n searchCommands?: (query: string, signal: AbortSignal) => Promise<readonly ChatCommand[]>;\n mentions?: readonly ChatMention[];\n onMentionsChange?: (mentions: readonly ChatMention[]) => void;\n /** Shared surface above the editor; suggestions temporarily replace this content. */\n accessory?: JSX.Element;\n contextUsage?: ChatContextUsageData;\n contextActions?: readonly ChatAction[];\n /** Optional action inside the context details popup. */\n contextPopupAction?: ChatAction;\n /** Additional compact controls rendered with the add/model controls. */\n footerTools?: JSX.Element;\n /** Compact application controls immediately before the send/stop button. */\n submitTools?: JSX.Element;\n /** Replaces footer controls during an application-owned interaction, preserving the editor. */\n footerContent?: JSX.Element;\n placeholder?: string;\n label?: string;\n inputLabel?: string;\n disabled?: boolean;\n error?: string;\n focusToken?: unknown;\n draftKey?: unknown;\n class?: string;\n};\n\nconst attachmentIcon = (attachment: ChatAttachment): string =>\n attachment.icon ?? (attachment.kind === \"image\" ? \"ti ti-photo\" : attachment.kind === \"resource\" ? \"ti ti-link\" : \"ti ti-file\");\n\nexport function ChatComposer(props: ChatComposerProps): JSX.Element {\n const accessory = children(() => props.accessory);\n const hasAccessory = () => accessory.toArray().some((item) => item != null && typeof item !== \"boolean\" && item !== \"\");\n const messages = useUiMessages();\n const commandListId = `k2b-chat-commands-${createUniqueId().replace(/[^A-Za-z0-9_-]/g, \"-\")}`;\n const [selectedCommandIndex, setSelectedCommandIndex] = createSignal(0);\n const [addingFiles, setAddingFiles] = createSignal(false);\n const [submitting, setSubmitting] = createSignal(false);\n let composerRef: HTMLElement | undefined;\n let textareaRef: HTMLTextAreaElement | undefined;\n let fileInputRef: HTMLInputElement | undefined;\n let sawRunning = props.state === \"running\";\n\n const state = () => props.state ?? \"idle\";\n const running = () => state() === \"running\";\n const stopping = () => state() === \"stopping\";\n const runningSubmitIntent = () => props.runningSubmitIntent ?? \"steer\";\n const attachments = () => props.attachments ?? [];\n const [caret, setCaret] = createSignal(0);\n const [selectionEnd, setSelectionEnd] = createSignal(0);\n const [dismissed, setDismissed] = createSignal(false);\n const [composing, setComposing] = createSignal(false);\n const [searchResults, setSearchResults] = createSignal<readonly ChatCommand[]>([]);\n const [searching, setSearching] = createSignal(false);\n const [searchError, setSearchError] = createSignal(false);\n const [executing, setExecuting] = createSignal(false);\n let highlightRef: HTMLDivElement | undefined;\n let commandListRef: HTMLDivElement | undefined;\n const mentions = () => props.mentions ?? [];\n const commandQuery = createMemo(() => (dismissed() || composing() ? null : chatCommandQuery(props.value, caret(), selectionEnd())));\n const commandMatches = createMemo(() => {\n const token = commandQuery();\n if (!token) return [];\n return [\n ...(props.commands ?? []).filter((command) => command.name.toLowerCase().includes(token.query.toLowerCase())),\n ...searchResults(),\n ];\n });\n const commandsOpen = () => Boolean(commandQuery() && (props.commands?.length || props.searchCommands));\n createEffect(() => {\n if (!commandsOpen()) return;\n let disposed = false;\n const measure = () => {\n if (disposed || !commandListRef) return;\n let top = window.visualViewport?.offsetTop ?? 0;\n for (let parent = commandListRef.parentElement; parent; parent = parent.parentElement) {\n if (/(auto|scroll|hidden|clip)/.test(window.getComputedStyle(parent).overflowY)) {\n top = Math.max(top, parent.getBoundingClientRect().top);\n }\n }\n const bottom = commandListRef.parentElement!.getBoundingClientRect().bottom;\n commandListRef.style.setProperty(\"--k2b-chat-command-space\", `${Math.max(40, bottom - top - 8)}px`);\n };\n queueMicrotask(measure);\n window.addEventListener(\"resize\", measure);\n window.addEventListener(\"scroll\", measure, true);\n window.visualViewport?.addEventListener(\"resize\", measure);\n onCleanup(() => {\n disposed = true;\n window.removeEventListener(\"resize\", measure);\n window.removeEventListener(\"scroll\", measure, true);\n window.visualViewport?.removeEventListener(\"resize\", measure);\n });\n });\n createEffect(() => {\n const token = commandQuery();\n setSearchResults([]);\n setSearchError(false);\n if (!token || !props.searchCommands) {\n setSearching(false);\n return;\n }\n const abort = new AbortController();\n setSearching(true);\n const timer = setTimeout(() => {\n Promise.resolve(props.searchCommands!(token.query, abort.signal))\n .then((results) => {\n if (!abort.signal.aborted) setSearchResults(results);\n })\n .catch(() => {\n if (!abort.signal.aborted) setSearchError(true);\n })\n .finally(() => {\n if (!abort.signal.aborted) setSearching(false);\n });\n }, 120);\n onCleanup(() => {\n clearTimeout(timer);\n abort.abort();\n });\n });\n const history: { value: string; mentions: readonly ChatMention[]; caret: number }[] = [];\n let historyIndex = -1;\n createEffect(() => {\n props.draftKey;\n untrack(() => {\n history.length = 0;\n historyIndex = -1;\n setDismissed(true);\n });\n });\n const snapshot = () => ({ value: props.value, mentions: [...mentions()], caret: textareaRef?.selectionStart ?? 0 });\n const sameMentions = (a: readonly ChatMention[], b: readonly ChatMention[]) =>\n a.length === b.length &&\n a.every((item, index) => item.start === b[index]?.start && item.end === b[index]?.end && item.attachment === b[index]?.attachment);\n const record = () => {\n if (history[historyIndex]?.value !== props.value || !sameMentions(history[historyIndex]?.mentions ?? [], mentions())) {\n history.splice(historyIndex + 1);\n history.push(snapshot());\n let size = history.reduce((total, entry) => total + entry.value.length, 0);\n while (history.length > 2 && size > composerUndoBudgetChars) size -= history.shift()!.value.length;\n historyIndex = history.length - 1;\n }\n };\n const edit = (value: string, nextMentions = reconcileChatMentions(props.value, value, mentions())) => {\n record();\n props.onValueChange(value);\n props.onMentionsChange?.(nextMentions);\n record();\n setDismissed(false);\n };\n const restoreHistory = (direction: -1 | 1) => {\n record();\n const next = history[historyIndex + direction];\n if (!next) return;\n historyIndex += direction;\n props.onValueChange(next.value);\n props.onMentionsChange?.(next.mentions);\n queueMicrotask(() => {\n textareaRef?.setSelectionRange(next.caret, next.caret);\n syncCaret();\n });\n };\n const syncCaret = () => {\n setCaret(textareaRef?.selectionStart ?? props.value.length);\n setSelectionEnd(textareaRef?.selectionEnd ?? props.value.length);\n };\n const selectedCommand = () => commandMatches()[selectedCommandIndex()];\n const blocked = () => Boolean(props.disabled || stopping() || state() === \"submitting\" || executing() || addingFiles() || submitting());\n const hasDraft = () => Boolean(props.value.trim() || (!running() && attachments().length > 0));\n const canSubmit = () => !blocked() && hasDraft() && !(running() && runningSubmitIntent() === \"steer\" && mentions().length);\n const canSelectFiles = () => Boolean(props.fileSelection && !props.fileSelection.disabled && !running() && !blocked());\n const hasAddMenu = () => Boolean(props.fileSelection || props.menuActions?.length);\n const hasContextUsage = () => {\n if (props.contextPopupAction) return true;\n const context = props.contextUsage;\n if (!context || typeof context.contextWindow !== \"number\" || !Number.isFinite(context.contextWindow) || context.contextWindow <= 0) {\n return false;\n }\n return [context.usage?.total, context.usage?.input, context.usage?.output].some(\n (value) => typeof value === \"number\" && Number.isFinite(value) && value >= 0,\n );\n };\n\n const menuItems = (): readonly DropdownItemData[] => {\n const items: DropdownItemData[] = [];\n if (props.fileSelection) {\n items.push({\n icon: addingFiles() ? \"ti ti-loader-2 k2b-spin\" : \"ti ti-paperclip\",\n label: props.fileSelection.label ?? messages().attachFiles,\n disabled: !canSelectFiles(),\n action: () => fileInputRef?.click(),\n });\n }\n for (const action of props.menuActions ?? []) {\n items.push({\n icon: action.icon,\n label: action.label,\n variant: action.variant,\n disabled: action.disabled,\n action: () => reportChatFailure(() => executeChatAction(action), props.onError),\n });\n }\n return items;\n };\n\n const autoResize = () => {\n if (!textareaRef) return;\n textareaRef.style.height = \"auto\";\n textareaRef.style.height = `${Math.min(textareaRef.scrollHeight, composerMaxInputHeight)}px`;\n };\n\n const focus = () => textareaRef?.focus();\n\n onMount(() => {\n autoResize();\n if (props.focusToken !== undefined) focus();\n });\n\n createEffect(() => {\n commandMatches();\n setSelectedCommandIndex(0);\n });\n\n createEffect(() => {\n const index = selectedCommandIndex();\n commandMatches();\n queueMicrotask(() => {\n const list = commandListRef;\n const item = list?.querySelector<HTMLElement>(`[id=\"${commandListId}-${index}\"]`);\n if (!list || !item?.isConnected) return;\n if (item.offsetTop < list.scrollTop) list.scrollTop = item.offsetTop;\n else if (item.offsetTop + item.offsetHeight > list.scrollTop + list.clientHeight) {\n list.scrollTop = item.offsetTop + item.offsetHeight - list.clientHeight;\n }\n });\n });\n\n createEffect(() => {\n props.value;\n queueMicrotask(autoResize);\n });\n\n createEffect(() => {\n props.focusToken;\n if (props.focusToken !== undefined) queueMicrotask(focus);\n });\n\n createEffect(() => {\n const active = running();\n if (sawRunning && !active && !props.disabled && typeof document !== \"undefined\") {\n const focused = document.activeElement as HTMLElement | null;\n const insideComposer = Boolean(focused && composerRef?.contains(focused));\n const editingElsewhere = Boolean(\n focused &&\n focused !== document.body &&\n !insideComposer &&\n (focused.matches(\"input, textarea, select\") || focused.isContentEditable || focused.closest(\"[role='dialog'], [popover]\")),\n );\n if (!editingElsewhere) queueMicrotask(focus);\n }\n sawRunning = active;\n });\n\n const setAttachments = (next: readonly ChatAttachment[]) => props.onAttachmentsChange?.(next);\n\n const renderAttachmentCopy = (attachment: ChatAttachment) => (\n <span>\n <strong title={attachment.name}>{attachment.name}</strong>\n </span>\n );\n\n const runFiles = async (files: FileList | readonly File[]) => {\n if (!canSelectFiles()) return;\n const selected = Array.from(files);\n if (selected.length === 0) return;\n setAddingFiles(true);\n try {\n await props.fileSelection?.onSelect(selected);\n } catch (error) {\n (props.fileSelection?.onError ?? props.onError)?.(error);\n } finally {\n setAddingFiles(false);\n if (fileInputRef) fileInputRef.value = \"\";\n queueMicrotask(focus);\n }\n };\n\n const submit = async () => {\n if (!canSubmit()) return;\n const intent = running() ? runningSubmitIntent() : \"send\";\n const previousValue = props.value;\n const previousAttachments = attachments();\n const previousMentions = mentions();\n const input: ChatSubmitInput = {\n intent,\n text: previousValue,\n mentions: previousMentions,\n attachments: intent !== \"steer\" ? previousAttachments : [],\n };\n\n setSubmitting(true);\n try {\n await runChatSubmission({\n clear: () => {\n props.onValueChange(\"\");\n props.onMentionsChange?.([]);\n if (intent !== \"steer\") setAttachments([]);\n },\n perform: () => props.onSubmit(input),\n restore: () => {\n props.onValueChange(previousValue);\n props.onMentionsChange?.(previousMentions);\n if (intent !== \"steer\") setAttachments(previousAttachments);\n },\n onError: props.onError,\n });\n } finally {\n setSubmitting(false);\n queueMicrotask(() => {\n autoResize();\n focus();\n });\n }\n };\n\n const executeCommand = async (command: ChatCommand) => {\n const token = commandQuery();\n if (!token || command.disabled || blocked()) return;\n const previous = snapshot();\n const key = props.draftKey;\n const replacement = command.mention ? command.mention.name + \" \" : \"\";\n const nextValue = props.value.slice(0, token.start) + replacement + props.value.slice(token.end);\n const nextMentions = reconcileChatMentions(props.value, nextValue, mentions());\n if (command.mention)\n nextMentions.push({ start: token.start, end: token.start + command.mention.name.length, attachment: command.mention });\n edit(nextValue, nextMentions);\n setDismissed(true);\n setExecuting(true);\n let submitRequested = false;\n try {\n await command.action?.({\n setValue: (value) => edit(value),\n submit: () => {\n submitRequested = true;\n },\n focus,\n });\n } catch (error) {\n submitRequested = false;\n if (props.draftKey === key && props.value === nextValue) {\n props.onValueChange(previous.value);\n props.onMentionsChange?.(previous.mentions);\n }\n props.onError?.(error);\n } finally {\n setExecuting(false);\n }\n if (submitRequested && props.draftKey === key) await submit();\n queueMicrotask(() => {\n if (props.draftKey !== key) return;\n textareaRef?.setSelectionRange(token.start + replacement.length, token.start + replacement.length);\n syncCaret();\n autoResize();\n focus();\n });\n };\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.isComposing || composing()) return;\n if ((event.ctrlKey || event.metaKey) && event.key.toLowerCase() === \"z\") {\n event.preventDefault();\n restoreHistory(event.shiftKey ? 1 : -1);\n return;\n }\n const matches = commandMatches();\n if (commandsOpen()) {\n if (event.key === \"ArrowUp\" || event.key === \"ArrowDown\") {\n event.preventDefault();\n setSelectedCommandIndex((index) => nextChatCommandIndex(index, matches.length, event.key === \"ArrowUp\" ? -1 : 1));\n return;\n }\n if ((event.key === \"Enter\" || event.key === \"Tab\") && matches.length > 0) {\n event.preventDefault();\n const command = selectedCommand();\n if (command) void executeCommand(command);\n return;\n }\n if (event.key === \"Escape\") {\n event.preventDefault();\n setDismissed(true);\n return;\n }\n }\n if (event.key === \"Enter\" && !event.shiftKey && !event.isComposing) {\n event.preventDefault();\n void submit();\n }\n };\n\n return (\n <div class=\"k2b-chat-composer-shell\">\n <Show when={commandsOpen() || hasAccessory()}>\n <div class=\"k2b-chat-composer-slot\">\n <div style={{ visibility: commandsOpen() ? \"hidden\" : undefined }} inert={commandsOpen()}>\n {accessory()}\n </div>\n <Show when={commandsOpen()}>\n <div class=\"k2b-chat-composer-accessory\">\n <div\n ref={commandListRef}\n id={commandListId}\n class=\"k2b-chat-composer__commands\"\n role=\"listbox\"\n aria-label={messages().commands}\n >\n <For each={commandMatches()}>\n {(command, index) => (\n <button\n id={`${commandListId}-${index()}`}\n type=\"button\"\n role=\"option\"\n tabIndex={-1}\n aria-selected={index() === selectedCommandIndex()}\n aria-disabled={command.disabled}\n data-active={index() === selectedCommandIndex() ? \"true\" : undefined}\n onPointerDown={(event) => event.preventDefault()}\n onClick={() => void executeCommand(command)}\n >\n <i class={command.icon ?? \"ti ti-slash\"} aria-hidden=\"true\" />\n <strong>{command.label ?? `/${command.name}`}</strong>\n <small>{command.description}</small>\n </button>\n )}\n </For>\n <Show when={searching()}>\n <div role=\"status\" class=\"k2b-chat-composer__loading\">\n <i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\" />\n <strong>{messages().loading}</strong>\n </div>\n </Show>\n <Show when={searchError()}>\n <div role=\"status\">\n <i class=\"ti ti-alert-circle\" /> {messages().error}\n </div>\n </Show>\n <Show when={!searching() && !searchError() && commandMatches().length === 0}>\n <div role=\"status\">{messages().noResults}</div>\n </Show>\n </div>\n </div>\n </Show>\n </div>\n </Show>\n <section\n ref={composerRef}\n class={`k2b-chat-composer ${props.class ?? \"\"}`}\n data-running={running() ? \"true\" : undefined}\n role=\"group\"\n aria-label={props.label ?? messages().messageComposer}\n >\n <Show when={attachments().length > 0}>\n <div class=\"k2b-chat-composer__attachments\" role=\"list\" aria-label={messages().attachments} tabIndex={0}>\n <For each={attachments()}>\n {(attachment) => (\n <div class=\"k2b-chat-composer__attachment\" role=\"listitem\">\n <div\n class=\"k2b-chat-composer__attachment-content\"\n classList={{ \"k2b-chat-composer__attachment-content--action\": Boolean(attachment.action) }}\n >\n <Show\n when={attachment.href}\n fallback={\n <div class=\"k2b-chat-composer__attachment-identity\">\n <Show\n when={attachment.kind === \"image\" && attachment.previewUrl}\n fallback={<i class={attachmentIcon(attachment)} aria-hidden=\"true\" />}\n >\n <img src={attachment.previewUrl} alt={attachment.alt ?? \"\"} />\n </Show>\n {renderAttachmentCopy(attachment)}\n </div>\n }\n >\n {(href) => (\n <a\n class=\"k2b-chat-composer__attachment-link\"\n href={href()}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n aria-label={messages().openInNewTab({ name: attachment.name })}\n >\n <Show\n when={attachment.kind === \"image\" && attachment.previewUrl}\n fallback={<i class={attachmentIcon(attachment)} aria-hidden=\"true\" />}\n >\n <img src={attachment.previewUrl} alt={attachment.alt ?? \"\"} />\n </Show>\n {renderAttachmentCopy(attachment)}\n </a>\n )}\n </Show>\n <Show when={attachment.action}>\n {(action) => (\n <button\n type=\"button\"\n class=\"k2b-chat-composer__attachment-action\"\n disabled={blocked() || action().disabled}\n onClick={() => reportChatFailure(() => executeChatAction(action()), props.onError)}\n >\n <Show when={action().icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>\n {action().label}\n </button>\n )}\n </Show>\n </div>\n <Show when={props.onAttachmentsChange}>\n <button\n type=\"button\"\n class=\"k2b-chat-composer__attachment-remove\"\n aria-label={messages().removeNamed({ name: attachment.name })}\n disabled={blocked()}\n onClick={() => setAttachments(attachments().filter((candidate) => candidate.id !== attachment.id))}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </button>\n </Show>\n </div>\n )}\n </For>\n </div>\n </Show>\n\n <div class=\"k2b-chat-composer__input\" role=\"group\" aria-label={messages().messageInput}>\n <Show when={mentions().length > 0}>\n <div ref={highlightRef} class=\"k2b-chat-composer__highlight\" aria-hidden=\"true\">\n <For each={chatMentionSegments(props.value, mentions())}>\n {(part) => <span classList={{ \"k2b-chat-composer__mention\": Boolean(part.mention) }}>{part.text}</span>}\n </For>\n {\"\\n\"}\n </div>\n </Show>\n {/* biome-ignore lint/a11y/useAriaPropsSupportedByRole: popup attributes are conditional with the combobox role */}\n <textarea\n ref={textareaRef}\n classList={{ \"k2b-chat-composer__textarea--highlighted\": mentions().length > 0 }}\n rows={1}\n value={props.value}\n disabled={blocked()}\n placeholder={props.placeholder ?? (running() ? messages().addGuidance : messages().writeMessage)}\n aria-label={props.inputLabel ?? messages().message}\n role={commandsOpen() ? \"combobox\" : undefined}\n aria-autocomplete={commandsOpen() ? \"list\" : undefined}\n aria-controls={commandsOpen() ? commandListId : undefined}\n aria-expanded={commandsOpen() ? \"true\" : undefined}\n aria-activedescendant={selectedCommand() ? `${commandListId}-${selectedCommandIndex()}` : undefined}\n onInput={(event) => {\n edit(event.currentTarget.value);\n syncCaret();\n autoResize();\n }}\n onPaste={(event) => {\n const clipboardData = event.clipboardData;\n if (canSelectFiles() && clipboardData?.files.length) {\n event.preventDefault();\n void runFiles(clipboardData.files);\n return;\n }\n props.onPaste?.(event);\n }}\n onSelect={syncCaret}\n onBlur={() => setDismissed(true)}\n onClick={() => {\n setDismissed(false);\n syncCaret();\n }}\n onKeyUp={syncCaret}\n onCompositionStart={() => setComposing(true)}\n onCompositionEnd={() => {\n setComposing(false);\n syncCaret();\n }}\n onScroll={() => {\n if (highlightRef && textareaRef) highlightRef.scrollTop = textareaRef.scrollTop;\n }}\n onBeforeInput={(event) => {\n if (event.inputType === \"historyUndo\" || event.inputType === \"historyRedo\") {\n event.preventDefault();\n restoreHistory(event.inputType === \"historyUndo\" ? -1 : 1);\n }\n }}\n onKeyDown={onKeyDown}\n />\n </div>\n\n <Show when={props.error}>\n <div class=\"k2b-chat-composer__error\" role=\"alert\">\n <i class=\"ti ti-alert-circle\" aria-hidden=\"true\" />\n {props.error}\n </div>\n </Show>\n\n <footer class=\"k2b-chat-composer__footer\">\n <Show\n when={props.footerContent}\n fallback={\n <>\n <div class=\"k2b-chat-composer__tools\">\n {props.footerTools}\n <Show when={hasAddMenu()}>\n <Dropdown.Root position=\"top-right\" label={messages().addToChat} items={menuItems()} disabled={blocked()}>\n <Dropdown.Trigger\n appearance=\"plain\"\n class=\"k2b-chat-composer__icon-action\"\n label={messages().addToChat}\n tooltip={messages().addToChat}\n >\n <i class=\"ti ti-plus\" aria-hidden=\"true\" />\n </Dropdown.Trigger>\n </Dropdown.Root>\n </Show>\n <Show when={props.fileSelection}>\n <input\n ref={fileInputRef}\n class=\"k2b-sr-only\"\n type=\"file\"\n tabIndex={-1}\n aria-hidden=\"true\"\n accept={props.fileSelection?.accept}\n multiple={props.fileSelection?.multiple ?? true}\n onChange={(event) => {\n if (event.currentTarget.files?.length) void runFiles(event.currentTarget.files);\n }}\n />\n </Show>\n <Show when={(props.models?.length ?? 0) > 0}>\n <SelectChip\n aria-label={messages().chooseModel}\n position=\"top-right\"\n class=\"k2b-chat-composer__model\"\n menuWidth=\"15rem\"\n placeholder={messages().model}\n value={() => props.selectedModelId ?? \"\"}\n options={(props.models ?? []).map((model) => ({\n value: model.id,\n label: model.label,\n description: model.description,\n icon: model.icon,\n image: model.image,\n }))}\n disabled={blocked() || running() || !props.onModelChange}\n onValueChange={(modelId) => {\n props.onModelChange?.(modelId);\n queueMicrotask(focus);\n }}\n />\n </Show>\n {props.modelDetails}\n </div>\n\n <div class=\"k2b-chat-composer__submit\">\n <For each={props.contextActions}>\n {(action) => (\n <Tooltip.Trigger\n type=\"button\"\n class=\"k2b-chat-composer__icon-action\"\n data-tone={action.variant === \"danger\" ? \"danger\" : undefined}\n disabled={action.disabled}\n aria-pressed={action.pressed}\n aria-label={action.label}\n content={action.label}\n onClick={() => reportChatFailure(() => executeChatAction(action), props.onError)}\n >\n <i class={action.icon ?? \"ti ti-dots\"} aria-hidden=\"true\" />\n </Tooltip.Trigger>\n )}\n </For>\n <Show when={hasContextUsage() ? (props.contextUsage ?? {}) : undefined}>\n {(usage) => <ContextUsage {...usage()} action={props.contextPopupAction} onActionError={props.onError} />}\n </Show>\n {props.submitTools}\n <Show\n when={running() && !hasDraft() && props.onStop}\n fallback={\n <Tooltip.Trigger\n type=\"button\"\n class=\"k2b-chat-composer__send\"\n disabled={!canSubmit()}\n aria-label={\n submitting()\n ? running()\n ? runningSubmitIntent() === \"queue\"\n ? messages().queueing\n : messages().steering\n : messages().sending\n : running()\n ? runningSubmitIntent() === \"queue\"\n ? messages().queueMessage\n : messages().steerResponse\n : messages().sendMessage\n }\n content={\n running()\n ? runningSubmitIntent() === \"queue\"\n ? messages().queueMessage\n : messages().steerResponse\n : messages().sendMessage\n }\n onClick={() => void submit()}\n >\n <i class={submitting() ? \"ti ti-loader-2 k2b-spin\" : \"ti ti-arrow-up\"} aria-hidden=\"true\" />\n </Tooltip.Trigger>\n }\n >\n <Tooltip.Trigger\n type=\"button\"\n class=\"k2b-chat-composer__stop\"\n disabled={stopping()}\n aria-label={stopping() ? messages().stopping : messages().stopResponse}\n content={messages().stopResponse}\n onClick={() => reportChatFailure(() => props.onStop?.(), props.onError)}\n >\n <i class={stopping() ? \"ti ti-loader-2 k2b-spin\" : \"ti ti-player-stop\"} aria-hidden=\"true\" />\n </Tooltip.Trigger>\n </Show>\n </div>\n </>\n }\n >\n {(content) => content()}\n </Show>\n </footer>\n {/* Files dropped anywhere in the surrounding workspace area attach to the message. */}\n <Show when={props.fileSelection}>\n {(selection) => (\n <FileDropTarget\n label={messages().dropFilesToAttach}\n accept={selection().accept}\n multiple={selection().multiple}\n disabled={!canSelectFiles()}\n onDrop={(files) => void runFiles(files)}\n />\n )}\n </Show>\n </section>\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -40,6 +40,7 @@ import { createSignal, For, onCleanup, Show } from "solid-js";
40
40
  import { Button } from "../actions/Button";
41
41
  import { Dropdown } from "../actions/Dropdown";
42
42
  import { Tooltip } from "../feedback/Tooltip";
43
+ import { useLocale } from "../intl/locale";
43
44
  import { useUiMessages } from "../intl/messages";
44
45
  import { ProgressBar } from "../surfaces/ProgressBar";
45
46
  import { ChatContextPanel, ChatContextPopup } from "./ChatContextPopup";
@@ -76,10 +77,11 @@ const normalizedUsage = usage => {
76
77
  reported: total !== null
77
78
  };
78
79
  };
79
- const formatStableInteger = value => {
80
- const digits = String(Math.round(finiteNonNegative(value)));
81
- return digits.replace(/\B(?=(\d{3})+(?!\d))/g, ",");
82
- };
80
+
81
+ /** Whole numbers in the render locale, so a German page reads 128.000 and an English one 128,000. */
82
+ const formatLocaleInteger = (value, locale) => new Intl.NumberFormat(locale, {
83
+ maximumFractionDigits: 0
84
+ }).format(Math.round(finiteNonNegative(value)));
83
85
  export const formatChatTokens = tokens => {
84
86
  const value = finiteNonNegative(tokens);
85
87
  if (value >= 1_000_000) return `${(value / 1_000_000).toFixed(1)}M`;
@@ -582,7 +584,8 @@ export function ChatContextUsage(props) {
582
584
  }
583
585
  };
584
586
  const messages = useUiMessages();
585
- const formatNumber = value => (props.formatNumber ?? formatStableInteger)(value);
587
+ const locale = useLocale();
588
+ const formatNumber = value => props.formatNumber ? props.formatNumber(value) : formatLocaleInteger(value, locale());
586
589
  const formattedUsageValue = value => value === null ? messages().unknown : formatNumber(value);
587
590
  const usage = () => normalizedUsage(props.usage);
588
591
  const loopUsage = () => normalizedUsage(props.loopUsage);
@@ -676,7 +679,7 @@ export function ChatContextUsage(props) {
676
679
  return _el$60;
677
680
  }
678
681
  }), _el$72, _co$10);
679
- _$insert(_el$64, () => messages().window);
682
+ _$insert(_el$64, () => messages().contextWindow);
680
683
  _$insert(_el$65, (() => {
681
684
  var _c$3 = _$memo(() => windowSize() > 0);
682
685
  return () => _c$3() ? formatNumber(windowSize()) : messages().notConfigured;
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["chat/ChatPrimitives.tsx"],"sourcesContent":["import { createSignal, For, type JSX, onCleanup, Show } from \"solid-js\";\nimport { Button } from \"../actions/Button\";\nimport { Dropdown, type DropdownItem } from \"../actions/Dropdown\";\nimport { Tooltip } from \"../feedback/Tooltip\";\nimport { type UiMessages, useUiMessages } from \"../intl/messages\";\nimport { ProgressBar } from \"../surfaces/ProgressBar\";\nimport { ChatContextPanel, ChatContextPopup } from \"./ChatContextPopup\";\nimport { executeChatAction } from \"./chat-behavior\";\nimport type { ChatAction, ChatActivityTone, ChatAttachment, ChatContextUsageData, ChatMessageStatus, ChatRole } from \"./types\";\n\nexport type ChatMessageProps = {\n role: ChatRole;\n children?: JSX.Element;\n label?: string;\n createdAt?: string | Date;\n timeLabel?: string;\n status?: ChatMessageStatus;\n attachments?: readonly ChatAttachment[];\n actions?: readonly ChatAction[];\n actionDisplay?: \"auto\" | \"inline\" | \"menu\";\n anchorId?: string | number;\n onActionError?: (error: unknown) => void;\n class?: string;\n};\n\nexport type ChatActivityProps = {\n label: string;\n /** Spelled-out name for an expandable row whose visible text abbreviates, such as durations. */\n ariaLabel?: string;\n description?: string;\n icon?: string;\n /** Optional host-owned leading visual rendered instead of the icon. */\n leading?: JSX.Element;\n /** Optional identity accent for the leading visual. Semantic tones still take precedence. */\n accent?: string;\n tone?: ChatActivityTone;\n /** Marks the activity as running with the shared accent sweep. */\n busy?: boolean;\n trailing?: JSX.Element;\n /** Controlled disclosure state. Omit to keep native details behavior. */\n open?: boolean;\n /** Reports disclosure changes when `open` is controlled by the host. */\n onOpenChange?: (open: boolean) => void;\n defaultOpen?: boolean;\n /** Set to false when the body is a peer list that should align with the activity row. */\n bodyInset?: boolean;\n anchorId?: string | number;\n children?: JSX.Element;\n /** Mount expensive details only while expanded. */\n renderBody?: () => JSX.Element;\n class?: string;\n};\n\nexport type ChatContextUsageProps = ChatContextUsageData & {\n action?: ChatAction;\n onActionError?: (error: unknown) => void;\n /** Host-owned number formatting. The default is locale-independent and SSR-stable. */\n formatNumber?: (value: number) => string;\n class?: string;\n};\n\nconst roleLabel = (role: ChatRole, messages: UiMessages): string => {\n if (role === \"assistant\") return messages.assistant;\n if (role === \"user\") return messages.user;\n if (role === \"tool\") return messages.tool;\n return messages.system;\n};\n\nconst statusLabel = (status: ChatMessageStatus | undefined, messages: UiMessages): string | null => {\n if (status === \"pending\") return messages.waiting;\n if (status === \"streaming\") return messages.generating;\n if (status === \"error\") return messages.failed;\n return null;\n};\n\nconst statusIcon = (status: ChatMessageStatus | undefined): string => {\n if (status === \"pending\") return \"ti ti-clock\";\n return \"ti ti-alert-circle\";\n};\n\nconst ChatProgressDots = () => (\n <span class=\"k2b-chat-progress-dots\" aria-hidden=\"true\">\n <span />\n <span />\n <span />\n </span>\n);\n\nconst attachmentIcon = (attachment: ChatAttachment): string =>\n attachment.icon ?? (attachment.kind === \"image\" ? \"ti ti-photo\" : attachment.kind === \"resource\" ? \"ti ti-link\" : \"ti ti-file\");\n\nconst finiteNonNegative = (value: number | undefined): number =>\n typeof value === \"number\" && Number.isFinite(value) ? Math.max(0, value) : 0;\n\nconst finiteUsageValue = (value: number | undefined): number | null =>\n typeof value === \"number\" && Number.isFinite(value) && value >= 0 ? value : null;\n\nconst normalizedUsage = (usage: ChatContextUsageData[\"usage\"]) => {\n const input = finiteUsageValue(usage?.input);\n const output = finiteUsageValue(usage?.output);\n const explicitTotal = finiteUsageValue(usage?.total);\n const total = explicitTotal ?? (input !== null || output !== null ? (input ?? 0) + (output ?? 0) : null);\n return { input, output, total, reported: total !== null };\n};\n\nconst formatStableInteger = (value: number): string => {\n const digits = String(Math.round(finiteNonNegative(value)));\n return digits.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n};\n\nexport const formatChatTokens = (tokens: number): string => {\n const value = finiteNonNegative(tokens);\n if (value >= 1_000_000) return `${(value / 1_000_000).toFixed(1)}M`;\n if (value >= 1_000) return `${(value / 1_000).toFixed(1)}k`;\n return String(Math.round(value));\n};\n\nconst dateTime = (value: string | Date | undefined): string | null => {\n if (!value) return null;\n const date = value instanceof Date ? value : new Date(value);\n return Number.isFinite(date.getTime()) ? date.toISOString() : null;\n};\n\nexport function ChatMessage(props: ChatMessageProps): JSX.Element {\n const messages = useUiMessages();\n const [busyActionId, setBusyActionId] = createSignal<string | null>(null);\n const [completedActionId, setCompletedActionId] = createSignal<string | null>(null);\n let completedTimer: ReturnType<typeof setTimeout> | undefined;\n const status = () => statusLabel(props.status, messages());\n const timestamp = () => dateTime(props.createdAt);\n // Locale and timezone are application policy. Requiring an explicit visible\n // label keeps SSR and hydration byte-stable while `createdAt` still supplies\n // the semantic machine-readable timestamp.\n const time = () => props.timeLabel ?? null;\n const actions = () => props.actions ?? [];\n const actionDisplay = () =>\n props.actionDisplay === \"auto\" || !props.actionDisplay ? (props.role === \"user\" ? \"menu\" : \"inline\") : props.actionDisplay;\n const hasMeta = () => props.status === \"streaming\" || status() !== null || Boolean(time()) || actions().length > 0;\n\n const runAction = async (action: ChatAction) => {\n if (action.disabled || busyActionId()) return;\n setBusyActionId(action.id);\n try {\n await executeChatAction(action);\n setCompletedActionId(action.id);\n if (completedTimer) clearTimeout(completedTimer);\n completedTimer = setTimeout(() => setCompletedActionId(null), 1400);\n } catch (error) {\n props.onActionError?.(error);\n } finally {\n setBusyActionId(null);\n }\n };\n\n const actionIcon = (action: ChatAction) =>\n busyActionId() === action.id\n ? \"ti ti-loader-2 k2b-spin\"\n : completedActionId() === action.id\n ? \"ti ti-check\"\n : (action.icon ?? \"ti ti-dots\");\n\n onCleanup(() => {\n if (completedTimer) clearTimeout(completedTimer);\n });\n\n const menuItems = (): readonly DropdownItem[] =>\n actions().map((action) => ({\n icon: actionIcon(action),\n label: action.label,\n variant: action.variant,\n disabled: action.disabled || Boolean(busyActionId()),\n action: () => void runAction(action),\n }));\n\n return (\n <article\n class={`k2b-chat-message ${props.class ?? \"\"}`}\n data-role={props.role}\n data-status={props.status ?? \"complete\"}\n data-chat-anchor={props.anchorId !== undefined ? String(props.anchorId) : undefined}\n aria-busy={props.status === \"pending\" || props.status === \"streaming\" ? \"true\" : undefined}\n >\n <span class=\"k2b-sr-only\">{props.label ?? roleLabel(props.role, messages())}: </span>\n <Show when={(props.attachments?.length ?? 0) > 0}>\n <div class=\"k2b-chat-message__attachments\" role=\"list\" aria-label={messages().attachments}>\n <For each={props.attachments}>\n {(attachment) => {\n // A preview that no longer loads, such as a deleted file, falls back to the attachment icon; a new URL tries again.\n const [failedPreviewUrl, setFailedPreviewUrl] = createSignal<string>();\n const content = () => (\n <>\n <Show\n when={attachment.kind === \"image\" && attachment.previewUrl && attachment.previewUrl !== failedPreviewUrl()}\n fallback={<i class={attachmentIcon(attachment)} aria-hidden=\"true\" />}\n >\n <img\n src={attachment.previewUrl}\n alt={attachment.alt ?? attachment.name}\n onError={() => setFailedPreviewUrl(attachment.previewUrl)}\n />\n </Show>\n <Show when={attachment.kind !== \"image\"}>\n <span>{attachment.name}</span>\n </Show>\n </>\n );\n return (\n <Show\n when={attachment.href}\n fallback={\n <div class=\"k2b-chat-message__attachment\" data-kind={attachment.kind} role=\"listitem\" title={attachment.name}>\n {content()}\n </div>\n }\n >\n {(href) => (\n <a\n class=\"k2b-chat-message__attachment\"\n data-kind={attachment.kind}\n role=\"listitem\"\n title={attachment.name}\n href={href()}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n aria-label={messages().openInNewTab({ name: attachment.name })}\n >\n {content()}\n </a>\n )}\n </Show>\n );\n }}\n </For>\n </div>\n </Show>\n\n <Show when={props.children !== undefined && props.children !== null && props.children !== \"\"}>\n <div class=\"k2b-chat-message__bubble\">\n <div class=\"k2b-chat-message__content\">{props.children}</div>\n </div>\n </Show>\n\n <Show when={hasMeta()}>\n <footer class=\"k2b-chat-message__meta\">\n <Show\n when={props.status === \"streaming\"}\n fallback={\n <Show when={status()}>\n {(label) => (\n <span class=\"k2b-chat-message__status\" role={props.status === \"error\" ? \"alert\" : \"status\"}>\n <i class={statusIcon(props.status)} aria-hidden=\"true\" />\n {label()}\n </span>\n )}\n </Show>\n }\n >\n <span class=\"k2b-chat-message__status k2b-chat-message__status--streaming\" role=\"status\" aria-label={messages().generating}>\n <ChatProgressDots />\n </span>\n </Show>\n <Show when={time()}>{(label) => <time dateTime={timestamp() ?? undefined}>{label()}</time>}</Show>\n <Show when={actions().length > 0 && actionDisplay() === \"inline\"}>\n <span class=\"k2b-chat-message__actions\" role=\"group\" aria-label={messages().messageActions}>\n <For each={actions()}>\n {(action) => (\n <Tooltip.Trigger\n type=\"button\"\n aria-label={action.label}\n aria-pressed={action.pressed}\n data-pressed-tone={action.pressedTone}\n content={action.label}\n data-danger={action.variant === \"danger\" ? \"true\" : undefined}\n disabled={action.disabled || Boolean(busyActionId())}\n onClick={() => void runAction(action)}\n >\n <i class={actionIcon(action)} aria-hidden=\"true\" />\n </Tooltip.Trigger>\n )}\n </For>\n </span>\n </Show>\n <Show when={actions().length > 0 && actionDisplay() === \"menu\"}>\n <Dropdown.Root position=\"bottom-left\" label={messages().messageActions} items={menuItems()}>\n <Dropdown.Trigger\n appearance=\"plain\"\n class=\"k2b-chat-message__menu\"\n label={messages().messageActions}\n title={messages().messageActions}\n >\n <i class=\"ti ti-dots\" aria-hidden=\"true\" />\n </Dropdown.Trigger>\n </Dropdown.Root>\n </Show>\n </footer>\n </Show>\n </article>\n );\n}\n\nconst ActivityContent = (props: ChatActivityProps & { disclosure?: boolean }) => (\n <>\n <span class=\"k2b-chat-activity__leading\" aria-hidden=\"true\">\n <Show when={props.leading} fallback={<i class={props.icon ?? \"ti ti-sparkles\"} />}>\n {props.leading}\n </Show>\n </span>\n <span class=\"k2b-chat-activity__copy\">\n <strong>{props.label}</strong>\n <Show when={props.description}>{(description) => <small>{description()}</small>}</Show>\n </span>\n <Show when={props.trailing}>\n <span class=\"k2b-chat-activity__trailing\">{props.trailing}</span>\n </Show>\n <Show when={props.disclosure}>\n <i class=\"ti ti-chevron-right k2b-chat-activity__chevron\" aria-hidden=\"true\" />\n </Show>\n </>\n);\n\nexport function ChatActivity(props: ChatActivityProps): JSX.Element {\n const [expanded, setExpanded] = createSignal(props.defaultOpen ?? false);\n const open = () => props.open ?? expanded();\n const tone = () => props.tone ?? \"neutral\";\n const style = () => (props.accent ? { \"--k2b-chat-activity-accent\": props.accent } : undefined);\n return (\n <Show\n when={props.renderBody || props.children}\n fallback={\n <div\n class={`k2b-chat-activity ${props.class ?? \"\"}`}\n data-tone={tone()}\n data-accent={props.accent ? \"true\" : undefined}\n data-busy={props.busy ? \"true\" : undefined}\n data-chat-anchor={props.anchorId !== undefined ? String(props.anchorId) : undefined}\n style={style()}\n aria-busy={props.busy ? \"true\" : undefined}\n >\n <div class=\"k2b-chat-activity__row\">\n <ActivityContent {...props} />\n </div>\n </div>\n }\n >\n <details\n class={`k2b-chat-activity ${props.class ?? \"\"}`}\n data-tone={tone()}\n data-accent={props.accent ? \"true\" : undefined}\n data-busy={props.busy ? \"true\" : undefined}\n data-body-inset={props.bodyInset === false ? \"false\" : undefined}\n data-chat-anchor={props.anchorId !== undefined ? String(props.anchorId) : undefined}\n style={style()}\n open={open()}\n onToggle={(event) => {\n setExpanded(event.currentTarget.open);\n props.onOpenChange?.(event.currentTarget.open);\n }}\n aria-busy={props.busy ? \"true\" : undefined}\n >\n <summary class=\"k2b-chat-activity__row\" aria-label={props.ariaLabel}>\n <ActivityContent {...props} disclosure />\n </summary>\n <div class=\"k2b-chat-activity__body\">\n {props.renderBody ? <Show when={open() ? props.renderBody : undefined}>{(render) => render()()}</Show> : props.children}\n </div>\n </details>\n </Show>\n );\n}\n\nexport function ChatContextUsage(props: ChatContextUsageProps): JSX.Element {\n const [busy, setBusy] = createSignal(false);\n const run = async () => {\n const action = props.action;\n if (!action || action.disabled || busy()) return;\n setBusy(true);\n try {\n await executeChatAction(action);\n } catch (error) {\n props.onActionError?.(error);\n } finally {\n setBusy(false);\n }\n };\n const messages = useUiMessages();\n const formatNumber = (value: number) => (props.formatNumber ?? formatStableInteger)(value);\n const formattedUsageValue = (value: number | null): string => (value === null ? messages().unknown : formatNumber(value));\n const usage = () => normalizedUsage(props.usage);\n const loopUsage = () => normalizedUsage(props.loopUsage);\n const total = () => usage().total ?? 0;\n const windowSize = () => finiteNonNegative(props.contextWindow);\n const reported = () => usage().reported;\n const percent = () => (reported() && windowSize() > 0 ? Math.min(100, Math.round((total() / windowSize()) * 100)) : null);\n const remaining = () => (reported() && windowSize() > 0 ? Math.max(0, windowSize() - total()) : null);\n const accessibleLabel = () => {\n if (!reported()) {\n return windowSize() > 0\n ? messages().contextUsageUnavailableWithWindow({ window: formatNumber(windowSize()) })\n : messages().contextUsageUnavailable;\n }\n return percent() === null\n ? messages().tokensUsed({ total: formatNumber(total()) })\n : messages().tokensUsedPercent({ total: formatNumber(total()), percent: percent()! });\n };\n\n return (\n <ChatContextPopup\n content={\n <ChatContextPanel title={messages().lastRequestContext}>\n <Show when={percent() !== null}>\n <ProgressBar\n value={percent() ?? 0}\n size=\"xs\"\n tone={(percent() ?? 0) >= 85 ? \"danger\" : \"info\"}\n label={messages().contextWindowUsed}\n />\n </Show>\n <dl>\n <Show when={props.modelLabel}>\n {(model) => (\n <div>\n <dt>{messages().model}</dt>\n <dd>{model()}</dd>\n </div>\n )}\n </Show>\n <div>\n <dt>{messages().input}</dt>\n <dd>{formattedUsageValue(usage().input)}</dd>\n </div>\n <div>\n <dt>{messages().output}</dt>\n <dd>{formattedUsageValue(usage().output)}</dd>\n </div>\n <Show when={loopUsage().reported}>\n <div>\n <dt>{messages().loopTotal}</dt>\n <dd>{formattedUsageValue(loopUsage().total)}</dd>\n </div>\n </Show>\n <div>\n <dt>{messages().window}</dt>\n <dd>{windowSize() > 0 ? formatNumber(windowSize()) : messages().notConfigured}</dd>\n </div>\n <Show when={remaining() !== null}>\n <div>\n <dt>{messages().remaining}</dt>\n <dd>{remaining() === null ? messages().unknown : formatNumber(remaining()!)}</dd>\n </div>\n </Show>\n </dl>\n <Show when={props.action}>\n {(action) => (\n <Button size=\"xs\" variant=\"subtle\" disabled={action().disabled || busy()} onClick={() => void run()} aria-busy={busy()}>\n <i class={busy() ? \"ti ti-loader-2 k2b-spin\" : action().icon} aria-hidden=\"true\" />\n {action().label}\n </Button>\n )}\n </Show>\n </ChatContextPanel>\n }\n type=\"button\"\n class={`k2b-chat-context ${props.class ?? \"\"}`}\n data-warning={reported() && (percent() ?? 0) >= 85 ? \"true\" : undefined}\n aria-label={accessibleLabel()}\n >\n <i class=\"ti ti-brain\" aria-hidden=\"true\" />\n <span>{percent() === null ? \"–\" : `${percent()}%`}</span>\n </ChatContextPopup>\n );\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["chat/ChatPrimitives.tsx"],"sourcesContent":["import { createSignal, For, type JSX, onCleanup, Show } from \"solid-js\";\nimport { Button } from \"../actions/Button\";\nimport { Dropdown, type DropdownItem } from \"../actions/Dropdown\";\nimport { Tooltip } from \"../feedback/Tooltip\";\nimport { useLocale } from \"../intl/locale\";\nimport { type UiMessages, useUiMessages } from \"../intl/messages\";\nimport { ProgressBar } from \"../surfaces/ProgressBar\";\nimport { ChatContextPanel, ChatContextPopup } from \"./ChatContextPopup\";\nimport { executeChatAction } from \"./chat-behavior\";\nimport type { ChatAction, ChatActivityTone, ChatAttachment, ChatContextUsageData, ChatMessageStatus, ChatRole } from \"./types\";\n\nexport type ChatMessageProps = {\n role: ChatRole;\n children?: JSX.Element;\n label?: string;\n createdAt?: string | Date;\n timeLabel?: string;\n status?: ChatMessageStatus;\n attachments?: readonly ChatAttachment[];\n actions?: readonly ChatAction[];\n actionDisplay?: \"auto\" | \"inline\" | \"menu\";\n anchorId?: string | number;\n onActionError?: (error: unknown) => void;\n class?: string;\n};\n\nexport type ChatActivityProps = {\n label: string;\n /** Spelled-out name for an expandable row whose visible text abbreviates, such as durations. */\n ariaLabel?: string;\n description?: string;\n icon?: string;\n /** Optional host-owned leading visual rendered instead of the icon. */\n leading?: JSX.Element;\n /** Optional identity accent for the leading visual. Semantic tones still take precedence. */\n accent?: string;\n tone?: ChatActivityTone;\n /** Marks the activity as running with the shared accent sweep. */\n busy?: boolean;\n trailing?: JSX.Element;\n /** Controlled disclosure state. Omit to keep native details behavior. */\n open?: boolean;\n /** Reports disclosure changes when `open` is controlled by the host. */\n onOpenChange?: (open: boolean) => void;\n defaultOpen?: boolean;\n /** Set to false when the body is a peer list that should align with the activity row. */\n bodyInset?: boolean;\n anchorId?: string | number;\n children?: JSX.Element;\n /** Mount expensive details only while expanded. */\n renderBody?: () => JSX.Element;\n class?: string;\n};\n\nexport type ChatContextUsageProps = ChatContextUsageData & {\n action?: ChatAction;\n onActionError?: (error: unknown) => void;\n /** Host-owned number formatting. The default groups whole numbers in the inherited render locale. */\n formatNumber?: (value: number) => string;\n class?: string;\n};\n\nconst roleLabel = (role: ChatRole, messages: UiMessages): string => {\n if (role === \"assistant\") return messages.assistant;\n if (role === \"user\") return messages.user;\n if (role === \"tool\") return messages.tool;\n return messages.system;\n};\n\nconst statusLabel = (status: ChatMessageStatus | undefined, messages: UiMessages): string | null => {\n if (status === \"pending\") return messages.waiting;\n if (status === \"streaming\") return messages.generating;\n if (status === \"error\") return messages.failed;\n return null;\n};\n\nconst statusIcon = (status: ChatMessageStatus | undefined): string => {\n if (status === \"pending\") return \"ti ti-clock\";\n return \"ti ti-alert-circle\";\n};\n\nconst ChatProgressDots = () => (\n <span class=\"k2b-chat-progress-dots\" aria-hidden=\"true\">\n <span />\n <span />\n <span />\n </span>\n);\n\nconst attachmentIcon = (attachment: ChatAttachment): string =>\n attachment.icon ?? (attachment.kind === \"image\" ? \"ti ti-photo\" : attachment.kind === \"resource\" ? \"ti ti-link\" : \"ti ti-file\");\n\nconst finiteNonNegative = (value: number | undefined): number =>\n typeof value === \"number\" && Number.isFinite(value) ? Math.max(0, value) : 0;\n\nconst finiteUsageValue = (value: number | undefined): number | null =>\n typeof value === \"number\" && Number.isFinite(value) && value >= 0 ? value : null;\n\nconst normalizedUsage = (usage: ChatContextUsageData[\"usage\"]) => {\n const input = finiteUsageValue(usage?.input);\n const output = finiteUsageValue(usage?.output);\n const explicitTotal = finiteUsageValue(usage?.total);\n const total = explicitTotal ?? (input !== null || output !== null ? (input ?? 0) + (output ?? 0) : null);\n return { input, output, total, reported: total !== null };\n};\n\n/** Whole numbers in the render locale, so a German page reads 128.000 and an English one 128,000. */\nconst formatLocaleInteger = (value: number, locale: string): string =>\n new Intl.NumberFormat(locale, { maximumFractionDigits: 0 }).format(Math.round(finiteNonNegative(value)));\n\nexport const formatChatTokens = (tokens: number): string => {\n const value = finiteNonNegative(tokens);\n if (value >= 1_000_000) return `${(value / 1_000_000).toFixed(1)}M`;\n if (value >= 1_000) return `${(value / 1_000).toFixed(1)}k`;\n return String(Math.round(value));\n};\n\nconst dateTime = (value: string | Date | undefined): string | null => {\n if (!value) return null;\n const date = value instanceof Date ? value : new Date(value);\n return Number.isFinite(date.getTime()) ? date.toISOString() : null;\n};\n\nexport function ChatMessage(props: ChatMessageProps): JSX.Element {\n const messages = useUiMessages();\n const [busyActionId, setBusyActionId] = createSignal<string | null>(null);\n const [completedActionId, setCompletedActionId] = createSignal<string | null>(null);\n let completedTimer: ReturnType<typeof setTimeout> | undefined;\n const status = () => statusLabel(props.status, messages());\n const timestamp = () => dateTime(props.createdAt);\n // Locale and timezone are application policy. Requiring an explicit visible\n // label keeps SSR and hydration byte-stable while `createdAt` still supplies\n // the semantic machine-readable timestamp.\n const time = () => props.timeLabel ?? null;\n const actions = () => props.actions ?? [];\n const actionDisplay = () =>\n props.actionDisplay === \"auto\" || !props.actionDisplay ? (props.role === \"user\" ? \"menu\" : \"inline\") : props.actionDisplay;\n const hasMeta = () => props.status === \"streaming\" || status() !== null || Boolean(time()) || actions().length > 0;\n\n const runAction = async (action: ChatAction) => {\n if (action.disabled || busyActionId()) return;\n setBusyActionId(action.id);\n try {\n await executeChatAction(action);\n setCompletedActionId(action.id);\n if (completedTimer) clearTimeout(completedTimer);\n completedTimer = setTimeout(() => setCompletedActionId(null), 1400);\n } catch (error) {\n props.onActionError?.(error);\n } finally {\n setBusyActionId(null);\n }\n };\n\n const actionIcon = (action: ChatAction) =>\n busyActionId() === action.id\n ? \"ti ti-loader-2 k2b-spin\"\n : completedActionId() === action.id\n ? \"ti ti-check\"\n : (action.icon ?? \"ti ti-dots\");\n\n onCleanup(() => {\n if (completedTimer) clearTimeout(completedTimer);\n });\n\n const menuItems = (): readonly DropdownItem[] =>\n actions().map((action) => ({\n icon: actionIcon(action),\n label: action.label,\n variant: action.variant,\n disabled: action.disabled || Boolean(busyActionId()),\n action: () => void runAction(action),\n }));\n\n return (\n <article\n class={`k2b-chat-message ${props.class ?? \"\"}`}\n data-role={props.role}\n data-status={props.status ?? \"complete\"}\n data-chat-anchor={props.anchorId !== undefined ? String(props.anchorId) : undefined}\n aria-busy={props.status === \"pending\" || props.status === \"streaming\" ? \"true\" : undefined}\n >\n <span class=\"k2b-sr-only\">{props.label ?? roleLabel(props.role, messages())}: </span>\n <Show when={(props.attachments?.length ?? 0) > 0}>\n <div class=\"k2b-chat-message__attachments\" role=\"list\" aria-label={messages().attachments}>\n <For each={props.attachments}>\n {(attachment) => {\n // A preview that no longer loads, such as a deleted file, falls back to the attachment icon; a new URL tries again.\n const [failedPreviewUrl, setFailedPreviewUrl] = createSignal<string>();\n const content = () => (\n <>\n <Show\n when={attachment.kind === \"image\" && attachment.previewUrl && attachment.previewUrl !== failedPreviewUrl()}\n fallback={<i class={attachmentIcon(attachment)} aria-hidden=\"true\" />}\n >\n <img\n src={attachment.previewUrl}\n alt={attachment.alt ?? attachment.name}\n onError={() => setFailedPreviewUrl(attachment.previewUrl)}\n />\n </Show>\n <Show when={attachment.kind !== \"image\"}>\n <span>{attachment.name}</span>\n </Show>\n </>\n );\n return (\n <Show\n when={attachment.href}\n fallback={\n <div class=\"k2b-chat-message__attachment\" data-kind={attachment.kind} role=\"listitem\" title={attachment.name}>\n {content()}\n </div>\n }\n >\n {(href) => (\n <a\n class=\"k2b-chat-message__attachment\"\n data-kind={attachment.kind}\n role=\"listitem\"\n title={attachment.name}\n href={href()}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n aria-label={messages().openInNewTab({ name: attachment.name })}\n >\n {content()}\n </a>\n )}\n </Show>\n );\n }}\n </For>\n </div>\n </Show>\n\n <Show when={props.children !== undefined && props.children !== null && props.children !== \"\"}>\n <div class=\"k2b-chat-message__bubble\">\n <div class=\"k2b-chat-message__content\">{props.children}</div>\n </div>\n </Show>\n\n <Show when={hasMeta()}>\n <footer class=\"k2b-chat-message__meta\">\n <Show\n when={props.status === \"streaming\"}\n fallback={\n <Show when={status()}>\n {(label) => (\n <span class=\"k2b-chat-message__status\" role={props.status === \"error\" ? \"alert\" : \"status\"}>\n <i class={statusIcon(props.status)} aria-hidden=\"true\" />\n {label()}\n </span>\n )}\n </Show>\n }\n >\n <span class=\"k2b-chat-message__status k2b-chat-message__status--streaming\" role=\"status\" aria-label={messages().generating}>\n <ChatProgressDots />\n </span>\n </Show>\n <Show when={time()}>{(label) => <time dateTime={timestamp() ?? undefined}>{label()}</time>}</Show>\n <Show when={actions().length > 0 && actionDisplay() === \"inline\"}>\n <span class=\"k2b-chat-message__actions\" role=\"group\" aria-label={messages().messageActions}>\n <For each={actions()}>\n {(action) => (\n <Tooltip.Trigger\n type=\"button\"\n aria-label={action.label}\n aria-pressed={action.pressed}\n data-pressed-tone={action.pressedTone}\n content={action.label}\n data-danger={action.variant === \"danger\" ? \"true\" : undefined}\n disabled={action.disabled || Boolean(busyActionId())}\n onClick={() => void runAction(action)}\n >\n <i class={actionIcon(action)} aria-hidden=\"true\" />\n </Tooltip.Trigger>\n )}\n </For>\n </span>\n </Show>\n <Show when={actions().length > 0 && actionDisplay() === \"menu\"}>\n <Dropdown.Root position=\"bottom-left\" label={messages().messageActions} items={menuItems()}>\n <Dropdown.Trigger\n appearance=\"plain\"\n class=\"k2b-chat-message__menu\"\n label={messages().messageActions}\n title={messages().messageActions}\n >\n <i class=\"ti ti-dots\" aria-hidden=\"true\" />\n </Dropdown.Trigger>\n </Dropdown.Root>\n </Show>\n </footer>\n </Show>\n </article>\n );\n}\n\nconst ActivityContent = (props: ChatActivityProps & { disclosure?: boolean }) => (\n <>\n <span class=\"k2b-chat-activity__leading\" aria-hidden=\"true\">\n <Show when={props.leading} fallback={<i class={props.icon ?? \"ti ti-sparkles\"} />}>\n {props.leading}\n </Show>\n </span>\n <span class=\"k2b-chat-activity__copy\">\n <strong>{props.label}</strong>\n <Show when={props.description}>{(description) => <small>{description()}</small>}</Show>\n </span>\n <Show when={props.trailing}>\n <span class=\"k2b-chat-activity__trailing\">{props.trailing}</span>\n </Show>\n <Show when={props.disclosure}>\n <i class=\"ti ti-chevron-right k2b-chat-activity__chevron\" aria-hidden=\"true\" />\n </Show>\n </>\n);\n\nexport function ChatActivity(props: ChatActivityProps): JSX.Element {\n const [expanded, setExpanded] = createSignal(props.defaultOpen ?? false);\n const open = () => props.open ?? expanded();\n const tone = () => props.tone ?? \"neutral\";\n const style = () => (props.accent ? { \"--k2b-chat-activity-accent\": props.accent } : undefined);\n return (\n <Show\n when={props.renderBody || props.children}\n fallback={\n <div\n class={`k2b-chat-activity ${props.class ?? \"\"}`}\n data-tone={tone()}\n data-accent={props.accent ? \"true\" : undefined}\n data-busy={props.busy ? \"true\" : undefined}\n data-chat-anchor={props.anchorId !== undefined ? String(props.anchorId) : undefined}\n style={style()}\n aria-busy={props.busy ? \"true\" : undefined}\n >\n <div class=\"k2b-chat-activity__row\">\n <ActivityContent {...props} />\n </div>\n </div>\n }\n >\n <details\n class={`k2b-chat-activity ${props.class ?? \"\"}`}\n data-tone={tone()}\n data-accent={props.accent ? \"true\" : undefined}\n data-busy={props.busy ? \"true\" : undefined}\n data-body-inset={props.bodyInset === false ? \"false\" : undefined}\n data-chat-anchor={props.anchorId !== undefined ? String(props.anchorId) : undefined}\n style={style()}\n open={open()}\n onToggle={(event) => {\n setExpanded(event.currentTarget.open);\n props.onOpenChange?.(event.currentTarget.open);\n }}\n aria-busy={props.busy ? \"true\" : undefined}\n >\n <summary class=\"k2b-chat-activity__row\" aria-label={props.ariaLabel}>\n <ActivityContent {...props} disclosure />\n </summary>\n <div class=\"k2b-chat-activity__body\">\n {props.renderBody ? <Show when={open() ? props.renderBody : undefined}>{(render) => render()()}</Show> : props.children}\n </div>\n </details>\n </Show>\n );\n}\n\nexport function ChatContextUsage(props: ChatContextUsageProps): JSX.Element {\n const [busy, setBusy] = createSignal(false);\n const run = async () => {\n const action = props.action;\n if (!action || action.disabled || busy()) return;\n setBusy(true);\n try {\n await executeChatAction(action);\n } catch (error) {\n props.onActionError?.(error);\n } finally {\n setBusy(false);\n }\n };\n const messages = useUiMessages();\n const locale = useLocale();\n const formatNumber = (value: number) => (props.formatNumber ? props.formatNumber(value) : formatLocaleInteger(value, locale()));\n const formattedUsageValue = (value: number | null): string => (value === null ? messages().unknown : formatNumber(value));\n const usage = () => normalizedUsage(props.usage);\n const loopUsage = () => normalizedUsage(props.loopUsage);\n const total = () => usage().total ?? 0;\n const windowSize = () => finiteNonNegative(props.contextWindow);\n const reported = () => usage().reported;\n const percent = () => (reported() && windowSize() > 0 ? Math.min(100, Math.round((total() / windowSize()) * 100)) : null);\n const remaining = () => (reported() && windowSize() > 0 ? Math.max(0, windowSize() - total()) : null);\n const accessibleLabel = () => {\n if (!reported()) {\n return windowSize() > 0\n ? messages().contextUsageUnavailableWithWindow({ window: formatNumber(windowSize()) })\n : messages().contextUsageUnavailable;\n }\n return percent() === null\n ? messages().tokensUsed({ total: formatNumber(total()) })\n : messages().tokensUsedPercent({ total: formatNumber(total()), percent: percent()! });\n };\n\n return (\n <ChatContextPopup\n content={\n <ChatContextPanel title={messages().lastRequestContext}>\n <Show when={percent() !== null}>\n <ProgressBar\n value={percent() ?? 0}\n size=\"xs\"\n tone={(percent() ?? 0) >= 85 ? \"danger\" : \"info\"}\n label={messages().contextWindowUsed}\n />\n </Show>\n <dl>\n <Show when={props.modelLabel}>\n {(model) => (\n <div>\n <dt>{messages().model}</dt>\n <dd>{model()}</dd>\n </div>\n )}\n </Show>\n <div>\n <dt>{messages().input}</dt>\n <dd>{formattedUsageValue(usage().input)}</dd>\n </div>\n <div>\n <dt>{messages().output}</dt>\n <dd>{formattedUsageValue(usage().output)}</dd>\n </div>\n <Show when={loopUsage().reported}>\n <div>\n <dt>{messages().loopTotal}</dt>\n <dd>{formattedUsageValue(loopUsage().total)}</dd>\n </div>\n </Show>\n <div>\n <dt>{messages().contextWindow}</dt>\n <dd>{windowSize() > 0 ? formatNumber(windowSize()) : messages().notConfigured}</dd>\n </div>\n <Show when={remaining() !== null}>\n <div>\n <dt>{messages().remaining}</dt>\n <dd>{remaining() === null ? messages().unknown : formatNumber(remaining()!)}</dd>\n </div>\n </Show>\n </dl>\n <Show when={props.action}>\n {(action) => (\n <Button size=\"xs\" variant=\"subtle\" disabled={action().disabled || busy()} onClick={() => void run()} aria-busy={busy()}>\n <i class={busy() ? \"ti ti-loader-2 k2b-spin\" : action().icon} aria-hidden=\"true\" />\n {action().label}\n </Button>\n )}\n </Show>\n </ChatContextPanel>\n }\n type=\"button\"\n class={`k2b-chat-context ${props.class ?? \"\"}`}\n data-warning={reported() && (percent() ?? 0) >= 85 ? \"true\" : undefined}\n aria-label={accessibleLabel()}\n >\n <i class=\"ti ti-brain\" aria-hidden=\"true\" />\n <span>{percent() === null ? \"–\" : `${percent()}%`}</span>\n </ChatContextPopup>\n );\n}\n"],"mappings":"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","ignoreList":[]}