@k2b/ui 0.29.0 → 0.31.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.
- package/README.md +2 -2
- package/dist/base.css +2 -2
- package/dist/browser/actions/Dropdown.js +6 -3
- package/dist/browser/actions/Dropdown.js.map +1 -1
- package/dist/browser/actions/FilterChip.js +137 -7
- package/dist/browser/actions/FilterChip.js.map +1 -1
- package/dist/browser/actions/SegmentedControl.js +5 -9
- package/dist/browser/actions/SegmentedControl.js.map +1 -1
- package/dist/browser/actions/SpotlightSearch.js +6 -3
- package/dist/browser/actions/SpotlightSearch.js.map +1 -1
- package/dist/browser/actions/Tabs.js +5 -2
- package/dist/browser/actions/Tabs.js.map +1 -1
- package/dist/browser/actions/Toolbar.js +2 -0
- package/dist/browser/actions/Toolbar.js.map +1 -1
- package/dist/browser/actions/ViewTabs.js +294 -0
- package/dist/browser/actions/ViewTabs.js.map +1 -0
- package/dist/browser/actions/filter-messages.js +6 -2
- package/dist/browser/actions/filter-messages.js.map +1 -1
- package/dist/browser/actions/index.js +2 -1
- package/dist/browser/actions/index.js.map +1 -1
- package/dist/browser/chat/ChatComposer.js +1108 -604
- package/dist/browser/chat/ChatComposer.js.map +1 -1
- package/dist/browser/chat/ChatDecision.js +146 -84
- package/dist/browser/chat/ChatDecision.js.map +1 -1
- package/dist/browser/chat/ChatPrimitives.js +292 -159
- package/dist/browser/chat/ChatPrimitives.js.map +1 -1
- package/dist/browser/chat/chat-messages.js +8 -0
- package/dist/browser/chat/chat-messages.js.map +1 -1
- package/dist/browser/chat/command-search.js +26 -15
- package/dist/browser/chat/command-search.js.map +1 -1
- package/dist/browser/chat/index.js +4 -2
- package/dist/browser/chat/index.js.map +1 -1
- package/dist/browser/content/Calendar.js +143 -116
- package/dist/browser/content/Calendar.js.map +1 -1
- package/dist/browser/content/CalendarWeekView.js +291 -266
- package/dist/browser/content/CalendarWeekView.js.map +1 -1
- package/dist/browser/content/DataTable.js +224 -155
- package/dist/browser/content/DataTable.js.map +1 -1
- package/dist/browser/content/MapAttribution.js +27 -0
- package/dist/browser/content/MapAttribution.js.map +1 -0
- package/dist/browser/content/MapView.js +553 -0
- package/dist/browser/content/MapView.js.map +1 -0
- package/dist/browser/content/MapViewFrame.js +395 -0
- package/dist/browser/content/MapViewFrame.js.map +1 -0
- package/dist/browser/content/data-table-messages.js +4 -2
- package/dist/browser/content/data-table-messages.js.map +1 -1
- package/dist/browser/content/index.js +5 -0
- package/dist/browser/content/index.js.map +1 -1
- package/dist/browser/content/map-palette.js +39 -0
- package/dist/browser/content/map-palette.js.map +1 -0
- package/dist/browser/content/map-style.js +276 -0
- package/dist/browser/content/map-style.js.map +1 -0
- package/dist/browser/content/map-view-geometry.js +269 -0
- package/dist/browser/content/map-view-geometry.js.map +1 -0
- package/dist/browser/content/map-view-live.js +28 -0
- package/dist/browser/content/map-view-live.js.map +1 -0
- package/dist/browser/content/map-view-messages.js +53 -0
- package/dist/browser/content/map-view-messages.js.map +1 -0
- package/dist/browser/content/map-view-types.js +2 -0
- package/dist/browser/content/map-view-types.js.map +1 -0
- package/dist/browser/content/map-view-worker.js +10 -0
- package/dist/browser/feedback/MovedHint.js +197 -0
- package/dist/browser/feedback/MovedHint.js.map +1 -0
- package/dist/browser/feedback/dialog-core.js +85 -9
- package/dist/browser/feedback/dialog-core.js.map +1 -1
- package/dist/browser/feedback/index.js +1 -0
- package/dist/browser/feedback/index.js.map +1 -1
- package/dist/browser/feedback/prompts.js +6 -1
- package/dist/browser/feedback/prompts.js.map +1 -1
- package/dist/browser/inputs/DatePicker.js +337 -212
- package/dist/browser/inputs/DatePicker.js.map +1 -1
- package/dist/browser/inputs/date-picker.js +59 -5
- package/dist/browser/inputs/date-picker.js.map +1 -1
- package/dist/browser/intl/messages.js +12 -0
- package/dist/browser/intl/messages.js.map +1 -1
- package/dist/browser/intl/weekend.js +39 -0
- package/dist/browser/intl/weekend.js.map +1 -0
- package/dist/browser/layout/AppOverview.js +0 -1
- package/dist/browser/layout/AppOverview.js.map +1 -1
- package/dist/browser/layout/AppWorkspace.js +701 -476
- package/dist/browser/layout/AppWorkspace.js.map +1 -1
- package/dist/browser/layout/PageTitle.js +3 -2
- package/dist/browser/layout/PageTitle.js.map +1 -1
- package/dist/browser/layout/SettingsModal.js +2 -2
- package/dist/browser/layout/SettingsModal.js.map +1 -1
- package/dist/browser/layout/SidebarSwitcher.js +13 -12
- package/dist/browser/layout/SidebarSwitcher.js.map +1 -1
- package/dist/browser/layout/TabBar.js +1 -1
- package/dist/browser/layout/TabBar.js.map +1 -1
- package/dist/browser/layout/app-host-width.js +44 -0
- package/dist/browser/layout/app-host-width.js.map +1 -0
- package/dist/browser/layout/app-workspace-controller.js +331 -45
- package/dist/browser/layout/app-workspace-controller.js.map +1 -1
- package/dist/browser/layout/app-workspace-width.js +26 -0
- package/dist/browser/layout/app-workspace-width.js.map +1 -0
- package/dist/browser/layout/index.js +2 -1
- package/dist/browser/layout/index.js.map +1 -1
- package/dist/browser/surfaces/Placeholder.js +36 -13
- package/dist/browser/surfaces/Placeholder.js.map +1 -1
- package/dist/licenses/maplibre-gl.txt +116 -0
- package/dist/ssr/actions/Dropdown.js +5 -2
- package/dist/ssr/actions/Dropdown.js.map +1 -1
- package/dist/ssr/actions/FilterChip.js +59 -7
- package/dist/ssr/actions/FilterChip.js.map +1 -1
- package/dist/ssr/actions/SegmentedControl.js +1 -2
- package/dist/ssr/actions/SegmentedControl.js.map +1 -1
- package/dist/ssr/actions/SpotlightSearch.js +2 -2
- package/dist/ssr/actions/SpotlightSearch.js.map +1 -1
- package/dist/ssr/actions/Tabs.js +2 -2
- package/dist/ssr/actions/Tabs.js.map +1 -1
- package/dist/ssr/actions/Toolbar.js +2 -0
- package/dist/ssr/actions/Toolbar.js.map +1 -1
- package/dist/ssr/actions/ViewTabs.js +211 -0
- package/dist/ssr/actions/ViewTabs.js.map +1 -0
- package/dist/ssr/actions/filter-messages.js +6 -2
- package/dist/ssr/actions/filter-messages.js.map +1 -1
- package/dist/ssr/actions/index.js +2 -1
- package/dist/ssr/actions/index.js.map +1 -1
- package/dist/ssr/chat/ChatComposer.js +546 -131
- package/dist/ssr/chat/ChatComposer.js.map +1 -1
- package/dist/ssr/chat/ChatDecision.js +44 -19
- package/dist/ssr/chat/ChatDecision.js.map +1 -1
- package/dist/ssr/chat/ChatPrimitives.js +95 -24
- package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
- package/dist/ssr/chat/chat-messages.js +8 -0
- package/dist/ssr/chat/chat-messages.js.map +1 -1
- package/dist/ssr/chat/command-search.js +26 -15
- package/dist/ssr/chat/command-search.js.map +1 -1
- package/dist/ssr/chat/index.js +4 -2
- package/dist/ssr/chat/index.js.map +1 -1
- package/dist/ssr/content/Calendar.js +109 -100
- package/dist/ssr/content/Calendar.js.map +1 -1
- package/dist/ssr/content/CalendarWeekView.js +42 -28
- package/dist/ssr/content/CalendarWeekView.js.map +1 -1
- package/dist/ssr/content/DataTable.js +78 -31
- package/dist/ssr/content/DataTable.js.map +1 -1
- package/dist/ssr/content/MapAttribution.js +19 -0
- package/dist/ssr/content/MapAttribution.js.map +1 -0
- package/dist/ssr/content/MapView.js +474 -0
- package/dist/ssr/content/MapView.js.map +1 -0
- package/dist/ssr/content/MapViewFrame.js +193 -0
- package/dist/ssr/content/MapViewFrame.js.map +1 -0
- package/dist/ssr/content/data-table-messages.js +4 -2
- package/dist/ssr/content/data-table-messages.js.map +1 -1
- package/dist/ssr/content/index.js +5 -0
- package/dist/ssr/content/index.js.map +1 -1
- package/dist/ssr/content/map-palette.js +39 -0
- package/dist/ssr/content/map-palette.js.map +1 -0
- package/dist/ssr/content/map-style.js +276 -0
- package/dist/ssr/content/map-style.js.map +1 -0
- package/dist/ssr/content/map-view-geometry.js +269 -0
- package/dist/ssr/content/map-view-geometry.js.map +1 -0
- package/dist/ssr/content/map-view-live.js +1 -0
- package/dist/ssr/content/map-view-messages.js +53 -0
- package/dist/ssr/content/map-view-messages.js.map +1 -0
- package/dist/ssr/content/map-view-types.js +2 -0
- package/dist/ssr/content/map-view-types.js.map +1 -0
- package/dist/ssr/feedback/MovedHint.js +166 -0
- package/dist/ssr/feedback/MovedHint.js.map +1 -0
- package/dist/ssr/feedback/dialog-core.js +85 -9
- package/dist/ssr/feedback/dialog-core.js.map +1 -1
- package/dist/ssr/feedback/index.js +1 -0
- package/dist/ssr/feedback/index.js.map +1 -1
- package/dist/ssr/feedback/prompts.js +6 -1
- package/dist/ssr/feedback/prompts.js.map +1 -1
- package/dist/ssr/inputs/DatePicker.js +138 -69
- package/dist/ssr/inputs/DatePicker.js.map +1 -1
- package/dist/ssr/inputs/date-picker.js +59 -5
- package/dist/ssr/inputs/date-picker.js.map +1 -1
- package/dist/ssr/intl/messages.js +12 -0
- package/dist/ssr/intl/messages.js.map +1 -1
- package/dist/ssr/intl/weekend.js +39 -0
- package/dist/ssr/intl/weekend.js.map +1 -0
- package/dist/ssr/layout/AppOverview.js +0 -1
- package/dist/ssr/layout/AppOverview.js.map +1 -1
- package/dist/ssr/layout/AppWorkspace.js +216 -44
- package/dist/ssr/layout/AppWorkspace.js.map +1 -1
- package/dist/ssr/layout/PageTitle.js +3 -2
- package/dist/ssr/layout/PageTitle.js.map +1 -1
- package/dist/ssr/layout/SettingsModal.js +2 -2
- package/dist/ssr/layout/SettingsModal.js.map +1 -1
- package/dist/ssr/layout/SidebarSwitcher.js +13 -12
- package/dist/ssr/layout/SidebarSwitcher.js.map +1 -1
- package/dist/ssr/layout/TabBar.js +1 -1
- package/dist/ssr/layout/TabBar.js.map +1 -1
- package/dist/ssr/layout/app-host-width.js +44 -0
- package/dist/ssr/layout/app-host-width.js.map +1 -0
- package/dist/ssr/layout/app-workspace-controller.js +331 -45
- package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
- package/dist/ssr/layout/app-workspace-width.js +26 -0
- package/dist/ssr/layout/app-workspace-width.js.map +1 -0
- package/dist/ssr/layout/index.js +2 -1
- package/dist/ssr/layout/index.js.map +1 -1
- package/dist/ssr/surfaces/Placeholder.js +24 -7
- package/dist/ssr/surfaces/Placeholder.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/types/actions/Dropdown.d.ts +4 -0
- package/dist/types/actions/FilterChip.d.ts +22 -0
- package/dist/types/actions/ViewTabs.d.ts +30 -0
- package/dist/types/actions/filter-messages.d.ts +2 -0
- package/dist/types/actions/index.d.ts +4 -2
- package/dist/types/chat/ChatComposer.d.ts +52 -0
- package/dist/types/chat/ChatDecision.d.ts +18 -2
- package/dist/types/chat/ChatPrimitives.d.ts +10 -0
- package/dist/types/chat/chat-messages.d.ts +4 -0
- package/dist/types/chat/command-search.d.ts +2 -0
- package/dist/types/chat/index.d.ts +9 -8
- package/dist/types/content/DataTable.d.ts +3 -0
- package/dist/types/content/MapAttribution.d.ts +6 -0
- package/dist/types/content/MapView.d.ts +5 -0
- package/dist/types/content/MapViewFrame.d.ts +31 -0
- package/dist/types/content/data-table-messages.d.ts +1 -0
- package/dist/types/content/index.d.ts +6 -0
- package/dist/types/content/map-palette.d.ts +58 -0
- package/dist/types/content/map-style.d.ts +29 -0
- package/dist/types/content/map-view-geometry.d.ts +55 -0
- package/dist/types/content/map-view-live.d.ts +2 -0
- package/dist/types/content/map-view-messages.d.ts +21 -0
- package/dist/types/content/map-view-types.d.ts +61 -0
- package/dist/types/feedback/MovedHint.d.ts +25 -0
- package/dist/types/feedback/dialog-core.d.ts +6 -2
- package/dist/types/feedback/index.d.ts +2 -0
- package/dist/types/feedback/prompts.d.ts +2 -0
- package/dist/types/inputs/DatePicker.d.ts +7 -0
- package/dist/types/inputs/date-picker.d.ts +25 -1
- package/dist/types/intl/messages.d.ts +6 -0
- package/dist/types/intl/weekend.d.ts +12 -0
- package/dist/types/layout/AppWorkspace.d.ts +48 -8
- package/dist/types/layout/app-host-width.d.ts +6 -0
- package/dist/types/layout/app-workspace-width.d.ts +13 -0
- package/dist/types/layout/index.d.ts +3 -2
- package/dist/types/surfaces/Placeholder.d.ts +2 -1
- package/map-glyphs/IBM Plex Sans Medium/0-255.pbf +0 -0
- package/map-glyphs/IBM Plex Sans Medium/1024-1279.pbf +0 -0
- package/map-glyphs/IBM Plex Sans Medium/256-511.pbf +0 -0
- package/map-glyphs/IBM Plex Sans Medium/512-767.pbf +0 -0
- package/map-glyphs/IBM Plex Sans Medium/768-1023.pbf +0 -0
- package/map-glyphs/IBM Plex Sans Medium/7680-7935.pbf +0 -0
- package/map-glyphs/IBM Plex Sans Medium/8192-8447.pbf +0 -0
- package/map-glyphs/IBM Plex Sans Medium/8448-8703.pbf +0 -0
- package/map-glyphs/IBM Plex Sans Medium/8704-8959.pbf +0 -0
- package/map-glyphs/OFL.txt +93 -0
- package/package.json +11 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["chat/ChatPrimitives.tsx"],"sourcesContent":["import { createRenderEffect, 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 { useUiMessages } from \"../intl/messages\";\nimport { ProgressBar } from \"../surfaces/ProgressBar\";\nimport { ChatContextPanel, ChatContextPopup } from \"./ChatContextPopup\";\nimport { executeChatAction } from \"./chat-behavior\";\nimport { type ChatMessages, useChatMessages } from \"./chat-messages\";\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 /** The step as text, or as a sentence with `ReferenceChip`s. */\n label: JSX.Element;\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 /** Lets label and description wrap instead of ending in an ellipsis, for a system line whose whole sentence matters. */\n wrap?: 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: ChatMessages): 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: ChatMessages): 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 chatMessages = useChatMessages();\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, chatMessages());\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, chatMessages())}: </span>\n <Show when={(props.attachments?.length ?? 0) > 0}>\n <div class=\"k2b-chat-message__attachments\" role=\"list\" aria-label={chatMessages().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={chatMessages().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={chatMessages().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={chatMessages().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={chatMessages().messageActions} items={menuItems()}>\n <Dropdown.Trigger\n appearance=\"plain\"\n class=\"k2b-chat-message__menu\"\n label={chatMessages().messageActions}\n title={chatMessages().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 // The disclosure's real state. A controlled `open` sets it, and every toggle reports it, so the body renders whenever\n // the row is open, also when a host has not yet passed its new `open` back.\n const [expanded, setExpanded] = createSignal(props.open ?? props.defaultOpen ?? false);\n createRenderEffect(() => {\n const open = props.open;\n if (open !== undefined) setExpanded(open);\n });\n const 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-wrap={props.wrap ? \"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-wrap={props.wrap ? \"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 chatMessages = useChatMessages();\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 ? chatMessages().contextUsageUnavailableWithWindow({ window: formatNumber(windowSize()) })\n : chatMessages().contextUsageUnavailable;\n }\n return percent() === null\n ? chatMessages().tokensUsed({ total: formatNumber(total()) })\n : chatMessages().tokensUsedPercent({ total: formatNumber(total()), percent: percent()! });\n };\n\n return (\n <ChatContextPopup\n content={\n <ChatContextPanel title={chatMessages().lastRequestContext}>\n <Show when={percent() !== null}>\n <ProgressBar\n value={percent() ?? 0}\n size=\"xs\"\n tone={(percent() ?? 0) >= 85 ? \"danger\" : \"info\"}\n label={chatMessages().contextWindowUsed}\n />\n </Show>\n <dl>\n <Show when={props.modelLabel}>\n {(model) => (\n <div>\n <dt>{chatMessages().model}</dt>\n <dd>{model()}</dd>\n </div>\n )}\n </Show>\n <div>\n <dt>{chatMessages().input}</dt>\n <dd>{formattedUsageValue(usage().input)}</dd>\n </div>\n <div>\n <dt>{chatMessages().output}</dt>\n <dd>{formattedUsageValue(usage().output)}</dd>\n </div>\n <Show when={loopUsage().reported}>\n <div>\n <dt>{chatMessages().loopTotal}</dt>\n <dd>{formattedUsageValue(loopUsage().total)}</dd>\n </div>\n </Show>\n <div>\n <dt>{chatMessages().contextWindow}</dt>\n <dd>{windowSize() > 0 ? formatNumber(windowSize()) : chatMessages().notConfigured}</dd>\n </div>\n <Show when={remaining() !== null}>\n <div>\n <dt>{chatMessages().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 {\n type Accessor,\n children,\n createContext,\n createRenderEffect,\n createSignal,\n createUniqueId,\n For,\n type JSX,\n onCleanup,\n Show,\n useContext,\n} 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 { useUiMessages } from \"../intl/messages\";\nimport { ProgressBar } from \"../surfaces/ProgressBar\";\nimport { ChatContextPanel, ChatContextPopup } from \"./ChatContextPopup\";\nimport { executeChatAction } from \"./chat-behavior\";\nimport { type ChatMessages, useChatMessages } from \"./chat-messages\";\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 /** The step as text, or as a sentence with `ReferenceChip`s. */\n label: JSX.Element;\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 /** Lets label and description wrap instead of ending in an ellipsis, for a system line whose whole sentence matters. */\n wrap?: 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: ChatMessages): 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: ChatMessages): 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 chatMessages = useChatMessages();\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, chatMessages());\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, chatMessages())}: </span>\n <Show when={(props.attachments?.length ?? 0) > 0}>\n <div class=\"k2b-chat-message__attachments\" role=\"list\" aria-label={chatMessages().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={chatMessages().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={chatMessages().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={chatMessages().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={chatMessages().messageActions} items={menuItems()}>\n <Dropdown.Trigger\n appearance=\"plain\"\n class=\"k2b-chat-message__menu\"\n label={chatMessages().messageActions}\n title={chatMessages().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 & { label: JSX.Element; 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\ntype ActivityDisclosure = {\n /** Whether the activity has a body this toggle can open. */\n expandable: Accessor<boolean>;\n open: Accessor<boolean>;\n toggle: () => void;\n bodyId: string;\n register: () => void;\n};\n\nconst ActivityDisclosureContext = createContext<ActivityDisclosure>();\n\nexport type ChatActivityToggleProps = {\n /** The words that open the body, usually the count, such as \"3 of 4 tasks\". */\n children: JSX.Element;\n};\n\n/**\n * The words of an activity label that open its body, with the chevron right after them. With a toggle in its label,\n * only these words are the disclosure, and the rest of the row, chips with links included, stays ordinary content.\n * Outside an activity with a body it renders its words as plain text.\n */\nexport function ChatActivityToggle(props: ChatActivityToggleProps): JSX.Element {\n const disclosure = useContext(ActivityDisclosureContext);\n disclosure?.register();\n return (\n <Show when={disclosure?.expandable() ? disclosure : undefined} fallback={props.children}>\n {(current) => (\n <button\n type=\"button\"\n class=\"k2b-chat-activity__toggle\"\n aria-expanded={current().open() ? \"true\" : \"false\"}\n aria-controls={current().bodyId}\n onClick={() => current().toggle()}\n >\n <span class=\"k2b-chat-activity__toggle-label\">{props.children}</span>\n <i class=\"ti ti-chevron-right k2b-chat-activity__chevron\" aria-hidden=\"true\" />\n </button>\n )}\n </Show>\n );\n}\n\nexport function ChatActivity(props: ChatActivityProps): JSX.Element {\n // The disclosure's real state. A controlled `open` sets it, and every toggle reports it, so the body renders whenever\n // the row is open, also when a host has not yet passed its new `open` back.\n const [expanded, setExpanded] = createSignal(props.open ?? props.defaultOpen ?? false);\n createRenderEffect(() => {\n const open = props.open;\n if (open !== undefined) setExpanded(open);\n });\n const open = expanded;\n const setOpen = (next: boolean) => {\n if (next === expanded()) return;\n setExpanded(next);\n props.onOpenChange?.(next);\n };\n const tone = () => props.tone ?? \"neutral\";\n const style = () => (props.accent ? { \"--k2b-chat-activity-accent\": props.accent } : undefined);\n const expandable = () => Boolean(props.renderBody || props.children);\n // A `Chat.Activity.Toggle` in the label registers while the label resolves, before the row picks its element, so the\n // server and the first browser frame agree on whether the whole row or only the toggle is the disclosure.\n const [toggles, setToggles] = createSignal(0);\n const bodyId = createUniqueId();\n const disclosure: ActivityDisclosure = {\n expandable,\n open,\n toggle: () => setOpen(!expanded()),\n bodyId,\n register: () => {\n setToggles((count) => count + 1);\n onCleanup(() => setToggles((count) => count - 1));\n },\n };\n const body = () =>\n props.renderBody ? <Show when={open() ? props.renderBody : undefined}>{(render) => render()()}</Show> : props.children;\n return (\n <ActivityDisclosureContext.Provider value={disclosure}>\n {(() => {\n const label = children(() => props.label);\n return (\n <Show\n when={expandable()}\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-wrap={props.wrap ? \"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} label={label()} />\n </div>\n </div>\n }\n >\n <Show\n when={toggles() === 0}\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-wrap={props.wrap ? \"true\" : undefined}\n data-body-inset={props.bodyInset === false ? \"false\" : undefined}\n data-open={open() ? \"true\" : \"false\"}\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} label={label()} />\n </div>\n <div id={bodyId} class=\"k2b-chat-activity__body\" hidden={!open()}>\n {body()}\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-wrap={props.wrap ? \"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} label={label()} disclosure />\n </summary>\n <div class=\"k2b-chat-activity__body\">{body()}</div>\n </details>\n </Show>\n </Show>\n );\n })()}\n </ActivityDisclosureContext.Provider>\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 chatMessages = useChatMessages();\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 ? chatMessages().contextUsageUnavailableWithWindow({ window: formatNumber(windowSize()) })\n : chatMessages().contextUsageUnavailable;\n }\n return percent() === null\n ? chatMessages().tokensUsed({ total: formatNumber(total()) })\n : chatMessages().tokensUsedPercent({ total: formatNumber(total()), percent: percent()! });\n };\n\n return (\n <ChatContextPopup\n content={\n <ChatContextPanel title={chatMessages().lastRequestContext}>\n <Show when={percent() !== null}>\n <ProgressBar\n value={percent() ?? 0}\n size=\"xs\"\n tone={(percent() ?? 0) >= 85 ? \"danger\" : \"info\"}\n label={chatMessages().contextWindowUsed}\n />\n </Show>\n <dl>\n <Show when={props.modelLabel}>\n {(model) => (\n <div>\n <dt>{chatMessages().model}</dt>\n <dd>{model()}</dd>\n </div>\n )}\n </Show>\n <div>\n <dt>{chatMessages().input}</dt>\n <dd>{formattedUsageValue(usage().input)}</dd>\n </div>\n <div>\n <dt>{chatMessages().output}</dt>\n <dd>{formattedUsageValue(usage().output)}</dd>\n </div>\n <Show when={loopUsage().reported}>\n <div>\n <dt>{chatMessages().loopTotal}</dt>\n <dd>{formattedUsageValue(loopUsage().total)}</dd>\n </div>\n </Show>\n <div>\n <dt>{chatMessages().contextWindow}</dt>\n <dd>{windowSize() > 0 ? formatNumber(windowSize()) : chatMessages().notConfigured}</dd>\n </div>\n <Show when={remaining() !== null}>\n <div>\n <dt>{chatMessages().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":[]}
|
|
@@ -8,10 +8,14 @@ export const chatMessages = i18n.define({
|
|
|
8
8
|
commandDraftChanged: "The text changed in the meantime, so nothing was inserted.",
|
|
9
9
|
markAdded: "new:",
|
|
10
10
|
markRemoved: "removed:",
|
|
11
|
+
commandOpening: "Opening …",
|
|
11
12
|
commandSelected: "selected",
|
|
12
13
|
attachments: "Attachments",
|
|
13
14
|
assistant: "Assistant",
|
|
14
15
|
addToChat: "Add to chat",
|
|
16
|
+
addMenu: "Add",
|
|
17
|
+
commandSearch: "Search",
|
|
18
|
+
commandSearchLabel: "Search entries",
|
|
15
19
|
attachFiles: "Attach files",
|
|
16
20
|
addGuidance: "Add guidance...",
|
|
17
21
|
chat: "Chat",
|
|
@@ -138,10 +142,14 @@ export const chatMessages = i18n.define({
|
|
|
138
142
|
commandDraftChanged: "Der Text hat sich inzwischen geändert, darum wurde nichts eingefügt.",
|
|
139
143
|
markAdded: "neu:",
|
|
140
144
|
markRemoved: "weg:",
|
|
145
|
+
commandOpening: "Wird geöffnet …",
|
|
141
146
|
commandSelected: "gewählt",
|
|
142
147
|
attachments: "Anhänge",
|
|
143
148
|
assistant: "Assistent",
|
|
144
149
|
addToChat: "Zum Chat hinzufügen",
|
|
150
|
+
addMenu: "Hinzufügen",
|
|
151
|
+
commandSearch: "Suchen",
|
|
152
|
+
commandSearchLabel: "Einträge durchsuchen",
|
|
145
153
|
attachFiles: "Dateien anhängen",
|
|
146
154
|
addGuidance: "Hinweis hinzufügen...",
|
|
147
155
|
chat: "Chat",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["chat/chat-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\nexport const chatMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n commandFailed: \"That did not work.\",\n commandDraftChanged: \"The text changed in the meantime, so nothing was inserted.\",\n markAdded: \"new:\",\n markRemoved: \"removed:\",\n commandSelected: \"selected\",\n attachments: \"Attachments\",\n assistant: \"Assistant\",\n addToChat: \"Add to chat\",\n attachFiles: \"Attach files\",\n addGuidance: \"Add guidance...\",\n chat: \"Chat\",\n chooseModel: \"Choose model\",\n commands: \"Commands\",\n commandsNothingFound: ({ query }: { query: string }) => `Nothing found for “${query}”`,\n commandSuggestions: ({ count }: { count: number }) =>\n count === 0 ? \"No suggestions\" : count === 1 ? \"1 suggestion\" : `${count} suggestions`,\n dropFilesToAttach: \"Drop to attach to the message\",\n conversation: \"Conversation\",\n jumpToLatest: \"Jump to latest\",\n messageSent: \"Sent\",\n messageNotSent: \"Not sent\",\n messageRetry: \"Retry\",\n messageShowMore: \"Show more\",\n messageShowLess: \"Show less\",\n messageReplyTo: \"In reply to\",\n messageForwarded: \"Forwarded\",\n messageEdited: \"edited\",\n messageDeleted: \"This message was deleted\",\n messageVideo: \"Video\",\n messageMoreAttachments: ({ count }: { count: number }) => `${count} more`,\n messageReactions: \"Reactions\",\n messageReaction: ({ emoji, count, names, own }: { emoji: string; count: number; names?: string; own?: boolean }) =>\n `${emoji} ${own && count === 1 ? \"your reaction\" : `${count} ${count === 1 ? \"reaction\" : \"reactions\"}${own ? \", including yours\" : \"\"}`}${names ? `: ${names}` : \"\"}`,\n messageAddReaction: \"Add reaction\",\n moreReactions: ({ count }: { count: number }) => (count === 1 ? \"1 more reaction\" : `${count} more reactions`),\n reactionYou: \"You\",\n reactionAnd: \"and\",\n reactionMorePeople: ({ count }: { count: number }) => `and ${count} more`,\n messageReplies: ({ count }: { count: number }) => (count === 1 ? \"1 reply\" : `${count} replies`),\n messageLastReply: ({ time }: { time: string }) => `Last reply ${time}`,\n messageStop: \"Stop\",\n conversationMessages: ({ label }: { label: string }) => `${label} messages`,\n loadEarlier: \"Load earlier\",\n loadingConversation: \"Loading conversation\",\n loadingMessages: \"Loading messages\",\n failed: \"Failed\",\n generating: \"Generating\",\n loadOlderMessages: \"Load older messages\",\n loadingOlderMessages: \"Loading older messages\",\n couldNotLoadOlderMessages: \"Could not load older messages\",\n couldNotLoadEarlierMessages: \"Could not load earlier messages\",\n couldNotPostMessage: \"Could not post message\",\n messageActions: \"Message actions\",\n messageComposer: \"Message composer\",\n messageInput: \"Message input\",\n model: \"Model\",\n input: \"Input\",\n output: \"Output\",\n loopTotal: \"Whole response\",\n remaining: \"Remaining\",\n notConfigured: \"Not configured\",\n system: \"System\",\n tool: \"Tool\",\n user: \"User\",\n waiting: \"Waiting\",\n lastRequestContext: \"Last request context\",\n contextWindowUsed: \"Context window used\",\n contextWindow: \"Context window\",\n contextUsageUnavailable: \"Context usage unavailable\",\n contextUsageUnavailableWithWindow: ({ window }: { window: string }) => `Context usage unavailable, ${window} token context window`,\n tokensUsed: ({ total }: { total: string }) => `${total} tokens used`,\n tokensUsedPercent: ({ total, percent }: { total: string; percent: number }) =>\n `${total} tokens used, ${percent}% of the context window`,\n postMessage: \"Post message\",\n queueMessage: \"Queue message\",\n queueing: \"Queueing\",\n sending: \"Sending\",\n steering: \"Steering\",\n writeMessage: \"Write a message or type / ...\",\n writeConversationMessage: \"Write a message\",\n composerFormatting: \"Formatting\",\n insertEmoji: \"Insert emoji\",\n emojiSuggestions: \"Emoji suggestions\",\n dictate: \"Dictate\",\n dictateOrHold: \"Dictate. Hold to record a voice message.\",\n stopDictation: \"Stop dictation\",\n microphoneOptions: \"Microphone options\",\n recordVoiceMessage: \"Record voice message\",\n dictationListening: \"Dictating …\",\n dictationRefining: \"Refining the text …\",\n dictationRefined: \"Text refined\",\n dictationUnrefined: \"Text not refined\",\n dictationInterrupted: \"Dictation interrupted\",\n restoreOriginal: \"Restore original\",\n openInNewTab: ({ name }: { name: string }) => `Open ${name} in a new tab`,\n retryOlderMessages: \"Retry loading older messages\",\n sendMessage: \"Send message\",\n startConversation: \"Start a conversation\",\n steerResponse: \"Steer response\",\n stopResponse: \"Stop response\",\n stopping: \"Stopping\",\n },\n de: {\n commandFailed: \"Das hat nicht geklappt.\",\n commandDraftChanged: \"Der Text hat sich inzwischen geändert, darum wurde nichts eingefügt.\",\n markAdded: \"neu:\",\n markRemoved: \"weg:\",\n commandSelected: \"gewählt\",\n attachments: \"Anhänge\",\n assistant: \"Assistent\",\n addToChat: \"Zum Chat hinzufügen\",\n attachFiles: \"Dateien anhängen\",\n addGuidance: \"Hinweis hinzufügen...\",\n chat: \"Chat\",\n chooseModel: \"Modell auswählen\",\n commands: \"Befehle\",\n commandsNothingFound: ({ query }) => `Nichts gefunden für „${query}“`,\n commandSuggestions: ({ count }) => (count === 0 ? \"Keine Vorschläge\" : count === 1 ? \"1 Vorschlag\" : `${count} Vorschläge`),\n dropFilesToAttach: \"Ablegen, um an die Nachricht anzuhängen\",\n conversation: \"Unterhaltung\",\n jumpToLatest: \"Zur neuesten Nachricht\",\n messageSent: \"Gesendet\",\n messageNotSent: \"Nicht gesendet\",\n messageRetry: \"Erneut senden\",\n messageShowMore: \"Mehr anzeigen\",\n messageShowLess: \"Weniger anzeigen\",\n messageReplyTo: \"Antwort auf\",\n messageForwarded: \"Weitergeleitet\",\n messageEdited: \"bearbeitet\",\n messageDeleted: \"Diese Nachricht wurde gelöscht\",\n messageVideo: \"Video\",\n messageMoreAttachments: ({ count }) => `${count} weitere`,\n messageReactions: \"Reaktionen\",\n messageReaction: ({ emoji, count, names, own }) =>\n `${emoji} ${own && count === 1 ? \"deine Reaktion\" : `${count} ${count === 1 ? \"Reaktion\" : \"Reaktionen\"}${own ? \", einschließlich deiner\" : \"\"}`}${names ? `: ${names}` : \"\"}`,\n messageAddReaction: \"Reaktion hinzufügen\",\n moreReactions: ({ count }) => (count === 1 ? \"1 weitere Reaktion\" : `${count} weitere Reaktionen`),\n reactionYou: \"Du\",\n reactionAnd: \"und\",\n reactionMorePeople: ({ count }) => `und ${count} weitere`,\n messageReplies: ({ count }) => (count === 1 ? \"1 Antwort\" : `${count} Antworten`),\n messageLastReply: ({ time }) => `Letzte Antwort ${time}`,\n messageStop: \"Stoppen\",\n conversationMessages: ({ label }) => `Nachrichten in ${label}`,\n loadEarlier: \"Ältere laden\",\n loadingConversation: \"Unterhaltung wird geladen\",\n loadingMessages: \"Nachrichten werden geladen\",\n failed: \"Fehlgeschlagen\",\n generating: \"Wird generiert\",\n loadOlderMessages: \"Ältere Nachrichten laden\",\n loadingOlderMessages: \"Ältere Nachrichten werden geladen\",\n couldNotLoadOlderMessages: \"Ältere Nachrichten konnten nicht geladen werden\",\n couldNotLoadEarlierMessages: \"Ältere Nachrichten konnten nicht geladen werden\",\n couldNotPostMessage: \"Nachricht konnte nicht gepostet werden\",\n messageActions: \"Nachrichtenaktionen\",\n messageComposer: \"Nachricht verfassen\",\n messageInput: \"Nachrichteneingabe\",\n model: \"Modell\",\n input: \"Eingabe\",\n output: \"Ausgabe\",\n loopTotal: \"Ganze Antwort\",\n remaining: \"Verbleibend\",\n notConfigured: \"Nicht konfiguriert\",\n system: \"System\",\n tool: \"Werkzeug\",\n user: \"Benutzer\",\n waiting: \"Wartet\",\n lastRequestContext: \"Kontext der letzten Anfrage\",\n contextWindowUsed: \"Kontextfenster verwendet\",\n contextWindow: \"Kontextfenster\",\n contextUsageUnavailable: \"Kontextnutzung nicht verfügbar\",\n contextUsageUnavailableWithWindow: ({ window }) => `Kontextnutzung nicht verfügbar, Kontextfenster mit ${window} Token`,\n tokensUsed: ({ total }) => `${total} Token verwendet`,\n tokensUsedPercent: ({ total, percent }) => `${total} Token verwendet, ${percent}% des Kontextfensters`,\n postMessage: \"Nachricht posten\",\n queueMessage: \"Nachricht einreihen\",\n queueing: \"Wird eingereiht\",\n sending: \"Wird gesendet\",\n steering: \"Wird gesteuert\",\n writeMessage: \"Nachricht schreiben oder / eingeben ...\",\n writeConversationMessage: \"Nachricht schreiben\",\n composerFormatting: \"Formatierung\",\n insertEmoji: \"Emoji einfügen\",\n emojiSuggestions: \"Emoji-Vorschläge\",\n dictate: \"Diktieren\",\n dictateOrHold: \"Diktieren. Halten nimmt eine Sprachnachricht auf.\",\n stopDictation: \"Diktat beenden\",\n microphoneOptions: \"Mikrofon-Optionen\",\n recordVoiceMessage: \"Sprachnachricht aufnehmen\",\n dictationListening: \"Diktat läuft …\",\n dictationRefining: \"Text wird verfeinert …\",\n dictationRefined: \"Text verfeinert\",\n dictationUnrefined: \"Text nicht verfeinert\",\n dictationInterrupted: \"Diktat unterbrochen\",\n restoreOriginal: \"Original wiederherstellen\",\n openInNewTab: ({ name }) => `${name} in neuem Tab öffnen`,\n retryOlderMessages: \"Ältere Nachrichten erneut laden\",\n sendMessage: \"Nachricht senden\",\n startConversation: \"Unterhaltung beginnen\",\n steerResponse: \"Antwort steuern\",\n stopResponse: \"Antwort stoppen\",\n stopping: \"Wird gestoppt\",\n },\n },\n});\n\nexport type ChatMessages = ReturnType<(typeof chatMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale. */\nexport const useChatMessages = (): (() => ChatMessages) => {\n const locale = useLocale();\n return () => chatMessages.resolve([locale()]).t;\n};\n\nexport const checkChatMessages = () => chatMessages.check();\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["chat/chat-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\nexport const chatMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n commandFailed: \"That did not work.\",\n commandDraftChanged: \"The text changed in the meantime, so nothing was inserted.\",\n markAdded: \"new:\",\n markRemoved: \"removed:\",\n commandOpening: \"Opening …\",\n commandSelected: \"selected\",\n attachments: \"Attachments\",\n assistant: \"Assistant\",\n addToChat: \"Add to chat\",\n addMenu: \"Add\",\n commandSearch: \"Search\",\n commandSearchLabel: \"Search entries\",\n attachFiles: \"Attach files\",\n addGuidance: \"Add guidance...\",\n chat: \"Chat\",\n chooseModel: \"Choose model\",\n commands: \"Commands\",\n commandsNothingFound: ({ query }: { query: string }) => `Nothing found for “${query}”`,\n commandSuggestions: ({ count }: { count: number }) =>\n count === 0 ? \"No suggestions\" : count === 1 ? \"1 suggestion\" : `${count} suggestions`,\n dropFilesToAttach: \"Drop to attach to the message\",\n conversation: \"Conversation\",\n jumpToLatest: \"Jump to latest\",\n messageSent: \"Sent\",\n messageNotSent: \"Not sent\",\n messageRetry: \"Retry\",\n messageShowMore: \"Show more\",\n messageShowLess: \"Show less\",\n messageReplyTo: \"In reply to\",\n messageForwarded: \"Forwarded\",\n messageEdited: \"edited\",\n messageDeleted: \"This message was deleted\",\n messageVideo: \"Video\",\n messageMoreAttachments: ({ count }: { count: number }) => `${count} more`,\n messageReactions: \"Reactions\",\n messageReaction: ({ emoji, count, names, own }: { emoji: string; count: number; names?: string; own?: boolean }) =>\n `${emoji} ${own && count === 1 ? \"your reaction\" : `${count} ${count === 1 ? \"reaction\" : \"reactions\"}${own ? \", including yours\" : \"\"}`}${names ? `: ${names}` : \"\"}`,\n messageAddReaction: \"Add reaction\",\n moreReactions: ({ count }: { count: number }) => (count === 1 ? \"1 more reaction\" : `${count} more reactions`),\n reactionYou: \"You\",\n reactionAnd: \"and\",\n reactionMorePeople: ({ count }: { count: number }) => `and ${count} more`,\n messageReplies: ({ count }: { count: number }) => (count === 1 ? \"1 reply\" : `${count} replies`),\n messageLastReply: ({ time }: { time: string }) => `Last reply ${time}`,\n messageStop: \"Stop\",\n conversationMessages: ({ label }: { label: string }) => `${label} messages`,\n loadEarlier: \"Load earlier\",\n loadingConversation: \"Loading conversation\",\n loadingMessages: \"Loading messages\",\n failed: \"Failed\",\n generating: \"Generating\",\n loadOlderMessages: \"Load older messages\",\n loadingOlderMessages: \"Loading older messages\",\n couldNotLoadOlderMessages: \"Could not load older messages\",\n couldNotLoadEarlierMessages: \"Could not load earlier messages\",\n couldNotPostMessage: \"Could not post message\",\n messageActions: \"Message actions\",\n messageComposer: \"Message composer\",\n messageInput: \"Message input\",\n model: \"Model\",\n input: \"Input\",\n output: \"Output\",\n loopTotal: \"Whole response\",\n remaining: \"Remaining\",\n notConfigured: \"Not configured\",\n system: \"System\",\n tool: \"Tool\",\n user: \"User\",\n waiting: \"Waiting\",\n lastRequestContext: \"Last request context\",\n contextWindowUsed: \"Context window used\",\n contextWindow: \"Context window\",\n contextUsageUnavailable: \"Context usage unavailable\",\n contextUsageUnavailableWithWindow: ({ window }: { window: string }) => `Context usage unavailable, ${window} token context window`,\n tokensUsed: ({ total }: { total: string }) => `${total} tokens used`,\n tokensUsedPercent: ({ total, percent }: { total: string; percent: number }) =>\n `${total} tokens used, ${percent}% of the context window`,\n postMessage: \"Post message\",\n queueMessage: \"Queue message\",\n queueing: \"Queueing\",\n sending: \"Sending\",\n steering: \"Steering\",\n writeMessage: \"Write a message or type / ...\",\n writeConversationMessage: \"Write a message\",\n composerFormatting: \"Formatting\",\n insertEmoji: \"Insert emoji\",\n emojiSuggestions: \"Emoji suggestions\",\n dictate: \"Dictate\",\n dictateOrHold: \"Dictate. Hold to record a voice message.\",\n stopDictation: \"Stop dictation\",\n microphoneOptions: \"Microphone options\",\n recordVoiceMessage: \"Record voice message\",\n dictationListening: \"Dictating …\",\n dictationRefining: \"Refining the text …\",\n dictationRefined: \"Text refined\",\n dictationUnrefined: \"Text not refined\",\n dictationInterrupted: \"Dictation interrupted\",\n restoreOriginal: \"Restore original\",\n openInNewTab: ({ name }: { name: string }) => `Open ${name} in a new tab`,\n retryOlderMessages: \"Retry loading older messages\",\n sendMessage: \"Send message\",\n startConversation: \"Start a conversation\",\n steerResponse: \"Steer response\",\n stopResponse: \"Stop response\",\n stopping: \"Stopping\",\n },\n de: {\n commandFailed: \"Das hat nicht geklappt.\",\n commandDraftChanged: \"Der Text hat sich inzwischen geändert, darum wurde nichts eingefügt.\",\n markAdded: \"neu:\",\n markRemoved: \"weg:\",\n commandOpening: \"Wird geöffnet …\",\n commandSelected: \"gewählt\",\n attachments: \"Anhänge\",\n assistant: \"Assistent\",\n addToChat: \"Zum Chat hinzufügen\",\n addMenu: \"Hinzufügen\",\n commandSearch: \"Suchen\",\n commandSearchLabel: \"Einträge durchsuchen\",\n attachFiles: \"Dateien anhängen\",\n addGuidance: \"Hinweis hinzufügen...\",\n chat: \"Chat\",\n chooseModel: \"Modell auswählen\",\n commands: \"Befehle\",\n commandsNothingFound: ({ query }) => `Nichts gefunden für „${query}“`,\n commandSuggestions: ({ count }) => (count === 0 ? \"Keine Vorschläge\" : count === 1 ? \"1 Vorschlag\" : `${count} Vorschläge`),\n dropFilesToAttach: \"Ablegen, um an die Nachricht anzuhängen\",\n conversation: \"Unterhaltung\",\n jumpToLatest: \"Zur neuesten Nachricht\",\n messageSent: \"Gesendet\",\n messageNotSent: \"Nicht gesendet\",\n messageRetry: \"Erneut senden\",\n messageShowMore: \"Mehr anzeigen\",\n messageShowLess: \"Weniger anzeigen\",\n messageReplyTo: \"Antwort auf\",\n messageForwarded: \"Weitergeleitet\",\n messageEdited: \"bearbeitet\",\n messageDeleted: \"Diese Nachricht wurde gelöscht\",\n messageVideo: \"Video\",\n messageMoreAttachments: ({ count }) => `${count} weitere`,\n messageReactions: \"Reaktionen\",\n messageReaction: ({ emoji, count, names, own }) =>\n `${emoji} ${own && count === 1 ? \"deine Reaktion\" : `${count} ${count === 1 ? \"Reaktion\" : \"Reaktionen\"}${own ? \", einschließlich deiner\" : \"\"}`}${names ? `: ${names}` : \"\"}`,\n messageAddReaction: \"Reaktion hinzufügen\",\n moreReactions: ({ count }) => (count === 1 ? \"1 weitere Reaktion\" : `${count} weitere Reaktionen`),\n reactionYou: \"Du\",\n reactionAnd: \"und\",\n reactionMorePeople: ({ count }) => `und ${count} weitere`,\n messageReplies: ({ count }) => (count === 1 ? \"1 Antwort\" : `${count} Antworten`),\n messageLastReply: ({ time }) => `Letzte Antwort ${time}`,\n messageStop: \"Stoppen\",\n conversationMessages: ({ label }) => `Nachrichten in ${label}`,\n loadEarlier: \"Ältere laden\",\n loadingConversation: \"Unterhaltung wird geladen\",\n loadingMessages: \"Nachrichten werden geladen\",\n failed: \"Fehlgeschlagen\",\n generating: \"Wird generiert\",\n loadOlderMessages: \"Ältere Nachrichten laden\",\n loadingOlderMessages: \"Ältere Nachrichten werden geladen\",\n couldNotLoadOlderMessages: \"Ältere Nachrichten konnten nicht geladen werden\",\n couldNotLoadEarlierMessages: \"Ältere Nachrichten konnten nicht geladen werden\",\n couldNotPostMessage: \"Nachricht konnte nicht gepostet werden\",\n messageActions: \"Nachrichtenaktionen\",\n messageComposer: \"Nachricht verfassen\",\n messageInput: \"Nachrichteneingabe\",\n model: \"Modell\",\n input: \"Eingabe\",\n output: \"Ausgabe\",\n loopTotal: \"Ganze Antwort\",\n remaining: \"Verbleibend\",\n notConfigured: \"Nicht konfiguriert\",\n system: \"System\",\n tool: \"Werkzeug\",\n user: \"Benutzer\",\n waiting: \"Wartet\",\n lastRequestContext: \"Kontext der letzten Anfrage\",\n contextWindowUsed: \"Kontextfenster verwendet\",\n contextWindow: \"Kontextfenster\",\n contextUsageUnavailable: \"Kontextnutzung nicht verfügbar\",\n contextUsageUnavailableWithWindow: ({ window }) => `Kontextnutzung nicht verfügbar, Kontextfenster mit ${window} Token`,\n tokensUsed: ({ total }) => `${total} Token verwendet`,\n tokensUsedPercent: ({ total, percent }) => `${total} Token verwendet, ${percent}% des Kontextfensters`,\n postMessage: \"Nachricht posten\",\n queueMessage: \"Nachricht einreihen\",\n queueing: \"Wird eingereiht\",\n sending: \"Wird gesendet\",\n steering: \"Wird gesteuert\",\n writeMessage: \"Nachricht schreiben oder / eingeben ...\",\n writeConversationMessage: \"Nachricht schreiben\",\n composerFormatting: \"Formatierung\",\n insertEmoji: \"Emoji einfügen\",\n emojiSuggestions: \"Emoji-Vorschläge\",\n dictate: \"Diktieren\",\n dictateOrHold: \"Diktieren. Halten nimmt eine Sprachnachricht auf.\",\n stopDictation: \"Diktat beenden\",\n microphoneOptions: \"Mikrofon-Optionen\",\n recordVoiceMessage: \"Sprachnachricht aufnehmen\",\n dictationListening: \"Diktat läuft …\",\n dictationRefining: \"Text wird verfeinert …\",\n dictationRefined: \"Text verfeinert\",\n dictationUnrefined: \"Text nicht verfeinert\",\n dictationInterrupted: \"Diktat unterbrochen\",\n restoreOriginal: \"Original wiederherstellen\",\n openInNewTab: ({ name }) => `${name} in neuem Tab öffnen`,\n retryOlderMessages: \"Ältere Nachrichten erneut laden\",\n sendMessage: \"Nachricht senden\",\n startConversation: \"Unterhaltung beginnen\",\n steerResponse: \"Antwort steuern\",\n stopResponse: \"Antwort stoppen\",\n stopping: \"Wird gestoppt\",\n },\n },\n});\n\nexport type ChatMessages = ReturnType<(typeof chatMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale. */\nexport const useChatMessages = (): (() => ChatMessages) => {\n const locale = useLocale();\n return () => chatMessages.resolve([locale()]).t;\n};\n\nexport const checkChatMessages = () => chatMessages.check();\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -101,16 +101,24 @@ export function chatCommandListModel(input) {
|
|
|
101
101
|
scopeTitle: scope.title,
|
|
102
102
|
rows: [],
|
|
103
103
|
loading: input.searching,
|
|
104
|
-
placeholder: false
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
104
|
+
placeholder: false,
|
|
105
|
+
pendingRows: 0
|
|
106
|
+
}] : [...(input.sections ?? []).map(section => {
|
|
107
|
+
// A section hidden for this query also hides its loading state.
|
|
108
|
+
const hidden = overview ? section.searchOnly : section.overviewOnly;
|
|
109
|
+
const pendingRows = section.pending && !hidden ? overview ? 3 : 1 : 0;
|
|
110
|
+
return {
|
|
111
|
+
section,
|
|
112
|
+
rows: [],
|
|
113
|
+
loading: Boolean(pendingRows || section.searched && input.searching && !hidden),
|
|
114
|
+
placeholder: false,
|
|
115
|
+
pendingRows
|
|
116
|
+
};
|
|
117
|
+
}), {
|
|
111
118
|
rows: [],
|
|
112
119
|
loading: !input.sections?.length && input.searching,
|
|
113
|
-
placeholder: false
|
|
120
|
+
placeholder: false,
|
|
121
|
+
pendingRows: 0
|
|
114
122
|
}];
|
|
115
123
|
const bySection = new Map(groups.map((group, index) => [group.section?.id, index]));
|
|
116
124
|
const buckets = groups.map(() => []);
|
|
@@ -125,8 +133,8 @@ export function chatCommandListModel(input) {
|
|
|
125
133
|
}
|
|
126
134
|
const seen = new Set();
|
|
127
135
|
for (const [index, group] of groups.entries()) {
|
|
128
|
-
// A search-only section is absent from the overview, rows and placeholder included.
|
|
129
|
-
if (overview
|
|
136
|
+
// A search-only section is absent from the overview, rows and placeholder included; an overview-only one while searching.
|
|
137
|
+
if (overview ? group.section?.searchOnly : group.section?.overviewOnly) continue;
|
|
130
138
|
const ranked = [];
|
|
131
139
|
for (const {
|
|
132
140
|
command,
|
|
@@ -136,13 +144,15 @@ export function chatCommandListModel(input) {
|
|
|
136
144
|
if (seen.has(key)) continue;
|
|
137
145
|
if (overview && command.hiddenUntilSearch) continue;
|
|
138
146
|
const match = rankPrepared(prepare(command), query);
|
|
139
|
-
if (!overview && !match && !(server && input.searchResultsFresh)) continue;
|
|
147
|
+
if (!overview && !match && !command.persistent && !(server && input.searchResultsFresh)) continue;
|
|
140
148
|
seen.add(key);
|
|
149
|
+
// A recent match moves one step up the ladder and leads its rank.
|
|
150
|
+
const rank = (match?.rank ?? Infinity) - (command.recent && match ? 1.5 : 0);
|
|
141
151
|
ranked.push({
|
|
142
152
|
command,
|
|
143
153
|
server,
|
|
144
154
|
highlight: match?.highlight,
|
|
145
|
-
rank
|
|
155
|
+
rank
|
|
146
156
|
});
|
|
147
157
|
}
|
|
148
158
|
if (!overview) ranked.sort((a, b) => a.rank - b.rank);
|
|
@@ -155,10 +165,10 @@ export function chatCommandListModel(input) {
|
|
|
155
165
|
server,
|
|
156
166
|
highlight
|
|
157
167
|
}));
|
|
158
|
-
group.placeholder = group.loading && group.rows.length === 0 && Boolean(scope || !input.searchSettled || buckets[index].some(entry => entry.server));
|
|
168
|
+
group.placeholder = !group.pendingRows && group.loading && group.rows.length === 0 && Boolean(scope || !input.searchSettled || buckets[index].some(entry => entry.server));
|
|
159
169
|
}
|
|
160
170
|
// A section without rows has no heading, also in the overview; a scope always shows its title.
|
|
161
|
-
const visible = groups.filter(group => scope || group.rows.length || group.placeholder);
|
|
171
|
+
const visible = groups.filter(group => scope || group.rows.length || group.placeholder || group.pendingRows);
|
|
162
172
|
const matches = visible.flatMap(group => group.rows);
|
|
163
173
|
// The fallback is no match: unscoped it ends the list after "Nothing found"; in a scope it is the scope's last row.
|
|
164
174
|
const fallback = !overview && input.fallback && !seen.has(chatCommandKey(input.fallback)) ? {
|
|
@@ -170,7 +180,8 @@ export function chatCommandListModel(input) {
|
|
|
170
180
|
scope,
|
|
171
181
|
groups: visible,
|
|
172
182
|
rows: fallback ? [...matches, fallback] : matches,
|
|
173
|
-
|
|
183
|
+
// Rows still on their way may match, so "Nothing found" waits for them.
|
|
184
|
+
empty: matches.length === 0 && !input.searching && !visible.some(group => group.pendingRows),
|
|
174
185
|
fallback: scope ? undefined : fallback
|
|
175
186
|
};
|
|
176
187
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["chat/command-search.ts"],"sourcesContent":["import { fuzzy } from \"@k2b/stdlib\";\nimport type { ChatCommand, ChatCommandScope, ChatCommandSection } from \"./ChatComposer\";\nimport { chatCommandKey, foldChatSearchText } from \"./chat-behavior\";\n\nconst wordPattern = /[^\\s\\-_.\\/·:,()„“\"']+/gu;\nconst words = (text: string) => [...text.matchAll(wordPattern)];\ntype Rank = { rank: number; highlight?: readonly [number, number] };\n\nconst prepare = (command: ChatCommand) => {\n const title = command.label ?? command.name;\n // Each folded UTF-16 position maps to the whole original character and its combining marks.\n const starts: number[] = [],\n ends: number[] = [];\n let foldedTitle = \"\";\n for (const part of title.matchAll(/\\P{M}\\p{M}*|\\p{M}+/gu)) {\n const folded = foldChatSearchText(part[0]);\n foldedTitle += folded;\n for (let i = 0; i < folded.length; i++) {\n starts.push(part.index);\n ends.push(part.index + part[0].length);\n }\n }\n return {\n foldedTitle,\n starts,\n ends,\n titleWords: words(foldedTitle),\n keywords: [...(command.keywords ?? []), ...(command.label !== undefined ? [command.name] : [])].map(foldChatSearchText),\n app: foldChatSearchText(command.app ?? \"\"),\n descriptionWords: words(foldChatSearchText(command.description)),\n };\n};\n\nconst rankPrepared = (entry: ReturnType<typeof prepare>, query: string): Rank | null => {\n if (!query) return { rank: 0 };\n const titleMatch = (rank: number, index: number): Rank => ({\n rank,\n highlight: [entry.starts[index]!, entry.ends[index + query.length - 1]!],\n });\n if (entry.foldedTitle.startsWith(query)) return titleMatch(0, 0);\n const word = entry.titleWords.find((word) => word[0].startsWith(query));\n if (word) return titleMatch(1, word.index);\n const index = entry.foldedTitle.indexOf(query);\n if (index >= 0) return titleMatch(2, index);\n if (entry.keywords.some((word) => word.startsWith(query))) return { rank: 3 };\n if (entry.app.startsWith(query)) return { rank: 4 };\n if (query.length >= 3 && entry.descriptionWords.some((word) => word[0].startsWith(query))) return { rank: 5 };\n if (query.length >= 4) {\n for (const word of [...entry.titleWords.map((word) => word[0]), ...entry.keywords]) {\n for (const length of [query.length - 1, query.length, query.length + 1]) {\n if (word.length >= length && fuzzy.distance(query, word.slice(0, length)) <= 1) return { rank: 6 };\n }\n }\n }\n return null;\n};\n\nexport const rankChatCommand = (command: ChatCommand, query: string): Rank | null =>\n rankPrepared(prepare(command), foldChatSearchText(query).trim());\n\nexport function resolveChatCommandScope(word: string, scopes: readonly ChatCommandScope[]): ChatCommandScope | undefined {\n const query = foldChatSearchText(word);\n const folded = scopes.map((scope) => ({ scope, words: scope.words.map(foldChatSearchText) }));\n const exact = folded.filter((entry) => entry.words.includes(query));\n if (exact.length) return exact.length === 1 ? exact[0]?.scope : undefined;\n if (query.length < 3) return undefined;\n let best: ChatCommandScope | undefined,\n extension = Infinity;\n for (const entry of folded) {\n const extra = Math.min(...entry.words.filter((word) => word.startsWith(query)).map((word) => word.length - query.length));\n if (extra < extension) {\n best = entry.scope;\n extension = extra;\n } else if (extra === extension) best = undefined;\n }\n return best;\n}\n\nexport function parseChatCommandQuery(query: string, scopes: readonly ChatCommandScope[]): { scope?: ChatCommandScope; query: string } {\n const match = /^(\\S+)\\s(.*)$/s.exec(query);\n const scope = match ? resolveChatCommandScope(match[1]!, scopes) : undefined;\n return scope ? { scope, query: match![2]!.trimStart() } : { query };\n}\n\nexport type ChatCommandRow = { command: ChatCommand; server: boolean; highlight?: readonly [number, number] };\ntype Group = { section?: ChatCommandSection; scopeTitle?: string; rows: ChatCommandRow[]; loading: boolean; placeholder: boolean };\n\nexport function chatCommandListModel(input: {\n query: string;\n scopes?: readonly ChatCommandScope[];\n sections?: readonly ChatCommandSection[];\n commands: readonly ChatCommand[];\n searchResults: readonly ChatCommand[];\n searchResultsFresh: boolean;\n searchSettled: boolean;\n searching: boolean;\n /** The composer's `commandFallback` row for this query, if any. */\n fallback?: ChatCommand;\n}): { scope?: ChatCommandScope; groups: Group[]; rows: ChatCommandRow[]; empty: boolean; fallback?: ChatCommandRow } {\n const { scope, query: rawQuery } = parseChatCommandQuery(input.query, input.scopes ?? []);\n const query = foldChatSearchText(rawQuery).trim();\n const overview = !scope && !query;\n const groups: Group[] = scope\n ? [{ scopeTitle: scope.title, rows: [], loading: input.searching, placeholder: false }]\n : [\n ...(input.sections ?? []).map((section) => ({\n section,\n rows: [],\n loading: Boolean(section.searched && input.searching && !(overview && section.searchOnly)),\n placeholder: false,\n })),\n { rows: [], loading: !input.sections?.length && input.searching, placeholder: false },\n ];\n const bySection = new Map(groups.map((group, index) => [group.section?.id, index]));\n const buckets: { command: ChatCommand; server: boolean }[][] = groups.map(() => []);\n for (const [commands, server] of [\n [scope ? [] : input.commands, false],\n [input.searchResults, true],\n ] as const) {\n for (const command of commands) {\n const index = scope ? 0 : (bySection.get(command.section) ?? groups.length - 1);\n buckets[index]!.push({ command, server });\n }\n }\n const seen = new Set<string>();\n for (const [index, group] of groups.entries()) {\n // A search-only section is absent from the overview, rows and placeholder included.\n if (overview && group.section?.searchOnly) continue;\n const ranked: (ChatCommandRow & { rank: number })[] = [];\n for (const { command, server } of buckets[index]!) {\n const key = chatCommandKey(command);\n if (seen.has(key)) continue;\n if (overview && command.hiddenUntilSearch) continue;\n const match = rankPrepared(prepare(command), query);\n if (!overview && !match && !(server && input.searchResultsFresh)) continue;\n seen.add(key);\n ranked.push({ command, server, highlight: match?.highlight, rank: match?.rank ?? Infinity });\n }\n if (!overview) ranked.sort((a, b) => a.rank - b.rank);\n group.rows = ranked.map(({ command, server, highlight }) => ({ command, server, highlight }));\n group.placeholder =\n group.loading && group.rows.length === 0 && Boolean(scope || !input.searchSettled || buckets[index]!.some((entry) => entry.server));\n }\n // A section without rows has no heading, also in the overview; a scope always shows its title.\n const visible = groups.filter((group) => scope || group.rows.length || group.placeholder);\n const matches = visible.flatMap((group) => group.rows);\n // The fallback is no match: unscoped it ends the list after \"Nothing found\"; in a scope it is the scope's last row.\n const fallback =\n !overview && input.fallback && !seen.has(chatCommandKey(input.fallback)) ? { command: input.fallback, server: false } : undefined;\n if (fallback && scope) visible[0]!.rows.push(fallback);\n return {\n scope,\n groups: visible,\n rows: fallback ? [...matches, fallback] : matches,\n empty: matches.length === 0 && !input.searching,\n fallback: scope ? undefined : fallback,\n };\n}\n\n/** Use the composer ranking rules to filter consumer-owned server rows. */\nexport const matchesChatCommand = (command: ChatCommand, query: string): boolean => rankChatCommand(command, query) !== null;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["chat/command-search.ts"],"sourcesContent":["import { fuzzy } from \"@k2b/stdlib\";\nimport type { ChatCommand, ChatCommandScope, ChatCommandSection } from \"./ChatComposer\";\nimport { chatCommandKey, foldChatSearchText } from \"./chat-behavior\";\n\nconst wordPattern = /[^\\s\\-_.\\/·:,()„“\"']+/gu;\nconst words = (text: string) => [...text.matchAll(wordPattern)];\ntype Rank = { rank: number; highlight?: readonly [number, number] };\n\nconst prepare = (command: ChatCommand) => {\n const title = command.label ?? command.name;\n // Each folded UTF-16 position maps to the whole original character and its combining marks.\n const starts: number[] = [],\n ends: number[] = [];\n let foldedTitle = \"\";\n for (const part of title.matchAll(/\\P{M}\\p{M}*|\\p{M}+/gu)) {\n const folded = foldChatSearchText(part[0]);\n foldedTitle += folded;\n for (let i = 0; i < folded.length; i++) {\n starts.push(part.index);\n ends.push(part.index + part[0].length);\n }\n }\n return {\n foldedTitle,\n starts,\n ends,\n titleWords: words(foldedTitle),\n keywords: [...(command.keywords ?? []), ...(command.label !== undefined ? [command.name] : [])].map(foldChatSearchText),\n app: foldChatSearchText(command.app ?? \"\"),\n descriptionWords: words(foldChatSearchText(command.description)),\n };\n};\n\nconst rankPrepared = (entry: ReturnType<typeof prepare>, query: string): Rank | null => {\n if (!query) return { rank: 0 };\n const titleMatch = (rank: number, index: number): Rank => ({\n rank,\n highlight: [entry.starts[index]!, entry.ends[index + query.length - 1]!],\n });\n if (entry.foldedTitle.startsWith(query)) return titleMatch(0, 0);\n const word = entry.titleWords.find((word) => word[0].startsWith(query));\n if (word) return titleMatch(1, word.index);\n const index = entry.foldedTitle.indexOf(query);\n if (index >= 0) return titleMatch(2, index);\n if (entry.keywords.some((word) => word.startsWith(query))) return { rank: 3 };\n if (entry.app.startsWith(query)) return { rank: 4 };\n if (query.length >= 3 && entry.descriptionWords.some((word) => word[0].startsWith(query))) return { rank: 5 };\n if (query.length >= 4) {\n for (const word of [...entry.titleWords.map((word) => word[0]), ...entry.keywords]) {\n for (const length of [query.length - 1, query.length, query.length + 1]) {\n if (word.length >= length && fuzzy.distance(query, word.slice(0, length)) <= 1) return { rank: 6 };\n }\n }\n }\n return null;\n};\n\nexport const rankChatCommand = (command: ChatCommand, query: string): Rank | null =>\n rankPrepared(prepare(command), foldChatSearchText(query).trim());\n\nexport function resolveChatCommandScope(word: string, scopes: readonly ChatCommandScope[]): ChatCommandScope | undefined {\n const query = foldChatSearchText(word);\n const folded = scopes.map((scope) => ({ scope, words: scope.words.map(foldChatSearchText) }));\n const exact = folded.filter((entry) => entry.words.includes(query));\n if (exact.length) return exact.length === 1 ? exact[0]?.scope : undefined;\n if (query.length < 3) return undefined;\n let best: ChatCommandScope | undefined,\n extension = Infinity;\n for (const entry of folded) {\n const extra = Math.min(...entry.words.filter((word) => word.startsWith(query)).map((word) => word.length - query.length));\n if (extra < extension) {\n best = entry.scope;\n extension = extra;\n } else if (extra === extension) best = undefined;\n }\n return best;\n}\n\nexport function parseChatCommandQuery(query: string, scopes: readonly ChatCommandScope[]): { scope?: ChatCommandScope; query: string } {\n const match = /^(\\S+)\\s(.*)$/s.exec(query);\n const scope = match ? resolveChatCommandScope(match[1]!, scopes) : undefined;\n return scope ? { scope, query: match![2]!.trimStart() } : { query };\n}\n\nexport type ChatCommandRow = { command: ChatCommand; server: boolean; highlight?: readonly [number, number] };\ntype Group = {\n section?: ChatCommandSection;\n scopeTitle?: string;\n rows: ChatCommandRow[];\n loading: boolean;\n placeholder: boolean;\n /** Placeholder rows of a `pending` section, after its rows: three in the overview, one while searching. */\n pendingRows: number;\n};\n\nexport function chatCommandListModel(input: {\n query: string;\n scopes?: readonly ChatCommandScope[];\n sections?: readonly ChatCommandSection[];\n commands: readonly ChatCommand[];\n searchResults: readonly ChatCommand[];\n searchResultsFresh: boolean;\n searchSettled: boolean;\n searching: boolean;\n /** The composer's `commandFallback` row for this query, if any. */\n fallback?: ChatCommand;\n}): { scope?: ChatCommandScope; groups: Group[]; rows: ChatCommandRow[]; empty: boolean; fallback?: ChatCommandRow } {\n const { scope, query: rawQuery } = parseChatCommandQuery(input.query, input.scopes ?? []);\n const query = foldChatSearchText(rawQuery).trim();\n const overview = !scope && !query;\n const groups: Group[] = scope\n ? [{ scopeTitle: scope.title, rows: [], loading: input.searching, placeholder: false, pendingRows: 0 }]\n : [\n ...(input.sections ?? []).map((section) => {\n // A section hidden for this query also hides its loading state.\n const hidden = overview ? section.searchOnly : section.overviewOnly;\n const pendingRows = section.pending && !hidden ? (overview ? 3 : 1) : 0;\n return {\n section,\n rows: [],\n loading: Boolean(pendingRows || (section.searched && input.searching && !hidden)),\n placeholder: false,\n pendingRows,\n };\n }),\n { rows: [], loading: !input.sections?.length && input.searching, placeholder: false, pendingRows: 0 },\n ];\n const bySection = new Map(groups.map((group, index) => [group.section?.id, index]));\n const buckets: { command: ChatCommand; server: boolean }[][] = groups.map(() => []);\n for (const [commands, server] of [\n [scope ? [] : input.commands, false],\n [input.searchResults, true],\n ] as const) {\n for (const command of commands) {\n const index = scope ? 0 : (bySection.get(command.section) ?? groups.length - 1);\n buckets[index]!.push({ command, server });\n }\n }\n const seen = new Set<string>();\n for (const [index, group] of groups.entries()) {\n // A search-only section is absent from the overview, rows and placeholder included; an overview-only one while searching.\n if (overview ? group.section?.searchOnly : group.section?.overviewOnly) continue;\n const ranked: (ChatCommandRow & { rank: number })[] = [];\n for (const { command, server } of buckets[index]!) {\n const key = chatCommandKey(command);\n if (seen.has(key)) continue;\n if (overview && command.hiddenUntilSearch) continue;\n const match = rankPrepared(prepare(command), query);\n if (!overview && !match && !command.persistent && !(server && input.searchResultsFresh)) continue;\n seen.add(key);\n // A recent match moves one step up the ladder and leads its rank.\n const rank = (match?.rank ?? Infinity) - (command.recent && match ? 1.5 : 0);\n ranked.push({ command, server, highlight: match?.highlight, rank });\n }\n if (!overview) ranked.sort((a, b) => a.rank - b.rank);\n group.rows = ranked.map(({ command, server, highlight }) => ({ command, server, highlight }));\n group.placeholder =\n !group.pendingRows &&\n group.loading &&\n group.rows.length === 0 &&\n Boolean(scope || !input.searchSettled || buckets[index]!.some((entry) => entry.server));\n }\n // A section without rows has no heading, also in the overview; a scope always shows its title.\n const visible = groups.filter((group) => scope || group.rows.length || group.placeholder || group.pendingRows);\n const matches = visible.flatMap((group) => group.rows);\n // The fallback is no match: unscoped it ends the list after \"Nothing found\"; in a scope it is the scope's last row.\n const fallback =\n !overview && input.fallback && !seen.has(chatCommandKey(input.fallback)) ? { command: input.fallback, server: false } : undefined;\n if (fallback && scope) visible[0]!.rows.push(fallback);\n return {\n scope,\n groups: visible,\n rows: fallback ? [...matches, fallback] : matches,\n // Rows still on their way may match, so \"Nothing found\" waits for them.\n empty: matches.length === 0 && !input.searching && !visible.some((group) => group.pendingRows),\n fallback: scope ? undefined : fallback,\n };\n}\n\n/** Use the composer ranking rules to filter consumer-owned server rows. */\nexport const matchesChatCommand = (command: ChatCommand, query: string): boolean => rankChatCommand(command, query) !== null;\n"],"mappings":"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","ignoreList":[]}
|
package/dist/ssr/chat/index.js
CHANGED
|
@@ -2,7 +2,7 @@ import { ChatContextPanel, ChatContextPopup } from "./ChatContextPopup";
|
|
|
2
2
|
import { ChatTasks } from "./ChatTasks";
|
|
3
3
|
import { ChatComposer } from "./ChatComposer";
|
|
4
4
|
import { ChatDecision, ChatMark, ChatOutcome, ChatPreview } from "./ChatDecision";
|
|
5
|
-
import { ChatActivity, ChatContextUsage, ChatMessage } from "./ChatPrimitives";
|
|
5
|
+
import { ChatActivity, ChatActivityToggle, ChatContextUsage, ChatMessage } from "./ChatPrimitives";
|
|
6
6
|
import { ChatRoot } from "./ChatRoot";
|
|
7
7
|
import { ChatTimeline } from "./ChatTimeline";
|
|
8
8
|
export { formatChatTokens } from "./ChatPrimitives";
|
|
@@ -14,7 +14,9 @@ export const Chat = Object.assign(ChatRoot, {
|
|
|
14
14
|
Tasks: ChatTasks,
|
|
15
15
|
Timeline: ChatTimeline,
|
|
16
16
|
Message: ChatMessage,
|
|
17
|
-
Activity: ChatActivity,
|
|
17
|
+
Activity: Object.assign(ChatActivity, {
|
|
18
|
+
Toggle: ChatActivityToggle
|
|
19
|
+
}),
|
|
18
20
|
Composer: ChatComposer,
|
|
19
21
|
ContextUsage: ChatContextUsage,
|
|
20
22
|
ContextPopup: ChatContextPopup,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["chat/index.ts"],"sourcesContent":["export type { ChatContextPanelProps, ChatContextPopupProps } from \"./ChatContextPopup\";\n\nimport { ChatContextPanel, ChatContextPopup } from \"./ChatContextPopup\";\nimport { ChatTasks } from \"./ChatTasks\";\n\nexport type { ChatTask, ChatTasksProps } from \"./ChatTasks\";\n\nimport { ChatComposer } from \"./ChatComposer\";\nimport { ChatDecision, ChatMark, ChatOutcome, ChatPreview } from \"./ChatDecision\";\nimport { ChatActivity, ChatContextUsage, ChatMessage } from \"./ChatPrimitives\";\nimport { ChatRoot } from \"./ChatRoot\";\nimport { ChatTimeline } from \"./ChatTimeline\";\n\nexport type {\n ChatCommand,\n ChatCommandContext,\n ChatCommandResult,\n ChatCommandScope,\n ChatCommandSearch,\n ChatCommandSection,\n ChatComposerProps,\n ChatFileSelection,\n ChatPasteHandler,\n} from \"./ChatComposer\";\nexport type {\n ChatDecisionProps,\n ChatMarkProps,\n ChatOutcomeProps,\n ChatPreviewHeaderProps,\n ChatPreviewLineProps,\n ChatPreviewPeopleProps,\n ChatPreviewProps,\n ChatPreviewReadMoreProps,\n ChatPreviewTitleProps,\n} from \"./ChatDecision\";\nexport type { ChatActivityProps, ChatContextUsageProps, ChatMessageProps } from \"./ChatPrimitives\";\nexport { formatChatTokens } from \"./ChatPrimitives\";\nexport type { ChatRootProps } from \"./ChatRoot\";\nexport type { ChatActivityItem, ChatMessageItem, ChatTimelineItem, ChatTimelineProps } from \"./ChatTimeline\";\nexport type {\n ChatAction,\n ChatActivityTone,\n ChatAttachment,\n ChatComposerEmoji,\n ChatComposerMicrophone,\n ChatComposerState,\n ChatContextUsageData,\n ChatDecisionAnswer,\n ChatDecisionReason,\n ChatDecisionState,\n ChatDictationState,\n ChatMention,\n ChatMessageStatus,\n ChatModelOption,\n ChatOutcomeLine,\n ChatOutcomeTone,\n ChatPreviewHeaderRow,\n ChatPreviewPerson,\n ChatRole,\n ChatSubmitInput,\n ChatSubmitIntent,\n ChatUsage,\n} from \"./types\";\n\n/**\n * Portable, controlled chat surface. Applications own storage, streaming,\n * authorization, rich message rendering, and domain actions.\n */\nexport const Chat = Object.assign(ChatRoot, {\n Tasks: ChatTasks,\n Timeline: ChatTimeline,\n Message: ChatMessage,\n Activity: ChatActivity,\n Composer: ChatComposer,\n ContextUsage: ChatContextUsage,\n ContextPopup: ChatContextPopup,\n ContextPanel: ChatContextPanel,\n Decision: ChatDecision,\n Outcome: ChatOutcome,\n Preview: ChatPreview,\n Mark: ChatMark,\n});\n\nexport { matchesChatCommand } from \"./command-search\";\nexport { reconcileChatMentions } from \"./composer-document\";\n\nexport { type ReactionPeopleInput, reactionPeople } from \"./reaction-people\";\n"],"mappings":"AAEA,SAAS,gBAAgB,EAAE,gBAAgB,QAAQ,oBAAoB;AACvE,SAAS,SAAS,QAAQ,aAAa;AAIvC,SAAS,YAAY,QAAQ,gBAAgB;AAC7C,SAAS,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,QAAQ,gBAAgB;AACjF,SAAS,YAAY,EAAE,gBAAgB,EAAE,WAAW,QAAQ,kBAAkB;
|
|
1
|
+
{"version":3,"names":[],"sources":["chat/index.ts"],"sourcesContent":["export type { ChatContextPanelProps, ChatContextPopupProps } from \"./ChatContextPopup\";\n\nimport { ChatContextPanel, ChatContextPopup } from \"./ChatContextPopup\";\nimport { ChatTasks } from \"./ChatTasks\";\n\nexport type { ChatTask, ChatTasksProps } from \"./ChatTasks\";\n\nimport { ChatComposer } from \"./ChatComposer\";\nimport { ChatDecision, ChatMark, ChatOutcome, ChatPreview } from \"./ChatDecision\";\nimport { ChatActivity, ChatActivityToggle, ChatContextUsage, ChatMessage } from \"./ChatPrimitives\";\nimport { ChatRoot } from \"./ChatRoot\";\nimport { ChatTimeline } from \"./ChatTimeline\";\n\nexport type {\n ChatCommand,\n ChatCommandContext,\n ChatCommandDraft,\n ChatCommandOpenResult,\n ChatCommandResult,\n ChatCommandScope,\n ChatCommandSearch,\n ChatCommandSection,\n ChatComposerProps,\n ChatFileSelection,\n ChatPasteHandler,\n} from \"./ChatComposer\";\nexport type {\n ChatDecisionProps,\n ChatMarkProps,\n ChatOutcomeProps,\n ChatPreviewExcerptProps,\n ChatPreviewHeaderProps,\n ChatPreviewLineProps,\n ChatPreviewPeopleProps,\n ChatPreviewProps,\n ChatPreviewReadMoreProps,\n ChatPreviewShowAllProps,\n ChatPreviewTitleProps,\n} from \"./ChatDecision\";\nexport type { ChatActivityProps, ChatActivityToggleProps, ChatContextUsageProps, ChatMessageProps } from \"./ChatPrimitives\";\nexport { formatChatTokens } from \"./ChatPrimitives\";\nexport type { ChatRootProps } from \"./ChatRoot\";\nexport type { ChatActivityItem, ChatMessageItem, ChatTimelineItem, ChatTimelineProps } from \"./ChatTimeline\";\nexport type {\n ChatAction,\n ChatActivityTone,\n ChatAttachment,\n ChatComposerEmoji,\n ChatComposerMicrophone,\n ChatComposerState,\n ChatContextUsageData,\n ChatDecisionAnswer,\n ChatDecisionReason,\n ChatDecisionState,\n ChatDictationState,\n ChatMention,\n ChatMessageStatus,\n ChatModelOption,\n ChatOutcomeLine,\n ChatOutcomeTone,\n ChatPreviewHeaderRow,\n ChatPreviewPerson,\n ChatRole,\n ChatSubmitInput,\n ChatSubmitIntent,\n ChatUsage,\n} from \"./types\";\n\n/**\n * Portable, controlled chat surface. Applications own storage, streaming,\n * authorization, rich message rendering, and domain actions.\n */\nexport const Chat = Object.assign(ChatRoot, {\n Tasks: ChatTasks,\n Timeline: ChatTimeline,\n Message: ChatMessage,\n Activity: Object.assign(ChatActivity, { Toggle: ChatActivityToggle }),\n Composer: ChatComposer,\n ContextUsage: ChatContextUsage,\n ContextPopup: ChatContextPopup,\n ContextPanel: ChatContextPanel,\n Decision: ChatDecision,\n Outcome: ChatOutcome,\n Preview: ChatPreview,\n Mark: ChatMark,\n});\n\nexport { matchesChatCommand } from \"./command-search\";\nexport { reconcileChatMentions } from \"./composer-document\";\n\nexport { type ReactionPeopleInput, reactionPeople } from \"./reaction-people\";\n"],"mappings":"AAEA,SAAS,gBAAgB,EAAE,gBAAgB,QAAQ,oBAAoB;AACvE,SAAS,SAAS,QAAQ,aAAa;AAIvC,SAAS,YAAY,QAAQ,gBAAgB;AAC7C,SAAS,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,QAAQ,gBAAgB;AACjF,SAAS,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,WAAW,QAAQ,kBAAkB;AAClG,SAAS,QAAQ,QAAQ,YAAY;AACrC,SAAS,YAAY,QAAQ,gBAAgB;AA6B7C,SAAS,gBAAgB,QAAQ,kBAAkB;AA4BnD;AACA;AACA;AACA;AACA,OAAO,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE;EAC1C,KAAK,EAAE,SAAS;EAChB,QAAQ,EAAE,YAAY;EACtB,OAAO,EAAE,WAAW;EACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE;IAAE,MAAM,EAAE;EAAmB,CAAC,CAAC;EACrE,QAAQ,EAAE,YAAY;EACtB,YAAY,EAAE,gBAAgB;EAC9B,YAAY,EAAE,gBAAgB;EAC9B,YAAY,EAAE,gBAAgB;EAC9B,QAAQ,EAAE,YAAY;EACtB,OAAO,EAAE,WAAW;EACpB,OAAO,EAAE,WAAW;EACpB,IAAI,EAAE;AACR,CAAC,CAAC;AAEF,SAAS,kBAAkB,QAAQ,kBAAkB;AACrD,SAAS,qBAAqB,QAAQ,qBAAqB;AAE3D,SAAmC,cAAc,QAAQ,mBAAmB","ignoreList":[]}
|