@k2b/ui 0.1.1 → 0.2.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/dist/browser/actions/Dropdown.js +6 -3
- package/dist/browser/actions/Dropdown.js.map +1 -1
- package/dist/browser/chat/ChatPrimitives.js +44 -41
- package/dist/browser/chat/ChatPrimitives.js.map +1 -1
- package/dist/browser/chat/ChatTimeline.js +3 -1
- package/dist/browser/chat/ChatTimeline.js.map +1 -1
- package/dist/browser/chat/types.js.map +1 -1
- package/dist/browser/content/MarkdownView.js +14 -3
- package/dist/browser/content/MarkdownView.js.map +1 -1
- package/dist/browser/feedback/Tooltip.js +6 -2
- package/dist/browser/feedback/Tooltip.js.map +1 -1
- package/dist/browser/feedback/dialog-core.js +22 -3
- package/dist/browser/feedback/dialog-core.js.map +1 -1
- package/dist/browser/feedback/tooltip-position.js +15 -0
- package/dist/browser/feedback/tooltip-position.js.map +1 -1
- package/dist/browser/inputs/ChoiceInputs.js +47 -38
- package/dist/browser/inputs/ChoiceInputs.js.map +1 -1
- package/dist/browser/internal/portal.js +1 -1
- package/dist/browser/internal/portal.js.map +1 -1
- package/dist/browser/layout/DetailPanel.js +194 -81
- package/dist/browser/layout/DetailPanel.js.map +1 -1
- package/dist/browser/layout/PanelDialog.js +14 -5
- package/dist/browser/layout/PanelDialog.js.map +1 -1
- package/dist/ssr/actions/Dropdown.js +1 -1
- package/dist/ssr/actions/Dropdown.js.map +1 -1
- package/dist/ssr/chat/ChatPrimitives.js +1 -1
- package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
- package/dist/ssr/chat/ChatTimeline.js +3 -1
- package/dist/ssr/chat/ChatTimeline.js.map +1 -1
- package/dist/ssr/chat/types.js.map +1 -1
- package/dist/ssr/content/MarkdownView.js +14 -3
- package/dist/ssr/content/MarkdownView.js.map +1 -1
- package/dist/ssr/feedback/Tooltip.js +6 -4
- package/dist/ssr/feedback/Tooltip.js.map +1 -1
- package/dist/ssr/feedback/dialog-core.js +22 -3
- package/dist/ssr/feedback/dialog-core.js.map +1 -1
- package/dist/ssr/feedback/tooltip-position.js +15 -0
- package/dist/ssr/feedback/tooltip-position.js.map +1 -1
- package/dist/ssr/inputs/ChoiceInputs.js +9 -6
- package/dist/ssr/inputs/ChoiceInputs.js.map +1 -1
- package/dist/ssr/internal/portal.js +1 -1
- package/dist/ssr/internal/portal.js.map +1 -1
- package/dist/ssr/layout/DetailPanel.js +86 -15
- package/dist/ssr/layout/DetailPanel.js.map +1 -1
- package/dist/ssr/layout/PanelDialog.js +1 -1
- package/dist/ssr/layout/PanelDialog.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/types/actions/Dropdown.d.ts +3 -1
- package/dist/types/chat/types.d.ts +2 -0
- package/dist/types/content/MarkdownView.d.ts +6 -1
- package/dist/types/feedback/dialog-core.d.ts +2 -0
- package/dist/types/feedback/tooltip-position.d.ts +1 -1
- package/dist/types/inputs/ChoiceInputs.d.ts +3 -0
- package/dist/types/layout/DetailPanel.d.ts +6 -0
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createSignal","For","onCleanup","Show","Dropdown","Tooltip","useUiMessages","ProgressBar","executeChatAction","roleLabel","role","messages","assistant","user","tool","system","statusLabel","status","waiting","generating","failed","statusIcon","ChatProgressDots","_$getNextElement","_tmpl$","attachmentIcon","attachment","icon","kind","finiteNonNegative","value","Number","isFinite","Math","max","finiteUsageValue","normalizedUsage","usage","input","output","explicitTotal","total","reported","formatStableInteger","digits","String","round","replace","formatChatTokens","tokens","toFixed","dateTime","date","Date","getTime","toISOString","ChatMessage","props","busyActionId","setBusyActionId","completedActionId","setCompletedActionId","completedTimer","timestamp","createdAt","time","timeLabel","actions","actionDisplay","hasMeta","Boolean","length","runAction","action","disabled","id","clearTimeout","setTimeout","error","onActionError","actionIcon","menuItems","map","label","variant","_el$2","_tmpl$8","_el$3","firstChild","_el$5","_el$6","_co$","_$getNextMarker","nextSibling","_el$4","_el$20","_el$21","_co$6","_el$22","_el$23","_co$7","_el$24","_el$25","_co$8","_$insert","_$createComponent","when","attachments","children","_el$7","_tmpl$2","each","content","_$memo","previewUrl","fallback","_el$28","_tmpl$1","_$effect","_$className","_el$26","_tmpl$9","_p$","_v$6","_v$7","alt","name","e","_$setAttribute","t","undefined","_el$27","_tmpl$0","href","_el$29","_tmpl$10","_el$30","_tmpl$11","_v$8","_v$9","_v$0","openInNewTab","a","_el$8","_tmpl$3","_el$9","_el$0","_tmpl$7","_el$12","_el$13","_co$2","_el$14","_el$15","_co$3","_el$16","_el$17","_co$4","_el$18","_el$19","_co$5","_el$31","_tmpl$12","_el$32","_el$33","_el$34","_co$9","_v$1","_v$10","_el$1","_tmpl$4","_el$35","_tmpl$13","_el$10","_tmpl$5","_el$36","_tmpl$14","_el$37","$$click","_v$11","_v$12","pressed","_v$13","_v$14","_v$15","_v$16","o","i","_$setProperty","n","_$runHydrationEvents","messageActions","Root","position","width","items","Trigger","appearance","title","_tmpl$6","_v$","class","_v$2","_v$3","_v$4","anchorId","_v$5","ActivityContent","_el$38","_tmpl$15","leading","_el$45","_tmpl$19","_el$39","_tmpl$16","_el$40","_el$41","_el$42","_co$0","description","_el$46","_tmpl$20","trailing","_el$43","_tmpl$17","disclosure","_tmpl$18","ChatActivity","tone","style","accent","_el$50","_tmpl$22","_el$51","_v$26","_v$27","_v$28","_v$29","busy","_v$30","_v$31","_v$32","_$style","s","_el$47","_tmpl$21","_el$48","_el$49","addEventListener","event","onOpenChange","currentTarget","open","_$mergeProps","_v$17","_v$18","_v$19","_v$20","_v$21","bodyInset","_v$22","_v$23","_v$24","defaultOpen","_v$25","h","r","ChatContextUsage","formatNumber","formattedUsageValue","unknown","loopUsage","windowSize","contextWindow","percent","min","remaining","accessibleLabel","contextUsageUnavailableWithWindow","window","contextUsageUnavailable","tokensUsed","tokensUsedPercent","placement","_el$54","_tmpl$25","_el$55","_el$78","_el$79","_co$12","_el$56","_el$72","_el$73","_co$1","_el$57","_el$58","_el$59","_el$60","_el$61","_el$62","_el$74","_el$75","_co$10","_el$66","_el$67","_el$68","_el$76","_el$77","_co$11","lastRequestContext","size","contextWindowUsed","modelLabel","model","_el$80","_tmpl$24","_el$81","_el$82","_el$63","_el$64","_el$65","loopTotal","_c$2","notConfigured","_el$69","_el$70","_el$71","_c$3","type","data-warning","aria-label","_tmpl$23","_el$53","_c$","_$delegateEvents"],"sources":["chat/ChatPrimitives.tsx"],"sourcesContent":["import { createSignal, For, type JSX, onCleanup, Show } from \"solid-js\";\nimport { Dropdown, type DropdownItem } from \"../actions/Dropdown\";\nimport { Tooltip } from \"../feedback/Tooltip\";\nimport { type UiMessages, useUiMessages } from \"../intl/messages\";\nimport { ProgressBar } from \"../surfaces/ProgressBar\";\nimport { executeChatAction } from \"./chat-behavior\";\nimport type { ChatAction, ChatActivityTone, ChatAttachment, ChatContextUsageData, ChatMessageStatus, ChatRole } from \"./types\";\n\nexport type ChatMessageProps = {\n role: ChatRole;\n children?: JSX.Element;\n label?: string;\n createdAt?: string | Date;\n timeLabel?: string;\n status?: ChatMessageStatus;\n attachments?: readonly ChatAttachment[];\n actions?: readonly ChatAction[];\n actionDisplay?: \"auto\" | \"inline\" | \"menu\";\n anchorId?: string | number;\n onActionError?: (error: unknown) => void;\n class?: string;\n};\n\nexport type ChatActivityProps = {\n label: string;\n description?: string;\n icon?: string;\n /** Optional host-owned leading visual rendered instead of the icon. */\n leading?: JSX.Element;\n /** Optional identity accent for the leading visual. Semantic tones still take precedence. */\n accent?: string;\n tone?: ChatActivityTone;\n /** Marks the activity as running with the shared accent sweep. */\n busy?: boolean;\n trailing?: JSX.Element;\n /** Controlled disclosure state. Omit to keep native details behavior. */\n open?: boolean;\n /** Reports disclosure changes when `open` is controlled by the host. */\n onOpenChange?: (open: boolean) => void;\n defaultOpen?: boolean;\n /** Set to false when the body is a peer list that should align with the activity row. */\n bodyInset?: boolean;\n anchorId?: string | number;\n children?: JSX.Element;\n class?: string;\n};\n\nexport type ChatContextUsageProps = ChatContextUsageData & {\n /** Host-owned number formatting. The default is locale-independent and SSR-stable. */\n formatNumber?: (value: number) => string;\n class?: string;\n};\n\nconst roleLabel = (role: ChatRole, messages: UiMessages): string => {\n if (role === \"assistant\") return messages.assistant;\n if (role === \"user\") return messages.user;\n if (role === \"tool\") return messages.tool;\n return messages.system;\n};\n\nconst statusLabel = (status: ChatMessageStatus | undefined, messages: UiMessages): string | null => {\n if (status === \"pending\") return messages.waiting;\n if (status === \"streaming\") return messages.generating;\n if (status === \"error\") return messages.failed;\n return null;\n};\n\nconst statusIcon = (status: ChatMessageStatus | undefined): string => {\n if (status === \"pending\") return \"ti ti-clock\";\n return \"ti ti-alert-circle\";\n};\n\nconst ChatProgressDots = () => (\n <span class=\"k2b-chat-progress-dots\" aria-hidden=\"true\">\n <span />\n <span />\n <span />\n </span>\n);\n\nconst attachmentIcon = (attachment: ChatAttachment): string =>\n attachment.icon ?? (attachment.kind === \"image\" ? \"ti ti-photo\" : attachment.kind === \"resource\" ? \"ti ti-link\" : \"ti ti-file\");\n\nconst finiteNonNegative = (value: number | undefined): number =>\n typeof value === \"number\" && Number.isFinite(value) ? Math.max(0, value) : 0;\n\nconst finiteUsageValue = (value: number | undefined): number | null =>\n typeof value === \"number\" && Number.isFinite(value) && value >= 0 ? value : null;\n\nconst normalizedUsage = (usage: ChatContextUsageData[\"usage\"]) => {\n const input = finiteUsageValue(usage?.input);\n const output = finiteUsageValue(usage?.output);\n const explicitTotal = finiteUsageValue(usage?.total);\n const total = explicitTotal ?? (input !== null || output !== null ? (input ?? 0) + (output ?? 0) : null);\n return { input, output, total, reported: total !== null };\n};\n\nconst formatStableInteger = (value: number): string => {\n const digits = String(Math.round(finiteNonNegative(value)));\n return digits.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n};\n\nexport const formatChatTokens = (tokens: number): string => {\n const value = finiteNonNegative(tokens);\n if (value >= 1_000_000) return `${(value / 1_000_000).toFixed(1)}M`;\n if (value >= 1_000) return `${(value / 1_000).toFixed(1)}k`;\n return String(Math.round(value));\n};\n\nconst dateTime = (value: string | Date | undefined): string | null => {\n if (!value) return null;\n const date = value instanceof Date ? value : new Date(value);\n return Number.isFinite(date.getTime()) ? date.toISOString() : null;\n};\n\nexport function ChatMessage(props: ChatMessageProps): JSX.Element {\n const messages = useUiMessages();\n const [busyActionId, setBusyActionId] = createSignal<string | null>(null);\n const [completedActionId, setCompletedActionId] = createSignal<string | null>(null);\n let completedTimer: ReturnType<typeof setTimeout> | undefined;\n const status = () => statusLabel(props.status, messages());\n const timestamp = () => dateTime(props.createdAt);\n // Locale and timezone are application policy. Requiring an explicit visible\n // label keeps SSR and hydration byte-stable while `createdAt` still supplies\n // the semantic machine-readable timestamp.\n const time = () => props.timeLabel ?? null;\n const actions = () => props.actions ?? [];\n const actionDisplay = () =>\n props.actionDisplay === \"auto\" || !props.actionDisplay ? (props.role === \"user\" ? \"menu\" : \"inline\") : props.actionDisplay;\n const hasMeta = () => props.status === \"streaming\" || status() !== null || Boolean(time()) || actions().length > 0;\n\n const runAction = async (action: ChatAction) => {\n if (action.disabled || busyActionId()) return;\n setBusyActionId(action.id);\n try {\n await executeChatAction(action);\n setCompletedActionId(action.id);\n if (completedTimer) clearTimeout(completedTimer);\n completedTimer = setTimeout(() => setCompletedActionId(null), 1400);\n } catch (error) {\n props.onActionError?.(error);\n } finally {\n setBusyActionId(null);\n }\n };\n\n const actionIcon = (action: ChatAction) =>\n busyActionId() === action.id\n ? \"ti ti-loader-2 k2b-spin\"\n : completedActionId() === action.id\n ? \"ti ti-check\"\n : (action.icon ?? \"ti ti-dots\");\n\n onCleanup(() => {\n if (completedTimer) clearTimeout(completedTimer);\n });\n\n const menuItems = (): readonly DropdownItem[] =>\n actions().map((action) => ({\n icon: actionIcon(action),\n label: action.label,\n variant: action.variant,\n disabled: action.disabled || Boolean(busyActionId()),\n action: () => void runAction(action),\n }));\n\n return (\n <article\n class={`k2b-chat-message ${props.class ?? \"\"}`}\n data-role={props.role}\n data-status={props.status ?? \"complete\"}\n data-chat-anchor={props.anchorId !== undefined ? String(props.anchorId) : undefined}\n aria-busy={props.status === \"pending\" || props.status === \"streaming\" ? \"true\" : undefined}\n >\n <span class=\"k2b-sr-only\">{props.label ?? roleLabel(props.role, messages())}: </span>\n <Show when={(props.attachments?.length ?? 0) > 0}>\n <div class=\"k2b-chat-message__attachments\" role=\"list\" aria-label={messages().attachments}>\n <For each={props.attachments}>\n {(attachment) => {\n const content = () => (\n <>\n <Show\n when={attachment.kind === \"image\" && attachment.previewUrl}\n fallback={<i class={attachmentIcon(attachment)} aria-hidden=\"true\" />}\n >\n <img src={attachment.previewUrl} alt={attachment.alt ?? attachment.name} />\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\" role=\"listitem\" title={attachment.name}>\n {content()}\n </div>\n }\n >\n {(href) => (\n <a\n class=\"k2b-chat-message__attachment\"\n role=\"listitem\"\n title={attachment.name}\n href={href()}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n aria-label={messages().openInNewTab({ name: attachment.name })}\n >\n {content()}\n </a>\n )}\n </Show>\n );\n }}\n </For>\n </div>\n </Show>\n\n <Show when={props.children !== undefined && props.children !== null && props.children !== \"\"}>\n <div class=\"k2b-chat-message__bubble\">\n <div class=\"k2b-chat-message__content\">{props.children}</div>\n </div>\n </Show>\n\n <Show when={hasMeta()}>\n <footer class=\"k2b-chat-message__meta\">\n <Show\n when={props.status === \"streaming\"}\n fallback={\n <Show when={status()}>\n {(label) => (\n <span class=\"k2b-chat-message__status\" role={props.status === \"error\" ? \"alert\" : \"status\"}>\n <i class={statusIcon(props.status)} aria-hidden=\"true\" />\n {label()}\n </span>\n )}\n </Show>\n }\n >\n <span class=\"k2b-chat-message__status k2b-chat-message__status--streaming\" role=\"status\" aria-label={messages().generating}>\n <ChatProgressDots />\n </span>\n </Show>\n <Show when={time()}>{(label) => <time dateTime={timestamp() ?? undefined}>{label()}</time>}</Show>\n <Show when={actions().length > 0 && actionDisplay() === \"inline\"}>\n <span class=\"k2b-chat-message__actions\" role=\"group\" aria-label={messages().messageActions}>\n <For each={actions()}>\n {(action) => (\n <button\n type=\"button\"\n aria-label={action.label}\n aria-pressed={action.pressed}\n title={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 </button>\n )}\n </For>\n </span>\n </Show>\n <Show when={actions().length > 0 && actionDisplay() === \"menu\"}>\n <Dropdown.Root position=\"bottom-left\" width=\"12rem\" label={messages().messageActions} items={menuItems()}>\n <Dropdown.Trigger\n appearance=\"plain\"\n class=\"k2b-chat-message__menu\"\n label={messages().messageActions}\n title={messages().messageActions}\n >\n <i class=\"ti ti-dots\" aria-hidden=\"true\" />\n </Dropdown.Trigger>\n </Dropdown.Root>\n </Show>\n </footer>\n </Show>\n </article>\n );\n}\n\nconst ActivityContent = (props: ChatActivityProps & { disclosure?: boolean }) => (\n <>\n <span class=\"k2b-chat-activity__leading\" aria-hidden=\"true\">\n <Show when={props.leading} fallback={<i class={props.icon ?? \"ti ti-sparkles\"} />}>\n {props.leading}\n </Show>\n </span>\n <span class=\"k2b-chat-activity__copy\">\n <strong>{props.label}</strong>\n <Show when={props.description}>{(description) => <small>{description()}</small>}</Show>\n </span>\n <Show when={props.trailing}>\n <span class=\"k2b-chat-activity__trailing\">{props.trailing}</span>\n </Show>\n <Show when={props.disclosure}>\n <i class=\"ti ti-chevron-right k2b-chat-activity__chevron\" aria-hidden=\"true\" />\n </Show>\n </>\n);\n\nexport function ChatActivity(props: ChatActivityProps): JSX.Element {\n const tone = () => props.tone ?? \"neutral\";\n const style = () => (props.accent ? { \"--k2b-chat-activity-accent\": props.accent } : undefined);\n return (\n <Show\n when={props.children}\n fallback={\n <div\n class={`k2b-chat-activity ${props.class ?? \"\"}`}\n data-tone={tone()}\n data-accent={props.accent ? \"true\" : undefined}\n data-busy={props.busy ? \"true\" : undefined}\n data-chat-anchor={props.anchorId !== undefined ? String(props.anchorId) : undefined}\n style={style()}\n aria-busy={props.busy ? \"true\" : undefined}\n >\n <div class=\"k2b-chat-activity__row\">\n <ActivityContent {...props} />\n </div>\n </div>\n }\n >\n <details\n class={`k2b-chat-activity ${props.class ?? \"\"}`}\n data-tone={tone()}\n data-accent={props.accent ? \"true\" : undefined}\n data-busy={props.busy ? \"true\" : undefined}\n data-body-inset={props.bodyInset === false ? \"false\" : undefined}\n data-chat-anchor={props.anchorId !== undefined ? String(props.anchorId) : undefined}\n style={style()}\n open={props.open ?? props.defaultOpen}\n onToggle={(event) => props.onOpenChange?.(event.currentTarget.open)}\n aria-busy={props.busy ? \"true\" : undefined}\n >\n <summary class=\"k2b-chat-activity__row\">\n <ActivityContent {...props} disclosure />\n </summary>\n <div class=\"k2b-chat-activity__body\">{props.children}</div>\n </details>\n </Show>\n );\n}\n\nexport function ChatContextUsage(props: ChatContextUsageProps): JSX.Element {\n const messages = useUiMessages();\n const formatNumber = (value: number) => (props.formatNumber ?? formatStableInteger)(value);\n const formattedUsageValue = (value: number | null): string => (value === null ? messages().unknown : formatNumber(value));\n const usage = () => normalizedUsage(props.usage);\n const loopUsage = () => normalizedUsage(props.loopUsage);\n const total = () => usage().total ?? 0;\n const windowSize = () => finiteNonNegative(props.contextWindow);\n const reported = () => usage().reported;\n const percent = () => (reported() && windowSize() > 0 ? Math.min(100, Math.round((total() / windowSize()) * 100)) : null);\n const remaining = () => (reported() && windowSize() > 0 ? Math.max(0, windowSize() - total()) : null);\n const accessibleLabel = () => {\n if (!reported()) {\n return windowSize() > 0\n ? messages().contextUsageUnavailableWithWindow({ window: formatNumber(windowSize()) })\n : messages().contextUsageUnavailable;\n }\n return percent() === null\n ? messages().tokensUsed({ total: formatNumber(total()) })\n : messages().tokensUsedPercent({ total: formatNumber(total()), percent: percent()! });\n };\n\n return (\n <Tooltip.Trigger\n placement=\"top\"\n content={\n <div class=\"k2b-chat-context__tooltip\">\n <strong>{messages().lastRequestContext}</strong>\n <Show when={percent() !== null}>\n <ProgressBar\n value={percent() ?? 0}\n size=\"xs\"\n tone={(percent() ?? 0) >= 85 ? \"danger\" : \"info\"}\n label={messages().contextWindowUsed}\n />\n </Show>\n <dl>\n <Show when={props.modelLabel}>\n {(model) => (\n <div>\n <dt>{messages().model}</dt>\n <dd>{model()}</dd>\n </div>\n )}\n </Show>\n <div>\n <dt>{messages().input}</dt>\n <dd>{formattedUsageValue(usage().input)}</dd>\n </div>\n <div>\n <dt>{messages().output}</dt>\n <dd>{formattedUsageValue(usage().output)}</dd>\n </div>\n <Show when={loopUsage().reported}>\n <div>\n <dt>{messages().loopTotal}</dt>\n <dd>{formattedUsageValue(loopUsage().total)}</dd>\n </div>\n </Show>\n <div>\n <dt>{messages().window}</dt>\n <dd>{windowSize() > 0 ? formatNumber(windowSize()) : messages().notConfigured}</dd>\n </div>\n <Show when={remaining() !== null}>\n <div>\n <dt>{messages().remaining}</dt>\n <dd>{remaining() === null ? messages().unknown : formatNumber(remaining()!)}</dd>\n </div>\n </Show>\n </dl>\n </div>\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 </Tooltip.Trigger>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAASA,YAAY,EAAEC,GAAG,EAAYC,SAAS,EAAEC,IAAI,QAAQ,UAAU;AACvE,SAASC,QAAQ,QAA2B,qBAAqB;AACjE,SAASC,OAAO,QAAQ,qBAAqB;AAC7C,SAA0BC,aAAa,QAAQ,kBAAkB;AACjE,SAASC,WAAW,QAAQ,yBAAyB;AACrD,SAASC,iBAAiB,QAAQ,iBAAiB;AAgDnD,MAAMC,SAAS,GAAGA,CAACC,IAAc,EAAEC,QAAoB,KAAa;EAClE,IAAID,IAAI,KAAK,WAAW,EAAE,OAAOC,QAAQ,CAACC,SAAS;EACnD,IAAIF,IAAI,KAAK,MAAM,EAAE,OAAOC,QAAQ,CAACE,IAAI;EACzC,IAAIH,IAAI,KAAK,MAAM,EAAE,OAAOC,QAAQ,CAACG,IAAI;EACzC,OAAOH,QAAQ,CAACI,MAAM;AACxB,CAAC;AAED,MAAMC,WAAW,GAAGA,CAACC,MAAqC,EAAEN,QAAoB,KAAoB;EAClG,IAAIM,MAAM,KAAK,SAAS,EAAE,OAAON,QAAQ,CAACO,OAAO;EACjD,IAAID,MAAM,KAAK,WAAW,EAAE,OAAON,QAAQ,CAACQ,UAAU;EACtD,IAAIF,MAAM,KAAK,OAAO,EAAE,OAAON,QAAQ,CAACS,MAAM;EAC9C,OAAO,IAAI;AACb,CAAC;AAED,MAAMC,UAAU,GAAIJ,MAAqC,IAAa;EACpE,IAAIA,MAAM,KAAK,SAAS,EAAE,OAAO,aAAa;EAC9C,OAAO,oBAAoB;AAC7B,CAAC;AAED,MAAMK,gBAAgB,GAAGA,CAAA,KAAAC,gBAAA,CAAAC,MAAA,CAMxB;AAED,MAAMC,cAAc,GAAIC,UAA0B,IAChDA,UAAU,CAACC,IAAI,KAAKD,UAAU,CAACE,IAAI,KAAK,OAAO,GAAG,aAAa,GAAGF,UAAU,CAACE,IAAI,KAAK,UAAU,GAAG,YAAY,GAAG,YAAY,CAAC;AAEjI,MAAMC,iBAAiB,GAAIC,KAAyB,IAClD,OAAOA,KAAK,KAAK,QAAQ,IAAIC,MAAM,CAACC,QAAQ,CAACF,KAAK,CAAC,GAAGG,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEJ,KAAK,CAAC,GAAG,CAAC;AAE9E,MAAMK,gBAAgB,GAAIL,KAAyB,IACjD,OAAOA,KAAK,KAAK,QAAQ,IAAIC,MAAM,CAACC,QAAQ,CAACF,KAAK,CAAC,IAAIA,KAAK,IAAI,CAAC,GAAGA,KAAK,GAAG,IAAI;AAElF,MAAMM,eAAe,GAAIC,KAAoC,IAAK;EAChE,MAAMC,KAAK,GAAGH,gBAAgB,CAACE,KAAK,EAAEC,KAAK,CAAC;EAC5C,MAAMC,MAAM,GAAGJ,gBAAgB,CAACE,KAAK,EAAEE,MAAM,CAAC;EAC9C,MAAMC,aAAa,GAAGL,gBAAgB,CAACE,KAAK,EAAEI,KAAK,CAAC;EACpD,MAAMA,KAAK,GAAGD,aAAa,KAAKF,KAAK,KAAK,IAAI,IAAIC,MAAM,KAAK,IAAI,GAAG,CAACD,KAAK,IAAI,CAAC,KAAKC,MAAM,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;EACxG,OAAO;IAAED,KAAK;IAAEC,MAAM;IAAEE,KAAK;IAAEC,QAAQ,EAAED,KAAK,KAAK;EAAK,CAAC;AAC3D,CAAC;AAED,MAAME,mBAAmB,GAAIb,KAAa,IAAa;EACrD,MAAMc,MAAM,GAAGC,MAAM,CAACZ,IAAI,CAACa,KAAK,CAACjB,iBAAiB,CAACC,KAAK,CAAC,CAAC,CAAC;EAC3D,OAAOc,MAAM,CAACG,OAAO,CAAC,uBAAuB,EAAE,GAAG,CAAC;AACrD,CAAC;AAED,OAAO,MAAMC,gBAAgB,GAAIC,MAAc,IAAa;EAC1D,MAAMnB,KAAK,GAAGD,iBAAiB,CAACoB,MAAM,CAAC;EACvC,IAAInB,KAAK,IAAI,SAAS,EAAE,OAAO,GAAG,CAACA,KAAK,GAAG,SAAS,EAAEoB,OAAO,CAAC,CAAC,CAAC,GAAG;EACnE,IAAIpB,KAAK,IAAI,KAAK,EAAE,OAAO,GAAG,CAACA,KAAK,GAAG,KAAK,EAAEoB,OAAO,CAAC,CAAC,CAAC,GAAG;EAC3D,OAAOL,MAAM,CAACZ,IAAI,CAACa,KAAK,CAAChB,KAAK,CAAC,CAAC;AAClC,CAAC;AAED,MAAMqB,QAAQ,GAAIrB,KAAgC,IAAoB;EACpE,IAAI,CAACA,KAAK,EAAE,OAAO,IAAI;EACvB,MAAMsB,IAAI,GAAGtB,KAAK,YAAYuB,IAAI,GAAGvB,KAAK,GAAG,IAAIuB,IAAI,CAACvB,KAAK,CAAC;EAC5D,OAAOC,MAAM,CAACC,QAAQ,CAACoB,IAAI,CAACE,OAAO,CAAC,CAAC,CAAC,GAAGF,IAAI,CAACG,WAAW,CAAC,CAAC,GAAG,IAAI;AACpE,CAAC;AAED,OAAO,SAASC,WAAWA,CAACC,KAAuB,EAAe;EAChE,MAAM9C,QAAQ,GAAGL,aAAa,CAAC,CAAC;EAChC,MAAM,CAACoD,YAAY,EAAEC,eAAe,CAAC,GAAG3D,YAAY,CAAgB,IAAI,CAAC;EACzE,MAAM,CAAC4D,iBAAiB,EAAEC,oBAAoB,CAAC,GAAG7D,YAAY,CAAgB,IAAI,CAAC;EACnF,IAAI8D,cAAyD;EAC7D,MAAM7C,MAAM,GAAGA,CAAA,KAAMD,WAAW,CAACyC,KAAK,CAACxC,MAAM,EAAEN,QAAQ,CAAC,CAAC,CAAC;EAC1D,MAAMoD,SAAS,GAAGA,CAAA,KAAMZ,QAAQ,CAACM,KAAK,CAACO,SAAS,CAAC;EACjD;EACA;EACA;EACA,MAAMC,IAAI,GAAGA,CAAA,KAAMR,KAAK,CAACS,SAAS,IAAI,IAAI;EAC1C,MAAMC,OAAO,GAAGA,CAAA,KAAMV,KAAK,CAACU,OAAO,IAAI,EAAE;EACzC,MAAMC,aAAa,GAAGA,CAAA,KACpBX,KAAK,CAACW,aAAa,KAAK,MAAM,IAAI,CAACX,KAAK,CAACW,aAAa,GAAIX,KAAK,CAAC/C,IAAI,KAAK,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAI+C,KAAK,CAACW,aAAa;EAC5H,MAAMC,OAAO,GAAGA,CAAA,KAAMZ,KAAK,CAACxC,MAAM,KAAK,WAAW,IAAIA,MAAM,CAAC,CAAC,KAAK,IAAI,IAAIqD,OAAO,CAACL,IAAI,CAAC,CAAC,CAAC,IAAIE,OAAO,CAAC,CAAC,CAACI,MAAM,GAAG,CAAC;EAElH,MAAMC,SAAS,GAAG,MAAOC,MAAkB,IAAK;IAC9C,IAAIA,MAAM,CAACC,QAAQ,IAAIhB,YAAY,CAAC,CAAC,EAAE;IACvCC,eAAe,CAACc,MAAM,CAACE,EAAE,CAAC;IAC1B,IAAI;MACF,MAAMnE,iBAAiB,CAACiE,MAAM,CAAC;MAC/BZ,oBAAoB,CAACY,MAAM,CAACE,EAAE,CAAC;MAC/B,IAAIb,cAAc,EAAEc,YAAY,CAACd,cAAc,CAAC;MAChDA,cAAc,GAAGe,UAAU,CAAC,MAAMhB,oBAAoB,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;IACrE,CAAC,CAAC,OAAOiB,KAAK,EAAE;MACdrB,KAAK,CAACsB,aAAa,GAAGD,KAAK,CAAC;IAC9B,CAAC,SAAS;MACRnB,eAAe,CAAC,IAAI,CAAC;IACvB;EACF,CAAC;EAED,MAAMqB,UAAU,GAAIP,MAAkB,IACpCf,YAAY,CAAC,CAAC,KAAKe,MAAM,CAACE,EAAE,GACxB,yBAAyB,GACzBf,iBAAiB,CAAC,CAAC,KAAKa,MAAM,CAACE,EAAE,GAC/B,aAAa,GACZF,MAAM,CAAC9C,IAAI,IAAI,YAAa;EAErCzB,SAAS,CAAC,MAAM;IACd,IAAI4D,cAAc,EAAEc,YAAY,CAACd,cAAc,CAAC;EAClD,CAAC,CAAC;EAEF,MAAMmB,SAAS,GAAGA,CAAA,KAChBd,OAAO,CAAC,CAAC,CAACe,GAAG,CAAET,MAAM,KAAM;IACzB9C,IAAI,EAAEqD,UAAU,CAACP,MAAM,CAAC;IACxBU,KAAK,EAAEV,MAAM,CAACU,KAAK;IACnBC,OAAO,EAAEX,MAAM,CAACW,OAAO;IACvBV,QAAQ,EAAED,MAAM,CAACC,QAAQ,IAAIJ,OAAO,CAACZ,YAAY,CAAC,CAAC,CAAC;IACpDe,MAAM,EAAEA,CAAA,KAAM,KAAKD,SAAS,CAACC,MAAM;EACrC,CAAC,CAAC,CAAC;EAEL;IAAA,IAAAY,KAAA,GAAA9D,gBAAA,CAAA+D,OAAA;MAAAC,KAAA,GAAAF,KAAA,CAAAG,UAAA;MAAAC,KAAA,GAAAF,KAAA,CAAAC,UAAA;MAAA,CAAAE,KAAA,EAAAC,IAAA,IAAAC,eAAA,CAAAH,KAAA,CAAAI,WAAA;MAAAC,KAAA,GAAAJ,KAAA,CAAAG,WAAA;MAAAE,MAAA,GAAAR,KAAA,CAAAM,WAAA;MAAA,CAAAG,MAAA,EAAAC,KAAA,IAAAL,eAAA,CAAAG,MAAA,CAAAF,WAAA;MAAAK,MAAA,GAAAF,MAAA,CAAAH,WAAA;MAAA,CAAAM,MAAA,EAAAC,KAAA,IAAAR,eAAA,CAAAM,MAAA,CAAAL,WAAA;MAAAQ,MAAA,GAAAF,MAAA,CAAAN,WAAA;MAAA,CAAAS,MAAA,EAAAC,KAAA,IAAAX,eAAA,CAAAS,MAAA,CAAAR,WAAA;IAAAW,QAAA,CAAAjB,KAAA,QAQ+B9B,KAAK,CAAC0B,KAAK,IAAI1E,SAAS,CAACgD,KAAK,CAAC/C,IAAI,EAAEC,QAAQ,CAAC,CAAC,CAAC,EAAA+E,KAAA,EAAAC,IAAA;IAAAa,QAAA,CAAAnB,KAAA,EAAAoB,iBAAA,CAC1EtG,IAAI;MAAA,IAACuG,IAAIA,CAAA;QAAA,OAAE,CAACjD,KAAK,CAACkD,WAAW,EAAEpC,MAAM,IAAI,CAAC,IAAI,CAAC;MAAA;MAAA,IAAAqC,SAAA;QAAA,IAAAC,KAAA,GAAAtF,gBAAA,CAAAuF,OAAA;QAAAN,QAAA,CAAAK,KAAA,EAAAJ,iBAAA,CAE3CxG,GAAG;UAAA,IAAC8G,IAAIA,CAAA;YAAA,OAAEtD,KAAK,CAACkD,WAAW;UAAA;UAAAC,QAAA,EACxBlF,UAAU,IAAK;YACf,MAAMsF,OAAO,GAAGA,CAAA,MAAAP,iBAAA,CAEXtG,IAAI;cAAA,IACHuG,IAAIA,CAAA;gBAAA,OAAEO,MAAA,OAAAvF,UAAU,CAACE,IAAI,KAAK,OAAO,OAAIF,UAAU,CAACwF,UAAU;cAAA;cAAA,IAC1DC,QAAQA,CAAA;gBAAA;kBAAA,IAAAC,MAAA,GAAA7F,gBAAA,CAAA8F,OAAA;kBAAAC,QAAA,OAAAC,WAAA,CAAAH,MAAA,EAAY3F,cAAc,CAACC,UAAU,CAAC;kBAAA,OAAA0F,MAAA;gBAAA;cAAA;cAAA,IAAAR,SAAA;gBAAA,IAAAY,MAAA,GAAAjG,gBAAA,CAAAkG,OAAA;gBAAAH,QAAA,CAAAI,GAAA;kBAAA,IAAAC,IAAA,GAEpCjG,UAAU,CAACwF,UAAU;oBAAAU,IAAA,GAAOlG,UAAU,CAACmG,GAAG,IAAInG,UAAU,CAACoG,IAAI;kBAAAH,IAAA,KAAAD,GAAA,CAAAK,CAAA,IAAAC,cAAA,CAAAR,MAAA,SAAAE,GAAA,CAAAK,CAAA,GAAAJ,IAAA;kBAAAC,IAAA,KAAAF,GAAA,CAAAO,CAAA,IAAAD,cAAA,CAAAR,MAAA,SAAAE,GAAA,CAAAO,CAAA,GAAAL,IAAA;kBAAA,OAAAF,GAAA;gBAAA;kBAAAK,CAAA,EAAAG,SAAA;kBAAAD,CAAA,EAAAC;gBAAA;gBAAA,OAAAV,MAAA;cAAA;YAAA,IAAAf,iBAAA,CAExEtG,IAAI;cAAA,IAACuG,IAAIA,CAAA;gBAAA,OAAEhF,UAAU,CAACE,IAAI,KAAK,OAAO;cAAA;cAAA,IAAAgF,SAAA;gBAAA,IAAAuB,MAAA,GAAA5G,gBAAA,CAAA6G,OAAA;gBAAA5B,QAAA,CAAA2B,MAAA,QAC9BzG,UAAU,CAACoG,IAAI;gBAAA,OAAAK,MAAA;cAAA;YAAA,GAG3B;YACD,OAAA1B,iBAAA,CACGtG,IAAI;cAAA,IACHuG,IAAIA,CAAA;gBAAA,OAAEhF,UAAU,CAAC2G,IAAI;cAAA;cAAA,IACrBlB,QAAQA,CAAA;gBAAA;kBAAA,IAAAmB,MAAA,GAAA/G,gBAAA,CAAAgH,QAAA;kBAAA/B,QAAA,CAAA8B,MAAA,EAEHtB,OAAO;kBAAAM,QAAA,OAAAU,cAAA,CAAAM,MAAA,WADuD5G,UAAU,CAACoG,IAAI;kBAAA,OAAAQ,MAAA;gBAAA;cAAA;cAAA1B,QAAA,EAKhFyB,IAAI;gBAAA,IAAAG,MAAA,GAAAjH,gBAAA,CAAAkH,QAAA;gBAAAjC,QAAA,CAAAgC,MAAA,EAUDxB,OAAO;gBAAAM,QAAA,CAAAI,GAAA;kBAAA,IAAAgB,IAAA,GANDhH,UAAU,CAACoG,IAAI;oBAAAa,IAAA,GAChBN,IAAI,CAAC,CAAC;oBAAAO,IAAA,GAGAjI,QAAQ,CAAC,CAAC,CAACkI,YAAY,CAAC;sBAAEf,IAAI,EAAEpG,UAAU,CAACoG;oBAAK,CAAC,CAAC;kBAAAY,IAAA,KAAAhB,GAAA,CAAAK,CAAA,IAAAC,cAAA,CAAAQ,MAAA,WAAAd,GAAA,CAAAK,CAAA,GAAAW,IAAA;kBAAAC,IAAA,KAAAjB,GAAA,CAAAO,CAAA,IAAAD,cAAA,CAAAQ,MAAA,UAAAd,GAAA,CAAAO,CAAA,GAAAU,IAAA;kBAAAC,IAAA,KAAAlB,GAAA,CAAAoB,CAAA,IAAAd,cAAA,CAAAQ,MAAA,gBAAAd,GAAA,CAAAoB,CAAA,GAAAF,IAAA;kBAAA,OAAAlB,GAAA;gBAAA;kBAAAK,CAAA,EAAAG,SAAA;kBAAAD,CAAA,EAAAC,SAAA;kBAAAY,CAAA,EAAAZ;gBAAA;gBAAA,OAAAM,MAAA;cAAA;YAIjE;UAGP;QAAC;QAAAlB,QAAA,OAAAU,cAAA,CAAAnB,KAAA,gBAxC8DlG,QAAQ,CAAC,CAAC,CAACgG,WAAW;QAAA,OAAAE,KAAA;MAAA;IAAA,IAAAb,MAAA,EAAAC,KAAA;IAAAO,QAAA,CAAAnB,KAAA,EAAAoB,iBAAA,CA6C1FtG,IAAI;MAAA,IAACuG,IAAIA,CAAA;QAAA,OAAEO,MAAA,UAAAxD,KAAK,CAACmD,QAAQ,KAAKsB,SAAS,IAAIzE,KAAK,CAACmD,QAAQ,KAAK,IAAI,QAAInD,KAAK,CAACmD,QAAQ,KAAK,EAAE;MAAA;MAAA,IAAAA,SAAA;QAAA,IAAAmC,KAAA,GAAAxH,gBAAA,CAAAyH,OAAA;UAAAC,KAAA,GAAAF,KAAA,CAAAvD,UAAA;QAAAgB,QAAA,CAAAyC,KAAA,QAEhDxF,KAAK,CAACmD,QAAQ;QAAA,OAAAmC,KAAA;MAAA;IAAA,IAAA5C,MAAA,EAAAC,KAAA;IAAAI,QAAA,CAAAnB,KAAA,EAAAoB,iBAAA,CAIzDtG,IAAI;MAAA,IAACuG,IAAIA,CAAA;QAAA,OAAErC,OAAO,CAAC,CAAC;MAAA;MAAA,IAAAuC,SAAA;QAAA,IAAAsC,KAAA,GAAA3H,gBAAA,CAAA4H,OAAA;UAAAC,MAAA,GAAAF,KAAA,CAAA1D,UAAA;UAAA,CAAA6D,MAAA,EAAAC,KAAA,IAAA1D,eAAA,CAAAwD,MAAA,CAAAvD,WAAA;UAAA0D,MAAA,GAAAF,MAAA,CAAAxD,WAAA;UAAA,CAAA2D,MAAA,EAAAC,KAAA,IAAA7D,eAAA,CAAA2D,MAAA,CAAA1D,WAAA;UAAA6D,MAAA,GAAAF,MAAA,CAAA3D,WAAA;UAAA,CAAA8D,MAAA,EAAAC,KAAA,IAAAhE,eAAA,CAAA8D,MAAA,CAAA7D,WAAA;UAAAgE,MAAA,GAAAF,MAAA,CAAA9D,WAAA;UAAA,CAAAiE,MAAA,EAAAC,KAAA,IAAAnE,eAAA,CAAAiE,MAAA,CAAAhE,WAAA;QAAAW,QAAA,CAAA0C,KAAA,EAAAzC,iBAAA,CAEhBtG,IAAI;UAAA,IACHuG,IAAIA,CAAA;YAAA,OAAEjD,KAAK,CAACxC,MAAM,KAAK,WAAW;UAAA;UAAA,IAClCkG,QAAQA,CAAA;YAAA,OAAAV,iBAAA,CACLtG,IAAI;cAAA,IAACuG,IAAIA,CAAA;gBAAA,OAAEzF,MAAM,CAAC,CAAC;cAAA;cAAA2F,QAAA,EAChBzB,KAAK;gBAAA,IAAA6E,MAAA,GAAAzI,gBAAA,CAAA0I,QAAA;kBAAAC,MAAA,GAAAF,MAAA,CAAAxE,UAAA;kBAAA2E,MAAA,GAAAD,MAAA,CAAArE,WAAA;kBAAA,CAAAuE,MAAA,EAAAC,KAAA,IAAAzE,eAAA,CAAAuE,MAAA,CAAAtE,WAAA;gBAAAW,QAAA,CAAAwD,MAAA,EAGF7E,KAAK,EAAAiF,MAAA,EAAAC,KAAA;gBAAA/C,QAAA,CAAAI,GAAA;kBAAA,IAAA4C,IAAA,GAFqC7G,KAAK,CAACxC,MAAM,KAAK,OAAO,GAAG,OAAO,GAAG,QAAQ;oBAAAsJ,KAAA,GAC9ElJ,UAAU,CAACoC,KAAK,CAACxC,MAAM,CAAC;kBAAAqJ,IAAA,KAAA5C,GAAA,CAAAK,CAAA,IAAAC,cAAA,CAAAgC,MAAA,UAAAtC,GAAA,CAAAK,CAAA,GAAAuC,IAAA;kBAAAC,KAAA,KAAA7C,GAAA,CAAAO,CAAA,IAAAV,WAAA,CAAA2C,MAAA,EAAAxC,GAAA,CAAAO,CAAA,GAAAsC,KAAA;kBAAA,OAAA7C,GAAA;gBAAA;kBAAAK,CAAA,EAAAG,SAAA;kBAAAD,CAAA,EAAAC;gBAAA;gBAAA,OAAA8B,MAAA;cAAA;YAGrC;UAAA;UAAA,IAAApD,SAAA;YAAA,IAAA4D,KAAA,GAAAjJ,gBAAA,CAAAkJ,OAAA;YAAAjE,QAAA,CAAAgE,KAAA,EAAA/D,iBAAA,CAKFnF,gBAAgB;YAAAgG,QAAA,OAAAU,cAAA,CAAAwC,KAAA,gBADkF7J,QAAQ,CAAC,CAAC,CAACQ,UAAU;YAAA,OAAAqJ,KAAA;UAAA;QAAA,IAAAnB,MAAA,EAAAC,KAAA;QAAA9C,QAAA,CAAA0C,KAAA,EAAAzC,iBAAA,CAI3HtG,IAAI;UAAA,IAACuG,IAAIA,CAAA;YAAA,OAAEzC,IAAI,CAAC,CAAC;UAAA;UAAA2C,QAAA,EAAIzB,KAAK;YAAA,IAAAuF,MAAA,GAAAnJ,gBAAA,CAAAoJ,QAAA;YAAAnE,QAAA,CAAAkE,MAAA,EAAgDvF,KAAK;YAAAmC,QAAA,OAAAU,cAAA,CAAA0C,MAAA,cAAhC3G,SAAS,CAAC,CAAC,IAAImE,SAAS;YAAA,OAAAwC,MAAA;UAAA;QAAkB,IAAAlB,MAAA,EAAAC,KAAA;QAAAjD,QAAA,CAAA0C,KAAA,EAAAzC,iBAAA,CACzFtG,IAAI;UAAA,IAACuG,IAAIA,CAAA;YAAA,OAAEO,MAAA,OAAA9C,OAAO,CAAC,CAAC,CAACI,MAAM,GAAG,CAAC,OAAIH,aAAa,CAAC,CAAC,KAAK,QAAQ;UAAA;UAAA,IAAAwC,SAAA;YAAA,IAAAgE,MAAA,GAAArJ,gBAAA,CAAAsJ,OAAA;YAAArE,QAAA,CAAAoE,MAAA,EAAAnE,iBAAA,CAE3DxG,GAAG;cAAA,IAAC8G,IAAIA,CAAA;gBAAA,OAAE5C,OAAO,CAAC,CAAC;cAAA;cAAAyC,QAAA,EAChBnC,MAAM;gBAAA,IAAAqG,MAAA,GAAAvJ,gBAAA,CAAAwJ,QAAA;kBAAAC,MAAA,GAAAF,MAAA,CAAAtF,UAAA;gBAAAsF,MAAA,CAAAG,OAAA,GAQK,MAAM,KAAKzG,SAAS,CAACC,MAAM,CAAC;gBAAA6C,QAAA,CAAAI,GAAA;kBAAA,IAAAwD,KAAA,GALzBzG,MAAM,CAACU,KAAK;oBAAAgG,KAAA,GACV1G,MAAM,CAAC2G,OAAO;oBAAAC,KAAA,GACrB5G,MAAM,CAACU,KAAK;oBAAAmG,KAAA,GACN7G,MAAM,CAACW,OAAO,KAAK,QAAQ,GAAG,MAAM,GAAG8C,SAAS;oBAAAqD,KAAA,GACnD9G,MAAM,CAACC,QAAQ,IAAIJ,OAAO,CAACZ,YAAY,CAAC,CAAC,CAAC;oBAAA8H,KAAA,GAG1CxG,UAAU,CAACP,MAAM,CAAC;kBAAAyG,KAAA,KAAAxD,GAAA,CAAAK,CAAA,IAAAC,cAAA,CAAA8C,MAAA,gBAAApD,GAAA,CAAAK,CAAA,GAAAmD,KAAA;kBAAAC,KAAA,KAAAzD,GAAA,CAAAO,CAAA,IAAAD,cAAA,CAAA8C,MAAA,kBAAApD,GAAA,CAAAO,CAAA,GAAAkD,KAAA;kBAAAE,KAAA,KAAA3D,GAAA,CAAAoB,CAAA,IAAAd,cAAA,CAAA8C,MAAA,WAAApD,GAAA,CAAAoB,CAAA,GAAAuC,KAAA;kBAAAC,KAAA,KAAA5D,GAAA,CAAA+D,CAAA,IAAAzD,cAAA,CAAA8C,MAAA,iBAAApD,GAAA,CAAA+D,CAAA,GAAAH,KAAA;kBAAAC,KAAA,KAAA7D,GAAA,CAAAgE,CAAA,IAAAC,aAAA,CAAAb,MAAA,cAAApD,GAAA,CAAAgE,CAAA,GAAAH,KAAA;kBAAAC,KAAA,KAAA9D,GAAA,CAAAkE,CAAA,IAAArE,WAAA,CAAAyD,MAAA,EAAAtD,GAAA,CAAAkE,CAAA,GAAAJ,KAAA;kBAAA,OAAA9D,GAAA;gBAAA;kBAAAK,CAAA,EAAAG,SAAA;kBAAAD,CAAA,EAAAC,SAAA;kBAAAY,CAAA,EAAAZ,SAAA;kBAAAuD,CAAA,EAAAvD,SAAA;kBAAAwD,CAAA,EAAAxD,SAAA;kBAAA0D,CAAA,EAAA1D;gBAAA;gBAAA2D,oBAAA;gBAAA,OAAAf,MAAA;cAAA;YAE/B;YAAAxD,QAAA,OAAAU,cAAA,CAAA4C,MAAA,gBAd4DjK,QAAQ,CAAC,CAAC,CAACmL,cAAc;YAAA,OAAAlB,MAAA;UAAA;QAAA,IAAAjB,MAAA,EAAAC,KAAA;QAAApD,QAAA,CAAA0C,KAAA,EAAAzC,iBAAA,CAkB3FtG,IAAI;UAAA,IAACuG,IAAIA,CAAA;YAAA,OAAEO,MAAA,OAAA9C,OAAO,CAAC,CAAC,CAACI,MAAM,GAAG,CAAC,OAAIH,aAAa,CAAC,CAAC,KAAK,MAAM;UAAA;UAAA,IAAAwC,SAAA;YAAA,OAAAH,iBAAA,CAC3DrG,QAAQ,CAAC2L,IAAI;cAACC,QAAQ;cAAeC,KAAK;cAAA,IAAS9G,KAAKA,CAAA;gBAAA,OAAExE,QAAQ,CAAC,CAAC,CAACmL,cAAc;cAAA;cAAA,IAAEI,KAAKA,CAAA;gBAAA,OAAEjH,SAAS,CAAC,CAAC;cAAA;cAAA,IAAA2B,SAAA;gBAAA,OAAAH,iBAAA,CACrGrG,QAAQ,CAAC+L,OAAO;kBACfC,UAAU;kBAAA;kBAAA,IAEVjH,KAAKA,CAAA;oBAAA,OAAExE,QAAQ,CAAC,CAAC,CAACmL,cAAc;kBAAA;kBAAA,IAChCO,KAAKA,CAAA;oBAAA,OAAE1L,QAAQ,CAAC,CAAC,CAACmL,cAAc;kBAAA;kBAAA,IAAAlF,SAAA;oBAAA,OAAArF,gBAAA,CAAA+K,OAAA;kBAAA;gBAAA;cAAA;YAAA;UAAA;QAAA,IAAAxC,MAAA,EAAAC,KAAA;QAAA,OAAAb,KAAA;MAAA;IAAA,IAAA5C,MAAA,EAAAC,KAAA;IAAAe,QAAA,CAAAI,GAAA;MAAA,IAAA6E,GAAA,GAxGnC,oBAAoB9I,KAAK,CAAC+I,KAAK,IAAI,EAAE,EAAE;QAAAC,IAAA,GACnChJ,KAAK,CAAC/C,IAAI;QAAAgM,IAAA,GACRjJ,KAAK,CAACxC,MAAM,IAAI,UAAU;QAAA0L,IAAA,GACrBlJ,KAAK,CAACmJ,QAAQ,KAAK1E,SAAS,GAAGrF,MAAM,CAACY,KAAK,CAACmJ,QAAQ,CAAC,GAAG1E,SAAS;QAAA2E,IAAA,GACxEpJ,KAAK,CAACxC,MAAM,KAAK,SAAS,IAAIwC,KAAK,CAACxC,MAAM,KAAK,WAAW,GAAG,MAAM,GAAGiH,SAAS;MAAAqE,GAAA,KAAA7E,GAAA,CAAAK,CAAA,IAAAR,WAAA,CAAAlC,KAAA,EAAAqC,GAAA,CAAAK,CAAA,GAAAwE,GAAA;MAAAE,IAAA,KAAA/E,GAAA,CAAAO,CAAA,IAAAD,cAAA,CAAA3C,KAAA,eAAAqC,GAAA,CAAAO,CAAA,GAAAwE,IAAA;MAAAC,IAAA,KAAAhF,GAAA,CAAAoB,CAAA,IAAAd,cAAA,CAAA3C,KAAA,iBAAAqC,GAAA,CAAAoB,CAAA,GAAA4D,IAAA;MAAAC,IAAA,KAAAjF,GAAA,CAAA+D,CAAA,IAAAzD,cAAA,CAAA3C,KAAA,sBAAAqC,GAAA,CAAA+D,CAAA,GAAAkB,IAAA;MAAAE,IAAA,KAAAnF,GAAA,CAAAgE,CAAA,IAAA1D,cAAA,CAAA3C,KAAA,eAAAqC,GAAA,CAAAgE,CAAA,GAAAmB,IAAA;MAAA,OAAAnF,GAAA;IAAA;MAAAK,CAAA,EAAAG,SAAA;MAAAD,CAAA,EAAAC,SAAA;MAAAY,CAAA,EAAAZ,SAAA;MAAAuD,CAAA,EAAAvD,SAAA;MAAAwD,CAAA,EAAAxD;IAAA;IAAA,OAAA7C,KAAA;EAAA;AA8GhG;AAEA,MAAMyH,eAAe,GAAIrJ,KAAmD;EAAA,IAAAsJ,MAAA,GAAAxL,gBAAA,CAAAyL,QAAA;EAAAxG,QAAA,CAAAuG,MAAA,EAAAtG,iBAAA,CAGrEtG,IAAI;IAAA,IAACuG,IAAIA,CAAA;MAAA,OAAEjD,KAAK,CAACwJ,OAAO;IAAA;IAAA,IAAE9F,QAAQA,CAAA;MAAA;QAAA,IAAA+F,MAAA,GAAA3L,gBAAA,CAAA4L,QAAA;QAAA7F,QAAA,OAAAC,WAAA,CAAA2F,MAAA,EAAYzJ,KAAK,CAAC9B,IAAI,IAAI,gBAAgB;QAAA,OAAAuL,MAAA;MAAA;IAAA;IAAA,IAAAtG,SAAA;MAAA,OAC1EnD,KAAK,CAACwJ,OAAO;IAAA;EAAA;EAAA,OAAAF,MAAA;AAAA;EAAA,IAAAK,MAAA,GAAA7L,gBAAA,CAAA8L,QAAA;IAAAC,MAAA,GAAAF,MAAA,CAAA5H,UAAA;IAAA+H,MAAA,GAAAD,MAAA,CAAAzH,WAAA;IAAA,CAAA2H,MAAA,EAAAC,KAAA,IAAA7H,eAAA,CAAA2H,MAAA,CAAA1H,WAAA;EAAAW,QAAA,CAAA8G,MAAA,QAIP7J,KAAK,CAAC0B,KAAK;EAAAqB,QAAA,CAAA4G,MAAA,EAAA3G,iBAAA,CACnBtG,IAAI;IAAA,IAACuG,IAAIA,CAAA;MAAA,OAAEjD,KAAK,CAACiK,WAAW;IAAA;IAAA9G,QAAA,EAAI8G,WAAW;MAAA,IAAAC,MAAA,GAAApM,gBAAA,CAAAqM,QAAA;MAAApH,QAAA,CAAAmH,MAAA,EAAaD,WAAW;MAAA,OAAAC,MAAA;IAAA;EAAW,IAAAH,MAAA,EAAAC,KAAA;EAAA,OAAAL,MAAA;AAAA,MAAA3G,iBAAA,CAEhFtG,IAAI;EAAA,IAACuG,IAAIA,CAAA;IAAA,OAAEjD,KAAK,CAACoK,QAAQ;EAAA;EAAA,IAAAjH,SAAA;IAAA,IAAAkH,MAAA,GAAAvM,gBAAA,CAAAwM,QAAA;IAAAvH,QAAA,CAAAsH,MAAA,QACmBrK,KAAK,CAACoK,QAAQ;IAAA,OAAAC,MAAA;EAAA;AAAA,IAAArH,iBAAA,CAE1DtG,IAAI;EAAA,IAACuG,IAAIA,CAAA;IAAA,OAAEjD,KAAK,CAACuK,UAAU;EAAA;EAAA,IAAApH,SAAA;IAAA,OAAArF,gBAAA,CAAA0M,QAAA;EAAA;AAAA,GAI/B;AAED,OAAO,SAASC,YAAYA,CAACzK,KAAwB,EAAe;EAClE,MAAM0K,IAAI,GAAGA,CAAA,KAAM1K,KAAK,CAAC0K,IAAI,IAAI,SAAS;EAC1C,MAAMC,KAAK,GAAGA,CAAA,KAAO3K,KAAK,CAAC4K,MAAM,GAAG;IAAE,4BAA4B,EAAE5K,KAAK,CAAC4K;EAAO,CAAC,GAAGnG,SAAU;EAC/F,OAAAzB,iBAAA,CACGtG,IAAI;IAAA,IACHuG,IAAIA,CAAA;MAAA,OAAEjD,KAAK,CAACmD,QAAQ;IAAA;IAAA,IACpBO,QAAQA,CAAA;MAAA;QAAA,IAAAmH,MAAA,GAAA/M,gBAAA,CAAAgN,QAAA;UAAAC,MAAA,GAAAF,MAAA,CAAA9I,UAAA;QAAAgB,QAAA,CAAAgI,MAAA,EAAA/H,iBAAA,CAWDqG,eAAe,EAAKrJ,KAAK;QAAA6D,QAAA,CAAAI,GAAA;UAAA,IAAA+G,KAAA,GATrB,qBAAqBhL,KAAK,CAAC+I,KAAK,IAAI,EAAE,EAAE;YAAAkC,KAAA,GACpCP,IAAI,CAAC,CAAC;YAAAQ,KAAA,GACJlL,KAAK,CAAC4K,MAAM,GAAG,MAAM,GAAGnG,SAAS;YAAA0G,KAAA,GACnCnL,KAAK,CAACoL,IAAI,GAAG,MAAM,GAAG3G,SAAS;YAAA4G,KAAA,GACxBrL,KAAK,CAACmJ,QAAQ,KAAK1E,SAAS,GAAGrF,MAAM,CAACY,KAAK,CAACmJ,QAAQ,CAAC,GAAG1E,SAAS;YAAA6G,KAAA,GAC5EX,KAAK,CAAC,CAAC;YAAAY,KAAA,GACHvL,KAAK,CAACoL,IAAI,GAAG,MAAM,GAAG3G,SAAS;UAAAuG,KAAA,KAAA/G,GAAA,CAAAK,CAAA,IAAAR,WAAA,CAAA+G,MAAA,EAAA5G,GAAA,CAAAK,CAAA,GAAA0G,KAAA;UAAAC,KAAA,KAAAhH,GAAA,CAAAO,CAAA,IAAAD,cAAA,CAAAsG,MAAA,eAAA5G,GAAA,CAAAO,CAAA,GAAAyG,KAAA;UAAAC,KAAA,KAAAjH,GAAA,CAAAoB,CAAA,IAAAd,cAAA,CAAAsG,MAAA,iBAAA5G,GAAA,CAAAoB,CAAA,GAAA6F,KAAA;UAAAC,KAAA,KAAAlH,GAAA,CAAA+D,CAAA,IAAAzD,cAAA,CAAAsG,MAAA,eAAA5G,GAAA,CAAA+D,CAAA,GAAAmD,KAAA;UAAAE,KAAA,KAAApH,GAAA,CAAAgE,CAAA,IAAA1D,cAAA,CAAAsG,MAAA,sBAAA5G,GAAA,CAAAgE,CAAA,GAAAoD,KAAA;UAAApH,GAAA,CAAAkE,CAAA,GAAAqD,OAAA,CAAAX,MAAA,EAAAS,KAAA,EAAArH,GAAA,CAAAkE,CAAA;UAAAoD,KAAA,KAAAtH,GAAA,CAAAwH,CAAA,IAAAlH,cAAA,CAAAsG,MAAA,eAAA5G,GAAA,CAAAwH,CAAA,GAAAF,KAAA;UAAA,OAAAtH,GAAA;QAAA;UAAAK,CAAA,EAAAG,SAAA;UAAAD,CAAA,EAAAC,SAAA;UAAAY,CAAA,EAAAZ,SAAA;UAAAuD,CAAA,EAAAvD,SAAA;UAAAwD,CAAA,EAAAxD,SAAA;UAAA0D,CAAA,EAAA1D,SAAA;UAAAgH,CAAA,EAAAhH;QAAA;QAAA,OAAAoG,MAAA;MAAA;IAAA;IAAA,IAAA1H,SAAA;MAAA,IAAAuI,MAAA,GAAA5N,gBAAA,CAAA6N,QAAA;QAAAC,MAAA,GAAAF,MAAA,CAAA3J,UAAA;QAAA8J,MAAA,GAAAD,MAAA,CAAAxJ,WAAA;MAAAsJ,MAAA,CAAAI,gBAAA,WAiBjCC,KAAK,IAAK/L,KAAK,CAACgM,YAAY,GAAGD,KAAK,CAACE,aAAa,CAACC,IAAI,CAAC;MAAAnJ,QAAA,CAAA6I,MAAA,EAAA5I,iBAAA,CAIhEqG,eAAe,EAAA8C,YAAA,CAAKnM,KAAK;QAAEuK,UAAU;MAAA;MAAAxH,QAAA,CAAA8I,MAAA,QAEF7L,KAAK,CAACmD,QAAQ;MAAAU,QAAA,CAAAI,GAAA;QAAA,IAAAmI,KAAA,GAd7C,qBAAqBpM,KAAK,CAAC+I,KAAK,IAAI,EAAE,EAAE;UAAAsD,KAAA,GACpC3B,IAAI,CAAC,CAAC;UAAA4B,KAAA,GACJtM,KAAK,CAAC4K,MAAM,GAAG,MAAM,GAAGnG,SAAS;UAAA8H,KAAA,GACnCvM,KAAK,CAACoL,IAAI,GAAG,MAAM,GAAG3G,SAAS;UAAA+H,KAAA,GACzBxM,KAAK,CAACyM,SAAS,KAAK,KAAK,GAAG,OAAO,GAAGhI,SAAS;UAAAiI,KAAA,GAC9C1M,KAAK,CAACmJ,QAAQ,KAAK1E,SAAS,GAAGrF,MAAM,CAACY,KAAK,CAACmJ,QAAQ,CAAC,GAAG1E,SAAS;UAAAkI,KAAA,GAC5EhC,KAAK,CAAC,CAAC;UAAAiC,KAAA,GACR5M,KAAK,CAACkM,IAAI,IAAIlM,KAAK,CAAC6M,WAAW;UAAAC,KAAA,GAE1B9M,KAAK,CAACoL,IAAI,GAAG,MAAM,GAAG3G,SAAS;QAAA2H,KAAA,KAAAnI,GAAA,CAAAK,CAAA,IAAAR,WAAA,CAAA4H,MAAA,EAAAzH,GAAA,CAAAK,CAAA,GAAA8H,KAAA;QAAAC,KAAA,KAAApI,GAAA,CAAAO,CAAA,IAAAD,cAAA,CAAAmH,MAAA,eAAAzH,GAAA,CAAAO,CAAA,GAAA6H,KAAA;QAAAC,KAAA,KAAArI,GAAA,CAAAoB,CAAA,IAAAd,cAAA,CAAAmH,MAAA,iBAAAzH,GAAA,CAAAoB,CAAA,GAAAiH,KAAA;QAAAC,KAAA,KAAAtI,GAAA,CAAA+D,CAAA,IAAAzD,cAAA,CAAAmH,MAAA,eAAAzH,GAAA,CAAA+D,CAAA,GAAAuE,KAAA;QAAAC,KAAA,KAAAvI,GAAA,CAAAgE,CAAA,IAAA1D,cAAA,CAAAmH,MAAA,qBAAAzH,GAAA,CAAAgE,CAAA,GAAAuE,KAAA;QAAAE,KAAA,KAAAzI,GAAA,CAAAkE,CAAA,IAAA5D,cAAA,CAAAmH,MAAA,sBAAAzH,GAAA,CAAAkE,CAAA,GAAAuE,KAAA;QAAAzI,GAAA,CAAAwH,CAAA,GAAAD,OAAA,CAAAE,MAAA,EAAAiB,KAAA,EAAA1I,GAAA,CAAAwH,CAAA;QAAAmB,KAAA,KAAA3I,GAAA,CAAA8I,CAAA,IAAA7E,aAAA,CAAAwD,MAAA,UAAAzH,GAAA,CAAA8I,CAAA,GAAAH,KAAA;QAAAE,KAAA,KAAA7I,GAAA,CAAA+I,CAAA,IAAAzI,cAAA,CAAAmH,MAAA,eAAAzH,GAAA,CAAA+I,CAAA,GAAAF,KAAA;QAAA,OAAA7I,GAAA;MAAA;QAAAK,CAAA,EAAAG,SAAA;QAAAD,CAAA,EAAAC,SAAA;QAAAY,CAAA,EAAAZ,SAAA;QAAAuD,CAAA,EAAAvD,SAAA;QAAAwD,CAAA,EAAAxD,SAAA;QAAA0D,CAAA,EAAA1D,SAAA;QAAAgH,CAAA,EAAAhH,SAAA;QAAAsI,CAAA,EAAAtI,SAAA;QAAAuI,CAAA,EAAAvI;MAAA;MAAA,OAAAiH,MAAA;IAAA;EAAA;AASlD;AAEA,OAAO,SAASuB,gBAAgBA,CAACjN,KAA4B,EAAe;EAC1E,MAAM9C,QAAQ,GAAGL,aAAa,CAAC,CAAC;EAChC,MAAMqQ,YAAY,GAAI7O,KAAa,IAAK,CAAC2B,KAAK,CAACkN,YAAY,IAAIhO,mBAAmB,EAAEb,KAAK,CAAC;EAC1F,MAAM8O,mBAAmB,GAAI9O,KAAoB,IAAcA,KAAK,KAAK,IAAI,GAAGnB,QAAQ,CAAC,CAAC,CAACkQ,OAAO,GAAGF,YAAY,CAAC7O,KAAK,CAAE;EACzH,MAAMO,KAAK,GAAGA,CAAA,KAAMD,eAAe,CAACqB,KAAK,CAACpB,KAAK,CAAC;EAChD,MAAMyO,SAAS,GAAGA,CAAA,KAAM1O,eAAe,CAACqB,KAAK,CAACqN,SAAS,CAAC;EACxD,MAAMrO,KAAK,GAAGA,CAAA,KAAMJ,KAAK,CAAC,CAAC,CAACI,KAAK,IAAI,CAAC;EACtC,MAAMsO,UAAU,GAAGA,CAAA,KAAMlP,iBAAiB,CAAC4B,KAAK,CAACuN,aAAa,CAAC;EAC/D,MAAMtO,QAAQ,GAAGA,CAAA,KAAML,KAAK,CAAC,CAAC,CAACK,QAAQ;EACvC,MAAMuO,OAAO,GAAGA,CAAA,KAAOvO,QAAQ,CAAC,CAAC,IAAIqO,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG9O,IAAI,CAACiP,GAAG,CAAC,GAAG,EAAEjP,IAAI,CAACa,KAAK,CAAEL,KAAK,CAAC,CAAC,GAAGsO,UAAU,CAAC,CAAC,GAAI,GAAG,CAAC,CAAC,GAAG,IAAK;EACzH,MAAMI,SAAS,GAAGA,CAAA,KAAOzO,QAAQ,CAAC,CAAC,IAAIqO,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG9O,IAAI,CAACC,GAAG,CAAC,CAAC,EAAE6O,UAAU,CAAC,CAAC,GAAGtO,KAAK,CAAC,CAAC,CAAC,GAAG,IAAK;EACrG,MAAM2O,eAAe,GAAGA,CAAA,KAAM;IAC5B,IAAI,CAAC1O,QAAQ,CAAC,CAAC,EAAE;MACf,OAAOqO,UAAU,CAAC,CAAC,GAAG,CAAC,GACnBpQ,QAAQ,CAAC,CAAC,CAAC0Q,iCAAiC,CAAC;QAAEC,MAAM,EAAEX,YAAY,CAACI,UAAU,CAAC,CAAC;MAAE,CAAC,CAAC,GACpFpQ,QAAQ,CAAC,CAAC,CAAC4Q,uBAAuB;IACxC;IACA,OAAON,OAAO,CAAC,CAAC,KAAK,IAAI,GACrBtQ,QAAQ,CAAC,CAAC,CAAC6Q,UAAU,CAAC;MAAE/O,KAAK,EAAEkO,YAAY,CAAClO,KAAK,CAAC,CAAC;IAAE,CAAC,CAAC,GACvD9B,QAAQ,CAAC,CAAC,CAAC8Q,iBAAiB,CAAC;MAAEhP,KAAK,EAAEkO,YAAY,CAAClO,KAAK,CAAC,CAAC,CAAC;MAAEwO,OAAO,EAAEA,OAAO,CAAC;IAAG,CAAC,CAAC;EACzF,CAAC;EAED,OAAAxK,iBAAA,CACGpG,OAAO,CAAC8L,OAAO;IACduF,SAAS;IAAA,IACT1K,OAAOA,CAAA;MAAA;QAAA,IAAA2K,MAAA,GAAApQ,gBAAA,CAAAqQ,QAAA;UAAAC,MAAA,GAAAF,MAAA,CAAAnM,UAAA;UAAAsM,MAAA,GAAAD,MAAA,CAAAhM,WAAA;UAAA,CAAAkM,MAAA,EAAAC,MAAA,IAAApM,eAAA,CAAAkM,MAAA,CAAAjM,WAAA;UAAAoM,MAAA,GAAAF,MAAA,CAAAlM,WAAA;UAAAqM,MAAA,GAAAD,MAAA,CAAAzM,UAAA;UAAA,CAAA2M,MAAA,EAAAC,KAAA,IAAAxM,eAAA,CAAAsM,MAAA,CAAArM,WAAA;UAAAwM,MAAA,GAAAF,MAAA,CAAAtM,WAAA;UAAAyM,MAAA,GAAAD,MAAA,CAAA7M,UAAA;UAAA+M,MAAA,GAAAD,MAAA,CAAAzM,WAAA;UAAA2M,MAAA,GAAAH,MAAA,CAAAxM,WAAA;UAAA4M,MAAA,GAAAD,MAAA,CAAAhN,UAAA;UAAAkN,MAAA,GAAAD,MAAA,CAAA5M,WAAA;UAAA8M,MAAA,GAAAH,MAAA,CAAA3M,WAAA;UAAA,CAAA+M,MAAA,EAAAC,MAAA,IAAAjN,eAAA,CAAA+M,MAAA,CAAA9M,WAAA;UAAAiN,MAAA,GAAAF,MAAA,CAAA/M,WAAA;UAAAkN,MAAA,GAAAD,MAAA,CAAAtN,UAAA;UAAAwN,MAAA,GAAAD,MAAA,CAAAlN,WAAA;UAAAoN,MAAA,GAAAH,MAAA,CAAAjN,WAAA;UAAA,CAAAqN,MAAA,EAAAC,MAAA,IAAAvN,eAAA,CAAAqN,MAAA,CAAApN,WAAA;QAAAW,QAAA,CAAAqL,MAAA,QAEMlR,QAAQ,CAAC,CAAC,CAACyS,kBAAkB;QAAA5M,QAAA,CAAAmL,MAAA,EAAAlL,iBAAA,CACrCtG,IAAI;UAAA,IAACuG,IAAIA,CAAA;YAAA,OAAEuK,OAAO,CAAC,CAAC,KAAK,IAAI;UAAA;UAAA,IAAArK,SAAA;YAAA,OAAAH,iBAAA,CAC3BlG,WAAW;cAAA,IACVuB,KAAKA,CAAA;gBAAA,OAAEmP,OAAO,CAAC,CAAC,IAAI,CAAC;cAAA;cACrBoC,IAAI;cAAA,IACJlF,IAAIA,CAAA;gBAAA,OAAE,CAAC8C,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,QAAQ,GAAG,MAAM;cAAA;cAAA,IAChD9L,KAAKA,CAAA;gBAAA,OAAExE,QAAQ,CAAC,CAAC,CAAC2S,iBAAiB;cAAA;YAAA;UAAA;QAAA,IAAAvB,MAAA,EAAAC,MAAA;QAAAxL,QAAA,CAAAyL,MAAA,EAAAxL,iBAAA,CAIpCtG,IAAI;UAAA,IAACuG,IAAIA,CAAA;YAAA,OAAEjD,KAAK,CAAC8P,UAAU;UAAA;UAAA3M,QAAA,EACxB4M,KAAK;YAAA,IAAAC,MAAA,GAAAlS,gBAAA,CAAAmS,QAAA;cAAAC,MAAA,GAAAF,MAAA,CAAAjO,UAAA;cAAAoO,MAAA,GAAAD,MAAA,CAAA9N,WAAA;YAAAW,QAAA,CAAAmN,MAAA,QAEEhT,QAAQ,CAAC,CAAC,CAAC6S,KAAK;YAAAhN,QAAA,CAAAoN,MAAA,EAChBJ,KAAK;YAAA,OAAAC,MAAA;UAAA;QAEb,IAAAtB,MAAA,EAAAC,KAAA;QAAA5L,QAAA,CAAA8L,MAAA,QAGI3R,QAAQ,CAAC,CAAC,CAAC2B,KAAK;QAAAkE,QAAA,CAAA+L,MAAA,QAChB3B,mBAAmB,CAACvO,KAAK,CAAC,CAAC,CAACC,KAAK,CAAC;QAAAkE,QAAA,CAAAiM,MAAA,QAGlC9R,QAAQ,CAAC,CAAC,CAAC4B,MAAM;QAAAiE,QAAA,CAAAkM,MAAA,QACjB9B,mBAAmB,CAACvO,KAAK,CAAC,CAAC,CAACE,MAAM,CAAC;QAAAiE,QAAA,CAAAyL,MAAA,EAAAxL,iBAAA,CAEzCtG,IAAI;UAAA,IAACuG,IAAIA,CAAA;YAAA,OAAEoK,SAAS,CAAC,CAAC,CAACpO,QAAQ;UAAA;UAAA,IAAAkE,SAAA;YAAA,IAAAiN,MAAA,GAAAtS,gBAAA,CAAAmS,QAAA;cAAAI,MAAA,GAAAD,MAAA,CAAArO,UAAA;cAAAuO,MAAA,GAAAD,MAAA,CAAAjO,WAAA;YAAAW,QAAA,CAAAsN,MAAA,QAEvBnT,QAAQ,CAAC,CAAC,CAACqT,SAAS;YAAAxN,QAAA,CAAAuN,MAAA,QACpBnD,mBAAmB,CAACE,SAAS,CAAC,CAAC,CAACrO,KAAK,CAAC;YAAA,OAAAoR,MAAA;UAAA;QAAA,IAAAjB,MAAA,EAAAC,MAAA;QAAArM,QAAA,CAAAuM,MAAA,QAIxCpS,QAAQ,CAAC,CAAC,CAAC2Q,MAAM;QAAA9K,QAAA,CAAAwM,MAAA;UAAA,IAAAiB,IAAA,GAAAhN,MAAA,OACjB8J,UAAU,CAAC,CAAC,GAAG,CAAC;UAAA,aAAhBkD,IAAA,KAAmBtD,YAAY,CAACI,UAAU,CAAC,CAAC,CAAC,GAAGpQ,QAAQ,CAAC,CAAC,CAACuT,aAAa;QAAA;QAAA1N,QAAA,CAAAyL,MAAA,EAAAxL,iBAAA,CAE9EtG,IAAI;UAAA,IAACuG,IAAIA,CAAA;YAAA,OAAEyK,SAAS,CAAC,CAAC,KAAK,IAAI;UAAA;UAAA,IAAAvK,SAAA;YAAA,IAAAuN,MAAA,GAAA5S,gBAAA,CAAAmS,QAAA;cAAAU,MAAA,GAAAD,MAAA,CAAA3O,UAAA;cAAA6O,MAAA,GAAAD,MAAA,CAAAvO,WAAA;YAAAW,QAAA,CAAA4N,MAAA,QAEvBzT,QAAQ,CAAC,CAAC,CAACwQ,SAAS;YAAA3K,QAAA,CAAA6N,MAAA;cAAA,IAAAC,IAAA,GAAArN,MAAA,OACpBkK,SAAS,CAAC,CAAC,KAAK,IAAI;cAAA,aAApBmD,IAAA,KAAuB3T,QAAQ,CAAC,CAAC,CAACkQ,OAAO,GAAGF,YAAY,CAACQ,SAAS,CAAC,CAAE,CAAC;YAAA;YAAA,OAAAgD,MAAA;UAAA;QAAA,IAAAjB,MAAA,EAAAC,MAAA;QAAA,OAAAxB,MAAA;MAAA;IAAA;IAMrF4C,IAAI;IAAA,aAAA/H,CAAA;MAAA,OACG,oBAAoB/I,KAAK,CAAC+I,KAAK,IAAI,EAAE,EAAE;IAAA;IAAA,oBAAAgI,CAAA;MAAA,OAChC9R,QAAQ,CAAC,CAAC,IAAI,CAACuO,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,MAAM,GAAG/I,SAAS;IAAA;IAAA,kBAAAuM,CAAA;MAAA,OAC3DrD,eAAe,CAAC,CAAC;IAAA;IAAA,IAAAxK,SAAA;MAAA,QAAArF,gBAAA,CAAAmT,QAAA;QAAA,IAAAC,MAAA,GAAApT,gBAAA,CAAA6G,OAAA;QAAA5B,QAAA,CAAAmO,MAAA;UAAA,IAAAC,GAAA,GAAA3N,MAAA,OAGtBgK,OAAO,CAAC,CAAC,KAAK,IAAI;UAAA,aAAlB2D,GAAA,KAAqB,GAAG,GAAG,GAAG3D,OAAO,CAAC,CAAC,GAAG;QAAA;QAAA,OAAA0D,MAAA;MAAA;IAAA;EAAA;AAGvD;AAACE,gBAAA","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["createSignal","For","onCleanup","Show","Dropdown","Tooltip","useUiMessages","ProgressBar","executeChatAction","roleLabel","role","messages","assistant","user","tool","system","statusLabel","status","waiting","generating","failed","statusIcon","ChatProgressDots","_$getNextElement","_tmpl$","attachmentIcon","attachment","icon","kind","finiteNonNegative","value","Number","isFinite","Math","max","finiteUsageValue","normalizedUsage","usage","input","output","explicitTotal","total","reported","formatStableInteger","digits","String","round","replace","formatChatTokens","tokens","toFixed","dateTime","date","Date","getTime","toISOString","ChatMessage","props","busyActionId","setBusyActionId","completedActionId","setCompletedActionId","completedTimer","timestamp","createdAt","time","timeLabel","actions","actionDisplay","hasMeta","Boolean","length","runAction","action","disabled","id","clearTimeout","setTimeout","error","onActionError","actionIcon","menuItems","map","label","variant","_el$2","_tmpl$8","_el$3","firstChild","_el$5","_el$6","_co$","_$getNextMarker","nextSibling","_el$4","_el$20","_el$21","_co$6","_el$22","_el$23","_co$7","_el$24","_el$25","_co$8","_$insert","_$createComponent","when","attachments","children","_el$7","_tmpl$2","each","content","_$memo","previewUrl","fallback","_el$28","_tmpl$1","_$effect","_$className","_el$26","_tmpl$9","_p$","_v$6","_v$7","alt","name","e","_$setAttribute","t","undefined","_el$27","_tmpl$0","href","_el$29","_tmpl$10","_el$30","_tmpl$11","_v$8","_v$9","_v$0","openInNewTab","a","_el$8","_tmpl$3","_el$9","_el$0","_tmpl$7","_el$12","_el$13","_co$2","_el$14","_el$15","_co$3","_el$16","_el$17","_co$4","_el$18","_el$19","_co$5","_el$31","_tmpl$12","_el$32","_el$33","_el$34","_co$9","_v$1","_v$10","_el$1","_tmpl$4","_el$35","_tmpl$13","_el$10","_tmpl$5","_el$36","_tmpl$14","_el$37","$$click","_v$11","_v$12","pressed","_v$13","pressedTone","_v$14","_v$15","_v$16","_v$17","o","i","n","_$setProperty","s","_$runHydrationEvents","messageActions","Root","position","width","items","Trigger","appearance","title","_tmpl$6","_v$","class","_v$2","_v$3","_v$4","anchorId","_v$5","ActivityContent","_el$38","_tmpl$15","leading","_el$45","_tmpl$19","_el$39","_tmpl$16","_el$40","_el$41","_el$42","_co$0","description","_el$46","_tmpl$20","trailing","_el$43","_tmpl$17","disclosure","_tmpl$18","ChatActivity","tone","style","accent","_el$50","_tmpl$22","_el$51","_v$27","_v$28","_v$29","_v$30","busy","_v$31","_v$32","_v$33","_$style","_el$47","_tmpl$21","_el$48","_el$49","addEventListener","event","onOpenChange","currentTarget","open","_$mergeProps","_v$18","_v$19","_v$20","_v$21","_v$22","bodyInset","_v$23","_v$24","_v$25","defaultOpen","_v$26","h","r","ChatContextUsage","formatNumber","formattedUsageValue","unknown","loopUsage","windowSize","contextWindow","percent","min","remaining","accessibleLabel","contextUsageUnavailableWithWindow","window","contextUsageUnavailable","tokensUsed","tokensUsedPercent","placement","_el$54","_tmpl$25","_el$55","_el$78","_el$79","_co$12","_el$56","_el$72","_el$73","_co$1","_el$57","_el$58","_el$59","_el$60","_el$61","_el$62","_el$74","_el$75","_co$10","_el$66","_el$67","_el$68","_el$76","_el$77","_co$11","lastRequestContext","size","contextWindowUsed","modelLabel","model","_el$80","_tmpl$24","_el$81","_el$82","_el$63","_el$64","_el$65","loopTotal","_c$2","notConfigured","_el$69","_el$70","_el$71","_c$3","type","data-warning","aria-label","_tmpl$23","_el$53","_c$","_$delegateEvents"],"sources":["chat/ChatPrimitives.tsx"],"sourcesContent":["import { createSignal, For, type JSX, onCleanup, Show } from \"solid-js\";\nimport { Dropdown, type DropdownItem } from \"../actions/Dropdown\";\nimport { Tooltip } from \"../feedback/Tooltip\";\nimport { type UiMessages, useUiMessages } from \"../intl/messages\";\nimport { ProgressBar } from \"../surfaces/ProgressBar\";\nimport { executeChatAction } from \"./chat-behavior\";\nimport type { ChatAction, ChatActivityTone, ChatAttachment, ChatContextUsageData, ChatMessageStatus, ChatRole } from \"./types\";\n\nexport type ChatMessageProps = {\n role: ChatRole;\n children?: JSX.Element;\n label?: string;\n createdAt?: string | Date;\n timeLabel?: string;\n status?: ChatMessageStatus;\n attachments?: readonly ChatAttachment[];\n actions?: readonly ChatAction[];\n actionDisplay?: \"auto\" | \"inline\" | \"menu\";\n anchorId?: string | number;\n onActionError?: (error: unknown) => void;\n class?: string;\n};\n\nexport type ChatActivityProps = {\n label: string;\n description?: string;\n icon?: string;\n /** Optional host-owned leading visual rendered instead of the icon. */\n leading?: JSX.Element;\n /** Optional identity accent for the leading visual. Semantic tones still take precedence. */\n accent?: string;\n tone?: ChatActivityTone;\n /** Marks the activity as running with the shared accent sweep. */\n busy?: boolean;\n trailing?: JSX.Element;\n /** Controlled disclosure state. Omit to keep native details behavior. */\n open?: boolean;\n /** Reports disclosure changes when `open` is controlled by the host. */\n onOpenChange?: (open: boolean) => void;\n defaultOpen?: boolean;\n /** Set to false when the body is a peer list that should align with the activity row. */\n bodyInset?: boolean;\n anchorId?: string | number;\n children?: JSX.Element;\n class?: string;\n};\n\nexport type ChatContextUsageProps = ChatContextUsageData & {\n /** Host-owned number formatting. The default is locale-independent and SSR-stable. */\n formatNumber?: (value: number) => string;\n class?: string;\n};\n\nconst roleLabel = (role: ChatRole, messages: UiMessages): string => {\n if (role === \"assistant\") return messages.assistant;\n if (role === \"user\") return messages.user;\n if (role === \"tool\") return messages.tool;\n return messages.system;\n};\n\nconst statusLabel = (status: ChatMessageStatus | undefined, messages: UiMessages): string | null => {\n if (status === \"pending\") return messages.waiting;\n if (status === \"streaming\") return messages.generating;\n if (status === \"error\") return messages.failed;\n return null;\n};\n\nconst statusIcon = (status: ChatMessageStatus | undefined): string => {\n if (status === \"pending\") return \"ti ti-clock\";\n return \"ti ti-alert-circle\";\n};\n\nconst ChatProgressDots = () => (\n <span class=\"k2b-chat-progress-dots\" aria-hidden=\"true\">\n <span />\n <span />\n <span />\n </span>\n);\n\nconst attachmentIcon = (attachment: ChatAttachment): string =>\n attachment.icon ?? (attachment.kind === \"image\" ? \"ti ti-photo\" : attachment.kind === \"resource\" ? \"ti ti-link\" : \"ti ti-file\");\n\nconst finiteNonNegative = (value: number | undefined): number =>\n typeof value === \"number\" && Number.isFinite(value) ? Math.max(0, value) : 0;\n\nconst finiteUsageValue = (value: number | undefined): number | null =>\n typeof value === \"number\" && Number.isFinite(value) && value >= 0 ? value : null;\n\nconst normalizedUsage = (usage: ChatContextUsageData[\"usage\"]) => {\n const input = finiteUsageValue(usage?.input);\n const output = finiteUsageValue(usage?.output);\n const explicitTotal = finiteUsageValue(usage?.total);\n const total = explicitTotal ?? (input !== null || output !== null ? (input ?? 0) + (output ?? 0) : null);\n return { input, output, total, reported: total !== null };\n};\n\nconst formatStableInteger = (value: number): string => {\n const digits = String(Math.round(finiteNonNegative(value)));\n return digits.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n};\n\nexport const formatChatTokens = (tokens: number): string => {\n const value = finiteNonNegative(tokens);\n if (value >= 1_000_000) return `${(value / 1_000_000).toFixed(1)}M`;\n if (value >= 1_000) return `${(value / 1_000).toFixed(1)}k`;\n return String(Math.round(value));\n};\n\nconst dateTime = (value: string | Date | undefined): string | null => {\n if (!value) return null;\n const date = value instanceof Date ? value : new Date(value);\n return Number.isFinite(date.getTime()) ? date.toISOString() : null;\n};\n\nexport function ChatMessage(props: ChatMessageProps): JSX.Element {\n const messages = useUiMessages();\n const [busyActionId, setBusyActionId] = createSignal<string | null>(null);\n const [completedActionId, setCompletedActionId] = createSignal<string | null>(null);\n let completedTimer: ReturnType<typeof setTimeout> | undefined;\n const status = () => statusLabel(props.status, messages());\n const timestamp = () => dateTime(props.createdAt);\n // Locale and timezone are application policy. Requiring an explicit visible\n // label keeps SSR and hydration byte-stable while `createdAt` still supplies\n // the semantic machine-readable timestamp.\n const time = () => props.timeLabel ?? null;\n const actions = () => props.actions ?? [];\n const actionDisplay = () =>\n props.actionDisplay === \"auto\" || !props.actionDisplay ? (props.role === \"user\" ? \"menu\" : \"inline\") : props.actionDisplay;\n const hasMeta = () => props.status === \"streaming\" || status() !== null || Boolean(time()) || actions().length > 0;\n\n const runAction = async (action: ChatAction) => {\n if (action.disabled || busyActionId()) return;\n setBusyActionId(action.id);\n try {\n await executeChatAction(action);\n setCompletedActionId(action.id);\n if (completedTimer) clearTimeout(completedTimer);\n completedTimer = setTimeout(() => setCompletedActionId(null), 1400);\n } catch (error) {\n props.onActionError?.(error);\n } finally {\n setBusyActionId(null);\n }\n };\n\n const actionIcon = (action: ChatAction) =>\n busyActionId() === action.id\n ? \"ti ti-loader-2 k2b-spin\"\n : completedActionId() === action.id\n ? \"ti ti-check\"\n : (action.icon ?? \"ti ti-dots\");\n\n onCleanup(() => {\n if (completedTimer) clearTimeout(completedTimer);\n });\n\n const menuItems = (): readonly DropdownItem[] =>\n actions().map((action) => ({\n icon: actionIcon(action),\n label: action.label,\n variant: action.variant,\n disabled: action.disabled || Boolean(busyActionId()),\n action: () => void runAction(action),\n }));\n\n return (\n <article\n class={`k2b-chat-message ${props.class ?? \"\"}`}\n data-role={props.role}\n data-status={props.status ?? \"complete\"}\n data-chat-anchor={props.anchorId !== undefined ? String(props.anchorId) : undefined}\n aria-busy={props.status === \"pending\" || props.status === \"streaming\" ? \"true\" : undefined}\n >\n <span class=\"k2b-sr-only\">{props.label ?? roleLabel(props.role, messages())}: </span>\n <Show when={(props.attachments?.length ?? 0) > 0}>\n <div class=\"k2b-chat-message__attachments\" role=\"list\" aria-label={messages().attachments}>\n <For each={props.attachments}>\n {(attachment) => {\n const content = () => (\n <>\n <Show\n when={attachment.kind === \"image\" && attachment.previewUrl}\n fallback={<i class={attachmentIcon(attachment)} aria-hidden=\"true\" />}\n >\n <img src={attachment.previewUrl} alt={attachment.alt ?? attachment.name} />\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\" role=\"listitem\" title={attachment.name}>\n {content()}\n </div>\n }\n >\n {(href) => (\n <a\n class=\"k2b-chat-message__attachment\"\n role=\"listitem\"\n title={attachment.name}\n href={href()}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n aria-label={messages().openInNewTab({ name: attachment.name })}\n >\n {content()}\n </a>\n )}\n </Show>\n );\n }}\n </For>\n </div>\n </Show>\n\n <Show when={props.children !== undefined && props.children !== null && props.children !== \"\"}>\n <div class=\"k2b-chat-message__bubble\">\n <div class=\"k2b-chat-message__content\">{props.children}</div>\n </div>\n </Show>\n\n <Show when={hasMeta()}>\n <footer class=\"k2b-chat-message__meta\">\n <Show\n when={props.status === \"streaming\"}\n fallback={\n <Show when={status()}>\n {(label) => (\n <span class=\"k2b-chat-message__status\" role={props.status === \"error\" ? \"alert\" : \"status\"}>\n <i class={statusIcon(props.status)} aria-hidden=\"true\" />\n {label()}\n </span>\n )}\n </Show>\n }\n >\n <span class=\"k2b-chat-message__status k2b-chat-message__status--streaming\" role=\"status\" aria-label={messages().generating}>\n <ChatProgressDots />\n </span>\n </Show>\n <Show when={time()}>{(label) => <time dateTime={timestamp() ?? undefined}>{label()}</time>}</Show>\n <Show when={actions().length > 0 && actionDisplay() === \"inline\"}>\n <span class=\"k2b-chat-message__actions\" role=\"group\" aria-label={messages().messageActions}>\n <For each={actions()}>\n {(action) => (\n <button\n type=\"button\"\n aria-label={action.label}\n aria-pressed={action.pressed}\n data-pressed-tone={action.pressedTone}\n title={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 </button>\n )}\n </For>\n </span>\n </Show>\n <Show when={actions().length > 0 && actionDisplay() === \"menu\"}>\n <Dropdown.Root position=\"bottom-left\" width=\"12rem\" label={messages().messageActions} items={menuItems()}>\n <Dropdown.Trigger\n appearance=\"plain\"\n class=\"k2b-chat-message__menu\"\n label={messages().messageActions}\n title={messages().messageActions}\n >\n <i class=\"ti ti-dots\" aria-hidden=\"true\" />\n </Dropdown.Trigger>\n </Dropdown.Root>\n </Show>\n </footer>\n </Show>\n </article>\n );\n}\n\nconst ActivityContent = (props: ChatActivityProps & { disclosure?: boolean }) => (\n <>\n <span class=\"k2b-chat-activity__leading\" aria-hidden=\"true\">\n <Show when={props.leading} fallback={<i class={props.icon ?? \"ti ti-sparkles\"} />}>\n {props.leading}\n </Show>\n </span>\n <span class=\"k2b-chat-activity__copy\">\n <strong>{props.label}</strong>\n <Show when={props.description}>{(description) => <small>{description()}</small>}</Show>\n </span>\n <Show when={props.trailing}>\n <span class=\"k2b-chat-activity__trailing\">{props.trailing}</span>\n </Show>\n <Show when={props.disclosure}>\n <i class=\"ti ti-chevron-right k2b-chat-activity__chevron\" aria-hidden=\"true\" />\n </Show>\n </>\n);\n\nexport function ChatActivity(props: ChatActivityProps): JSX.Element {\n const tone = () => props.tone ?? \"neutral\";\n const style = () => (props.accent ? { \"--k2b-chat-activity-accent\": props.accent } : undefined);\n return (\n <Show\n when={props.children}\n fallback={\n <div\n class={`k2b-chat-activity ${props.class ?? \"\"}`}\n data-tone={tone()}\n data-accent={props.accent ? \"true\" : undefined}\n data-busy={props.busy ? \"true\" : undefined}\n data-chat-anchor={props.anchorId !== undefined ? String(props.anchorId) : undefined}\n style={style()}\n aria-busy={props.busy ? \"true\" : undefined}\n >\n <div class=\"k2b-chat-activity__row\">\n <ActivityContent {...props} />\n </div>\n </div>\n }\n >\n <details\n class={`k2b-chat-activity ${props.class ?? \"\"}`}\n data-tone={tone()}\n data-accent={props.accent ? \"true\" : undefined}\n data-busy={props.busy ? \"true\" : undefined}\n data-body-inset={props.bodyInset === false ? \"false\" : undefined}\n data-chat-anchor={props.anchorId !== undefined ? String(props.anchorId) : undefined}\n style={style()}\n open={props.open ?? props.defaultOpen}\n onToggle={(event) => props.onOpenChange?.(event.currentTarget.open)}\n aria-busy={props.busy ? \"true\" : undefined}\n >\n <summary class=\"k2b-chat-activity__row\">\n <ActivityContent {...props} disclosure />\n </summary>\n <div class=\"k2b-chat-activity__body\">{props.children}</div>\n </details>\n </Show>\n );\n}\n\nexport function ChatContextUsage(props: ChatContextUsageProps): JSX.Element {\n const messages = useUiMessages();\n const formatNumber = (value: number) => (props.formatNumber ?? formatStableInteger)(value);\n const formattedUsageValue = (value: number | null): string => (value === null ? messages().unknown : formatNumber(value));\n const usage = () => normalizedUsage(props.usage);\n const loopUsage = () => normalizedUsage(props.loopUsage);\n const total = () => usage().total ?? 0;\n const windowSize = () => finiteNonNegative(props.contextWindow);\n const reported = () => usage().reported;\n const percent = () => (reported() && windowSize() > 0 ? Math.min(100, Math.round((total() / windowSize()) * 100)) : null);\n const remaining = () => (reported() && windowSize() > 0 ? Math.max(0, windowSize() - total()) : null);\n const accessibleLabel = () => {\n if (!reported()) {\n return windowSize() > 0\n ? messages().contextUsageUnavailableWithWindow({ window: formatNumber(windowSize()) })\n : messages().contextUsageUnavailable;\n }\n return percent() === null\n ? messages().tokensUsed({ total: formatNumber(total()) })\n : messages().tokensUsedPercent({ total: formatNumber(total()), percent: percent()! });\n };\n\n return (\n <Tooltip.Trigger\n placement=\"top\"\n content={\n <div class=\"k2b-chat-context__tooltip\">\n <strong>{messages().lastRequestContext}</strong>\n <Show when={percent() !== null}>\n <ProgressBar\n value={percent() ?? 0}\n size=\"xs\"\n tone={(percent() ?? 0) >= 85 ? \"danger\" : \"info\"}\n label={messages().contextWindowUsed}\n />\n </Show>\n <dl>\n <Show when={props.modelLabel}>\n {(model) => (\n <div>\n <dt>{messages().model}</dt>\n <dd>{model()}</dd>\n </div>\n )}\n </Show>\n <div>\n <dt>{messages().input}</dt>\n <dd>{formattedUsageValue(usage().input)}</dd>\n </div>\n <div>\n <dt>{messages().output}</dt>\n <dd>{formattedUsageValue(usage().output)}</dd>\n </div>\n <Show when={loopUsage().reported}>\n <div>\n <dt>{messages().loopTotal}</dt>\n <dd>{formattedUsageValue(loopUsage().total)}</dd>\n </div>\n </Show>\n <div>\n <dt>{messages().window}</dt>\n <dd>{windowSize() > 0 ? formatNumber(windowSize()) : messages().notConfigured}</dd>\n </div>\n <Show when={remaining() !== null}>\n <div>\n <dt>{messages().remaining}</dt>\n <dd>{remaining() === null ? messages().unknown : formatNumber(remaining()!)}</dd>\n </div>\n </Show>\n </dl>\n </div>\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 </Tooltip.Trigger>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -14,7 +14,7 @@ var _tmpl$ = /*#__PURE__*/_$template(`<div class=k2b-chat-timeline__navigation a
|
|
|
14
14
|
_tmpl$2 = /*#__PURE__*/_$template(`<button type=button class=k2b-chat-timeline__older><i class="ti ti-history"aria-hidden=true></i><!$><!/>`),
|
|
15
15
|
_tmpl$3 = /*#__PURE__*/_$template(`<div class=k2b-chat-timeline__history aria-live=off><!$><!/><!$><!/><!$><!/>`),
|
|
16
16
|
_tmpl$4 = /*#__PURE__*/_$template(`<button type=button class=k2b-chat-timeline__latest><i class="ti ti-arrow-down"aria-hidden=true></i>Jump to latest`),
|
|
17
|
-
_tmpl$5 = /*#__PURE__*/_$template(`<section><div class=k2b-chat-timeline__viewport role=region tabindex=0><!$><!/><div class=k2b-chat-timeline__content role=log aria-live=polite aria-relevant="additions text"><div class=k2b-chat-timeline__sentinel aria-hidden=true></div><!$><!/><!$><!/></div></div><!$><!/>`),
|
|
17
|
+
_tmpl$5 = /*#__PURE__*/_$template(`<section><div class=k2b-chat-timeline__viewport data-initializing role=region tabindex=0><!$><!/><div class=k2b-chat-timeline__content role=log aria-live=polite aria-relevant="additions text"><div class=k2b-chat-timeline__sentinel aria-hidden=true></div><!$><!/><!$><!/></div></div><!$><!/>`),
|
|
18
18
|
_tmpl$6 = /*#__PURE__*/_$template(`<i class="ti ti-loader-2 k2b-spin"aria-hidden=true>`),
|
|
19
19
|
_tmpl$7 = /*#__PURE__*/_$template(`<button type=button class=k2b-chat-timeline__retry><i class="ti ti-refresh"aria-hidden=true>`);
|
|
20
20
|
import { createEffect, createSignal, For, onCleanup, onMount, Show, untrack } from "solid-js";
|
|
@@ -98,6 +98,8 @@ export function ChatTimeline(props) {
|
|
|
98
98
|
if (viewportRef.scrollTop <= threshold()) void loadOlder();
|
|
99
99
|
};
|
|
100
100
|
onMount(() => {
|
|
101
|
+
// Switch from CSS-only SSR anchoring to normal scroll coordinates before paint.
|
|
102
|
+
viewportRef?.removeAttribute("data-initializing");
|
|
101
103
|
scrollToLatest();
|
|
102
104
|
const resizeObserver = typeof ResizeObserver === "undefined" ? null : new ResizeObserver(() => scheduleFollow());
|
|
103
105
|
if (contentRef) resizeObserver?.observe(contentRef);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createEffect","createSignal","For","onCleanup","onMount","Show","untrack","useUiMessages","Placeholder","ChatActivity","ChatMessage","isChatNearBottom","restoredChatScrollTop","ChatTimeline","props","messages","pinned","setPinned","loadingOlderInternally","setLoadingOlderInternally","historyError","setHistoryError","viewportRef","contentRef","topSentinelRef","followFrame","userScrollFrame","userScrollingAway","touchY","lastConversationKey","loadingOlder","Boolean","canLoadOlder","onLoadOlder","hasMore","hasHistoryControls","hasContent","items","length","threshold","Math","max","followThreshold","cancelFollow","undefined","cancelAnimationFrame","noteUserScrollAway","requestAnimationFrame","scrollToLatest","scrollTop","scrollHeight","scheduleFollow","loadOlder","viewport","previousScrollTop","previousScrollHeight","prepended","error","Error","message","couldNotLoadOlderMessages","queueMicrotask","updatePinned","nearBottom","clientHeight","resizeObserver","ResizeObserver","observe","historyObserver","IntersectionObserver","entries","some","entry","isIntersecting","root","rootMargin","disconnect","key","conversationKey","at","id","_el$","_$getNextElement","_tmpl$5","_el$2","firstChild","_el$19","_el$20","_co$7","_$getNextMarker","nextSibling","_el$4","_el$5","_el$15","_el$16","_co$5","_el$17","_el$18","_co$6","_el$22","_el$23","_co$8","addEventListener","$$touchend","$$touchmove","event","nextY","touches","clientY","$$touchstart","$$keydown","target","currentTarget","shiftKey","deltaY","_$use","element","_$insert","_$createComponent","when","navigation","children","_el$3","_tmpl$","_ref$","_el$6","_tmpl$3","_el$1","_el$10","_co$2","_el$11","_el$12","_co$3","_el$13","_el$14","_co$4","_el$7","_tmpl$2","_el$8","_el$9","_el$0","_co$","$$click","loadOlderMessages","_$runHydrationEvents","label","loadingOlderMessages","icon","trailing","_tmpl$6","description","tone","_el$25","_tmpl$7","_$effect","_$setAttribute","retryOlderMessages","_$memo","loading","fallback","state","title","loadingConversation","emptyTitle","startConversation","emptyDescription","each","item","kind","leading","accent","busy","defaultOpen","anchorId","class","content","role","createdAt","timeLabel","status","attachments","actions","actionDisplay","onActionError","_el$21","_tmpl$4","_p$","_v$","_v$2","conversation","_v$3","conversationMessages","_v$4","e","_$className","t","a","o","_$delegateEvents"],"sources":["chat/ChatTimeline.tsx"],"sourcesContent":["import { createEffect, createSignal, For, type JSX, onCleanup, onMount, Show, untrack } from \"solid-js\";\nimport { useUiMessages } from \"../intl/messages\";\nimport Placeholder from \"../surfaces/Placeholder\";\nimport { ChatActivity, ChatMessage } from \"./ChatPrimitives\";\nimport { isChatNearBottom, restoredChatScrollTop } from \"./chat-behavior\";\nimport type { ChatAction, ChatActivityTone, ChatAttachment, ChatMessageStatus, ChatRole } from \"./types\";\n\nexport type ChatMessageItem = {\n kind: \"message\";\n id: string;\n role: ChatRole;\n content?: 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 class?: string;\n};\n\nexport type ChatActivityItem = {\n kind: \"activity\";\n id: string;\n label: string;\n description?: string;\n icon?: string;\n leading?: JSX.Element;\n accent?: string;\n tone?: ChatActivityTone;\n busy?: boolean;\n trailing?: JSX.Element;\n defaultOpen?: boolean;\n anchorId?: string | number;\n content?: JSX.Element;\n class?: string;\n};\n\nexport type ChatTimelineItem = ChatMessageItem | ChatActivityItem;\n\nexport type ChatTimelineProps = {\n items: readonly ChatTimelineItem[];\n conversationKey?: string | null;\n loading?: boolean;\n hasMore?: boolean;\n loadingOlder?: boolean;\n onLoadOlder?: () => boolean | void | Promise<boolean | void>;\n emptyTitle?: string;\n emptyDescription?: string;\n navigation?: JSX.Element;\n onActionError?: (error: unknown) => void;\n viewportRef?: (element: HTMLDivElement) => void;\n contentRef?: (element: HTMLDivElement) => void;\n label?: string;\n followThreshold?: number;\n class?: string;\n};\n\nexport function ChatTimeline(props: ChatTimelineProps): JSX.Element {\n const messages = useUiMessages();\n const [pinned, setPinned] = createSignal(true);\n const [loadingOlderInternally, setLoadingOlderInternally] = createSignal(false);\n const [historyError, setHistoryError] = createSignal<string | null>(null);\n let viewportRef: HTMLDivElement | undefined;\n let contentRef: HTMLDivElement | undefined;\n let topSentinelRef: HTMLDivElement | undefined;\n let followFrame: number | undefined;\n let userScrollFrame: number | undefined;\n let userScrollingAway = false;\n let touchY: number | undefined;\n let lastConversationKey: string | null | undefined;\n\n const loadingOlder = () => Boolean(props.loadingOlder || loadingOlderInternally());\n const canLoadOlder = () => Boolean(props.onLoadOlder && props.hasMore && !loadingOlder());\n const hasHistoryControls = () => loadingOlder() || historyError() !== null || canLoadOlder();\n const hasContent = () => props.items.length > 0;\n const threshold = () => Math.max(0, props.followThreshold ?? 96);\n\n const cancelFollow = () => {\n if (followFrame !== undefined) cancelAnimationFrame(followFrame);\n followFrame = undefined;\n };\n\n const noteUserScrollAway = () => {\n userScrollingAway = true;\n if (userScrollFrame !== undefined) cancelAnimationFrame(userScrollFrame);\n userScrollFrame = requestAnimationFrame(() => {\n userScrollFrame = undefined;\n userScrollingAway = false;\n });\n };\n\n const scrollToLatest = () => {\n if (!viewportRef) return;\n setPinned(true);\n viewportRef.scrollTop = viewportRef.scrollHeight;\n };\n\n const scheduleFollow = () => {\n if (!pinned() || followFrame !== undefined) return;\n followFrame = requestAnimationFrame(() => {\n followFrame = undefined;\n if (pinned()) scrollToLatest();\n });\n };\n\n const loadOlder = async () => {\n if (!props.onLoadOlder || !props.hasMore || loadingOlder()) return;\n const viewport = viewportRef;\n if (!viewport) return;\n const previousScrollTop = viewport.scrollTop;\n const previousScrollHeight = viewport.scrollHeight;\n setHistoryError(null);\n setLoadingOlderInternally(true);\n let prepended = false;\n try {\n prepended = (await props.onLoadOlder()) !== false;\n } catch (error) {\n setHistoryError(error instanceof Error ? error.message : messages().couldNotLoadOlderMessages);\n } finally {\n setLoadingOlderInternally(false);\n }\n if (!prepended || viewportRef !== viewport) return;\n queueMicrotask(() => {\n requestAnimationFrame(() => {\n if (viewportRef !== viewport) return;\n viewport.scrollTop = restoredChatScrollTop(previousScrollTop, previousScrollHeight, viewport.scrollHeight);\n });\n });\n };\n\n const updatePinned = () => {\n if (!viewportRef) return;\n const nearBottom = isChatNearBottom(viewportRef.scrollHeight, viewportRef.scrollTop, viewportRef.clientHeight, threshold());\n if (nearBottom) setPinned(true);\n else if (userScrollingAway || followFrame === undefined) {\n if (userScrollingAway) cancelFollow();\n setPinned(false);\n }\n if (viewportRef.scrollTop <= threshold()) void loadOlder();\n };\n\n onMount(() => {\n scrollToLatest();\n const resizeObserver = typeof ResizeObserver === \"undefined\" ? null : new ResizeObserver(() => scheduleFollow());\n if (contentRef) resizeObserver?.observe(contentRef);\n if (viewportRef) resizeObserver?.observe(viewportRef);\n\n const historyObserver =\n typeof IntersectionObserver === \"undefined\" || !topSentinelRef\n ? null\n : new IntersectionObserver(\n (entries) => {\n if (entries.some((entry) => entry.isIntersecting)) void loadOlder();\n },\n { root: viewportRef, rootMargin: \"160px 0px 0px\" },\n );\n if (topSentinelRef) historyObserver?.observe(topSentinelRef);\n\n onCleanup(() => {\n cancelFollow();\n if (userScrollFrame !== undefined) cancelAnimationFrame(userScrollFrame);\n resizeObserver?.disconnect();\n historyObserver?.disconnect();\n });\n });\n\n createEffect(() => {\n const key = props.conversationKey;\n if (key === lastConversationKey) return;\n lastConversationKey = key;\n setHistoryError(null);\n setPinned(true);\n queueMicrotask(scrollToLatest);\n });\n\n createEffect(() => {\n props.items.length;\n props.items.at(-1)?.id;\n untrack(scheduleFollow);\n });\n\n return (\n <section class={`k2b-chat-timeline ${props.class ?? \"\"}`} aria-label={props.label ?? messages().conversation}>\n <div\n ref={(element) => {\n viewportRef = element;\n props.viewportRef?.(element);\n }}\n class=\"k2b-chat-timeline__viewport\"\n role=\"region\"\n aria-label={messages().conversationMessages({ label: props.label ?? messages().conversation })}\n tabIndex={0}\n onWheel={(event) => {\n if (event.deltaY < 0) noteUserScrollAway();\n }}\n onKeyDown={(event) => {\n if (event.target !== event.currentTarget) return;\n if (event.key === \"ArrowUp\" || event.key === \"PageUp\" || event.key === \"Home\" || (event.key === \" \" && event.shiftKey)) {\n noteUserScrollAway();\n }\n }}\n onTouchStart={(event) => {\n touchY = event.touches[0]?.clientY;\n }}\n onTouchMove={(event) => {\n const nextY = event.touches[0]?.clientY;\n if (nextY !== undefined && touchY !== undefined && nextY > touchY) noteUserScrollAway();\n touchY = nextY;\n }}\n onTouchEnd={() => {\n touchY = undefined;\n }}\n onScroll={updatePinned}\n >\n <Show when={props.navigation}>\n <div class=\"k2b-chat-timeline__navigation\" aria-live=\"off\">\n {props.navigation}\n </div>\n </Show>\n <div\n ref={(element) => {\n contentRef = element;\n props.contentRef?.(element);\n }}\n class=\"k2b-chat-timeline__content\"\n role=\"log\"\n aria-live=\"polite\"\n aria-relevant=\"additions text\"\n aria-busy={props.loading ? \"true\" : undefined}\n >\n <div ref={topSentinelRef} class=\"k2b-chat-timeline__sentinel\" aria-hidden=\"true\" />\n <Show when={hasHistoryControls()}>\n <div class=\"k2b-chat-timeline__history\" aria-live=\"off\">\n <Show when={canLoadOlder()}>\n <button type=\"button\" class=\"k2b-chat-timeline__older\" onClick={() => void loadOlder()}>\n <i class=\"ti ti-history\" aria-hidden=\"true\" />\n {messages().loadOlderMessages}\n </button>\n </Show>\n <Show when={loadingOlder()}>\n <ChatActivity\n label={messages().loadingOlderMessages}\n icon=\"ti ti-history\"\n trailing={<i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\" />}\n />\n </Show>\n <Show when={historyError()}>\n {(message) => (\n <ChatActivity\n label={messages().couldNotLoadOlderMessages}\n description={message()}\n icon=\"ti ti-alert-circle\"\n tone=\"danger\"\n trailing={\n <button\n type=\"button\"\n class=\"k2b-chat-timeline__retry\"\n aria-label={messages().retryOlderMessages}\n onClick={() => void loadOlder()}\n >\n <i class=\"ti ti-refresh\" aria-hidden=\"true\" />\n </button>\n }\n />\n )}\n </Show>\n </div>\n </Show>\n <Show\n when={!props.loading && hasContent()}\n fallback={\n <Placeholder\n class=\"k2b-chat-timeline__placeholder\"\n state={props.loading ? \"loading\" : \"empty\"}\n icon={props.loading ? undefined : \"ti ti-sparkles\"}\n title={props.loading ? messages().loadingConversation : (props.emptyTitle ?? messages().startConversation)}\n description={!props.loading ? props.emptyDescription : undefined}\n />\n }\n >\n <For each={props.items}>\n {(item) => (\n <Show\n when={item.kind === \"message\"}\n fallback={\n <ChatActivity\n label={(item as ChatActivityItem).label}\n description={(item as ChatActivityItem).description}\n icon={(item as ChatActivityItem).icon}\n leading={(item as ChatActivityItem).leading}\n accent={(item as ChatActivityItem).accent}\n tone={(item as ChatActivityItem).tone}\n busy={(item as ChatActivityItem).busy}\n trailing={(item as ChatActivityItem).trailing}\n defaultOpen={(item as ChatActivityItem).defaultOpen}\n anchorId={(item as ChatActivityItem).anchorId}\n class={(item as ChatActivityItem).class}\n >\n {(item as ChatActivityItem).content}\n </ChatActivity>\n }\n >\n <ChatMessage\n role={(item as ChatMessageItem).role}\n label={(item as ChatMessageItem).label}\n createdAt={(item as ChatMessageItem).createdAt}\n timeLabel={(item as ChatMessageItem).timeLabel}\n status={(item as ChatMessageItem).status}\n attachments={(item as ChatMessageItem).attachments}\n actions={(item as ChatMessageItem).actions}\n actionDisplay={(item as ChatMessageItem).actionDisplay}\n anchorId={(item as ChatMessageItem).anchorId}\n onActionError={props.onActionError}\n class={(item as ChatMessageItem).class}\n >\n {(item as ChatMessageItem).content}\n </ChatMessage>\n </Show>\n )}\n </For>\n </Show>\n </div>\n </div>\n <Show when={!pinned() && hasContent()}>\n <button type=\"button\" class=\"k2b-chat-timeline__latest\" onClick={scrollToLatest}>\n <i class=\"ti ti-arrow-down\" aria-hidden=\"true\" />\n Jump to latest\n </button>\n </Show>\n </section>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["createEffect","createSignal","For","onCleanup","onMount","Show","untrack","useUiMessages","Placeholder","ChatActivity","ChatMessage","isChatNearBottom","restoredChatScrollTop","ChatTimeline","props","messages","pinned","setPinned","loadingOlderInternally","setLoadingOlderInternally","historyError","setHistoryError","viewportRef","contentRef","topSentinelRef","followFrame","userScrollFrame","userScrollingAway","touchY","lastConversationKey","loadingOlder","Boolean","canLoadOlder","onLoadOlder","hasMore","hasHistoryControls","hasContent","items","length","threshold","Math","max","followThreshold","cancelFollow","undefined","cancelAnimationFrame","noteUserScrollAway","requestAnimationFrame","scrollToLatest","scrollTop","scrollHeight","scheduleFollow","loadOlder","viewport","previousScrollTop","previousScrollHeight","prepended","error","Error","message","couldNotLoadOlderMessages","queueMicrotask","updatePinned","nearBottom","clientHeight","removeAttribute","resizeObserver","ResizeObserver","observe","historyObserver","IntersectionObserver","entries","some","entry","isIntersecting","root","rootMargin","disconnect","key","conversationKey","at","id","_el$","_$getNextElement","_tmpl$5","_el$2","firstChild","_el$19","_el$20","_co$7","_$getNextMarker","nextSibling","_el$4","_el$5","_el$15","_el$16","_co$5","_el$17","_el$18","_co$6","_el$22","_el$23","_co$8","addEventListener","$$touchend","$$touchmove","event","nextY","touches","clientY","$$touchstart","$$keydown","target","currentTarget","shiftKey","deltaY","_$use","element","_$insert","_$createComponent","when","navigation","children","_el$3","_tmpl$","_ref$","_el$6","_tmpl$3","_el$1","_el$10","_co$2","_el$11","_el$12","_co$3","_el$13","_el$14","_co$4","_el$7","_tmpl$2","_el$8","_el$9","_el$0","_co$","$$click","loadOlderMessages","_$runHydrationEvents","label","loadingOlderMessages","icon","trailing","_tmpl$6","description","tone","_el$25","_tmpl$7","_$effect","_$setAttribute","retryOlderMessages","_$memo","loading","fallback","state","title","loadingConversation","emptyTitle","startConversation","emptyDescription","each","item","kind","leading","accent","busy","defaultOpen","anchorId","class","content","role","createdAt","timeLabel","status","attachments","actions","actionDisplay","onActionError","_el$21","_tmpl$4","_p$","_v$","_v$2","conversation","_v$3","conversationMessages","_v$4","e","_$className","t","a","o","_$delegateEvents"],"sources":["chat/ChatTimeline.tsx"],"sourcesContent":["import { createEffect, createSignal, For, type JSX, onCleanup, onMount, Show, untrack } from \"solid-js\";\nimport { useUiMessages } from \"../intl/messages\";\nimport Placeholder from \"../surfaces/Placeholder\";\nimport { ChatActivity, ChatMessage } from \"./ChatPrimitives\";\nimport { isChatNearBottom, restoredChatScrollTop } from \"./chat-behavior\";\nimport type { ChatAction, ChatActivityTone, ChatAttachment, ChatMessageStatus, ChatRole } from \"./types\";\n\nexport type ChatMessageItem = {\n kind: \"message\";\n id: string;\n role: ChatRole;\n content?: 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 class?: string;\n};\n\nexport type ChatActivityItem = {\n kind: \"activity\";\n id: string;\n label: string;\n description?: string;\n icon?: string;\n leading?: JSX.Element;\n accent?: string;\n tone?: ChatActivityTone;\n busy?: boolean;\n trailing?: JSX.Element;\n defaultOpen?: boolean;\n anchorId?: string | number;\n content?: JSX.Element;\n class?: string;\n};\n\nexport type ChatTimelineItem = ChatMessageItem | ChatActivityItem;\n\nexport type ChatTimelineProps = {\n items: readonly ChatTimelineItem[];\n conversationKey?: string | null;\n loading?: boolean;\n hasMore?: boolean;\n loadingOlder?: boolean;\n onLoadOlder?: () => boolean | void | Promise<boolean | void>;\n emptyTitle?: string;\n emptyDescription?: string;\n navigation?: JSX.Element;\n onActionError?: (error: unknown) => void;\n viewportRef?: (element: HTMLDivElement) => void;\n contentRef?: (element: HTMLDivElement) => void;\n label?: string;\n followThreshold?: number;\n class?: string;\n};\n\nexport function ChatTimeline(props: ChatTimelineProps): JSX.Element {\n const messages = useUiMessages();\n const [pinned, setPinned] = createSignal(true);\n const [loadingOlderInternally, setLoadingOlderInternally] = createSignal(false);\n const [historyError, setHistoryError] = createSignal<string | null>(null);\n let viewportRef: HTMLDivElement | undefined;\n let contentRef: HTMLDivElement | undefined;\n let topSentinelRef: HTMLDivElement | undefined;\n let followFrame: number | undefined;\n let userScrollFrame: number | undefined;\n let userScrollingAway = false;\n let touchY: number | undefined;\n let lastConversationKey: string | null | undefined;\n\n const loadingOlder = () => Boolean(props.loadingOlder || loadingOlderInternally());\n const canLoadOlder = () => Boolean(props.onLoadOlder && props.hasMore && !loadingOlder());\n const hasHistoryControls = () => loadingOlder() || historyError() !== null || canLoadOlder();\n const hasContent = () => props.items.length > 0;\n const threshold = () => Math.max(0, props.followThreshold ?? 96);\n\n const cancelFollow = () => {\n if (followFrame !== undefined) cancelAnimationFrame(followFrame);\n followFrame = undefined;\n };\n\n const noteUserScrollAway = () => {\n userScrollingAway = true;\n if (userScrollFrame !== undefined) cancelAnimationFrame(userScrollFrame);\n userScrollFrame = requestAnimationFrame(() => {\n userScrollFrame = undefined;\n userScrollingAway = false;\n });\n };\n\n const scrollToLatest = () => {\n if (!viewportRef) return;\n setPinned(true);\n viewportRef.scrollTop = viewportRef.scrollHeight;\n };\n\n const scheduleFollow = () => {\n if (!pinned() || followFrame !== undefined) return;\n followFrame = requestAnimationFrame(() => {\n followFrame = undefined;\n if (pinned()) scrollToLatest();\n });\n };\n\n const loadOlder = async () => {\n if (!props.onLoadOlder || !props.hasMore || loadingOlder()) return;\n const viewport = viewportRef;\n if (!viewport) return;\n const previousScrollTop = viewport.scrollTop;\n const previousScrollHeight = viewport.scrollHeight;\n setHistoryError(null);\n setLoadingOlderInternally(true);\n let prepended = false;\n try {\n prepended = (await props.onLoadOlder()) !== false;\n } catch (error) {\n setHistoryError(error instanceof Error ? error.message : messages().couldNotLoadOlderMessages);\n } finally {\n setLoadingOlderInternally(false);\n }\n if (!prepended || viewportRef !== viewport) return;\n queueMicrotask(() => {\n requestAnimationFrame(() => {\n if (viewportRef !== viewport) return;\n viewport.scrollTop = restoredChatScrollTop(previousScrollTop, previousScrollHeight, viewport.scrollHeight);\n });\n });\n };\n\n const updatePinned = () => {\n if (!viewportRef) return;\n const nearBottom = isChatNearBottom(viewportRef.scrollHeight, viewportRef.scrollTop, viewportRef.clientHeight, threshold());\n if (nearBottom) setPinned(true);\n else if (userScrollingAway || followFrame === undefined) {\n if (userScrollingAway) cancelFollow();\n setPinned(false);\n }\n if (viewportRef.scrollTop <= threshold()) void loadOlder();\n };\n\n onMount(() => {\n // Switch from CSS-only SSR anchoring to normal scroll coordinates before paint.\n viewportRef?.removeAttribute(\"data-initializing\");\n scrollToLatest();\n const resizeObserver = typeof ResizeObserver === \"undefined\" ? null : new ResizeObserver(() => scheduleFollow());\n if (contentRef) resizeObserver?.observe(contentRef);\n if (viewportRef) resizeObserver?.observe(viewportRef);\n\n const historyObserver =\n typeof IntersectionObserver === \"undefined\" || !topSentinelRef\n ? null\n : new IntersectionObserver(\n (entries) => {\n if (entries.some((entry) => entry.isIntersecting)) void loadOlder();\n },\n { root: viewportRef, rootMargin: \"160px 0px 0px\" },\n );\n if (topSentinelRef) historyObserver?.observe(topSentinelRef);\n\n onCleanup(() => {\n cancelFollow();\n if (userScrollFrame !== undefined) cancelAnimationFrame(userScrollFrame);\n resizeObserver?.disconnect();\n historyObserver?.disconnect();\n });\n });\n\n createEffect(() => {\n const key = props.conversationKey;\n if (key === lastConversationKey) return;\n lastConversationKey = key;\n setHistoryError(null);\n setPinned(true);\n queueMicrotask(scrollToLatest);\n });\n\n createEffect(() => {\n props.items.length;\n props.items.at(-1)?.id;\n untrack(scheduleFollow);\n });\n\n return (\n <section class={`k2b-chat-timeline ${props.class ?? \"\"}`} aria-label={props.label ?? messages().conversation}>\n <div\n ref={(element) => {\n viewportRef = element;\n props.viewportRef?.(element);\n }}\n class=\"k2b-chat-timeline__viewport\"\n data-initializing=\"\"\n role=\"region\"\n aria-label={messages().conversationMessages({ label: props.label ?? messages().conversation })}\n tabIndex={0}\n onWheel={(event) => {\n if (event.deltaY < 0) noteUserScrollAway();\n }}\n onKeyDown={(event) => {\n if (event.target !== event.currentTarget) return;\n if (event.key === \"ArrowUp\" || event.key === \"PageUp\" || event.key === \"Home\" || (event.key === \" \" && event.shiftKey)) {\n noteUserScrollAway();\n }\n }}\n onTouchStart={(event) => {\n touchY = event.touches[0]?.clientY;\n }}\n onTouchMove={(event) => {\n const nextY = event.touches[0]?.clientY;\n if (nextY !== undefined && touchY !== undefined && nextY > touchY) noteUserScrollAway();\n touchY = nextY;\n }}\n onTouchEnd={() => {\n touchY = undefined;\n }}\n onScroll={updatePinned}\n >\n <Show when={props.navigation}>\n <div class=\"k2b-chat-timeline__navigation\" aria-live=\"off\">\n {props.navigation}\n </div>\n </Show>\n <div\n ref={(element) => {\n contentRef = element;\n props.contentRef?.(element);\n }}\n class=\"k2b-chat-timeline__content\"\n role=\"log\"\n aria-live=\"polite\"\n aria-relevant=\"additions text\"\n aria-busy={props.loading ? \"true\" : undefined}\n >\n <div ref={topSentinelRef} class=\"k2b-chat-timeline__sentinel\" aria-hidden=\"true\" />\n <Show when={hasHistoryControls()}>\n <div class=\"k2b-chat-timeline__history\" aria-live=\"off\">\n <Show when={canLoadOlder()}>\n <button type=\"button\" class=\"k2b-chat-timeline__older\" onClick={() => void loadOlder()}>\n <i class=\"ti ti-history\" aria-hidden=\"true\" />\n {messages().loadOlderMessages}\n </button>\n </Show>\n <Show when={loadingOlder()}>\n <ChatActivity\n label={messages().loadingOlderMessages}\n icon=\"ti ti-history\"\n trailing={<i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\" />}\n />\n </Show>\n <Show when={historyError()}>\n {(message) => (\n <ChatActivity\n label={messages().couldNotLoadOlderMessages}\n description={message()}\n icon=\"ti ti-alert-circle\"\n tone=\"danger\"\n trailing={\n <button\n type=\"button\"\n class=\"k2b-chat-timeline__retry\"\n aria-label={messages().retryOlderMessages}\n onClick={() => void loadOlder()}\n >\n <i class=\"ti ti-refresh\" aria-hidden=\"true\" />\n </button>\n }\n />\n )}\n </Show>\n </div>\n </Show>\n <Show\n when={!props.loading && hasContent()}\n fallback={\n <Placeholder\n class=\"k2b-chat-timeline__placeholder\"\n state={props.loading ? \"loading\" : \"empty\"}\n icon={props.loading ? undefined : \"ti ti-sparkles\"}\n title={props.loading ? messages().loadingConversation : (props.emptyTitle ?? messages().startConversation)}\n description={!props.loading ? props.emptyDescription : undefined}\n />\n }\n >\n <For each={props.items}>\n {(item) => (\n <Show\n when={item.kind === \"message\"}\n fallback={\n <ChatActivity\n label={(item as ChatActivityItem).label}\n description={(item as ChatActivityItem).description}\n icon={(item as ChatActivityItem).icon}\n leading={(item as ChatActivityItem).leading}\n accent={(item as ChatActivityItem).accent}\n tone={(item as ChatActivityItem).tone}\n busy={(item as ChatActivityItem).busy}\n trailing={(item as ChatActivityItem).trailing}\n defaultOpen={(item as ChatActivityItem).defaultOpen}\n anchorId={(item as ChatActivityItem).anchorId}\n class={(item as ChatActivityItem).class}\n >\n {(item as ChatActivityItem).content}\n </ChatActivity>\n }\n >\n <ChatMessage\n role={(item as ChatMessageItem).role}\n label={(item as ChatMessageItem).label}\n createdAt={(item as ChatMessageItem).createdAt}\n timeLabel={(item as ChatMessageItem).timeLabel}\n status={(item as ChatMessageItem).status}\n attachments={(item as ChatMessageItem).attachments}\n actions={(item as ChatMessageItem).actions}\n actionDisplay={(item as ChatMessageItem).actionDisplay}\n anchorId={(item as ChatMessageItem).anchorId}\n onActionError={props.onActionError}\n class={(item as ChatMessageItem).class}\n >\n {(item as ChatMessageItem).content}\n </ChatMessage>\n </Show>\n )}\n </For>\n </Show>\n </div>\n </div>\n <Show when={!pinned() && hasContent()}>\n <button type=\"button\" class=\"k2b-chat-timeline__latest\" onClick={scrollToLatest}>\n <i class=\"ti ti-arrow-down\" aria-hidden=\"true\" />\n Jump to latest\n </button>\n </Show>\n </section>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["chat/types.ts"],"sourcesContent":["export type ChatRole = \"user\" | \"assistant\" | \"system\" | \"tool\";\n\nexport type ChatMessageStatus = \"pending\" | \"streaming\" | \"complete\" | \"error\";\n\nexport type ChatActivityTone = \"neutral\" | \"ai\" | \"success\" | \"danger\";\n\ntype ChatActionBase = {\n id: string;\n label: string;\n icon?: string;\n variant?: \"danger\";\n disabled?: boolean;\n /** Toggle state for persistent message actions such as feedback. */\n pressed?: boolean;\n};\n\n/** Exactly one executable behavior for every chat action. */\nexport type ChatAction = ChatActionBase &\n ({ onSelect: () => void | Promise<void>; copyText?: never } | { copyText: string; onSelect?: never });\n\nexport type ChatAttachment = {\n id: string;\n name: string;\n size?: number;\n kind?: \"file\" | \"image\" | \"resource\";\n icon?: string;\n previewUrl?: string;\n alt?: string;\n /** Optional destination represented by this attachment. */\n href?: string;\n /** Opaque application-owned payload returned unchanged with ChatSubmitInput. */\n data?: unknown;\n /** Optional application-owned action presented below the attachment label. */\n action?: ChatAction;\n};\n\nexport type ChatUsage = {\n input?: number;\n output?: number;\n total?: number;\n};\n\nexport type ChatContextUsageData = {\n usage?: ChatUsage | null;\n loopUsage?: ChatUsage | null;\n contextWindow?: number;\n modelLabel?: string;\n};\n\nexport type ChatModelOption = {\n id: string;\n label: string;\n description?: string;\n image?: string;\n icon?: string;\n capabilities?: readonly string[];\n};\n\nexport type ChatComposerState = \"idle\" | \"submitting\" | \"running\" | \"stopping\";\n\nexport type ChatSubmitIntent = \"send\" | \"steer\" | \"queue\";\n\nexport type ChatSubmitInput = {\n intent: ChatSubmitIntent;\n text: string;\n attachments: readonly ChatAttachment[];\n};\n"],"mappings":"","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["chat/types.ts"],"sourcesContent":["export type ChatRole = \"user\" | \"assistant\" | \"system\" | \"tool\";\n\nexport type ChatMessageStatus = \"pending\" | \"streaming\" | \"complete\" | \"error\";\n\nexport type ChatActivityTone = \"neutral\" | \"ai\" | \"success\" | \"danger\";\n\ntype ChatActionBase = {\n id: string;\n label: string;\n icon?: string;\n variant?: \"danger\";\n disabled?: boolean;\n /** Toggle state for persistent message actions such as feedback. */\n pressed?: boolean;\n /** Semantic foreground for selected feedback actions, without a persistent background. */\n pressedTone?: \"success\" | \"danger\";\n};\n\n/** Exactly one executable behavior for every chat action. */\nexport type ChatAction = ChatActionBase &\n ({ onSelect: () => void | Promise<void>; copyText?: never } | { copyText: string; onSelect?: never });\n\nexport type ChatAttachment = {\n id: string;\n name: string;\n size?: number;\n kind?: \"file\" | \"image\" | \"resource\";\n icon?: string;\n previewUrl?: string;\n alt?: string;\n /** Optional destination represented by this attachment. */\n href?: string;\n /** Opaque application-owned payload returned unchanged with ChatSubmitInput. */\n data?: unknown;\n /** Optional application-owned action presented below the attachment label. */\n action?: ChatAction;\n};\n\nexport type ChatUsage = {\n input?: number;\n output?: number;\n total?: number;\n};\n\nexport type ChatContextUsageData = {\n usage?: ChatUsage | null;\n loopUsage?: ChatUsage | null;\n contextWindow?: number;\n modelLabel?: string;\n};\n\nexport type ChatModelOption = {\n id: string;\n label: string;\n description?: string;\n image?: string;\n icon?: string;\n capabilities?: readonly string[];\n};\n\nexport type ChatComposerState = \"idle\" | \"submitting\" | \"running\" | \"stopping\";\n\nexport type ChatSubmitIntent = \"send\" | \"steer\" | \"queue\";\n\nexport type ChatSubmitInput = {\n intent: ChatSubmitIntent;\n text: string;\n attachments: readonly ChatAttachment[];\n};\n"],"mappings":"","ignoreList":[]}
|
|
@@ -36,8 +36,16 @@ const createSafeRenderer = (options = {}) => {
|
|
|
36
36
|
const body = this.parser.parseInline(tokens);
|
|
37
37
|
const url = safeUrl(href);
|
|
38
38
|
if (!url) return body;
|
|
39
|
+
if (options.linkProtocols) {
|
|
40
|
+
try {
|
|
41
|
+
if (!options.linkProtocols.includes(new URL(url, "https://markdown.invalid/").protocol)) return body;
|
|
42
|
+
} catch {
|
|
43
|
+
return body;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
39
46
|
const titleAttribute = title ? ` title="${escapeHtml(title)}"` : "";
|
|
40
|
-
|
|
47
|
+
const target = options.linkTarget === "_blank" ? ' target="_blank" rel="noopener noreferrer"' : "";
|
|
48
|
+
return `<a href="${escapeHtml(url)}"${titleAttribute}${target}>${body}</a>`;
|
|
41
49
|
};
|
|
42
50
|
renderer.image = ({
|
|
43
51
|
href,
|
|
@@ -45,7 +53,7 @@ const createSafeRenderer = (options = {}) => {
|
|
|
45
53
|
text
|
|
46
54
|
}) => {
|
|
47
55
|
const url = safeUrl(href);
|
|
48
|
-
if (!url) return escapeHtml(text);
|
|
56
|
+
if (!url || options.allowImages === false) return escapeHtml(text);
|
|
49
57
|
const titleAttribute = title ? ` title="${escapeHtml(title)}"` : "";
|
|
50
58
|
return `<img src="${escapeHtml(url)}" alt="${escapeHtml(text)}"${titleAttribute}>`;
|
|
51
59
|
};
|
|
@@ -115,7 +123,10 @@ export const renderSafeMarkdown = (markdown, options = {}) => marked.parse(markd
|
|
|
115
123
|
*/
|
|
116
124
|
export default function MarkdownView(props) {
|
|
117
125
|
const html = () => props.markdown !== undefined ? renderSafeMarkdown(props.markdown, {
|
|
118
|
-
inlineTokens: props.inlineTokens
|
|
126
|
+
inlineTokens: props.inlineTokens,
|
|
127
|
+
allowImages: props.allowImages,
|
|
128
|
+
linkProtocols: props.linkProtocols,
|
|
129
|
+
linkTarget: props.linkTarget
|
|
119
130
|
}) : props.trustedHtml;
|
|
120
131
|
return (() => {
|
|
121
132
|
var _el$ = _$getNextElement(_tmpl$);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["marked","Renderer","escapeHtml","value","replaceAll","safeUrl","normalized","trim","replace","test","normalizeInlineTokens","tokens","Set","filter","Boolean","sort","left","right","length","isStandaloneInlineToken","text","start","before","end","after","createSafeRenderer","options","renderer","inlineTokens","renderText","bind","html","link","href","title","body","parser","parseInline","url","titleAttribute","image","token","type","parts","plainStart","cursor","inlineToken","find","candidate","startsWith","slice","push","raw","join","renderSafeMarkdown","markdown","parse","async","MarkdownView","props","undefined","trustedHtml","_el$","_$getNextElement","_tmpl$","_$effect","_p$","_v$","class","_v$2","headingScale","_v$3","e","_$className","t","_$setAttribute","a","_$setProperty"],"sources":["content/MarkdownView.tsx"],"sourcesContent":["import { marked, Renderer, type Tokens } from \"marked\";\n\ntype CommonProps = {\n /** Optional additional CSS classes */\n class?: string;\n /**\n * Visual heading scale. Markdown heading levels and document structure stay\n * unchanged.\n */\n headingScale?: \"compact\" | \"normal\" | \"large\";\n};\n\nexport type MarkdownViewProps = CommonProps &\n (\n | {\n /** Untrusted Markdown. Raw HTML and unsafe link protocols are escaped. */\n markdown: string;\n /** Exact standalone text tokens to emphasize without changing Markdown parsing or trusted-HTML boundaries. */\n inlineTokens?: readonly string[];\n trustedHtml?: never;\n }\n | {\n /** Explicitly trusted, already-rendered HTML. The caller owns sanitization. */\n trustedHtml: string;\n markdown?: never;\n inlineTokens?: never;\n }\n );\n\nexport type MarkdownRenderOptions = { inlineTokens?: readonly string[] };\n\nconst escapeHtml = (value: string): string =>\n value.replaceAll(\"&\", \"&\").replaceAll(\"<\", \"<\").replaceAll(\">\", \">\").replaceAll('\"', \""\").replaceAll(\"'\", \"'\");\n\nconst safeUrl = (value: string): string | null => {\n const normalized = value.trim().replace(/[\\u0000-\\u001f\\u007f-\\u009f\\s]+/g, \"\");\n if (/^(?:javascript|vbscript|data):/i.test(normalized)) return null;\n return value;\n};\n\nconst normalizeInlineTokens = (tokens: readonly string[] | undefined): string[] =>\n [...new Set(tokens?.filter(Boolean) ?? [])].sort((left, right) => right.length - left.length);\n\nconst isStandaloneInlineToken = (text: string, start: number, value: string): boolean => {\n const before = text[start - 1];\n if (before && /[a-zA-Z0-9_.%+\\-]/.test(before)) return false;\n const end = start + value.length;\n const after = text[end];\n if (after && /[a-zA-Z0-9_@]/.test(after)) return false;\n return !(after === \".\" && /[a-zA-Z0-9_]/.test(text[end + 1] ?? \"\"));\n};\n\nconst createSafeRenderer = (options: MarkdownRenderOptions = {}): Renderer => {\n const renderer = new Renderer();\n const inlineTokens = normalizeInlineTokens(options.inlineTokens);\n const renderText = renderer.text.bind(renderer);\n renderer.html = ({ text }: Tokens.HTML | Tokens.Tag) => escapeHtml(text);\n renderer.link = function ({ href, title, tokens }: Tokens.Link) {\n const body = this.parser.parseInline(tokens);\n const url = safeUrl(href);\n if (!url) return body;\n const titleAttribute = title ? ` title=\"${escapeHtml(title)}\"` : \"\";\n return `<a href=\"${escapeHtml(url)}\"${titleAttribute}>${body}</a>`;\n };\n renderer.image = ({ href, title, text }: Tokens.Image) => {\n const url = safeUrl(href);\n if (!url) return escapeHtml(text);\n const titleAttribute = title ? ` title=\"${escapeHtml(title)}\"` : \"\";\n return `<img src=\"${escapeHtml(url)}\" alt=\"${escapeHtml(text)}\"${titleAttribute}>`;\n };\n renderer.text = (token) => {\n if (inlineTokens.length === 0 || token.type === \"escape\" || (\"tokens\" in token && token.tokens)) return renderText(token);\n const parts: string[] = [];\n let plainStart = 0;\n let cursor = 0;\n while (cursor < token.text.length) {\n const inlineToken = inlineTokens.find(\n (candidate) => token.text.startsWith(candidate, cursor) && isStandaloneInlineToken(token.text, cursor, candidate),\n );\n if (!inlineToken) {\n cursor += 1;\n continue;\n }\n if (plainStart < cursor) {\n const text = token.text.slice(plainStart, cursor);\n parts.push(renderText({ ...token, raw: text, text }));\n }\n parts.push(\n `<span class=\"k2b-content-markdown__inline-token\">${renderText({ ...token, raw: inlineToken, text: inlineToken })}</span>`,\n );\n cursor += inlineToken.length;\n plainStart = cursor;\n }\n if (plainStart === 0) return renderText(token);\n if (plainStart < token.text.length) {\n const text = token.text.slice(plainStart);\n parts.push(renderText({ ...token, raw: text, text }));\n }\n return parts.join(\"\");\n };\n return renderer;\n};\n\nexport const renderSafeMarkdown = (markdown: string, options: MarkdownRenderOptions = {}): string =>\n marked.parse(markdown, { async: false, renderer: createSafeRenderer(options) }) as string;\n\n/**\n * Markdown View Component (SSR)\n *\n * Renders untrusted Markdown safely by default. Raw HTML and unsafe link\n * protocols are escaped. Already-rendered HTML requires the deliberately named\n * `trustedHtml` boundary; the caller owns sanitization in that mode.\n *\n * @example\n * ```tsx\n * import { MarkdownView } from \"@k2b/ui\";\n *\n * <MarkdownView markdown={source} />;\n * ```\n *\n * @example Compact headings, e.g. inside comments or file previews:\n * ```tsx\n * <MarkdownView markdown={source} headingScale=\"compact\" />;\n * ```\n */\nexport default function MarkdownView(props: MarkdownViewProps) {\n const html = () =>\n props.markdown !== undefined ? renderSafeMarkdown(props.markdown, { inlineTokens: props.inlineTokens }) : props.trustedHtml;\n return (\n <div\n class={`k2b-content-markdown ${props.class ?? \"\"}`}\n data-heading-scale={props.headingScale && props.headingScale !== \"normal\" ? props.headingScale : undefined}\n innerHTML={html()}\n />\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["marked","Renderer","escapeHtml","value","replaceAll","safeUrl","normalized","trim","replace","test","normalizeInlineTokens","tokens","Set","filter","Boolean","sort","left","right","length","isStandaloneInlineToken","text","start","before","end","after","createSafeRenderer","options","renderer","inlineTokens","renderText","bind","html","link","href","title","body","parser","parseInline","url","linkProtocols","includes","URL","protocol","titleAttribute","target","linkTarget","image","allowImages","token","type","parts","plainStart","cursor","inlineToken","find","candidate","startsWith","slice","push","raw","join","renderSafeMarkdown","markdown","parse","async","MarkdownView","props","undefined","trustedHtml","_el$","_$getNextElement","_tmpl$","_$effect","_p$","_v$","class","_v$2","headingScale","_v$3","e","_$className","t","_$setAttribute","a","_$setProperty"],"sources":["content/MarkdownView.tsx"],"sourcesContent":["import { marked, Renderer, type Tokens } from \"marked\";\n\ntype CommonProps = MarkdownRenderOptions & {\n /** Optional additional CSS classes */\n class?: string;\n /**\n * Visual heading scale. Markdown heading levels and document structure stay\n * unchanged.\n */\n headingScale?: \"compact\" | \"normal\" | \"large\";\n};\n\nexport type MarkdownViewProps = CommonProps &\n (\n | {\n /** Untrusted Markdown. Raw HTML and unsafe link protocols are escaped. */\n markdown: string;\n /** Exact standalone text tokens to emphasize without changing Markdown parsing or trusted-HTML boundaries. */\n inlineTokens?: readonly string[];\n trustedHtml?: never;\n }\n | {\n /** Explicitly trusted, already-rendered HTML. The caller owns sanitization. */\n trustedHtml: string;\n markdown?: never;\n inlineTokens?: never;\n }\n );\n\nexport type MarkdownRenderOptions = {\n inlineTokens?: readonly string[];\n /** Whether to render images. False renders alt text without resource requests. Defaults to true. */\n allowImages?: boolean;\n /** Optional protocol allowlist, including trailing colons. Relative URLs resolve as HTTPS. */\n linkProtocols?: readonly string[];\n linkTarget?: \"_blank\";\n};\n\nconst escapeHtml = (value: string): string =>\n value.replaceAll(\"&\", \"&\").replaceAll(\"<\", \"<\").replaceAll(\">\", \">\").replaceAll('\"', \""\").replaceAll(\"'\", \"'\");\n\nconst safeUrl = (value: string): string | null => {\n const normalized = value.trim().replace(/[\\u0000-\\u001f\\u007f-\\u009f\\s]+/g, \"\");\n if (/^(?:javascript|vbscript|data):/i.test(normalized)) return null;\n return value;\n};\n\nconst normalizeInlineTokens = (tokens: readonly string[] | undefined): string[] =>\n [...new Set(tokens?.filter(Boolean) ?? [])].sort((left, right) => right.length - left.length);\n\nconst isStandaloneInlineToken = (text: string, start: number, value: string): boolean => {\n const before = text[start - 1];\n if (before && /[a-zA-Z0-9_.%+\\-]/.test(before)) return false;\n const end = start + value.length;\n const after = text[end];\n if (after && /[a-zA-Z0-9_@]/.test(after)) return false;\n return !(after === \".\" && /[a-zA-Z0-9_]/.test(text[end + 1] ?? \"\"));\n};\n\nconst createSafeRenderer = (options: MarkdownRenderOptions = {}): Renderer => {\n const renderer = new Renderer();\n const inlineTokens = normalizeInlineTokens(options.inlineTokens);\n const renderText = renderer.text.bind(renderer);\n renderer.html = ({ text }: Tokens.HTML | Tokens.Tag) => escapeHtml(text);\n renderer.link = function ({ href, title, tokens }: Tokens.Link) {\n const body = this.parser.parseInline(tokens);\n const url = safeUrl(href);\n if (!url) return body;\n if (options.linkProtocols) {\n try {\n if (!options.linkProtocols.includes(new URL(url, \"https://markdown.invalid/\").protocol)) return body;\n } catch {\n return body;\n }\n }\n const titleAttribute = title ? ` title=\"${escapeHtml(title)}\"` : \"\";\n const target = options.linkTarget === \"_blank\" ? ' target=\"_blank\" rel=\"noopener noreferrer\"' : \"\";\n return `<a href=\"${escapeHtml(url)}\"${titleAttribute}${target}>${body}</a>`;\n };\n renderer.image = ({ href, title, text }: Tokens.Image) => {\n const url = safeUrl(href);\n if (!url || options.allowImages === false) return escapeHtml(text);\n const titleAttribute = title ? ` title=\"${escapeHtml(title)}\"` : \"\";\n return `<img src=\"${escapeHtml(url)}\" alt=\"${escapeHtml(text)}\"${titleAttribute}>`;\n };\n renderer.text = (token) => {\n if (inlineTokens.length === 0 || token.type === \"escape\" || (\"tokens\" in token && token.tokens)) return renderText(token);\n const parts: string[] = [];\n let plainStart = 0;\n let cursor = 0;\n while (cursor < token.text.length) {\n const inlineToken = inlineTokens.find(\n (candidate) => token.text.startsWith(candidate, cursor) && isStandaloneInlineToken(token.text, cursor, candidate),\n );\n if (!inlineToken) {\n cursor += 1;\n continue;\n }\n if (plainStart < cursor) {\n const text = token.text.slice(plainStart, cursor);\n parts.push(renderText({ ...token, raw: text, text }));\n }\n parts.push(\n `<span class=\"k2b-content-markdown__inline-token\">${renderText({ ...token, raw: inlineToken, text: inlineToken })}</span>`,\n );\n cursor += inlineToken.length;\n plainStart = cursor;\n }\n if (plainStart === 0) return renderText(token);\n if (plainStart < token.text.length) {\n const text = token.text.slice(plainStart);\n parts.push(renderText({ ...token, raw: text, text }));\n }\n return parts.join(\"\");\n };\n return renderer;\n};\n\nexport const renderSafeMarkdown = (markdown: string, options: MarkdownRenderOptions = {}): string =>\n marked.parse(markdown, {\n async: false,\n renderer: createSafeRenderer(options),\n }) as string;\n\n/**\n * Markdown View Component (SSR)\n *\n * Renders untrusted Markdown safely by default. Raw HTML and unsafe link\n * protocols are escaped. Already-rendered HTML requires the deliberately named\n * `trustedHtml` boundary; the caller owns sanitization in that mode.\n *\n * @example\n * ```tsx\n * import { MarkdownView } from \"@k2b/ui\";\n *\n * <MarkdownView markdown={source} />;\n * ```\n *\n * @example Compact headings, e.g. inside comments or file previews:\n * ```tsx\n * <MarkdownView markdown={source} headingScale=\"compact\" />;\n * ```\n */\nexport default function MarkdownView(props: MarkdownViewProps) {\n const html = () =>\n props.markdown !== undefined\n ? renderSafeMarkdown(props.markdown, {\n inlineTokens: props.inlineTokens,\n allowImages: props.allowImages,\n linkProtocols: props.linkProtocols,\n linkTarget: props.linkTarget,\n })\n : props.trustedHtml;\n return (\n <div\n class={`k2b-content-markdown ${props.class ?? \"\"}`}\n data-heading-scale={props.headingScale && props.headingScale !== \"normal\" ? props.headingScale : undefined}\n innerHTML={html()}\n />\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -4,6 +4,7 @@ import { getNextMarker as _$getNextMarker } from "solid-js/web";
|
|
|
4
4
|
import { createComponent as _$createComponent } from "solid-js/web";
|
|
5
5
|
import { spread as _$spread } from "solid-js/web";
|
|
6
6
|
import { mergeProps as _$mergeProps } from "solid-js/web";
|
|
7
|
+
import { effect as _$effect } from "solid-js/web";
|
|
7
8
|
import { getNextElement as _$getNextElement } from "solid-js/web";
|
|
8
9
|
import { insert as _$insert } from "solid-js/web";
|
|
9
10
|
import { setAttribute as _$setAttribute } from "solid-js/web";
|
|
@@ -49,7 +50,7 @@ function TooltipSurface(props) {
|
|
|
49
50
|
const open = () => {
|
|
50
51
|
clearTimer();
|
|
51
52
|
if (props.disabled || dismissedUntilLeave || !surface || !target || surface.matches(":popover-open")) return;
|
|
52
|
-
|
|
53
|
+
const show = () => {
|
|
53
54
|
openTimer = undefined;
|
|
54
55
|
if (props.disabled || !surface?.isConnected || !target) return;
|
|
55
56
|
try {
|
|
@@ -61,7 +62,9 @@ function TooltipSurface(props) {
|
|
|
61
62
|
document.addEventListener("keydown", dismissOnEscape);
|
|
62
63
|
window.addEventListener("scroll", close, true);
|
|
63
64
|
window.addEventListener("resize", close);
|
|
64
|
-
}
|
|
65
|
+
};
|
|
66
|
+
const delay = props.delay ?? 250;
|
|
67
|
+
if (delay <= 0) show();else openTimer = setTimeout(show, delay);
|
|
65
68
|
};
|
|
66
69
|
createEffect(() => {
|
|
67
70
|
if (props.disabled) close();
|
|
@@ -105,6 +108,7 @@ function TooltipSurface(props) {
|
|
|
105
108
|
typeof _ref$ === "function" ? _$use(_ref$, _el$) : surface = _el$;
|
|
106
109
|
_$setAttribute(_el$, "id", tooltipId);
|
|
107
110
|
_$insert(_el$, () => props.content);
|
|
111
|
+
_$effect(() => _$setAttribute(_el$, "data-instant", props.delay !== undefined && props.delay <= 0 ? "true" : undefined));
|
|
108
112
|
return _el$;
|
|
109
113
|
})();
|
|
110
114
|
}
|