@kitn.ai/ui 0.20.1 → 0.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +44 -45
- package/dist/components/artifact-card.d.ts +51 -0
- package/dist/components/artifact.d.ts +1 -1
- package/dist/components/attachments.d.ts +2 -2
- package/dist/components/audio-visualizer/index.d.ts +3 -3
- package/dist/components/audio-visualizer/labs/lab-choreography.d.ts +59 -0
- package/dist/components/audio-visualizer/labs/lab-shaders.d.ts +22 -0
- package/dist/components/audio-visualizer/labs/lab-visualizer.d.ts +18 -0
- package/dist/components/audio-visualizer/variant-aurora.d.ts +2 -2
- package/dist/components/audio-visualizer/variant-bar.d.ts +2 -2
- package/dist/components/audio-visualizer/variant-custom.d.ts +2 -2
- package/dist/components/audio-visualizer/variant-grid.d.ts +1 -1
- package/dist/components/audio-visualizer/variant-radial.d.ts +1 -1
- package/dist/components/audio-visualizer/variant-wave.d.ts +1 -1
- package/dist/components/card-fallback.d.ts +12 -2
- package/dist/components/card-renderer.d.ts +63 -2
- package/dist/components/chat-container.d.ts +3 -0
- package/dist/components/chat-scope-picker.d.ts +2 -2
- package/dist/components/chat-thread.d.ts +77 -18
- package/dist/components/choice-card.d.ts +3 -28
- package/dist/components/composer-dom.d.ts +1 -1
- package/dist/components/composer-highlight.d.ts +1 -1
- package/dist/components/composer-history.d.ts +1 -1
- package/dist/components/composer.d.ts +1 -1
- package/dist/components/confirm-card.d.ts +3 -18
- package/dist/components/context.d.ts +8 -4
- package/dist/components/conversation-item.d.ts +1 -1
- package/dist/components/conversation-list.d.ts +4 -3
- package/dist/components/embed.d.ts +3 -3
- package/dist/components/file-tree.d.ts +11 -22
- package/dist/components/form-widgets.d.ts +1 -1
- package/dist/components/form.d.ts +3 -44
- package/dist/components/link-preview.d.ts +3 -3
- package/dist/components/loader.d.ts +30 -48
- package/dist/components/message-skills.d.ts +4 -0
- package/dist/components/message.d.ts +84 -21
- package/dist/components/model-switcher.d.ts +2 -2
- package/dist/components/prompt-input.d.ts +2 -2
- package/dist/components/response-compare-types.d.ts +11 -2
- package/dist/components/response-compare.d.ts +3 -3
- package/dist/components/source.d.ts +12 -3
- package/dist/components/tasks-card.d.ts +3 -31
- package/dist/components/thread.d.ts +17 -5
- package/dist/components/toast.d.ts +2 -2
- package/dist/components/tool-classify.d.ts +8 -0
- package/dist/components/tool-types.d.ts +29 -1
- package/dist/components/tool.d.ts +3 -3
- package/dist/components/use-card-resolution.d.ts +1 -1
- package/dist/create-tween-COnPwAQN.js +338 -0
- package/dist/create-tween-DmTUaXWE.js +341 -0
- package/dist/create-tween-qs-jjvNA.js +7 -0
- package/dist/custom-elements.json +1726 -463
- package/dist/elements/agent-card.js +1 -1
- package/dist/elements/artifact.js +1 -1
- package/dist/elements/attachments.js +1 -1
- package/dist/elements/audio-visualizer.js +1 -1
- package/dist/elements/avatar.js +1 -1
- package/dist/elements/badge.js +1 -1
- package/dist/elements/button.js +1 -1
- package/dist/elements/card.js +1 -1
- package/dist/elements/cards.js +1 -1
- package/dist/elements/chain-of-thought.js +1 -1
- package/dist/elements/chat-scope-picker.js +1 -1
- package/dist/elements/chat-types.d.ts +70 -10
- package/dist/elements/chat-workspace.js +1 -1
- package/dist/elements/chat.js +1 -1
- package/dist/elements/checkpoint.js +1 -1
- package/dist/elements/choice.js +1 -1
- package/dist/elements/chunks/{Icon-Tj58ES_d.js → Icon-CHG5z5L7.js} +1 -1
- package/dist/elements/chunks/{action-icons-ns1Fnedj.js → action-icons-BAtCEEgg.js} +1 -1
- package/dist/elements/chunks/arrow-left-CFPTeL1Y.js +1 -0
- package/dist/elements/chunks/artifact-fBZOE4SO.js +1 -0
- package/dist/elements/chunks/{attachments-mCB5F1Fq.js → attachments-DpYMe5VQ.js} +1 -1
- package/dist/elements/chunks/audio-visualizer-DFwzAcuL.js +1 -0
- package/dist/elements/chunks/{badge-B4Zuajl2.js → badge-D6zodm6E.js} +1 -1
- package/dist/elements/chunks/{button-ZWNif3--.js → button-C42vrGvO.js} +1 -1
- package/dist/elements/chunks/card-renderer-DMZsSuvU.js +1 -0
- package/dist/elements/chunks/card-tags-D8lZ-C_U.js +1 -0
- package/dist/elements/chunks/chat-thread-CNNEhol-.js +1 -0
- package/dist/elements/chunks/check-7Q3K-iXE.js +1 -0
- package/dist/elements/chunks/chevron-down-CpNYLn7E.js +1 -0
- package/dist/elements/chunks/chevron-right-DrH85Fha.js +1 -0
- package/dist/elements/chunks/choice-card-YoWjpsFV.js +1 -0
- package/dist/elements/chunks/circle-C9KRjKYv.js +1 -0
- package/dist/elements/chunks/circle-check-Dmi7Y4zw.js +1 -0
- package/dist/elements/chunks/{circle-x-B7faJFlY.js → circle-x-QIxXda6k.js} +1 -1
- package/dist/elements/chunks/code-block-CqeugReY.js +1 -0
- package/dist/elements/chunks/{collapsible-DM1Ckd4e.js → collapsible-sTv-_5lF.js} +1 -1
- package/dist/elements/chunks/{composer-BguS0QL_.js → composer-ldQyeVEB.js} +2 -2
- package/dist/elements/chunks/confirm-card-C0RNOwfn.js +1 -0
- package/dist/elements/chunks/context-5qgypNHC.js +1 -0
- package/dist/elements/chunks/conversation-list-DLzOacXz.js +1 -0
- package/dist/elements/chunks/create-tween-V4TXZ93X.js +7 -0
- package/dist/elements/chunks/default-input-DeeRSDHc.js +1 -0
- package/dist/elements/chunks/define-lE-QvQFn.js +1 -0
- package/dist/elements/chunks/{disclosure-CIZ5c8nO.js → disclosure-DZSa9jog.js} +1 -1
- package/dist/elements/chunks/{download-Dsbg3ste.js → download-B2ZmnGqW.js} +1 -1
- package/dist/elements/chunks/{dropdown-BDd1-Zgi.js → dropdown-R3B7cSRE.js} +1 -1
- package/dist/elements/chunks/{ellipsis-Dw6qrss-.js → ellipsis-BmxceY4l.js} +1 -1
- package/dist/elements/chunks/embed-BVrtTZPo.js +1 -0
- package/dist/elements/chunks/{external-link-Vt74zAoL.js → external-link-BbdR7YO7.js} +1 -1
- package/dist/elements/chunks/{file-text-CZrZF6_v.js → file-text-D7dijo1A.js} +1 -1
- package/dist/elements/chunks/{file-tree-DF4okKyo.js → file-tree-0upJ5jeb.js} +1 -1
- package/dist/elements/chunks/{folder-glP5rha4.js → folder-D8z58t7B.js} +1 -1
- package/dist/elements/chunks/form-p5BKJNw5.js +1 -0
- package/dist/elements/chunks/hover-card-CN9s2md5.js +1 -0
- package/dist/elements/chunks/{icon-BLb8beoi.js → icon-CNiKP37E.js} +1 -1
- package/dist/elements/chunks/{info-CIsv92JK.js → info-BSnuJiHI.js} +1 -1
- package/dist/elements/chunks/{input-Dds1kFyt.js → input-BauDmzxX.js} +1 -1
- package/dist/elements/chunks/{kbd-De_xbgi9.js → kbd-BlHJaP9b.js} +1 -1
- package/dist/elements/chunks/{link-i4r_k7z4.js → link-DEi5iUWC.js} +1 -1
- package/dist/elements/chunks/link-preview-BaHyM6W4.js +1 -0
- package/dist/elements/chunks/{loader-BmQH4s3V.js → loader-CmJG_Fkq.js} +1 -1
- package/dist/elements/chunks/{markdown-Zi21WhUz.js → markdown-D2jaMpCN.js} +1 -1
- package/dist/elements/chunks/message-C5UfXZ2Z.js +1 -0
- package/dist/elements/chunks/message-CXWLmmLn.js +1 -0
- package/dist/elements/chunks/message-square-hXylwsy0.js +1 -0
- package/dist/elements/chunks/{minimize-2--ifeCGrl.js → minimize-2-C9ytZFMU.js} +1 -1
- package/dist/elements/chunks/model-switcher-CivGfD7-.js +1 -0
- package/dist/elements/chunks/{overlay-kD8dwRv_.js → overlay-DJL_sbOm.js} +1 -1
- package/dist/elements/chunks/{paperclip-q21dYOSK.js → paperclip-CFaB8naM.js} +1 -1
- package/dist/elements/chunks/{progress-bar-BrAIIaaJ.js → progress-bar-Br5SksfR.js} +1 -1
- package/dist/elements/chunks/{prompt-suggestion-Bjn2K-fR.js → prompt-suggestion-CMIvtAhU.js} +1 -1
- package/dist/elements/chunks/reasoning-DpZcNzLq.js +1 -0
- package/dist/elements/chunks/{resizable-Dp4JExql.js → resizable-Q8i3T9a_.js} +1 -1
- package/dist/elements/chunks/{rotate-cw-CFWWkpj2.js → rotate-cw-B5IHCBFV.js} +1 -1
- package/dist/elements/chunks/{scroll-area-Bb0kHH1j.js → scroll-area-eLeydBje.js} +1 -1
- package/dist/elements/chunks/scroll-button-DWbz0yA1.js +1 -0
- package/dist/elements/chunks/{separator-9kRgr1X9.js → separator-Xic78AD_.js} +1 -1
- package/dist/elements/chunks/{settings-B8lmec4D.js → settings-B8H51pAx.js} +1 -1
- package/dist/elements/chunks/{settings-group-I0hEuXiN.js → settings-group-CsG9eYLe.js} +1 -1
- package/dist/elements/chunks/{share-C3lTiYGt.js → share-CNTx0z__.js} +1 -1
- package/dist/elements/chunks/skeleton-CLlHTcMI.js +1 -0
- package/dist/elements/chunks/slots-CIw9RlAe.js +1 -0
- package/dist/elements/chunks/source-BoVcU5ok.js +1 -0
- package/dist/elements/chunks/{star-CSJtGxgv.js → star-CxQVTVhI.js} +1 -1
- package/dist/elements/chunks/{store-CHyW95TP.js → store-CLtS5CUG.js} +1 -1
- package/dist/elements/chunks/tasks-card-CzlkLmUt.js +1 -0
- package/dist/elements/chunks/{text-shimmer-Cn9TmNpI.js → text-shimmer-D5NhpIQ1.js} +1 -1
- package/dist/elements/chunks/textarea-x5Uxsmtm.js +1 -0
- package/dist/elements/chunks/{thumbs-up-PNVVThEF.js → thumbs-up-UobcJnx9.js} +1 -1
- package/dist/elements/chunks/{toast-store-DKbQn3Wn.js → toast-store-BOfs9eXq.js} +1 -1
- package/dist/elements/chunks/{tool-DjTRpIpl.js → tool-Be6Dh_dt.js} +1 -1
- package/dist/elements/chunks/tooltip-RxMxyCLF.js +1 -0
- package/dist/elements/chunks/{triangle-alert-DsHTHCPm.js → triangle-alert-C4yxH2XN.js} +1 -1
- package/dist/elements/chunks/use-card-resolution-jva9ehH6.js +1 -0
- package/dist/elements/chunks/{variant-aurora-Dc4nQUia.js → variant-aurora-Dx4VRcjS.js} +2 -2
- package/dist/elements/chunks/{variant-custom-y_3kVQhS.js → variant-custom-Y1ZTWgEa.js} +1 -1
- package/dist/elements/chunks/{variant-wave-D5OR1-9Z.js → variant-wave-B9gml9Cg.js} +2 -2
- package/dist/elements/chunks/{video-B7vmenoC.js → video-CrPHsytT.js} +1 -1
- package/dist/elements/chunks/x-_-OPHept.js +1 -0
- package/dist/elements/coachmark.js +1 -1
- package/dist/elements/code-block.js +1 -1
- package/dist/elements/command.js +1 -1
- package/dist/elements/compare.js +1 -1
- package/dist/elements/composer.js +1 -1
- package/dist/elements/confirm-card.js +1 -1
- package/dist/elements/context-meter.js +1 -1
- package/dist/elements/conversation-list.js +1 -1
- package/dist/elements/default-input.d.ts +34 -7
- package/dist/elements/define.d.ts +1 -0
- package/dist/elements/dialog.js +1 -1
- package/dist/elements/disclosure.d.ts +1 -1
- package/dist/elements/editable-label.js +1 -1
- package/dist/elements/element-data-types.d.ts +107 -0
- package/dist/elements/embed.js +1 -1
- package/dist/elements/empty.js +1 -1
- package/dist/elements/feedback-bar.js +1 -1
- package/dist/elements/file-tree.js +1 -1
- package/dist/elements/file-upload.js +1 -1
- package/dist/elements/form.js +1 -1
- package/dist/elements/hover-card.js +1 -1
- package/dist/elements/icon.js +1 -1
- package/dist/elements/image.js +1 -1
- package/dist/elements/input.js +1 -1
- package/dist/elements/kbd.js +1 -1
- package/dist/elements/link-preview.js +1 -1
- package/dist/elements/loader.js +1 -1
- package/dist/elements/markdown.js +1 -1
- package/dist/elements/menu.js +1 -1
- package/dist/elements/message-skills.js +1 -1
- package/dist/elements/message.js +1 -1
- package/dist/elements/model-switcher.js +1 -1
- package/dist/elements/nav.js +1 -1
- package/dist/elements/notice.js +1 -1
- package/dist/elements/pane-group.js +1 -1
- package/dist/elements/pane.js +1 -1
- package/dist/elements/popover.js +1 -1
- package/dist/elements/progress-bar.js +1 -1
- package/dist/elements/prompt-dock.js +1 -1
- package/dist/elements/prompt-input.js +1 -1
- package/dist/elements/prompt-suggestions.js +1 -1
- package/dist/elements/reasoning.js +1 -1
- package/dist/elements/register.d.ts +8 -6
- package/dist/elements/remote.js +1 -1
- package/dist/elements/resizable.js +1 -1
- package/dist/elements/response-stream.js +1 -1
- package/dist/elements/screen.js +1 -1
- package/dist/elements/scroll-area.js +1 -1
- package/dist/elements/scroll-button.js +1 -1
- package/dist/elements/search.js +1 -1
- package/dist/elements/segmented.js +1 -1
- package/dist/elements/separator.js +1 -1
- package/dist/elements/setting-item.js +1 -1
- package/dist/elements/settings-group.js +1 -1
- package/dist/elements/skeleton.js +1 -1
- package/dist/elements/slot-text.d.ts +51 -0
- package/dist/elements/slots.d.ts +21 -0
- package/dist/elements/source.js +1 -1
- package/dist/elements/status.js +1 -1
- package/dist/elements/switch.js +1 -1
- package/dist/elements/tabs.js +1 -1
- package/dist/elements/tasks.js +1 -1
- package/dist/elements/text-shimmer.js +1 -1
- package/dist/elements/thinking-bar.js +1 -1
- package/dist/elements/thread.js +1 -1
- package/dist/elements/toast.js +1 -1
- package/dist/elements/tool.js +1 -1
- package/dist/elements/tooltip.js +1 -1
- package/dist/elements/validate-messages.d.ts +25 -0
- package/dist/elements/voice-input.js +1 -1
- package/dist/elements/voice-output.js +1 -1
- package/dist/elements.d.ts +2734 -217
- package/dist/index.d.ts +163 -125
- package/dist/index.js +6572 -5990
- package/dist/index.server.d.ts +5 -0
- package/dist/index.server.js +5403 -4860
- package/dist/kai-provider.es.d.ts +5 -0
- package/dist/kai-provider.es.js +79 -77
- package/dist/kai.es.d.ts +5 -0
- package/dist/kai.es.js +1 -1
- package/dist/llms/llms-full.txt +774 -151
- package/dist/llms/llms.txt +57 -5
- package/dist/mcp.es.js +4756 -782
- package/dist/primitives/card-component-types.d.ts +11 -0
- package/dist/primitives/card-data-types.d.ts +196 -0
- package/dist/primitives/card-host.d.ts +1 -1
- package/dist/primitives/card-recovery.d.ts +3 -3
- package/dist/primitives/card-registry.d.ts +4 -14
- package/dist/primitives/card-resolution.d.ts +1 -1
- package/dist/primitives/card-routing.d.ts +1 -1
- package/dist/primitives/card-tags.d.ts +11 -0
- package/dist/primitives/card-validate-cards.d.ts +57 -0
- package/dist/primitives/card-validate-generator.testlib.d.ts +20 -0
- package/dist/primitives/card-validate-schemas.d.ts +17 -0
- package/dist/primitives/card-validate.d.ts +24 -0
- package/dist/primitives/create-kai-chat.d.ts +3 -3
- package/dist/primitives/embed-providers.d.ts +1 -1
- package/dist/primitives/link-preview.d.ts +1 -1
- package/dist/primitives/message-feedback.d.ts +2 -2
- package/dist/primitives/toast-store.d.ts +1 -1
- package/dist/react/index.d.ts +730 -302
- package/dist/react/use-kai-chat.d.ts +8 -4
- package/dist/react.d.ts +5 -0
- package/dist/react.js +418 -317
- package/dist/register-impl-AxIlqjo7.js +145 -0
- package/dist/remote/host-embed.d.ts +1 -1
- package/dist/remote/index.d.ts +2 -2
- package/dist/remote/provider-runtime.d.ts +2 -2
- package/dist/remote/provider.d.ts +2 -2
- package/dist/remote/validate.d.ts +1 -1
- package/dist/remote/wire.d.ts +1 -1
- package/dist/schemas/artifact.schema.json +92 -0
- package/dist/schemas/embed.schema.json +0 -2
- package/dist/schemas/from-tool-call.d.ts +48 -0
- package/dist/schemas/index.d.ts +48 -0
- package/dist/schemas/link.schema.json +0 -2
- package/dist/schemas/provider-subsets.d.ts +136 -0
- package/dist/schemas/registry.d.ts +140 -0
- package/dist/schemas/tool-defs.d.ts +121 -0
- package/dist/schemas.d.ts +5 -0
- package/dist/schemas.js +717 -0
- package/dist/solid-BGYSJyHG.js +22960 -0
- package/dist/solid-Dt2nEwfl.js +20194 -0
- package/dist/solid.d.ts +66 -0
- package/dist/solid.js +261 -0
- package/dist/solid.server.d.ts +5 -0
- package/dist/solid.server.js +261 -0
- package/dist/state/index.d.ts +14 -4
- package/dist/state/messages.d.ts +8 -3
- package/dist/state/mock.d.ts +46 -0
- package/dist/state/parts.d.ts +85 -0
- package/dist/state/stream.d.ts +15 -9
- package/dist/state.d.ts +5 -0
- package/dist/state.js +253 -84
- package/dist/ui/action-icons.d.ts +1 -1
- package/dist/ui/collapsible.d.ts +11 -6
- package/dist/ui/dropdown.d.ts +47 -42
- package/dist/ui/pane-group.d.ts +1 -1
- package/dist/{variant-aurora-DVtGqVH6.js → variant-aurora-B44X69AG.js} +1 -1
- package/dist/variant-aurora-BRhV8Flk.js +391 -0
- package/dist/variant-aurora-Ds5ou9BH.js +381 -0
- package/dist/variant-custom-B20FhtYj.js +170 -0
- package/dist/{variant-custom-Dif-IV4u.js → variant-custom-BvA1Schl.js} +1 -1
- package/dist/variant-custom-D6Rtvneb.js +200 -0
- package/dist/{variant-wave-DbfNdvSi.js → variant-wave-BUQtkryq.js} +1 -1
- package/dist/variant-wave-BVYnqy9L.js +218 -0
- package/dist/variant-wave-DXC6_LcH.js +208 -0
- package/dist/wire/chunk.d.ts +171 -0
- package/dist/wire/consume.d.ts +26 -0
- package/dist/wire/encode.d.ts +221 -0
- package/dist/wire/files.d.ts +116 -0
- package/dist/wire/formats/anthropic.d.ts +2 -0
- package/dist/wire/formats/openai.d.ts +5 -0
- package/dist/wire/index.d.ts +16 -0
- package/dist/wire/media-types.d.ts +106 -0
- package/dist/wire/read.d.ts +26 -0
- package/dist/wire/sink-helpers.d.ts +21 -0
- package/dist/wire/sse.d.ts +33 -0
- package/dist/wire.d.ts +5 -53
- package/dist/wire.js +1126 -0
- package/frameworks/react/index.tsx +191 -158
- package/frameworks/react/runtime.tsx +21 -1
- package/frameworks/react/use-kai-chat.tsx +11 -1
- package/llms-full.txt +774 -151
- package/llms.txt +57 -5
- package/package.json +62 -8
- package/src/agent-tooling/archetypes.ts +127 -0
- package/src/agent-tooling/integrations/anthropic.ts +436 -0
- package/src/agent-tooling/integrations/cloudflare.ts +141 -52
- package/src/agent-tooling/integrations/langgraph.ts +80 -13
- package/src/agent-tooling/integrations/mastra.ts +161 -12
- package/src/agent-tooling/integrations/mock.ts +47 -8
- package/src/agent-tooling/integrations/ollama.ts +68 -24
- package/src/agent-tooling/integrations/openai.ts +89 -0
- package/src/agent-tooling/integrations/openrouter.ts +58 -8
- package/src/agent-tooling/integrations/pi.ts +104 -23
- package/src/agent-tooling/integrations/pydantic-ai.ts +61 -5
- package/src/agent-tooling/integrations/vercel-ai-sdk.ts +120 -13
- package/src/agent-tooling/mcp/manifest.ts +206 -25
- package/src/agent-tooling/mcp/tools/debug.ts +13 -7
- package/src/agent-tooling/mcp/tools/reference.ts +285 -6
- package/src/agent-tooling/mcp/tools/scaffold.ts +4152 -661
- package/src/agent-tooling/registry.ts +74 -0
- package/src/agent-tooling/types.ts +361 -1
- package/src/components/artifact-card.tsx +120 -0
- package/src/components/audio-visualizer/index.tsx +9 -0
- package/src/components/audio-visualizer/labs/lab-choreography.ts +187 -0
- package/src/components/audio-visualizer/labs/lab-shaders.ts +363 -0
- package/src/components/audio-visualizer/labs/lab-visualizer.tsx +102 -0
- package/src/components/audio-visualizer/shader-canvas.tsx +31 -1
- package/src/components/card-fallback.tsx +42 -10
- package/src/components/card-renderer.tsx +146 -9
- package/src/components/chat-container.tsx +4 -0
- package/src/components/chat-thread.tsx +128 -52
- package/src/components/choice-card.tsx +17 -29
- package/src/components/composer.tsx +12 -2
- package/src/components/confirm-card.tsx +24 -20
- package/src/components/context.tsx +30 -16
- package/src/components/conversation-item.tsx +6 -0
- package/src/components/conversation-list.tsx +18 -2
- package/src/components/file-tree.tsx +11 -22
- package/src/components/file-upload.tsx +14 -8
- package/src/components/form.tsx +14 -47
- package/src/components/loader.tsx +39 -12
- package/src/components/message-skills.tsx +4 -0
- package/src/components/message.tsx +294 -46
- package/src/components/model-switcher.tsx +38 -8
- package/src/components/reasoning.tsx +92 -5
- package/src/components/response-compare-types.ts +25 -0
- package/src/components/response-compare.tsx +4 -9
- package/src/components/source.tsx +50 -24
- package/src/components/tasks-card.tsx +10 -33
- package/src/components/thread.tsx +84 -42
- package/src/components/toast.tsx +17 -6
- package/src/components/tool-classify.ts +26 -0
- package/src/components/tool-types.ts +31 -1
- package/src/elements/agent-card.tsx +11 -11
- package/src/elements/artifact.tsx +15 -7
- package/src/elements/attachments.tsx +6 -4
- package/src/elements/avatar.tsx +1 -1
- package/src/elements/button.tsx +29 -6
- package/src/elements/card.tsx +2 -2
- package/src/elements/cards.tsx +109 -14
- package/src/elements/chain-of-thought.tsx +14 -10
- package/src/elements/chat-scope-picker.tsx +9 -7
- package/src/elements/chat-types.ts +59 -6
- package/src/elements/chat-workspace.tsx +50 -9
- package/src/elements/chat.tsx +90 -3
- package/src/elements/choice.tsx +8 -8
- package/src/elements/coachmark.tsx +1 -1
- package/src/elements/command.tsx +8 -23
- package/src/elements/compare.tsx +7 -6
- package/src/elements/compiled.css +1 -1
- package/src/elements/composer.tsx +8 -8
- package/src/elements/confirm-card.tsx +9 -9
- package/src/elements/context-meter.tsx +4 -18
- package/src/elements/conversation-list.tsx +14 -9
- package/src/elements/default-input.tsx +131 -8
- package/src/elements/define.tsx +178 -43
- package/src/elements/editable-label.tsx +17 -2
- package/src/elements/element-data-types.ts +112 -0
- package/src/elements/element-meta.json +1624 -306
- package/src/elements/element-types.d.ts +2645 -214
- package/src/elements/feedback-bar.tsx +1 -1
- package/src/elements/file-tree.tsx +1 -1
- package/src/elements/file-upload.tsx +1 -1
- package/src/elements/form.tsx +14 -6
- package/src/elements/input.tsx +1 -1
- package/src/elements/kbd.tsx +1 -1
- package/src/elements/menu.tsx +40 -32
- package/src/elements/message-skills.tsx +7 -9
- package/src/elements/message.tsx +200 -32
- package/src/elements/model-switcher.tsx +5 -3
- package/src/elements/pane.tsx +1 -1
- package/src/elements/prompt-dock.tsx +8 -8
- package/src/elements/prompt-input.tsx +10 -10
- package/src/elements/prompt-suggestions.tsx +7 -4
- package/src/elements/reasoning.tsx +1 -1
- package/src/elements/register.ts +9 -0
- package/src/elements/resizable.globals.d.ts +36 -0
- package/src/elements/resizable.tsx +24 -13
- package/src/elements/response-stream.tsx +1 -1
- package/src/elements/scroll-button.tsx +1 -1
- package/src/elements/search.tsx +6 -1
- package/src/elements/segmented.tsx +5 -11
- package/src/elements/separator.tsx +1 -1
- package/src/elements/slot-text.ts +73 -0
- package/src/elements/slots.ts +67 -24
- package/src/elements/source.tsx +21 -22
- package/src/elements/switch.tsx +3 -3
- package/src/elements/tasks.tsx +5 -4
- package/src/elements/thread.tsx +36 -4
- package/src/elements/toast.tsx +3 -2
- package/src/elements/tool.tsx +1 -1
- package/src/elements/validate-messages.ts +76 -0
- package/src/elements/voice-input.tsx +7 -7
- package/src/elements/voice-output.tsx +4 -4
- package/src/index.ts +145 -6
- package/src/primitives/card-component-types.ts +63 -0
- package/src/primitives/card-data-types.ts +312 -0
- package/src/primitives/card-recovery.ts +13 -2
- package/src/primitives/card-registry.tsx +34 -23
- package/src/primitives/card-schemas/artifact.schema.json +92 -0
- package/src/primitives/card-schemas/embed.schema.json +0 -2
- package/src/primitives/card-schemas/link.schema.json +0 -2
- package/src/primitives/card-tags.ts +61 -0
- package/src/primitives/card-validate-cards.ts +255 -0
- package/src/primitives/card-validate-generator.testlib.ts +38 -0
- package/src/primitives/card-validate-schemas.ts +58 -0
- package/src/primitives/card-validate.ts +48 -20
- package/src/primitives/create-tween.ts +54 -2
- package/src/primitives/message-feedback.ts +3 -2
- package/src/primitives/use-audio-analysis.ts +20 -1
- package/src/primitives/use-sequencer.ts +20 -1
- package/src/schemas/from-tool-call.ts +151 -0
- package/src/schemas/index.ts +340 -0
- package/src/schemas/provider-subsets.ts +538 -0
- package/src/schemas/registry.ts +355 -0
- package/src/schemas/tool-defs.ts +492 -0
- package/src/solid.ts +150 -0
- package/src/state/index.ts +27 -1
- package/src/state/messages.ts +21 -4
- package/src/state/mock.ts +211 -0
- package/src/state/parts.ts +295 -0
- package/src/state/stream.ts +56 -58
- package/src/ui/collapsible.tsx +17 -5
- package/src/ui/dropdown.tsx +46 -12
- package/src/ui/overlay.tsx +10 -4
- package/src/wire/chunk.ts +201 -0
- package/src/wire/consume.ts +440 -0
- package/src/wire/encode.ts +689 -0
- package/src/wire/files.ts +342 -0
- package/src/wire/formats/anthropic.ts +267 -0
- package/src/wire/formats/openai.ts +187 -0
- package/src/wire/index.ts +73 -0
- package/src/wire/media-types.ts +344 -0
- package/src/wire/read.ts +152 -0
- package/src/wire/sink-helpers.ts +50 -0
- package/src/wire/sse.ts +140 -0
- package/dist/create-tween-hvpmSuwW.js +0 -7
- package/dist/elements/chunks/arrow-left-DQocUFvy.js +0 -1
- package/dist/elements/chunks/audio-visualizer-BqNy7dfm.js +0 -1
- package/dist/elements/chunks/card-BkHbp4BA.js +0 -1
- package/dist/elements/chunks/chat-thread-CkRN6pZ7.js +0 -1
- package/dist/elements/chunks/check-B9-gn6SS.js +0 -1
- package/dist/elements/chunks/chevron-down-BNsxc2hk.js +0 -1
- package/dist/elements/chunks/chevron-right-Hv00StBO.js +0 -1
- package/dist/elements/chunks/circle-0e3KJTDr.js +0 -1
- package/dist/elements/chunks/circle-check-BNAS0JEy.js +0 -1
- package/dist/elements/chunks/code-block-BFUHn6Va.js +0 -1
- package/dist/elements/chunks/context-Cb7k4F-v.js +0 -1
- package/dist/elements/chunks/conversation-list-CvoAkWhN.js +0 -1
- package/dist/elements/chunks/create-tween-oVvAIG8r.js +0 -7
- package/dist/elements/chunks/default-input-Cqqilg9t.js +0 -1
- package/dist/elements/chunks/define-D1din7Ld.js +0 -1
- package/dist/elements/chunks/hover-card-Cmm6Q53m.js +0 -1
- package/dist/elements/chunks/message-BqyXDN3-.js +0 -1
- package/dist/elements/chunks/message-feedback-Djr3z6Yb.js +0 -1
- package/dist/elements/chunks/message-square-vFAgbDaX.js +0 -1
- package/dist/elements/chunks/model-switcher-B94YAKsM.js +0 -1
- package/dist/elements/chunks/reasoning-DTpCGtnY.js +0 -1
- package/dist/elements/chunks/scroll-button-B0cH5fXf.js +0 -1
- package/dist/elements/chunks/skeleton-DSXW5Yya.js +0 -1
- package/dist/elements/chunks/slots--V19HwUb.js +0 -1
- package/dist/elements/chunks/textarea-CUwqAX0G.js +0 -1
- package/dist/elements/chunks/tooltip-CgBZCVKp.js +0 -1
- package/dist/elements/chunks/use-card-resolution-BSu_XHjH.js +0 -1
- package/dist/elements/chunks/x-GRUeeQFT.js +0 -1
- package/dist/host-embed.d.ts +0 -33
- package/dist/kai-provider.d.ts +0 -2
- package/dist/origin.d.ts +0 -5
- package/dist/provider-runtime.d.ts +0 -27
- package/dist/register-impl-DQyejdfb.js +0 -145
- package/dist/validate.d.ts +0 -4
- package/dist/version.d.ts +0 -4
- package/src/components/component-meta.json +0 -4550
- package/src/elements/card-media.jpg +0 -0
- package/src/elements/resizable.d.ts +0 -27
- package/src/elements/video-poster.jpg +0 -0
|
@@ -1,10 +1,14 @@
|
|
|
1
|
-
import { ComposerDoc } from '../primitives/composer-model';
|
|
2
|
-
import { AttachmentData } from './attachments';
|
|
3
|
-
import { MessageActionDetail } from '../primitives/message-feedback';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
1
|
+
import { ComposerDoc } from '../primitives/composer-model.js';
|
|
2
|
+
import { AttachmentData } from './attachments.js';
|
|
3
|
+
import { MessageActionDetail } from '../primitives/message-feedback.js';
|
|
4
|
+
import { RejectedAttachment } from '../elements/default-input.js';
|
|
5
|
+
import { MediaTypeFilter } from '../wire/media-types.js';
|
|
6
|
+
import { TriggerDef } from './composer.js';
|
|
7
|
+
import { ChatMessage } from '../elements/chat-types.js';
|
|
8
|
+
import { ProseSize } from '../primitives/chat-config.js';
|
|
9
|
+
import { ModelOption } from '../types.js';
|
|
10
|
+
import { CardComponentMap } from '../primitives/card-registry.js';
|
|
11
|
+
import { CardSchemaMap } from './card-renderer.js';
|
|
8
12
|
export interface ChatThreadContextUsage {
|
|
9
13
|
usedTokens: number;
|
|
10
14
|
maxTokens: number;
|
|
@@ -16,9 +20,19 @@ export interface ChatThreadProps {
|
|
|
16
20
|
/** Extra classes for the thread root (e.g. `h-full`). */
|
|
17
21
|
class?: string;
|
|
18
22
|
/** The full message thread to render, newest last. Each entry carries its role,
|
|
19
|
-
*
|
|
20
|
-
*
|
|
23
|
+
* ordered `parts`, and optional actions/avatar/feedback. Set as a JS property
|
|
24
|
+
* (`el.messages = [...]`). */
|
|
21
25
|
messages: ChatMessage[];
|
|
26
|
+
/** Add/override card type -> component entries, forwarded to `CardRenderer`
|
|
27
|
+
* for `card` parts. */
|
|
28
|
+
cardTypes?: CardComponentMap;
|
|
29
|
+
/** JSON Schemas for the card types this app renders, keyed by envelope type,
|
|
30
|
+
* forwarded to `CardRenderer` for `card` parts. The companion of `cardTypes`:
|
|
31
|
+
* that says what DRAWS a card, this says what a VALID one looks like.
|
|
32
|
+
* `createCardRegistry(...).validationSchemas` is exactly this shape. Without it
|
|
33
|
+
* the kit checks its own seven built-ins and leaves your own card type
|
|
34
|
+
* unvalidated. A schema here WINS over a built-in of the same name. */
|
|
35
|
+
cardSchemas?: CardSchemaMap;
|
|
22
36
|
/** Value of the input. A **string** is controlled (the host owns the text and
|
|
23
37
|
* updates it on `kai-value-change`). A **ComposerDoc** is a one-time seed that
|
|
24
38
|
* pre-populates pills; the user then edits freely. Leave unset for uncontrolled. */
|
|
@@ -59,29 +73,36 @@ export interface ChatThreadProps {
|
|
|
59
73
|
context?: ChatThreadContextUsage;
|
|
60
74
|
/** Show the scroll-to-bottom button inside the scroll area. Default true. */
|
|
61
75
|
scrollButton?: boolean;
|
|
62
|
-
/** Whether the host has `slot="header-start"` content (left of the title)
|
|
63
|
-
*
|
|
76
|
+
/** Whether the host has `slot="header-start"` content (left of the title). Set
|
|
77
|
+
* by the `<kai-chat>` facade so a custom control forces the header open. */
|
|
64
78
|
headerStart?: boolean;
|
|
65
79
|
/** Whether the host has `slot="header-end"` content (right of the controls). */
|
|
66
80
|
headerEnd?: boolean;
|
|
67
|
-
/** REPLACE
|
|
81
|
+
/** REPLACE: full custom header in place of the built-in title/model/context bar. */
|
|
68
82
|
headerFull?: boolean;
|
|
69
|
-
/** INJECT
|
|
83
|
+
/** INJECT: left sidebar column (e.g. a conversation list / your own nav). */
|
|
70
84
|
sidebar?: boolean;
|
|
71
|
-
/** REPLACE
|
|
85
|
+
/** REPLACE: custom zero-state rendered in the message area while the thread is empty (replaces the empty message list only; the composer and its suggestions still render). */
|
|
72
86
|
empty?: boolean;
|
|
73
|
-
/** REPLACE
|
|
87
|
+
/** REPLACE: full custom composer in place of the built-in prompt input. The
|
|
74
88
|
* projected content wires its own submit (the data-flow boundary). */
|
|
75
89
|
composer?: boolean;
|
|
76
|
-
/** INJECT
|
|
90
|
+
/** INJECT: accessory row just above the composer (e.g. extra actions). */
|
|
77
91
|
composerActions?: boolean;
|
|
78
|
-
/** INJECT
|
|
92
|
+
/** INJECT: footer row below the composer (disclaimers, token meter, …). */
|
|
79
93
|
footer?: boolean;
|
|
94
|
+
/** Which attachment media types the user may stage, in HTML `accept` syntax
|
|
95
|
+
* (`'image/*,application/pdf'`). Omitted means no filter. Narrowed by what the
|
|
96
|
+
* encoders can actually send — the same string, and the same resolver, as
|
|
97
|
+
* `toOpenAIMessages(msgs, { accept })`. */
|
|
98
|
+
accept?: MediaTypeFilter;
|
|
99
|
+
/** Files the composer refused because `accept` excluded them. */
|
|
100
|
+
onAttachmentsRejected?: (rejected: RejectedAttachment[]) => void;
|
|
80
101
|
/** Show a Search (Globe) button in the input toolbar; fires a `search` event. */
|
|
81
102
|
search?: boolean;
|
|
82
103
|
/** Show a Voice (Mic) button in the input toolbar; fires a `voice` event. */
|
|
83
104
|
voice?: boolean;
|
|
84
|
-
/** Rich entity triggers
|
|
105
|
+
/** Rich entity triggers. Each `{ char, kind, items }` opens a caret-anchored
|
|
85
106
|
* menu that inserts an atomic pill (`/` skills, `@` agents/plugins). Set as a
|
|
86
107
|
* JS property; forwarded to the input. */
|
|
87
108
|
triggers?: TriggerDef[];
|
|
@@ -113,4 +134,42 @@ export interface ChatThreadController {
|
|
|
113
134
|
send(): void;
|
|
114
135
|
scrollToBottom(behavior?: ScrollBehavior): void;
|
|
115
136
|
}
|
|
137
|
+
/**
|
|
138
|
+
* THE MESSAGE LIST'S KEY, and the reason it is not the message object. This is
|
|
139
|
+
* the canonical note; `thread.tsx` keys its identical list the same way and
|
|
140
|
+
* points here.
|
|
141
|
+
*
|
|
142
|
+
* `<For>` is REFERENCE-keyed, and a streaming assistant message gets a brand
|
|
143
|
+
* new object identity on every delta — `createAssistantStream` rebuilds it as
|
|
144
|
+
* `{ ...prev[i], parts: next }` because a new reference IS the re-render
|
|
145
|
+
* signal. Keyed on the objects, every chunk therefore looks like an entirely
|
|
146
|
+
* new list: the whole message row is torn down and rebuilt, and everything the
|
|
147
|
+
* user did inside it dies with it. Expanding a tool or reasoning panel
|
|
148
|
+
* mid-stream did nothing at all — the disclosure opened and was discarded
|
|
149
|
+
* microseconds later by the next token. (`MessageBody` keys its PARTS by
|
|
150
|
+
* position for exactly this reason; that fix was dead while its parent kept
|
|
151
|
+
* destroying the subtree above it.)
|
|
152
|
+
*
|
|
153
|
+
* So key on `message.id`, which is stable across the object churn: `<For>` over
|
|
154
|
+
* the id array diffs by string value, a delta produces an identical id list,
|
|
155
|
+
* and no row moves. The row then reads its message through `messages[i()]` —
|
|
156
|
+
* `<For>`'s index accessor, which it keeps current across inserts, removals and
|
|
157
|
+
* moves — so the CONTENT keeps updating through accessors while the DOM stays
|
|
158
|
+
* put.
|
|
159
|
+
*
|
|
160
|
+
* WHY NOT `<Index>`, the other way to survive the churn: `<Index>` keys by
|
|
161
|
+
* POSITION, so a row's local state (an open panel, a half-filled form card)
|
|
162
|
+
* belongs to the slot rather than to the message. Appends and tail truncations
|
|
163
|
+
* (regenerate/edit) are fine, but prepending older turns — load-earlier-history,
|
|
164
|
+
* which every real chat grows — shifts every row, and each open disclosure
|
|
165
|
+
* stays behind with the wrong message. Position IS a valid key inside a
|
|
166
|
+
* message, where the folds only ever append or patch a part in place; it is not
|
|
167
|
+
* one for the message list, where the host owns the array and splices it.
|
|
168
|
+
* Both approaches require the row to read through accessors — that is inherent
|
|
169
|
+
* in keeping a row mounted while its object is replaced, not a cost unique to
|
|
170
|
+
* either.
|
|
171
|
+
*
|
|
172
|
+
* Contract: `id` must be unique per message. It already had to be — the
|
|
173
|
+
* feedback/copy state above this list is keyed by it.
|
|
174
|
+
*/
|
|
116
175
|
export declare function ChatThread(props: ChatThreadProps): import("solid-js").JSX.Element;
|
|
@@ -1,32 +1,7 @@
|
|
|
1
1
|
import { JSX } from 'solid-js';
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
imageAlt?: string;
|
|
6
|
-
icon?: string;
|
|
7
|
-
}
|
|
8
|
-
export interface ChoiceOption {
|
|
9
|
-
id: string;
|
|
10
|
-
label: string;
|
|
11
|
-
description?: string;
|
|
12
|
-
media?: ChoiceOptionMedia;
|
|
13
|
-
meta?: string;
|
|
14
|
-
recommended?: boolean;
|
|
15
|
-
disabled?: boolean;
|
|
16
|
-
payload?: unknown;
|
|
17
|
-
}
|
|
18
|
-
export type ChoiceAllowOther = boolean | {
|
|
19
|
-
label?: string;
|
|
20
|
-
placeholder?: string;
|
|
21
|
-
};
|
|
22
|
-
export interface ChoiceCardData {
|
|
23
|
-
prompt?: string;
|
|
24
|
-
options: ChoiceOption[];
|
|
25
|
-
allowOther?: ChoiceAllowOther;
|
|
26
|
-
submitLabel?: string;
|
|
27
|
-
dismissible?: boolean;
|
|
28
|
-
}
|
|
29
|
-
export type ChoiceCardEnvelope = CardEnvelope<'choice', ChoiceCardData>;
|
|
2
|
+
import { CardHost, CardResolution } from '../primitives/card-contract.js';
|
|
3
|
+
import { ChoiceAllowOther, ChoiceCardData, ChoiceOption } from '../primitives/card-data-types.js';
|
|
4
|
+
export type { ChoiceAllowOther, ChoiceCardData, ChoiceCardEnvelope, ChoiceOption, ChoiceOptionMedia, } from '../primitives/card-data-types.js';
|
|
30
5
|
export declare const CHOICE_CARD_TYPE: "choice";
|
|
31
6
|
/** The reserved action id emitted by the `allowOther` free-text submit. */
|
|
32
7
|
export declare const OTHER_ACTION: "__other__";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EntityRef, ComposerDoc } from '../primitives/composer-model';
|
|
1
|
+
import { EntityRef, ComposerDoc } from '../primitives/composer-model.js';
|
|
2
2
|
export declare const ZWSP = "\u200B";
|
|
3
3
|
export declare const ENTITY_ATTR = "data-kai-entity";
|
|
4
4
|
export declare const entityStore: WeakMap<HTMLElement, EntityRef>;
|
|
@@ -1,22 +1,7 @@
|
|
|
1
1
|
import { JSX } from 'solid-js';
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
export type
|
|
5
|
-
export interface ConfirmAction {
|
|
6
|
-
id: string;
|
|
7
|
-
label: string;
|
|
8
|
-
style?: ConfirmActionStyle;
|
|
9
|
-
payload?: unknown;
|
|
10
|
-
default?: boolean;
|
|
11
|
-
}
|
|
12
|
-
export interface ConfirmCardData {
|
|
13
|
-
heading?: string;
|
|
14
|
-
body?: string;
|
|
15
|
-
tone?: ConfirmTone;
|
|
16
|
-
actions: ConfirmAction[];
|
|
17
|
-
dismissible?: boolean;
|
|
18
|
-
}
|
|
19
|
-
export type ConfirmCardEnvelope = CardEnvelope<'confirm', ConfirmCardData>;
|
|
2
|
+
import { CardHost, CardResolution } from '../primitives/card-contract.js';
|
|
3
|
+
import { ConfirmAction, ConfirmActionStyle, ConfirmCardData } from '../primitives/card-data-types.js';
|
|
4
|
+
export type { ConfirmAction, ConfirmActionStyle, ConfirmCardData, ConfirmCardEnvelope, ConfirmTone, } from '../primitives/card-data-types.js';
|
|
20
5
|
export declare const CONFIRM_CARD_TYPE: "confirm";
|
|
21
6
|
/** Map an action's `style` to a Button variant (falls back + warns on unknown). */
|
|
22
7
|
export declare function buttonVariantForStyle(style: ConfirmActionStyle | undefined): 'default' | 'outline' | 'destructive';
|
|
@@ -59,7 +59,11 @@ export interface ContextUsageRowProps {
|
|
|
59
59
|
class?: string;
|
|
60
60
|
children?: JSX.Element;
|
|
61
61
|
}
|
|
62
|
-
export
|
|
63
|
-
export
|
|
64
|
-
export
|
|
65
|
-
export
|
|
62
|
+
export type ContextInputUsageProps = ContextUsageRowProps;
|
|
63
|
+
export type ContextOutputUsageProps = ContextUsageRowProps;
|
|
64
|
+
export type ContextReasoningUsageProps = ContextUsageRowProps;
|
|
65
|
+
export type ContextCacheUsageProps = ContextUsageRowProps;
|
|
66
|
+
export declare function ContextInputUsage(props: ContextInputUsageProps): JSX.Element;
|
|
67
|
+
export declare function ContextOutputUsage(props: ContextOutputUsageProps): JSX.Element;
|
|
68
|
+
export declare function ContextReasoningUsage(props: ContextReasoningUsageProps): JSX.Element;
|
|
69
|
+
export declare function ContextCacheUsage(props: ContextCacheUsageProps): JSX.Element;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { JSX } from 'solid-js';
|
|
2
|
-
import { ConversationSummary, ConversationGroup } from '../types';
|
|
2
|
+
import { ConversationSummary, ConversationGroup } from '../types.js';
|
|
3
3
|
/**
|
|
4
4
|
* The collapsed-rail fallback: a floating reopen button shown when the
|
|
5
5
|
* conversation sidebar is collapsed. Shared by `kai-workspace` (its collapsed
|
|
@@ -8,10 +8,11 @@ import { ConversationSummary, ConversationGroup } from '../types';
|
|
|
8
8
|
* surrounding region (the workspace puts the thread beside it, the standalone
|
|
9
9
|
* element stands alone). `onExpand` reopens the rail.
|
|
10
10
|
*/
|
|
11
|
-
export
|
|
11
|
+
export interface CollapsedRailProps {
|
|
12
12
|
onExpand: () => void;
|
|
13
13
|
class?: string;
|
|
14
|
-
}
|
|
14
|
+
}
|
|
15
|
+
export declare function CollapsedRail(props: CollapsedRailProps): JSX.Element;
|
|
15
16
|
export interface ConversationListProps {
|
|
16
17
|
groups: ConversationGroup[];
|
|
17
18
|
conversations: ConversationSummary[];
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { JSX } from 'solid-js';
|
|
2
|
-
import { CardEvent } from '../primitives/card-contract';
|
|
3
|
-
import { EmbedCardData } from '../primitives/embed-providers';
|
|
2
|
+
import { CardEvent } from '../primitives/card-contract.js';
|
|
3
|
+
import { EmbedCardData } from '../primitives/embed-providers.js';
|
|
4
4
|
export interface EmbedProps extends Omit<JSX.HTMLAttributes<HTMLDivElement>, 'onError'> {
|
|
5
5
|
/** The card id correlating every emitted event. */
|
|
6
6
|
cardId: string;
|
|
@@ -18,4 +18,4 @@ export interface EmbedProps extends Omit<JSX.HTMLAttributes<HTMLDivElement>, 'on
|
|
|
18
18
|
* emits are lifecycle `ready`, `open`, and failure `error`.
|
|
19
19
|
*/
|
|
20
20
|
export declare function Embed(props: EmbedProps): JSX.Element;
|
|
21
|
-
export type { EmbedCardData } from '../primitives/embed-providers';
|
|
21
|
+
export type { EmbedCardData } from '../primitives/embed-providers.js';
|
|
@@ -1,26 +1,15 @@
|
|
|
1
1
|
import { JSX } from 'solid-js';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
type?: 'html' | 'pdf' | 'image' | 'other';
|
|
14
|
-
/** Lines added vs the base. Rendered as a trailing `+N` stat (success hue,
|
|
15
|
-
* tabular-nums). Only shown when present; omit for a plain file row. */
|
|
16
|
-
additions?: number;
|
|
17
|
-
/** Lines removed vs the base. Rendered as a trailing `-N` stat (error hue). */
|
|
18
|
-
deletions?: number;
|
|
19
|
-
/** Change status vs the base. Drives a small trailing status letter in the
|
|
20
|
-
* conventional VCS hue (added=green, modified=amber, deleted=red,
|
|
21
|
-
* renamed=blue, untracked=muted). Only shown when present. */
|
|
22
|
-
status?: 'added' | 'modified' | 'deleted' | 'renamed' | 'untracked';
|
|
23
|
-
}
|
|
2
|
+
import { ArtifactCardFile as FileTreeFile } from '../primitives/card-data-types.js';
|
|
3
|
+
/** A single artifact file the tree can show + the preview can load.
|
|
4
|
+
*
|
|
5
|
+
* AUTHORED IN ../primitives/card-data-types.ts as `ArtifactCardFile`, and aliased
|
|
6
|
+
* here rather than declared, so there is ONE shape and not a copy of one. It has
|
|
7
|
+
* to live in that `.ts` because `ArtifactCardData.files` reaches it: a type import
|
|
8
|
+
* still has to RESOLVE, and a Node/no-DOM project (tsconfig.mcp.json has no `jsx`
|
|
9
|
+
* on purpose) cannot resolve a `.tsx` at all — so leaving this declaration here
|
|
10
|
+
* would put TS6142 back on any backend that names an artifact card payload. See
|
|
11
|
+
* that file's header. */
|
|
12
|
+
export type { ArtifactCardFile as FileTreeFile } from '../primitives/card-data-types.js';
|
|
24
13
|
/** A change status a file can carry. */
|
|
25
14
|
export type FileStatus = NonNullable<FileTreeFile['status']>;
|
|
26
15
|
/** A folder node in the built tree. */
|
|
@@ -1,48 +1,7 @@
|
|
|
1
1
|
import { JSX } from 'solid-js';
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
export
|
|
5
|
-
type: 'string' | 'number' | 'integer' | 'boolean' | 'array' | 'object';
|
|
6
|
-
title?: string;
|
|
7
|
-
description?: string;
|
|
8
|
-
default?: unknown;
|
|
9
|
-
enum?: unknown[];
|
|
10
|
-
format?: 'email' | 'uri' | 'url' | 'date' | 'date-time' | 'time';
|
|
11
|
-
minimum?: number;
|
|
12
|
-
maximum?: number;
|
|
13
|
-
minLength?: number;
|
|
14
|
-
maxLength?: number;
|
|
15
|
-
pattern?: string;
|
|
16
|
-
minItems?: number;
|
|
17
|
-
maxItems?: number;
|
|
18
|
-
items?: FormField | {
|
|
19
|
-
enum: unknown[];
|
|
20
|
-
};
|
|
21
|
-
properties?: Record<string, FormField>;
|
|
22
|
-
required?: string[];
|
|
23
|
-
readOnly?: boolean;
|
|
24
|
-
'x-kai-widget'?: 'textarea' | 'slider' | 'rating' | 'radio' | 'select' | 'checkbox' | 'password' | 'switch';
|
|
25
|
-
'x-kai-placeholder'?: string;
|
|
26
|
-
'x-kai-step'?: number;
|
|
27
|
-
}
|
|
28
|
-
/** The form definition = CardEnvelope.data for type:'form'. */
|
|
29
|
-
export interface FormDefinition {
|
|
30
|
-
type: 'object';
|
|
31
|
-
title?: string;
|
|
32
|
-
description?: string;
|
|
33
|
-
required?: string[];
|
|
34
|
-
properties: Record<string, FormField>;
|
|
35
|
-
'x-kai-order'?: string[];
|
|
36
|
-
'x-kai-inlineMax'?: number;
|
|
37
|
-
'x-kai-submitLabel'?: string;
|
|
38
|
-
'x-kai-dismissible'?: boolean;
|
|
39
|
-
'x-kai-actions'?: {
|
|
40
|
-
id: string;
|
|
41
|
-
label: string;
|
|
42
|
-
variant?: 'default' | 'ghost' | 'outline';
|
|
43
|
-
}[];
|
|
44
|
-
}
|
|
45
|
-
export type FormCardEnvelope = CardEnvelope<'form', FormDefinition>;
|
|
2
|
+
import { CardHost, CardResolution } from '../primitives/card-contract.js';
|
|
3
|
+
import { FormDefinition, FormField } from '../primitives/card-data-types.js';
|
|
4
|
+
export type { FormCardEnvelope, FormDefinition, FormField, } from '../primitives/card-data-types.js';
|
|
46
5
|
/** The internal widget identifiers `widgetFor` resolves to. */
|
|
47
6
|
export type WidgetKind = 'text' | 'textarea' | 'password' | 'email' | 'url' | 'date' | 'datetime' | 'time' | 'number' | 'slider' | 'rating' | 'switch' | 'checkbox' | 'radio' | 'select' | 'checkbox-group' | 'multiselect' | 'repeater' | 'taglist' | 'fieldset' | 'unsupported';
|
|
48
7
|
export declare const DEFAULT_INLINE_MAX = 4;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { JSX } from 'solid-js';
|
|
2
|
-
import { CardEvent } from '../primitives/card-contract';
|
|
3
|
-
import { LinkPreviewData } from '../primitives/link-preview';
|
|
2
|
+
import { CardEvent } from '../primitives/card-contract.js';
|
|
3
|
+
import { LinkPreviewData } from '../primitives/link-preview.js';
|
|
4
4
|
export interface LinkPreviewProps {
|
|
5
5
|
/** The card id correlating every emitted event. */
|
|
6
6
|
cardId: string;
|
|
@@ -20,4 +20,4 @@ export interface LinkPreviewProps {
|
|
|
20
20
|
* host policy performs the navigation so it can veto/redirect.
|
|
21
21
|
*/
|
|
22
22
|
export declare function LinkPreview(props: LinkPreviewProps): JSX.Element;
|
|
23
|
-
export type { LinkPreviewData } from '../primitives/link-preview';
|
|
23
|
+
export type { LinkPreviewData } from '../primitives/link-preview.js';
|
|
@@ -6,55 +6,37 @@ export interface LoaderProps {
|
|
|
6
6
|
text?: string;
|
|
7
7
|
class?: string;
|
|
8
8
|
}
|
|
9
|
-
|
|
9
|
+
/** Props of the shape-only loader variants (no label). */
|
|
10
|
+
export interface LoaderShapeProps {
|
|
10
11
|
class?: string;
|
|
11
12
|
size?: LoaderSize;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
size?: LoaderSize;
|
|
16
|
-
}): import("solid-js").JSX.Element;
|
|
17
|
-
export declare function PulseLoader(props: {
|
|
18
|
-
class?: string;
|
|
19
|
-
size?: LoaderSize;
|
|
20
|
-
}): import("solid-js").JSX.Element;
|
|
21
|
-
export declare function PulseDotLoader(props: {
|
|
22
|
-
class?: string;
|
|
23
|
-
size?: LoaderSize;
|
|
24
|
-
}): import("solid-js").JSX.Element;
|
|
25
|
-
export declare function DotsLoader(props: {
|
|
26
|
-
class?: string;
|
|
27
|
-
size?: LoaderSize;
|
|
28
|
-
}): import("solid-js").JSX.Element;
|
|
29
|
-
export declare function TypingLoader(props: {
|
|
30
|
-
class?: string;
|
|
31
|
-
size?: LoaderSize;
|
|
32
|
-
}): import("solid-js").JSX.Element;
|
|
33
|
-
export declare function WaveLoader(props: {
|
|
34
|
-
class?: string;
|
|
35
|
-
size?: LoaderSize;
|
|
36
|
-
}): import("solid-js").JSX.Element;
|
|
37
|
-
export declare function BarsLoader(props: {
|
|
38
|
-
class?: string;
|
|
39
|
-
size?: LoaderSize;
|
|
40
|
-
}): import("solid-js").JSX.Element;
|
|
41
|
-
export declare function TerminalLoader(props: {
|
|
42
|
-
class?: string;
|
|
43
|
-
size?: LoaderSize;
|
|
44
|
-
}): import("solid-js").JSX.Element;
|
|
45
|
-
export declare function TextBlinkLoader(props: {
|
|
46
|
-
text?: string;
|
|
47
|
-
class?: string;
|
|
48
|
-
size?: LoaderSize;
|
|
49
|
-
}): import("solid-js").JSX.Element;
|
|
50
|
-
export declare function TextShimmerLoader(props: {
|
|
51
|
-
text?: string;
|
|
52
|
-
class?: string;
|
|
53
|
-
size?: LoaderSize;
|
|
54
|
-
}): import("solid-js").JSX.Element;
|
|
55
|
-
export declare function TextDotsLoader(props: {
|
|
13
|
+
}
|
|
14
|
+
/** Props of the text-based loader variants, which also take the label. */
|
|
15
|
+
export interface LoaderTextProps extends LoaderShapeProps {
|
|
56
16
|
text?: string;
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
17
|
+
}
|
|
18
|
+
export type CircularLoaderProps = LoaderShapeProps;
|
|
19
|
+
export type ClassicLoaderProps = LoaderShapeProps;
|
|
20
|
+
export type PulseLoaderProps = LoaderShapeProps;
|
|
21
|
+
export type PulseDotLoaderProps = LoaderShapeProps;
|
|
22
|
+
export type DotsLoaderProps = LoaderShapeProps;
|
|
23
|
+
export type TypingLoaderProps = LoaderShapeProps;
|
|
24
|
+
export type WaveLoaderProps = LoaderShapeProps;
|
|
25
|
+
export type BarsLoaderProps = LoaderShapeProps;
|
|
26
|
+
export type TerminalLoaderProps = LoaderShapeProps;
|
|
27
|
+
export type TextBlinkLoaderProps = LoaderTextProps;
|
|
28
|
+
export type TextShimmerLoaderProps = LoaderTextProps;
|
|
29
|
+
export type TextDotsLoaderProps = LoaderTextProps;
|
|
30
|
+
export declare function CircularLoader(props: CircularLoaderProps): import("solid-js").JSX.Element;
|
|
31
|
+
export declare function ClassicLoader(props: ClassicLoaderProps): import("solid-js").JSX.Element;
|
|
32
|
+
export declare function PulseLoader(props: PulseLoaderProps): import("solid-js").JSX.Element;
|
|
33
|
+
export declare function PulseDotLoader(props: PulseDotLoaderProps): import("solid-js").JSX.Element;
|
|
34
|
+
export declare function DotsLoader(props: DotsLoaderProps): import("solid-js").JSX.Element;
|
|
35
|
+
export declare function TypingLoader(props: TypingLoaderProps): import("solid-js").JSX.Element;
|
|
36
|
+
export declare function WaveLoader(props: WaveLoaderProps): import("solid-js").JSX.Element;
|
|
37
|
+
export declare function BarsLoader(props: BarsLoaderProps): import("solid-js").JSX.Element;
|
|
38
|
+
export declare function TerminalLoader(props: TerminalLoaderProps): import("solid-js").JSX.Element;
|
|
39
|
+
export declare function TextBlinkLoader(props: TextBlinkLoaderProps): import("solid-js").JSX.Element;
|
|
40
|
+
export declare function TextShimmerLoader(props: TextShimmerLoaderProps): import("solid-js").JSX.Element;
|
|
41
|
+
export declare function TextDotsLoader(props: TextDotsLoaderProps): import("solid-js").JSX.Element;
|
|
60
42
|
export declare function Loader(props: LoaderProps): import("solid-js").JSX.Element;
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { JSX } from 'solid-js';
|
|
2
|
+
/** One skill badge. Also the shape of `<kai-skills>`' `skills` property and of a
|
|
3
|
+
* `<kai-skill>` light-DOM child. */
|
|
2
4
|
export interface Skill {
|
|
5
|
+
/** Stable identifier for the skill. */
|
|
3
6
|
id: string;
|
|
7
|
+
/** Human-readable skill name shown on the badge. */
|
|
4
8
|
name: string;
|
|
5
9
|
}
|
|
6
10
|
export interface MessageSkillsProps {
|
|
@@ -1,14 +1,43 @@
|
|
|
1
1
|
import { JSX } from 'solid-js';
|
|
2
|
-
import { ChatMessageAction, CustomAction, FeedbackVote } from '../elements/chat-types';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
2
|
+
import { ChatMessageAction, CustomAction, FeedbackVote, MessagePart } from '../elements/chat-types.js';
|
|
3
|
+
import { CardSchemaMap } from './card-renderer.js';
|
|
4
|
+
import { CardComponentMap } from '../primitives/card-registry.js';
|
|
5
|
+
/** Who is speaking in a message row. This is the SEMANTIC role of the message,
|
|
6
|
+
* not an ARIA role — see `MessageProps['role']`. */
|
|
7
|
+
export type MessageRole = 'user' | 'assistant' | 'system';
|
|
8
|
+
export interface MessageProps extends Omit<JSX.HTMLAttributes<HTMLDivElement>, 'role'> {
|
|
6
9
|
children: JSX.Element;
|
|
10
|
+
/** Who is speaking: `'user'`, `'assistant'` or `'system'`.
|
|
11
|
+
*
|
|
12
|
+
* This SHADOWS the inherited ARIA `role` attribute on purpose, and is the
|
|
13
|
+
* reason `JSX.HTMLAttributes` is `Omit`ted above. Before this existed, `role`
|
|
14
|
+
* resolved to ARIA and was spread straight onto the row, so `<Message
|
|
15
|
+
* role="user">` shipped `role="user"` on a div — not a valid ARIA role, and a
|
|
16
|
+
* critical axe `aria-roles` violation ("Role must be one of the valid ARIA
|
|
17
|
+
* roles: user") on every message that used the prop. Chromium discards the
|
|
18
|
+
* unknown token and computes `generic`, so the damage was a failed a11y audit
|
|
19
|
+
* and a row with no accessible role or name at all, not a mis-announced one.
|
|
20
|
+
*
|
|
21
|
+
* It is now consumed here and never reaches the DOM. What the row gets
|
|
22
|
+
* instead is a VALID ARIA role that can carry a name — `role="article"` plus
|
|
23
|
+
* an `aria-label` naming the speaker — and `data-role` for styling and
|
|
24
|
+
* querying. Omit the prop and the row stays an unlabelled `<div>`, exactly as
|
|
25
|
+
* before, so the many role-less call sites are untouched.
|
|
26
|
+
*
|
|
27
|
+
* The trade-off: the row's ARIA role can no longer be set through this prop.
|
|
28
|
+
* Pass `aria-label` (or any other ARIA attribute) to override the default
|
|
29
|
+
* naming — the spread below still wins over what this computes. */
|
|
30
|
+
role?: MessageRole;
|
|
7
31
|
}
|
|
8
32
|
declare function Message(props: MessageProps): JSX.Element;
|
|
9
33
|
export interface MessageAvatarProps {
|
|
10
|
-
|
|
11
|
-
|
|
34
|
+
/** Avatar image URL. Optional: with no `src` the component renders `fallback`
|
|
35
|
+
* (initials), which is the whole point of having a fallback — requiring `src`
|
|
36
|
+
* forced `<MessageAvatar src="" …/>` at every initials-only call site. */
|
|
37
|
+
src?: string;
|
|
38
|
+
/** Alt text for the image. Only meaningful alongside `src`; defaults to `''`
|
|
39
|
+
* so an avatar stays decorative rather than announcing a filename. */
|
|
40
|
+
alt?: string;
|
|
12
41
|
fallback?: string;
|
|
13
42
|
class?: string;
|
|
14
43
|
}
|
|
@@ -60,21 +89,26 @@ export interface MessageActionBarProps {
|
|
|
60
89
|
*/
|
|
61
90
|
declare function MessageActionBar(props: MessageActionBarProps): JSX.Element;
|
|
62
91
|
export interface MessageBodyProps {
|
|
63
|
-
/** The message text
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
|
|
92
|
+
/** The message's ordered parts (text, reasoning, tool, card, source, file),
|
|
93
|
+
* rendered in a single pass in the order they appear. A run of consecutive
|
|
94
|
+
* `source` parts renders as ONE citation row (`part="citations"`), placed
|
|
95
|
+
* OUTSIDE the message bubble so a citation is never confused with a link the
|
|
96
|
+
* model typed into its prose. */
|
|
97
|
+
parts: MessagePart[];
|
|
98
|
+
/** Add/override card type -> component entries, forwarded to `CardRenderer`
|
|
99
|
+
* for `card` parts. */
|
|
100
|
+
cardTypes?: CardComponentMap;
|
|
101
|
+
/** JSON Schemas for the card types this app renders, keyed by envelope type,
|
|
102
|
+
* forwarded to `CardRenderer` for `card` parts. The companion of `cardTypes`:
|
|
103
|
+
* that says what DRAWS a card, this says what a VALID one looks like.
|
|
104
|
+
* `createCardRegistry(...).validationSchemas` is exactly this shape. Without it
|
|
105
|
+
* the kit checks its own seven built-ins and leaves your own card type
|
|
106
|
+
* unvalidated. A schema here WINS over a built-in of the same name. */
|
|
107
|
+
cardSchemas?: CardSchemaMap;
|
|
74
108
|
/** Whether this is a user message (right-aligned bubble) vs an assistant
|
|
75
109
|
* message (full-width transparent). */
|
|
76
110
|
isUser: boolean;
|
|
77
|
-
/** Whether
|
|
111
|
+
/** Whether text parts render as markdown. */
|
|
78
112
|
markdown: boolean;
|
|
79
113
|
/** Action-bar entries — built-in names and/or custom descriptors. When empty
|
|
80
114
|
* the bar is not rendered. */
|
|
@@ -98,10 +132,39 @@ export interface MessageBodyProps {
|
|
|
98
132
|
* shadow this is `<slot name="after-body" />`. */
|
|
99
133
|
afterBody?: JSX.Element;
|
|
100
134
|
}
|
|
135
|
+
/** One render group over an ordered `parts` array. Two part types collapse runs:
|
|
136
|
+
* consecutive `file` parts become a single `'files'` group so they share one
|
|
137
|
+
* `<Attachments>` row (matching the pre-parts layout) instead of each opening
|
|
138
|
+
* its own, and consecutive `source` parts become a single `'sources'` group so
|
|
139
|
+
* the N citations one search produced are ONE wrapped row rather than N stacked
|
|
140
|
+
* rows. Every other part is its own `'single'` group. Pure and order-preserving:
|
|
141
|
+
* it only decides where the wrapper boundaries fall, never reorders or drops
|
|
142
|
+
* anything, so a group sits exactly where its parts sat in `parts`. */
|
|
143
|
+
export type MessagePartGroup = {
|
|
144
|
+
kind: 'single';
|
|
145
|
+
part: Exclude<MessagePart, {
|
|
146
|
+
type: 'file';
|
|
147
|
+
} | {
|
|
148
|
+
type: 'source';
|
|
149
|
+
}>;
|
|
150
|
+
} | {
|
|
151
|
+
kind: 'files';
|
|
152
|
+
parts: Extract<MessagePart, {
|
|
153
|
+
type: 'file';
|
|
154
|
+
}>[];
|
|
155
|
+
} | {
|
|
156
|
+
kind: 'sources';
|
|
157
|
+
parts: Extract<MessagePart, {
|
|
158
|
+
type: 'source';
|
|
159
|
+
}>[];
|
|
160
|
+
};
|
|
161
|
+
export declare function groupMessageParts(parts: MessagePart[]): MessagePartGroup[];
|
|
101
162
|
/**
|
|
102
|
-
* The shared message body:
|
|
103
|
-
*
|
|
104
|
-
*
|
|
163
|
+
* The shared message body: the message's `parts` rendered in a single ordered
|
|
164
|
+
* pass (text, reasoning, tool calls, generative-UI cards, citations and file
|
|
165
|
+
* attachments interleaved exactly as they appear), followed by the action bar.
|
|
166
|
+
* Runs of `source` and `file` parts each collapse into one row. This is the
|
|
167
|
+
* single source of truth for how a message renders, consumed by `ChatThread`
|
|
105
168
|
* (the `<For>` over `messages`), the standalone `<kai-message>` facade, and (in
|
|
106
169
|
* future) `kai-compare` for each candidate. Pure/prop-driven: all interaction
|
|
107
170
|
* state (copied, feedback vote) is owned above and passed in.
|