@kitn.ai/ui 0.25.2 → 0.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/components/attachment-types.d.ts +46 -1
- package/dist/components/attachments.d.ts +31 -0
- package/dist/components/audio-visualizer/fit-scale.d.ts +50 -0
- package/dist/components/audio-visualizer/index.d.ts +15 -1
- package/dist/components/audio-visualizer/variant-bar.d.ts +24 -1
- package/dist/components/chat-thread.d.ts +3 -41
- package/dist/components/code-block.d.ts +22 -0
- package/dist/components/conversation-item.d.ts +54 -1
- package/dist/components/conversation-list.d.ts +65 -0
- package/dist/components/form.d.ts +42 -0
- package/dist/components/message.d.ts +7 -0
- package/dist/components/toast.d.ts +2 -1
- package/dist/components/voice-input.d.ts +8 -0
- package/dist/components/voice-output.d.ts +12 -1
- package/dist/components/workspace-shell.d.ts +87 -0
- package/dist/{create-tween-B5Y4Im8G.js → create-tween-BFT6c-Y8.js} +1 -1
- package/dist/{create-tween-4z1XYLkR.js → create-tween-CJNlzoaO.js} +1 -1
- package/dist/{create-tween-CUzOlaMS.js → create-tween-CQED4T0g.js} +1 -1
- package/dist/custom-elements.json +2931 -2572
- package/dist/diagnostics/hook.d.ts +81 -0
- package/dist/diagnostics/index.d.ts +7 -0
- package/dist/diagnostics/report-request.d.ts +61 -0
- package/dist/diagnostics.d.ts +5 -0
- package/dist/diagnostics.js +209 -0
- 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/autoloader.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-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-b5A8hlHs.js → Icon--Y8vsFal.js} +1 -1
- package/dist/elements/chunks/action-icons-D9u3OzYW.js +1 -0
- package/dist/elements/chunks/arrow-left-CVh1TeN7.js +1 -0
- package/dist/elements/chunks/{artifact-BSuPYFHY.js → artifact-BkYcfIlZ.js} +1 -1
- package/dist/elements/chunks/attachments-DwfNlubq.js +1 -0
- package/dist/elements/chunks/audio-visualizer-D7lB6mvR.js +1 -0
- package/dist/elements/chunks/{badge-TIMiJFKc.js → badge-Q0-Cmwzz.js} +1 -1
- package/dist/elements/chunks/{button-B9okqG73.js → button-flUbeufF.js} +1 -1
- package/dist/elements/chunks/{card-renderer-CSoTL_e1.js → card-renderer-3Dyl-FpN.js} +1 -1
- package/dist/elements/chunks/check-B5kBPKeo.js +1 -0
- package/dist/elements/chunks/chevron-down-DZ1GS39h.js +1 -0
- package/dist/elements/chunks/chevron-right-CvP7OUd2.js +1 -0
- package/dist/elements/chunks/{choice-card-CGMc3kek.js → choice-card-D4QUIOWZ.js} +1 -1
- package/dist/elements/chunks/circle-CDf9g6MQ.js +1 -0
- package/dist/elements/chunks/circle-check-CA47Nqbz.js +1 -0
- package/dist/elements/chunks/{circle-x-mhH7pOK2.js → circle-x-CJ_HVbC8.js} +1 -1
- package/dist/elements/chunks/code-block-BdLiTitd.js +1 -0
- package/dist/elements/chunks/collapsible-BzbXpPzr.js +1 -0
- package/dist/elements/chunks/{composer-CZZmtYOT.js → composer-Byve-n8K.js} +2 -2
- package/dist/elements/chunks/{confirm-card-BWjf2-xo.js → confirm-card-B0flE3MN.js} +1 -1
- package/dist/elements/chunks/context-VLIL3sJ-.js +1 -0
- package/dist/elements/chunks/controllable-DTwTIlwp.js +1 -0
- package/dist/elements/chunks/conversation-item-BDztezOG.js +1 -0
- package/dist/elements/chunks/copy-Nf-kqxXH.js +1 -0
- package/dist/elements/chunks/{create-tween-CUrM6D_o.js → create-tween-c4Z8TDYz.js} +2 -2
- package/dist/elements/chunks/default-input-C2iLFq0b.js +1 -0
- package/dist/elements/chunks/define-wjHR1MkU.js +1 -0
- package/dist/elements/chunks/disclosure-CcNbyLy0.js +1 -0
- package/dist/elements/chunks/{download-DnCyWFJE.js → download-C4V7tBdb.js} +1 -1
- package/dist/elements/chunks/dropdown-BgWTthUx.js +1 -0
- package/dist/elements/chunks/{ellipsis-CVxqfsDZ.js → ellipsis-7gU33mL2.js} +1 -1
- package/dist/elements/chunks/embed-D3KewsIJ.js +1 -0
- package/dist/elements/chunks/{external-link-DG2sRdQL.js → external-link-CSOEsNlx.js} +1 -1
- package/dist/elements/chunks/{file-text-D0J9F6M7.js → file-text-D1G8khle.js} +1 -1
- package/dist/elements/chunks/{file-tree-yGWNK0Js.js → file-tree-zvB2i7P9.js} +1 -1
- package/dist/elements/chunks/{folder-NV1pi_ud.js → folder-WW2LGLid.js} +1 -1
- package/dist/elements/chunks/form-CQirdC4W.js +1 -0
- package/dist/elements/chunks/hover-card-CJJkfHTK.js +1 -0
- package/dist/elements/chunks/icon-Cfgmf4fa.js +1 -0
- package/dist/elements/chunks/{info-C8r5Q6cc.js → info-DX3YMOt6.js} +1 -1
- package/dist/elements/chunks/input-BtW9U6Sq.js +1 -0
- package/dist/elements/chunks/{kbd-OGJDUT-O.js → kbd-LGXwuT_V.js} +1 -1
- package/dist/elements/chunks/{link-BdsfLB7b.js → link-2My69BqT.js} +1 -1
- package/dist/elements/chunks/{link-preview-Cf5KOP-i.js → link-preview-OQ9IEq0f.js} +1 -1
- package/dist/elements/chunks/{loader-B5QzK_8_.js → loader-iOxc_Tu-.js} +1 -1
- package/dist/elements/chunks/{markdown-DbozyYqa.js → markdown-DgBFaGAz.js} +1 -1
- package/dist/elements/chunks/{message-DtXKPqiR.js → message-VMZohrXx.js} +1 -1
- package/dist/elements/chunks/message-circle-CpXMM-_n.js +1 -0
- package/dist/elements/chunks/message-square-DxcWtETQ.js +1 -0
- package/dist/elements/chunks/message-tZmV2A3p.js +1 -0
- package/dist/elements/chunks/{minimize-2-SegJ_oku.js → minimize-2-DPIUKTrT.js} +1 -1
- package/dist/elements/chunks/{model-switcher-D7JrFFHp.js → model-switcher-DsT8tFB0.js} +1 -1
- package/dist/elements/chunks/{overlay-CV7z2YuX.js → overlay-DuiwdXjm.js} +1 -1
- package/dist/elements/chunks/{paperclip-Bg0ITU3b.js → paperclip-CRZVp4z_.js} +1 -1
- package/dist/elements/chunks/{progress-bar-D1_rzt6N.js → progress-bar-DNy66e_E.js} +1 -1
- package/dist/elements/chunks/{prompt-suggestion-D5Sm8xF1.js → prompt-suggestion-Bn64Nl7L.js} +1 -1
- package/dist/elements/chunks/reasoning-Emn9N4-T.js +1 -0
- package/dist/elements/chunks/{resizable-Dpzjlvp4.js → resizable-D181b4fM.js} +1 -1
- package/dist/elements/chunks/{rotate-cw-DzVDJOA1.js → rotate-cw-CPWe37D9.js} +1 -1
- package/dist/elements/chunks/{scroll-area-93A1bbeG.js → scroll-area-ClZkZxIk.js} +1 -1
- package/dist/elements/chunks/scroll-button-DPE-t3x_.js +1 -0
- package/dist/elements/chunks/{separator-DH2r_ZSZ.js → separator-CeJHQqLW.js} +1 -1
- package/dist/elements/chunks/{settings-BFMOd6yB.js → settings-CqaHgJF9.js} +1 -1
- package/dist/elements/chunks/{settings-group-B3VZKIcz.js → settings-group-CjqjLCOn.js} +1 -1
- package/dist/elements/chunks/share-CyfnNEqp.js +1 -0
- package/dist/elements/chunks/{skeleton-N8BuWYmf.js → skeleton-D8akBnKS.js} +1 -1
- package/dist/elements/chunks/slots-DaNjX0rc.js +1 -0
- package/dist/elements/chunks/{source-w9V0NnBn.js → source-UWCvmVak.js} +1 -1
- package/dist/elements/chunks/{star-DHvACxtm.js → star-DoHFAikQ.js} +1 -1
- package/dist/elements/chunks/store-Cjq0qwYN.js +1 -0
- package/dist/elements/chunks/{tasks-card-lPxoodlA.js → tasks-card-CmZ5xh6v.js} +1 -1
- package/dist/elements/chunks/{text-shimmer-BY_rI3s5.js → text-shimmer-DYn09zrz.js} +1 -1
- package/dist/elements/chunks/textarea-skiGHURM.js +1 -0
- package/dist/elements/chunks/{thumbs-up-DQe0hvkZ.js → thumbs-up-DX2Ijk3H.js} +1 -1
- package/dist/elements/chunks/{toast-store-VUZZBhzH.js → toast-store-CFnQpThX.js} +1 -1
- package/dist/elements/chunks/{tool-C1YtxwPu.js → tool-DKQ2D1DP.js} +1 -1
- package/dist/elements/chunks/{tooltip-BqwnFWhn.js → tooltip-B0G99y8w.js} +1 -1
- package/dist/elements/chunks/{triangle-alert-B6or7F5u.js → triangle-alert-F9cyUEyy.js} +1 -1
- package/dist/elements/chunks/{use-card-resolution-DJg32jGH.js → use-card-resolution-DoA2f_EU.js} +1 -1
- package/dist/elements/chunks/{variant-aurora-QXTZPyST.js → variant-aurora-qt6Zct8M.js} +2 -2
- package/dist/elements/chunks/variant-custom-tJp22_BQ.js +1 -0
- package/dist/{variant-wave-BwzrHD1s.js → elements/chunks/variant-wave-CaQ5ti39.js} +2 -2
- package/dist/elements/chunks/x-B6UnOiLw.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-item.d.ts +1 -0
- package/dist/elements/conversation-item.js +1 -0
- package/dist/elements/conversation-list.js +1 -1
- package/dist/elements/default-input.d.ts +3 -3
- package/dist/elements/define.d.ts +27 -0
- package/dist/elements/diagnostic-events.d.ts +74 -0
- package/dist/elements/dialog.js +1 -1
- package/dist/elements/dock.d.ts +1 -0
- package/dist/elements/dock.js +149 -0
- package/dist/elements/dropdown.d.ts +1 -0
- package/dist/elements/dropdown.js +1 -0
- package/dist/elements/editable-label.js +1 -1
- package/dist/elements/element-diagnostics.d.ts +81 -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 +2 -0
- package/dist/elements/remote.js +1 -1
- package/dist/elements/resizable.js +1 -1
- package/dist/elements/response-stream.js +3 -3
- 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/slots.d.ts +35 -3
- 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/voice-input.js +1 -1
- package/dist/elements/voice-output.js +1 -1
- package/dist/elements.d.ts +232 -148
- package/dist/index.d.ts +2 -0
- package/dist/index.js +5456 -4931
- package/dist/index.server.js +4142 -3669
- package/dist/kai-provider.es.js +40 -40
- package/dist/kai.es.js +1 -1
- package/dist/llms/llms-full.txt +184 -69
- package/dist/llms/llms.txt +3 -3
- package/dist/mcp.es.js +2669 -546
- package/dist/primitives/use-resize-observer.d.ts +23 -0
- package/dist/primitives/use-speech-recognition.d.ts +8 -0
- package/dist/primitives/use-text-stream.d.ts +5 -0
- package/dist/react/index.d.ts +115 -266
- package/dist/react.js +247 -221
- package/dist/register-impl-DpE7icIb.js +293 -0
- package/dist/schemas/index.d.ts +1 -1
- package/dist/schemas/tool-defs.d.ts +35 -0
- package/dist/schemas.js +403 -310
- package/dist/{solid-BMuDmFo_.js → solid-BtdqNZI7.js} +8435 -7394
- package/dist/{solid-CGYNdLRR.js → solid-CnavwBye.js} +5987 -5035
- package/dist/solid.d.ts +5 -0
- package/dist/solid.js +210 -203
- package/dist/solid.server.js +210 -203
- package/dist/state/index.d.ts +4 -0
- package/dist/state/persistence.d.ts +51 -0
- package/dist/state/stream.d.ts +50 -0
- package/dist/state/threads.d.ts +71 -0
- package/dist/state.js +269 -169
- package/dist/types.d.ts +4 -2
- package/dist/ui/dock.d.ts +109 -0
- package/dist/ui/hover-card.d.ts +44 -0
- package/dist/{variant-aurora-DwSOfraQ.js → variant-aurora-B8II3-I1.js} +27 -27
- package/dist/{variant-aurora-wKvAQ5wp.js → variant-aurora-CMNWOSJR.js} +28 -28
- package/dist/{variant-aurora-XEkPT0_z.js → variant-aurora-CcuDMWwQ.js} +2 -2
- package/dist/{variant-custom-eFIg2XWQ.js → variant-custom-BdvYC7af.js} +40 -40
- package/dist/{variant-custom-BhS9wIpU.js → variant-custom-C714mqKl.js} +65 -65
- package/dist/variant-custom-L16JLLZy.js +1 -0
- package/dist/{elements/chunks/variant-wave-DDCwhLas.js → variant-wave-2S4La2Ka.js} +2 -2
- package/dist/{variant-wave-CbVsmgwT.js → variant-wave-D7ruiA1W.js} +25 -25
- package/dist/{variant-wave-CUWGx9Bn.js → variant-wave-ecwykeyL.js} +21 -21
- package/dist/wire/chunk.d.ts +47 -0
- package/dist/wire/diagnostics.d.ts +575 -0
- package/dist/wire/encode-probe.d.ts +70 -0
- package/dist/wire/encode.d.ts +24 -0
- package/dist/wire/index.d.ts +2 -0
- package/dist/wire/sse.d.ts +10 -2
- package/dist/wire.js +917 -480
- package/frameworks/react/index.tsx +132 -93
- package/llms-full.txt +184 -69
- package/llms.txt +3 -3
- package/package.json +26 -6
- package/src/agent-tooling/archetypes.ts +41 -9
- package/src/agent-tooling/catalog/README.md +676 -0
- package/src/agent-tooling/catalog/catalog-types.ts +231 -0
- package/src/agent-tooling/catalog/fabrications.ts +96 -0
- package/src/agent-tooling/catalog/invariants.ts +284 -0
- package/src/agent-tooling/catalog/labs-titles.ts +114 -0
- package/src/agent-tooling/catalog/scenarios.ts +87 -0
- package/src/agent-tooling/catalog/surfaces.ts +275 -0
- package/src/agent-tooling/integrations/anthropic.ts +7 -1
- package/src/agent-tooling/integrations/cloudflare.ts +43 -2
- package/src/agent-tooling/integrations/langgraph.ts +7 -1
- package/src/agent-tooling/integrations/mastra.ts +7 -1
- package/src/agent-tooling/integrations/mock.ts +92 -17
- package/src/agent-tooling/integrations/ollama.ts +7 -1
- package/src/agent-tooling/integrations/openai.ts +7 -1
- package/src/agent-tooling/integrations/openrouter.ts +7 -1
- package/src/agent-tooling/integrations/pi.ts +56 -1
- package/src/agent-tooling/integrations/vercel-ai-sdk.ts +7 -1
- package/src/agent-tooling/mcp/css-raw.d.ts +12 -0
- package/src/agent-tooling/mcp/manifest.ts +100 -1
- package/src/agent-tooling/mcp/server.ts +61 -5
- package/src/agent-tooling/mcp/tools/reference.ts +440 -4
- package/src/agent-tooling/mcp/tools/scaffold.ts +1834 -307
- package/src/agent-tooling/mcp/tools/theme.ts +146 -30
- package/src/agent-tooling/mcp/validate-args.ts +141 -0
- package/src/agent-tooling/registry.ts +19 -7
- package/src/agent-tooling/route-emit.ts +26 -2
- package/src/components/attachment-types.ts +47 -1
- package/src/components/attachments.tsx +169 -22
- package/src/components/audio-visualizer/fit-scale.ts +112 -0
- package/src/components/audio-visualizer/index.tsx +80 -3
- package/src/components/audio-visualizer/variant-aurora.tsx +10 -4
- package/src/components/audio-visualizer/variant-bar.tsx +38 -6
- package/src/components/audio-visualizer/variant-custom.tsx +8 -2
- package/src/components/audio-visualizer/variant-grid.tsx +16 -11
- package/src/components/audio-visualizer/variant-radial.tsx +15 -10
- package/src/components/audio-visualizer/variant-wave.tsx +7 -2
- package/src/components/chat-container.tsx +4 -1
- package/src/components/chat-thread.tsx +36 -7
- package/src/components/code-block.tsx +79 -3
- package/src/components/composer.tsx +8 -1
- package/src/components/conversation-item.tsx +114 -4
- package/src/components/conversation-list.tsx +212 -12
- package/src/components/embed.tsx +4 -0
- package/src/components/form.tsx +41 -14
- package/src/components/message.tsx +75 -5
- package/src/components/response-stream.tsx +13 -7
- package/src/components/screen.tsx +5 -0
- package/src/components/scroll-button.tsx +7 -0
- package/src/components/toast.tsx +11 -5
- package/src/components/voice-input.tsx +35 -3
- package/src/components/voice-output.tsx +46 -6
- package/src/components/workspace-shell.tsx +285 -0
- package/src/diagnostics/hook.ts +352 -0
- package/src/diagnostics/index.ts +82 -0
- package/src/diagnostics/report-request.ts +296 -0
- package/src/elements/attachments.tsx +6 -7
- package/src/elements/audio-visualizer.tsx +48 -4
- package/src/elements/chat-workspace.tsx +159 -287
- package/src/elements/chat.tsx +12 -9
- package/src/elements/code-block.tsx +19 -1
- package/src/elements/command.tsx +4 -1
- package/src/elements/compiled.css +1 -1
- package/src/elements/conversation-item.tsx +80 -0
- package/src/elements/conversation-list.tsx +60 -11
- package/src/elements/default-input.tsx +5 -5
- package/src/elements/define.tsx +168 -8
- package/src/elements/diagnostic-events.ts +114 -0
- package/src/elements/dialog.tsx +47 -0
- package/src/elements/disclosure.ts +34 -12
- package/src/elements/dock.tsx +204 -0
- package/src/elements/dropdown.tsx +123 -0
- package/src/elements/element-diagnostics.ts +392 -0
- package/src/elements/element-manifest.json +12 -0
- package/src/elements/element-meta.json +672 -439
- package/src/elements/element-nonscalar.json +170 -0
- package/src/elements/element-types.d.ts +232 -148
- package/src/elements/menu.tsx +13 -0
- package/src/elements/prompt-dock.tsx +2 -1
- package/src/elements/prompt-input.tsx +8 -8
- package/src/elements/register-impl.ts +46 -0
- package/src/elements/register.ts +28 -0
- package/src/elements/resizable.tsx +52 -25
- package/src/elements/scroll-button.tsx +5 -0
- package/src/elements/slots.ts +107 -12
- package/src/elements/styles.css +30 -6
- package/src/elements/thinking-bar.tsx +16 -7
- package/src/elements/toast.tsx +3 -0
- package/src/elements/tool.tsx +26 -5
- package/src/elements/voice-input.tsx +11 -2
- package/src/elements/voice-output.tsx +16 -3
- package/src/index.ts +2 -0
- package/src/primitives/use-resize-observer.ts +33 -0
- package/src/primitives/use-speech-recognition.ts +12 -1
- package/src/primitives/use-stick-to-bottom.ts +34 -2
- package/src/primitives/use-text-stream.ts +33 -2
- package/src/remote/provider-runtime.ts +6 -3
- package/src/schemas/index.ts +1 -0
- package/src/schemas/tool-defs.ts +297 -6
- package/src/solid.ts +5 -0
- package/src/state/index.ts +12 -0
- package/src/state/persistence.ts +180 -0
- package/src/state/stream.ts +71 -4
- package/src/state/threads.ts +142 -0
- package/src/types.ts +4 -2
- package/src/ui/dialog.tsx +6 -0
- package/src/ui/dock.tsx +445 -0
- package/src/ui/dropdown.tsx +67 -23
- package/src/ui/hover-card.tsx +156 -6
- package/src/ui/input.tsx +29 -10
- package/src/ui/resizable.tsx +11 -0
- package/src/wire/chunk.ts +47 -0
- package/src/wire/consume.ts +185 -26
- package/src/wire/diagnostics.ts +727 -0
- package/src/wire/encode-probe.ts +214 -0
- package/src/wire/encode.ts +267 -14
- package/src/wire/formats/anthropic.ts +8 -1
- package/src/wire/formats/openai.ts +5 -0
- package/src/wire/index.ts +22 -0
- package/src/wire/read.ts +250 -6
- package/src/wire/sse.ts +16 -3
- package/dist/elements/chunks/action-icons-DW9muWrY.js +0 -1
- package/dist/elements/chunks/arrow-left-iJVnQmxA.js +0 -1
- package/dist/elements/chunks/attachments-CL6TaqIb.js +0 -1
- package/dist/elements/chunks/audio-visualizer-BuUqQmaO.js +0 -1
- package/dist/elements/chunks/chat-thread-DxoKaStk.js +0 -1
- package/dist/elements/chunks/check-MdLzbxrm.js +0 -1
- package/dist/elements/chunks/chevron-down-MK7IzDqe.js +0 -1
- package/dist/elements/chunks/chevron-right-C5jXhmtV.js +0 -1
- package/dist/elements/chunks/circle-BG7VkPep.js +0 -1
- package/dist/elements/chunks/circle-check-GqvO2UBs.js +0 -1
- package/dist/elements/chunks/code-block-ClhQO9RW.js +0 -1
- package/dist/elements/chunks/collapsible-DBcBkFPh.js +0 -1
- package/dist/elements/chunks/context-hKjNqiyQ.js +0 -1
- package/dist/elements/chunks/conversation-list-CsGJjSKG.js +0 -1
- package/dist/elements/chunks/default-input-B1Mem5wu.js +0 -1
- package/dist/elements/chunks/define-B_tXMYRm.js +0 -1
- package/dist/elements/chunks/disclosure-DAoYOKew.js +0 -1
- package/dist/elements/chunks/dropdown-CmNna5lT.js +0 -1
- package/dist/elements/chunks/embed-CjAD2jSi.js +0 -1
- package/dist/elements/chunks/form-Cp8Y00Wn.js +0 -1
- package/dist/elements/chunks/hover-card-6KtXpLwT.js +0 -1
- package/dist/elements/chunks/icon-97R8SR2p.js +0 -1
- package/dist/elements/chunks/input-DrseEjhp.js +0 -1
- package/dist/elements/chunks/message-CE4k-qaj.js +0 -1
- package/dist/elements/chunks/message-square-C9ovmtOo.js +0 -1
- package/dist/elements/chunks/reasoning-BrxQfpfI.js +0 -1
- package/dist/elements/chunks/scroll-button-CrTo7wm4.js +0 -1
- package/dist/elements/chunks/share-DgNbkJKY.js +0 -1
- package/dist/elements/chunks/slots-CIw9RlAe.js +0 -1
- package/dist/elements/chunks/store-HIPGhNz9.js +0 -1
- package/dist/elements/chunks/textarea-DPfuhswM.js +0 -1
- package/dist/elements/chunks/variant-custom-D5ZlmziF.js +0 -1
- package/dist/elements/chunks/video-Bb86fVYI.js +0 -1
- package/dist/elements/chunks/x-BOhjBeOd.js +0 -1
- package/dist/primitives/card-validate-generator.testlib.d.ts +0 -20
- package/dist/register-impl-DGmGzrEM.js +0 -145
- package/dist/variant-custom-MkTNTycd.js +0 -1
- package/src/primitives/card-validate-generator.testlib.ts +0 -38
|
@@ -1 +1,24 @@
|
|
|
1
1
|
export declare function observeContentHeight(el: Element, onHeight: (height: number) => void): () => void;
|
|
2
|
+
/** Observe an element's resizes but report the FULL rendered document height (not the
|
|
3
|
+
* observed element's own content-box) — `document.body.scrollHeight`.
|
|
4
|
+
*
|
|
5
|
+
* Used by the remote-card provider runtime to size the host iframe (D1, rung 5 IVP
|
|
6
|
+
* task-10-report.md): `observeContentHeight` reports the ResizeObserver content-box of
|
|
7
|
+
* the observed root, which drops that root's OWN padding/border and any ancestor
|
|
8
|
+
* (e.g. `<body>`) padding above it — the host then clips the bottom of the card by
|
|
9
|
+
* exactly those lost pixels. `scrollHeight` is the full padding-box height as actually
|
|
10
|
+
* rendered, so it stays correct no matter which element in the ancestor chain carries
|
|
11
|
+
* the padding/border, including if the provider page's own styles change later —
|
|
12
|
+
* reading contentRect off one fixed element, or hand-summing computed padding/border
|
|
13
|
+
* off a fixed list of ancestors, would both need updating every time that chain does.
|
|
14
|
+
*
|
|
15
|
+
* Deliberately `document.body.scrollHeight`, NOT `document.documentElement.scrollHeight`
|
|
16
|
+
* (N1, task-10-report.md "Fix-wave re-review"): the CSSOM View spec special-cases the
|
|
17
|
+
* scrollHeight of the ROOT element to be `max(viewport scrolling area, viewport
|
|
18
|
+
* height)` — and the host sets the iframe's viewport FROM this very measurement
|
|
19
|
+
* (`host-embed.ts` `sizeIframe`), so `documentElement.scrollHeight` can only grow for
|
|
20
|
+
* the life of the frame: once the iframe is tall, the root's own scrollHeight is
|
|
21
|
+
* floored at that height even after the card's content shrinks. `<body>` carries no
|
|
22
|
+
* such floor — its scrollHeight is a plain padding-box measurement of body's own
|
|
23
|
+
* content, so it shrinks along with the card. */
|
|
24
|
+
export declare function observeDocumentHeight(el: Element, onHeight: (height: number) => void): () => void;
|
|
@@ -7,6 +7,14 @@ export interface SpeechRecognitionStartOptions {
|
|
|
7
7
|
lang?: string;
|
|
8
8
|
/** Called with each interim (non-final) transcript when `interim` is enabled. */
|
|
9
9
|
onInterim?: (text: string) => void;
|
|
10
|
+
/**
|
|
11
|
+
* Called when the recognition session hits a runtime error (`recognition.onerror`),
|
|
12
|
+
* with the platform's error code (`network`, `not-allowed`, `no-speech`, ...) and a
|
|
13
|
+
* human-readable message. The session still ends through `onend`, so `start()` still
|
|
14
|
+
* resolves (with whatever text was captured before the error). Without this callback
|
|
15
|
+
* a runtime failure is invisible: the `error` signal is state, not a notification.
|
|
16
|
+
*/
|
|
17
|
+
onError?: (error: string, message: string) => void;
|
|
10
18
|
}
|
|
11
19
|
/**
|
|
12
20
|
* Wrap the browser's Web Speech `SpeechRecognition` (Chrome/Safari; no Firefox).
|
|
@@ -3,7 +3,12 @@ export interface UseTextStreamOptions {
|
|
|
3
3
|
speed?: number;
|
|
4
4
|
characterChunkSize?: number;
|
|
5
5
|
fadeDuration?: number;
|
|
6
|
+
segmentDelay?: number;
|
|
6
7
|
}
|
|
8
|
+
/** Default fade-in duration for a given speed (ms) — shared with ResponseStream. */
|
|
9
|
+
export declare function defaultFadeDuration(speed: number): number;
|
|
10
|
+
/** Default per-segment stagger for a given speed (ms) — shared with ResponseStream. */
|
|
11
|
+
export declare function defaultSegmentDelay(speed: number): number;
|
|
7
12
|
export interface TextStreamSegment {
|
|
8
13
|
text: string;
|
|
9
14
|
index: number;
|
package/dist/react/index.d.ts
CHANGED
|
@@ -140,12 +140,14 @@ export interface AudioVisualizerProps extends WebComponentProps {
|
|
|
140
140
|
complexity?: number;
|
|
141
141
|
/** Setting this makes the element an announced image (`role="img"`) instead of decorative (`aria-hidden`). Attribute: `label`. */
|
|
142
142
|
label?: string;
|
|
143
|
-
/** Live microphone or WebRTC audio to analyze. JS property only. */
|
|
143
|
+
/** Live microphone or WebRTC audio to analyze. JS property only. NOTE: amplitude renders only while state is "speaking" unless listening-amplitude is set; every other state plays its scripted animation and ignores the audio. */
|
|
144
144
|
stream?: MediaStream;
|
|
145
|
-
/** An `<audio>` or `<video>` element to tap for its audio. JS property only. */
|
|
145
|
+
/** An `<audio>` or `<video>` element to tap for its audio. JS property only. NOTE: amplitude renders only while state is "speaking" unless listening-amplitude is set; every other state plays its scripted animation and ignores the audio. */
|
|
146
146
|
audioElement?: HTMLMediaElement;
|
|
147
|
-
/** Pre-computed levels, 0..1. Set this and no AudioContext is ever built, which is what keeps headless/SSR rendering and browser-speech-synthesis playback (which exposes no audio node) free of Web Audio entirely. JS property only. A new array reference is required for each update; mutating the existing array in place will not re-render. */
|
|
147
|
+
/** Pre-computed levels, 0..1. Set this and no AudioContext is ever built, which is what keeps headless/SSR rendering and browser-speech-synthesis playback (which exposes no audio node) free of Web Audio entirely. JS property only. A new array reference is required for each update; mutating the existing array in place will not re-render. NOTE: amplitude renders only while state is "speaking" unless listening-amplitude is set; every other state plays its scripted animation and ignores the audio. */
|
|
148
148
|
bands?: number[];
|
|
149
|
+
/** Render live amplitude during the listening state as well, using the same presentation as speaking. Off by default, which keeps LiveKit parity: amplitude from stream, audio-element or bands renders only while state is "speaking". Set it to show a real mic-level picture while the user is the one talking. Boolean. Attribute: `listening-amplitude` (a bare attribute means true; reflected, so the property reads back what the attribute set). */
|
|
150
|
+
listeningAmplitude?: boolean;
|
|
149
151
|
/** Custom fragment shader for `variant="custom"`. JS property only. */
|
|
150
152
|
shader?: {
|
|
151
153
|
fragment: string;
|
|
@@ -311,8 +313,6 @@ export interface ChainOfThoughtProps extends WebComponentProps {
|
|
|
311
313
|
}
|
|
312
314
|
export declare const ChainOfThought: import('react').ForwardRefExoticComponent<ChainOfThoughtProps & import('react').RefAttributes<HTMLElement>>;
|
|
313
315
|
export interface ChatProps extends WebComponentProps {
|
|
314
|
-
/** Show a Search (Globe) button in the input toolbar; fires a `search` event. */
|
|
315
|
-
search?: boolean;
|
|
316
316
|
/** Value of the input. A **string** is controlled (the host owns the text and updates it on `kai-value-change`). A **ComposerDoc** is a one-time seed that pre-populates pills; the user then edits freely. Leave unset for uncontrolled. */
|
|
317
317
|
value?: string | ({
|
|
318
318
|
type: "text";
|
|
@@ -382,6 +382,8 @@ export interface ChatProps extends WebComponentProps {
|
|
|
382
382
|
composerActions?: boolean;
|
|
383
383
|
/** INJECT: footer row below the composer (disclaimers, token meter, …). */
|
|
384
384
|
footer?: boolean;
|
|
385
|
+
/** Show a web-search (Globe) button in the input toolbar; calls `onWebSearch`. */
|
|
386
|
+
webSearch?: boolean;
|
|
385
387
|
/** Show a Voice (Mic) button in the input toolbar; fires a `voice` event. */
|
|
386
388
|
voice?: boolean;
|
|
387
389
|
/** Rich entity triggers. Each `{ char, kind, items }` opens a caret-anchored menu that inserts an atomic pill (`/` skills, `@` agents/plugins). Set as a JS property; forwarded to the input. */
|
|
@@ -550,8 +552,6 @@ export interface ChatProps extends WebComponentProps {
|
|
|
550
552
|
onModelChange?: (event: CustomEvent<{
|
|
551
553
|
modelId: string;
|
|
552
554
|
}>) => void;
|
|
553
|
-
/** The Search button was clicked. */
|
|
554
|
-
onSearch?: (event: CustomEvent<Record<string, never>>) => void;
|
|
555
555
|
/** User submitted a message. */
|
|
556
556
|
onSubmit?: (event: CustomEvent<{
|
|
557
557
|
value: string;
|
|
@@ -574,6 +574,8 @@ export interface ChatProps extends WebComponentProps {
|
|
|
574
574
|
}>) => void;
|
|
575
575
|
/** The Mic / voice button was clicked. */
|
|
576
576
|
onVoice?: (event: CustomEvent<Record<string, never>>) => void;
|
|
577
|
+
/** The web-search (Globe) toolbar button was clicked. */
|
|
578
|
+
onWebSearch?: (event: CustomEvent<Record<string, never>>) => void;
|
|
577
579
|
}
|
|
578
580
|
export declare const Chat: import('react').ForwardRefExoticComponent<ChatProps & import('react').RefAttributes<HTMLElement>>;
|
|
579
581
|
export interface CheckpointProps extends WebComponentProps {
|
|
@@ -664,6 +666,8 @@ export interface CodeBlockProps extends WebComponentProps {
|
|
|
664
666
|
codeTheme?: string;
|
|
665
667
|
/** Disable syntax highlighting (renders plain text, no Shiki). */
|
|
666
668
|
codeHighlight?: boolean;
|
|
669
|
+
/** Show the copy button. **Defaults to ON**, because this element is documented as shipping one. Opt out with `copy="false"` or `el.copy = false`. */
|
|
670
|
+
copy?: boolean;
|
|
667
671
|
/** Code text sizing. */
|
|
668
672
|
proseSize?: "xs" | "sm" | "base" | "lg";
|
|
669
673
|
}
|
|
@@ -915,6 +919,15 @@ export interface ContextProps extends WebComponentProps {
|
|
|
915
919
|
}>) => void;
|
|
916
920
|
}
|
|
917
921
|
export declare const Context: import('react').ForwardRefExoticComponent<ContextProps & import('react').RefAttributes<HTMLElement>>;
|
|
922
|
+
export interface ConversationItemProps extends WebComponentProps {
|
|
923
|
+
/** The row's identity, handed to the container's selection contract. In the element this is the `conversation-id` attribute (host `id` is the fallback). */
|
|
924
|
+
conversationId?: string;
|
|
925
|
+
/** Selected state. Reflected as `aria-current` on the row body and a `data-active` styling hook on the row; the container drives it from its `activeId`. */
|
|
926
|
+
active?: boolean;
|
|
927
|
+
/** Dense single-line row padding. */
|
|
928
|
+
compact?: boolean;
|
|
929
|
+
}
|
|
930
|
+
export declare const ConversationItem: import('react').ForwardRefExoticComponent<ConversationItemProps & import('react').RefAttributes<HTMLElement>>;
|
|
918
931
|
export interface ConversationsProps extends WebComponentProps {
|
|
919
932
|
/** The list's section headers (`{ id, name, sortOrder, createdAt }`), rendered in array order. A group carries no conversations of its own; it is matched against `conversations` by id, so the two props are complementary rather than alternatives. Omit for an ungrouped list. Set as a JS property. */
|
|
920
933
|
groups?: {
|
|
@@ -925,12 +938,12 @@ export interface ConversationsProps extends WebComponentProps {
|
|
|
925
938
|
sortOrder: number;
|
|
926
939
|
createdAt: string;
|
|
927
940
|
}[];
|
|
928
|
-
/** Every conversation the list renders, flat. Each one is filed under the group whose `id` equals its `groupId`; one with no `groupId`, or with a `groupId` matching no entry in `groups`, falls into a trailing "Ungrouped" section, so nothing you pass in is ever dropped. There is no recency bucketing. Set as a JS property. Omit to supply them as `<kai-conversation>` light-DOM children instead, or for the empty state. */
|
|
941
|
+
/** Every conversation the list renders, flat. Each one is filed under the group whose `id` equals its `groupId`; one with no `groupId`, or with a `groupId` matching no entry in `groups`, falls into a trailing "Ungrouped" section, so nothing you pass in is ever dropped. There is no recency bucketing. Set as a JS property. Omit to supply them as `<kai-conversation>` light-DOM children instead, or for the empty state. A search query that matches nothing shows a visible "No conversations match your search" state, distinct from the zero-conversations empty state. Slotted `<kai-conversation-item>` children switch the list into item mode instead: your own rows win and this array is not rendered. */
|
|
929
942
|
conversations?: {
|
|
930
943
|
id: string;
|
|
931
944
|
title: string;
|
|
932
945
|
groupId?: string;
|
|
933
|
-
scope
|
|
946
|
+
scope?: {
|
|
934
947
|
type: "document" | "collection";
|
|
935
948
|
documentId?: string;
|
|
936
949
|
filters?: {
|
|
@@ -944,7 +957,7 @@ export interface ConversationsProps extends WebComponentProps {
|
|
|
944
957
|
};
|
|
945
958
|
};
|
|
946
959
|
messageCount: number;
|
|
947
|
-
lastMessageAt
|
|
960
|
+
lastMessageAt?: string;
|
|
948
961
|
updatedAt: string;
|
|
949
962
|
trailing?: string;
|
|
950
963
|
}[];
|
|
@@ -954,11 +967,13 @@ export interface ConversationsProps extends WebComponentProps {
|
|
|
954
967
|
collapsed?: boolean;
|
|
955
968
|
/** Initial collapsed state when uncontrolled (default false). Use the `default-collapsed` attribute to start collapsed in plain HTML. */
|
|
956
969
|
defaultCollapsed?: boolean;
|
|
970
|
+
/** Dense single-line rows (a leading dot + title, no message count). */
|
|
971
|
+
compact?: boolean;
|
|
957
972
|
/** The rail was collapsed or expanded (via the toggle, the reopen button, or a `collapse()`/`expand()`/`toggle()` call). */
|
|
958
973
|
onCollapseToggle?: (event: CustomEvent<{
|
|
959
974
|
collapsed: boolean;
|
|
960
975
|
}>) => void;
|
|
961
|
-
/** A conversation was selected. */
|
|
976
|
+
/** A conversation was selected. The selection event in BOTH modes: a batteries data row, or an activated `<kai-conversation-item>` child (click, Enter or Space). */
|
|
962
977
|
onConversationSelect?: (event: CustomEvent<{
|
|
963
978
|
id: string;
|
|
964
979
|
}>) => void;
|
|
@@ -977,12 +992,62 @@ export interface DialogProps extends WebComponentProps {
|
|
|
977
992
|
open?: boolean;
|
|
978
993
|
/** Initial open state on mount (uncontrolled seed). */
|
|
979
994
|
defaultOpen?: boolean;
|
|
995
|
+
/** Accessible name for the modal, used when no `header` slot is projected: `<kai-dialog label="Delete workspace">`. A projected `header` WINS over this (it becomes `aria-labelledby`), because ARIA resolves `aria-labelledby` ahead of `aria-label` and the visible heading is the name both a sighted and a screen-reader user can be talked through. Defaults to `Dialog` so a modal is never nameless. */
|
|
996
|
+
label?: string;
|
|
980
997
|
/** The dialog opened or closed (Escape, backdrop click, a driven `open`, or a method). */
|
|
981
998
|
onOpenChange?: (event: CustomEvent<{
|
|
982
999
|
open: boolean;
|
|
983
1000
|
}>) => void;
|
|
984
1001
|
}
|
|
985
1002
|
export declare const Dialog: import('react').ForwardRefExoticComponent<DialogProps & import('react').RefAttributes<HTMLElement>>;
|
|
1003
|
+
export interface DockProps extends WebComponentProps {
|
|
1004
|
+
/** Drive/observe open state (Shoelace-style: settable + reflected to the `open` attribute; the element still self-manages on the launcher and Escape). Set `el.open = true`, or `<kai-dock open>`; listen for `kai-open-change`. */
|
|
1005
|
+
open?: boolean;
|
|
1006
|
+
/** Initial open state on mount (uncontrolled seed). */
|
|
1007
|
+
defaultOpen?: boolean;
|
|
1008
|
+
/** Which corner the dock sits in. Logical, so `-end` follows the writing direction and an RTL page docks on the left. Attribute: `position`. */
|
|
1009
|
+
position?: "bottom-end" | "bottom-start" | "top-end" | "top-start";
|
|
1010
|
+
/** The widget's NAME. Derives the panel's accessible name and both launcher names (`Open ${label}` / `Close ${label}`). Defaults to `Chat`. */
|
|
1011
|
+
label?: string;
|
|
1012
|
+
/** i18n override for the launcher's name while closed (default `Open ${label}`). */
|
|
1013
|
+
openLabel?: string;
|
|
1014
|
+
/** i18n override for the launcher's name while open (default `Close ${label}`). */
|
|
1015
|
+
closeLabel?: string;
|
|
1016
|
+
/** Show the unread dot. YOURS: it renders only while closed, and the dock never writes it back. Clear it in your `kai-open-change` handler. */
|
|
1017
|
+
unread?: boolean;
|
|
1018
|
+
/** Disable the launcher; `show()` and `toggle()` are gated on it. */
|
|
1019
|
+
disabled?: boolean;
|
|
1020
|
+
/** Where focus lands on open: `content` (default, the first element you slotted), `panel`, or `none`. Attribute: `focus-on-open`. */
|
|
1021
|
+
focusOnOpen?: "content" | "panel" | "none";
|
|
1022
|
+
/** The dock opened or closed (the launcher, Escape, a driven `open`, or a method). */
|
|
1023
|
+
onOpenChange?: (event: CustomEvent<{
|
|
1024
|
+
open: boolean;
|
|
1025
|
+
}>) => void;
|
|
1026
|
+
}
|
|
1027
|
+
export declare const Dock: import('react').ForwardRefExoticComponent<DockProps & import('react').RefAttributes<HTMLElement>>;
|
|
1028
|
+
export interface DropdownProps extends WebComponentProps {
|
|
1029
|
+
/** Built-in trigger: leading icon (a named icon like `"plus"`, an image URL/data-URI, or text). A slotted `slot="trigger"` overrides it. */
|
|
1030
|
+
triggerIcon?: string;
|
|
1031
|
+
/** Built-in trigger: a text label. This is the trigger's VISIBLE text, so it is also its accessible name, and `label` does not override it: an accessible name that does not contain the visible text is unreachable by speech input (WCAG 2.5.3, Label in Name). Same rule `kai-menu` follows. */
|
|
1032
|
+
triggerLabel?: string;
|
|
1033
|
+
/** Built-in trigger: a trailing icon (e.g. `"chevron-down"` for a select look). */
|
|
1034
|
+
triggerIconTrailing?: string;
|
|
1035
|
+
/** Accessible name for a trigger with no visible label. Ignored when `triggerLabel` is set, which is already the visible name. It DOES name a slotted `slot="trigger"`, which is VISUAL content with the name supplied separately: the same two-slot distinction `kai-menu` documents. */
|
|
1036
|
+
label?: string;
|
|
1037
|
+
/** Stretch the trigger to the full width of its container (a block row). Attribute: `full`. */
|
|
1038
|
+
full?: boolean;
|
|
1039
|
+
/** Drive/observe open state (Shoelace-style: settable + reflected to the `open` attribute, the menu still self-manages on click/keyboard). Set `el.open = true`, or `<kai-dropdown open>`; listen for `kai-open-change`. */
|
|
1040
|
+
open?: boolean;
|
|
1041
|
+
/** Initial open state on mount (uncontrolled seed). */
|
|
1042
|
+
defaultOpen?: boolean;
|
|
1043
|
+
/** Disable the trigger: click/keyboard and `show()` no longer open the menu. */
|
|
1044
|
+
disabled?: boolean;
|
|
1045
|
+
/** The menu opened or closed (click, keyboard, Escape, outside-click, or a method). */
|
|
1046
|
+
onOpenChange?: (event: CustomEvent<{
|
|
1047
|
+
open: boolean;
|
|
1048
|
+
}>) => void;
|
|
1049
|
+
}
|
|
1050
|
+
export declare const Dropdown: import('react').ForwardRefExoticComponent<DropdownProps & import('react').RefAttributes<HTMLElement>>;
|
|
986
1051
|
export interface EditableLabelProps extends WebComponentProps {
|
|
987
1052
|
/** The label text. Settable and reflected to the `value` attribute. Read `el.value` for live state. */
|
|
988
1053
|
value?: string;
|
|
@@ -1295,6 +1360,8 @@ export interface MenuProps extends WebComponentProps {
|
|
|
1295
1360
|
triggerIconTrailing?: string;
|
|
1296
1361
|
/** Accessible name for a trigger with no visible label. Ignored when `triggerLabel` is set, which is already the visible name. It DOES name a slotted `slot="trigger"`, and that is a difference in what the two slots MEAN, not a limitation. `<kai-button>`'s slot IS the button's label, so text slotted there is the name and `label` steps aside. This slot is VISUAL content, a `+` or an `<svg>`, with the name supplied separately: decoration beside a name, never a second name competing with one. So `label` names the trigger here by design. Slotting a real WORD rather than a glyph makes that word a visible label, and an accessible name has to contain the visible text. Then either drop `label` or make it contain the word you slotted. */
|
|
1297
1362
|
label?: string;
|
|
1363
|
+
/** Stretch the trigger to the full width of the menu's container (a block row), e.g. a sidebar-footer account row. Same affordance as `<kai-button full>`. Attribute: `full`. */
|
|
1364
|
+
full?: boolean;
|
|
1298
1365
|
/** Drive/observe open state (Shoelace-style: settable + reflected to the `open` attribute, the menu still self-manages on click/keyboard). Set `el.open = true`, or `<kai-menu open>`; listen for `kai-open-change`. */
|
|
1299
1366
|
open?: boolean;
|
|
1300
1367
|
/** Initial open state on mount (uncontrolled seed). */
|
|
@@ -1663,8 +1730,8 @@ export interface PromptInputProps extends WebComponentProps {
|
|
|
1663
1730
|
suggestions?: string[];
|
|
1664
1731
|
/** What clicking a suggestion does: `'submit'` (default) sends it immediately as if typed and submitted; `'fill'` just places it in the input. */
|
|
1665
1732
|
suggestionMode?: "submit" | "fill";
|
|
1666
|
-
/** Show a
|
|
1667
|
-
|
|
1733
|
+
/** Show a web-search (Globe) button in the left toolbar; clicking it fires a `kai-web-search` event. Attribute: `web-search`. */
|
|
1734
|
+
webSearch?: boolean;
|
|
1668
1735
|
/** Show a Voice (Mic) button in the left toolbar; clicking it fires a `voice` event. */
|
|
1669
1736
|
voice?: boolean;
|
|
1670
1737
|
/** When set and `loading` is true, the send button is replaced by a Stop button (square icon, "Stop" aria-label). Clicking it fires `kai-stop`. */
|
|
@@ -1710,8 +1777,6 @@ export interface PromptInputProps extends WebComponentProps {
|
|
|
1710
1777
|
title?: undefined | string;
|
|
1711
1778
|
}[];
|
|
1712
1779
|
}>) => void;
|
|
1713
|
-
/** The Search (Globe) toolbar button was clicked. */
|
|
1714
|
-
onSearch?: (event: CustomEvent<Record<string, never>>) => void;
|
|
1715
1780
|
/** The Stop button was clicked while `stoppable` and `loading` are both true. */
|
|
1716
1781
|
onStop?: (event: CustomEvent<Record<string, never>>) => void;
|
|
1717
1782
|
/** The user submitted the prompt (Enter or send button). `value` is the flattened text (back-compat); `doc` is the structured document and `entities` the inserted pills (skills/agents) for downstream expansion. */
|
|
@@ -1784,6 +1849,8 @@ export interface PromptInputProps extends WebComponentProps {
|
|
|
1784
1849
|
}>) => void;
|
|
1785
1850
|
/** The Voice (Mic) toolbar button was clicked. */
|
|
1786
1851
|
onVoice?: (event: CustomEvent<Record<string, never>>) => void;
|
|
1852
|
+
/** The web-search (Globe) toolbar button was clicked. */
|
|
1853
|
+
onWebSearch?: (event: CustomEvent<Record<string, never>>) => void;
|
|
1787
1854
|
}
|
|
1788
1855
|
export declare const PromptInput: import('react').ForwardRefExoticComponent<PromptInputProps & import('react').RefAttributes<HTMLElement>>;
|
|
1789
1856
|
export interface ReasoningProps extends WebComponentProps {
|
|
@@ -2439,6 +2506,12 @@ export interface VoiceInputProps extends WebComponentProps {
|
|
|
2439
2506
|
onTranscription?: (event: CustomEvent<{
|
|
2440
2507
|
text: string;
|
|
2441
2508
|
}>) => void;
|
|
2509
|
+
/** A voice session failed, so no failure is ever silent. `detail.source` names the failing side (`recognition` on `<kai-voice-input>`, `synthesis` on `<kai-voice-output>`), `detail.error` carries the platform error code, the thrown exception's name, or `no-result` when recognition ended with no error and no text (the user said nothing), and `detail.message` is human-readable. Deliberate cancellation does not fire. */
|
|
2510
|
+
onVoiceError?: (event: CustomEvent<{
|
|
2511
|
+
source: "recognition";
|
|
2512
|
+
error: string;
|
|
2513
|
+
message: string;
|
|
2514
|
+
}>) => void;
|
|
2442
2515
|
}
|
|
2443
2516
|
export declare const VoiceInput: import('react').ForwardRefExoticComponent<VoiceInputProps & import('react').RefAttributes<HTMLElement>>;
|
|
2444
2517
|
export interface VoiceOutputProps extends WebComponentProps {
|
|
@@ -2450,7 +2523,7 @@ export interface VoiceOutputProps extends WebComponentProps {
|
|
|
2450
2523
|
synthesize?: (text: string) => Promise<Blob>;
|
|
2451
2524
|
/** Disable the button (non-interactive). */
|
|
2452
2525
|
disabled?: boolean;
|
|
2453
|
-
/** Playback started or stopped. Drive your own UI in sync. Fires on real transitions only (manual click and programmatic speak()/stop()), never on mount. */
|
|
2526
|
+
/** Playback started or stopped. Drive your own UI in sync. `speaking: true` fires when audio actually starts (utterance.onstart natively; audio playback beginning on the `synthesize` path), not when speak() is called; earlier releases fired it optimistically inside speak() itself. Fires on real transitions only (manual click and programmatic speak()/stop()), never on mount. */
|
|
2454
2527
|
onSpeakingChange?: (event: CustomEvent<{
|
|
2455
2528
|
speaking: boolean;
|
|
2456
2529
|
}>) => void;
|
|
@@ -2458,262 +2531,38 @@ export interface VoiceOutputProps extends WebComponentProps {
|
|
|
2458
2531
|
onSynthesized?: (event: CustomEvent<{
|
|
2459
2532
|
blob: Blob;
|
|
2460
2533
|
}>) => void;
|
|
2534
|
+
/** A voice session failed, so no failure is ever silent. `detail.source` names the failing side (`recognition` on `<kai-voice-input>`, `synthesis` on `<kai-voice-output>`), `detail.error` carries the platform error code, the thrown exception's name, or `no-result` when recognition ended with no error and no text (the user said nothing), and `detail.message` is human-readable. Deliberate cancellation does not fire. */
|
|
2535
|
+
onVoiceError?: (event: CustomEvent<{
|
|
2536
|
+
source: "synthesis";
|
|
2537
|
+
error: string;
|
|
2538
|
+
message: string;
|
|
2539
|
+
}>) => void;
|
|
2461
2540
|
}
|
|
2462
2541
|
export declare const VoiceOutput: import('react').ForwardRefExoticComponent<VoiceOutputProps & import('react').RefAttributes<HTMLElement>>;
|
|
2463
2542
|
export interface WorkspaceProps extends WebComponentProps {
|
|
2464
|
-
/**
|
|
2465
|
-
|
|
2466
|
-
|
|
2467
|
-
|
|
2468
|
-
|
|
2469
|
-
|
|
2470
|
-
|
|
2471
|
-
|
|
2472
|
-
|
|
2473
|
-
/** Every conversation in the sidebar, flat. Each one is filed under the group whose `id` equals its `groupId`; one with no `groupId`, or with a `groupId` matching no entry in `groups`, falls into a trailing ungrouped section (headerless when `compact`), so nothing you pass in is ever dropped. There is no recency bucketing. Set as a JS property. Omit for an empty sidebar, or when `no-conversations` replaces the built-in list with your own `sidebar-header` content. */
|
|
2474
|
-
conversations?: {
|
|
2475
|
-
id: string;
|
|
2476
|
-
title: string;
|
|
2477
|
-
groupId?: string;
|
|
2478
|
-
scope: {
|
|
2479
|
-
type: "document" | "collection";
|
|
2480
|
-
documentId?: string;
|
|
2481
|
-
filters?: {
|
|
2482
|
-
tags?: string[];
|
|
2483
|
-
authors?: string[];
|
|
2484
|
-
contentType?: "transcript" | "markdown";
|
|
2485
|
-
dateRange?: {
|
|
2486
|
-
from: string;
|
|
2487
|
-
to: string;
|
|
2488
|
-
};
|
|
2489
|
-
};
|
|
2490
|
-
};
|
|
2491
|
-
messageCount: number;
|
|
2492
|
-
lastMessageAt: string;
|
|
2493
|
-
updatedAt: string;
|
|
2494
|
-
trailing?: string;
|
|
2495
|
-
}[];
|
|
2496
|
-
/** Id of the open conversation, highlighted in the sidebar. */
|
|
2497
|
-
activeId?: string;
|
|
2498
|
-
/** The active conversation's message thread, newest last. Set as a JS property (`el.messages = [...]`); a NEW array reference per streaming chunk re-renders (mutating in place does not). Omit for an empty thread. */
|
|
2499
|
-
messages?: {
|
|
2500
|
-
id: string;
|
|
2501
|
-
role: "user" | "assistant";
|
|
2502
|
-
parts: ({
|
|
2503
|
-
type: "text";
|
|
2504
|
-
text: string;
|
|
2505
|
-
raw?: {
|
|
2506
|
-
source: string;
|
|
2507
|
-
payload: unknown;
|
|
2508
|
-
};
|
|
2509
|
-
} | {
|
|
2510
|
-
type: "reasoning";
|
|
2511
|
-
text: string;
|
|
2512
|
-
label?: string;
|
|
2513
|
-
index?: number;
|
|
2514
|
-
streamId?: string;
|
|
2515
|
-
signature?: string;
|
|
2516
|
-
raw?: {
|
|
2517
|
-
source: string;
|
|
2518
|
-
payload: unknown;
|
|
2519
|
-
};
|
|
2520
|
-
} | {
|
|
2521
|
-
type: "tool";
|
|
2522
|
-
tool: {
|
|
2523
|
-
type: string;
|
|
2524
|
-
kind?: "command" | "file-change" | "search" | "fetch" | "mcp" | "image" | "generic";
|
|
2525
|
-
state: "input-streaming" | "input-available" | "output-available" | "output-error";
|
|
2526
|
-
input?: Record<string, unknown>;
|
|
2527
|
-
rawInput?: string;
|
|
2528
|
-
output?: Record<string, unknown>;
|
|
2529
|
-
toolCallId?: string;
|
|
2530
|
-
errorText?: string;
|
|
2531
|
-
raw?: {
|
|
2532
|
-
source: string;
|
|
2533
|
-
payload: unknown;
|
|
2534
|
-
};
|
|
2535
|
-
};
|
|
2536
|
-
raw?: {
|
|
2537
|
-
source: string;
|
|
2538
|
-
payload: unknown;
|
|
2539
|
-
};
|
|
2540
|
-
} | {
|
|
2541
|
-
type: "card";
|
|
2542
|
-
envelope: {
|
|
2543
|
-
type: string;
|
|
2544
|
-
id: string;
|
|
2545
|
-
data: unknown;
|
|
2546
|
-
title?: string;
|
|
2547
|
-
resolution?: {
|
|
2548
|
-
kind: "action";
|
|
2549
|
-
action: string;
|
|
2550
|
-
payload?: unknown;
|
|
2551
|
-
at?: string;
|
|
2552
|
-
} | {
|
|
2553
|
-
kind: "submit";
|
|
2554
|
-
data: unknown;
|
|
2555
|
-
at?: string;
|
|
2556
|
-
} | {
|
|
2557
|
-
kind: "dismissed";
|
|
2558
|
-
at?: string;
|
|
2559
|
-
} | {
|
|
2560
|
-
kind: "expired";
|
|
2561
|
-
reason?: string;
|
|
2562
|
-
at?: string;
|
|
2563
|
-
};
|
|
2564
|
-
};
|
|
2565
|
-
raw?: {
|
|
2566
|
-
source: string;
|
|
2567
|
-
payload: unknown;
|
|
2568
|
-
};
|
|
2569
|
-
} | {
|
|
2570
|
-
type: "source";
|
|
2571
|
-
source: {
|
|
2572
|
-
id?: string;
|
|
2573
|
-
url?: string;
|
|
2574
|
-
title?: string;
|
|
2575
|
-
snippet?: string;
|
|
2576
|
-
index?: number;
|
|
2577
|
-
};
|
|
2578
|
-
raw?: {
|
|
2579
|
-
source: string;
|
|
2580
|
-
payload: unknown;
|
|
2581
|
-
};
|
|
2582
|
-
} | {
|
|
2583
|
-
type: "file";
|
|
2584
|
-
attachment: {
|
|
2585
|
-
id: string;
|
|
2586
|
-
type: "file" | "source-document";
|
|
2587
|
-
filename?: string;
|
|
2588
|
-
mediaType?: string;
|
|
2589
|
-
url?: string;
|
|
2590
|
-
title?: string;
|
|
2591
|
-
};
|
|
2592
|
-
raw?: {
|
|
2593
|
-
source: string;
|
|
2594
|
-
payload: unknown;
|
|
2595
|
-
};
|
|
2596
|
-
})[];
|
|
2597
|
-
actions?: ("copy" | "like" | "dislike" | "regenerate" | "edit" | {
|
|
2598
|
-
id: string;
|
|
2599
|
-
label: string;
|
|
2600
|
-
icon?: string;
|
|
2601
|
-
tooltip?: string;
|
|
2602
|
-
})[];
|
|
2603
|
-
avatar?: {
|
|
2604
|
-
src?: string;
|
|
2605
|
-
fallback?: string;
|
|
2606
|
-
alt?: string;
|
|
2607
|
-
};
|
|
2608
|
-
feedback?: "like" | "dislike";
|
|
2609
|
-
}[];
|
|
2610
|
-
value?: string;
|
|
2611
|
-
placeholder?: string;
|
|
2612
|
-
loading?: boolean;
|
|
2613
|
-
suggestions?: string[];
|
|
2614
|
-
suggestionMode?: "submit" | "fill";
|
|
2615
|
-
proseSize?: "xs" | "sm" | "base" | "lg";
|
|
2616
|
-
codeTheme?: string;
|
|
2617
|
-
codeHighlight?: boolean;
|
|
2618
|
-
chatTitle?: string;
|
|
2619
|
-
models?: {
|
|
2620
|
-
id: string;
|
|
2621
|
-
name: string;
|
|
2622
|
-
provider?: string;
|
|
2623
|
-
description?: string;
|
|
2624
|
-
group?: string;
|
|
2625
|
-
}[];
|
|
2626
|
-
currentModel?: string;
|
|
2627
|
-
context?: {
|
|
2628
|
-
usedTokens: number;
|
|
2629
|
-
maxTokens: number;
|
|
2630
|
-
inputTokens?: number;
|
|
2631
|
-
outputTokens?: number;
|
|
2632
|
-
estimatedCost?: number;
|
|
2633
|
-
};
|
|
2634
|
-
scrollButton?: boolean;
|
|
2635
|
-
search?: boolean;
|
|
2636
|
-
voice?: boolean;
|
|
2637
|
-
/** Rich entity triggers (`/` skills, `@` agents/plugins) forwarded to the input. */
|
|
2638
|
-
triggers?: {
|
|
2639
|
-
char: string;
|
|
2640
|
-
kind: string;
|
|
2641
|
-
items?: {
|
|
2642
|
-
id: string;
|
|
2643
|
-
label: string;
|
|
2644
|
-
icon?: string;
|
|
2645
|
-
description?: string;
|
|
2646
|
-
group?: string;
|
|
2647
|
-
kind?: string;
|
|
2648
|
-
promptText?: string;
|
|
2649
|
-
data?: Record<string, unknown>;
|
|
2650
|
-
}[];
|
|
2651
|
-
}[];
|
|
2652
|
-
/** Default icon per entity kind (kind → image src) forwarded to the input. */
|
|
2653
|
-
kindIcons?: Record<string, string>;
|
|
2654
|
-
/** Sidebar default width as a percent of the workspace (default 26). */
|
|
2655
|
-
sidebarWidth?: number;
|
|
2656
|
-
/** Sidebar min width in px (default 240). */
|
|
2657
|
-
sidebarMinWidth?: number;
|
|
2658
|
-
/** Sidebar max width in px (default 420). */
|
|
2659
|
-
sidebarMaxWidth?: number;
|
|
2660
|
-
/** Controlled collapsed state. Set this as a JS property (`el.sidebarCollapsed = true`) to drive the sidebar from your app, updating it in response to the `kai-sidebar-toggle` event. Omit for uncontrolled (the element manages it). */
|
|
2661
|
-
sidebarCollapsed?: boolean;
|
|
2662
|
-
/** Initial collapsed state when uncontrolled (default false). Use the `default-sidebar-collapsed` attribute to start collapsed in plain HTML. */
|
|
2663
|
-
defaultSidebarCollapsed?: boolean;
|
|
2664
|
-
/** Auto-collapse the rail when the workspace's own width drops below this many px, and re-expand when it grows back above. Uncontrolled only (it never fights an app-driven `sidebarCollapsed`); omit to disable. Fires `kai-sidebar-toggle`. Attribute: `collapse-below`. */
|
|
2543
|
+
/** Controlled collapsed state of the start aside. Set this as a JS property (`el.startCollapsed = true`) to drive the aside from your app, updating it in response to the `kai-aside-toggle` event. Omit for uncontrolled (the element manages it). */
|
|
2544
|
+
startCollapsed?: boolean;
|
|
2545
|
+
/** Initial collapsed state of the start aside when uncontrolled (default false). Use the `default-start-collapsed` attribute to start collapsed in plain HTML. */
|
|
2546
|
+
defaultStartCollapsed?: boolean;
|
|
2547
|
+
/** Controlled collapsed state of the end aside. Set this as a JS property (`el.endCollapsed = true`) to drive the aside from your app, updating it in response to the `kai-aside-toggle` event. Omit for uncontrolled (the element manages it). */
|
|
2548
|
+
endCollapsed?: boolean;
|
|
2549
|
+
/** Initial collapsed state of the end aside when uncontrolled (default false). Use the `default-end-collapsed` attribute to start collapsed in plain HTML. */
|
|
2550
|
+
defaultEndCollapsed?: boolean;
|
|
2551
|
+
/** Auto-collapse both asides when the shell's own width drops below this many px, and re-expand when it grows back above. Applies to uncontrolled asides only (it never fights an app-driven collapsed prop); omit to disable. Fires `kai-aside-toggle`. Attribute: `collapse-below`. */
|
|
2665
2552
|
collapseBelow?: number;
|
|
2666
|
-
/**
|
|
2553
|
+
/** Below this shell width in px, an expanded aside renders as an overlay drawer over the main region instead of a column beside it. Escape inside the drawer closes it and returns focus to the element focused before it opened. Omit to disable. Attribute: `drawer-below`. */
|
|
2554
|
+
drawerBelow?: number;
|
|
2555
|
+
/** Density hint. Reflected as a `data-compact` hook on the root (and as the `compact` attribute on the element) for your CSS and slotted content; the shell itself keeps no other opinion about density. */
|
|
2667
2556
|
compact?: boolean;
|
|
2668
|
-
/**
|
|
2669
|
-
|
|
2670
|
-
|
|
2671
|
-
|
|
2672
|
-
|
|
2673
|
-
|
|
2674
|
-
|
|
2675
|
-
|
|
2676
|
-
id: string;
|
|
2677
|
-
}>) => void;
|
|
2678
|
-
/** An action button on a message was clicked. `state` is present only for the toggleable feedback votes: `'on'` when a like/dislike is set, `'off'` when re-tapped to clear. */
|
|
2679
|
-
onMessageAction?: (event: CustomEvent<{
|
|
2680
|
-
messageId: string;
|
|
2681
|
-
action: string;
|
|
2682
|
-
state?: undefined | "on" | "off";
|
|
2683
|
-
}>) => void;
|
|
2684
|
-
/** The header model switcher changed. */
|
|
2685
|
-
onModelChange?: (event: CustomEvent<{
|
|
2686
|
-
modelId: string;
|
|
2687
|
-
}>) => void;
|
|
2688
|
-
/** The "New chat" button was clicked. */
|
|
2689
|
-
onNewChat?: (event: CustomEvent<Record<string, never>>) => void;
|
|
2690
|
-
/** The Search button was clicked. */
|
|
2691
|
-
onSearch?: (event: CustomEvent<Record<string, never>>) => void;
|
|
2692
|
-
/** The sidebar was collapsed or expanded. */
|
|
2693
|
-
onSidebarToggle?: (event: CustomEvent<{
|
|
2557
|
+
/** The aside was resized (fires per drag step, keyboard nudge, or a handle double-click reset), width in px. */
|
|
2558
|
+
onAsideResize?: (event: CustomEvent<{
|
|
2559
|
+
side: "start" | "end";
|
|
2560
|
+
width: number;
|
|
2561
|
+
}>) => void;
|
|
2562
|
+
/** An aside collapsed or expanded (a method, the breakpoint, the drawer's Escape). */
|
|
2563
|
+
onAsideToggle?: (event: CustomEvent<{
|
|
2564
|
+
side: "start" | "end";
|
|
2694
2565
|
collapsed: boolean;
|
|
2695
2566
|
}>) => void;
|
|
2696
|
-
/** User submitted a message. */
|
|
2697
|
-
onSubmit?: (event: CustomEvent<{
|
|
2698
|
-
value: string;
|
|
2699
|
-
attachments: {
|
|
2700
|
-
id: string;
|
|
2701
|
-
type: "file" | "source-document";
|
|
2702
|
-
filename?: undefined | string;
|
|
2703
|
-
mediaType?: undefined | string;
|
|
2704
|
-
url?: undefined | string;
|
|
2705
|
-
title?: undefined | string;
|
|
2706
|
-
}[];
|
|
2707
|
-
}>) => void;
|
|
2708
|
-
/** A suggestion chip was clicked (only in `suggestion-mode="fill"`). */
|
|
2709
|
-
onSuggestionClick?: (event: CustomEvent<{
|
|
2710
|
-
value: string;
|
|
2711
|
-
}>) => void;
|
|
2712
|
-
/** Fired on every input change. */
|
|
2713
|
-
onValueChange?: (event: CustomEvent<{
|
|
2714
|
-
value: string;
|
|
2715
|
-
}>) => void;
|
|
2716
|
-
/** The Mic / voice button was clicked. */
|
|
2717
|
-
onVoice?: (event: CustomEvent<Record<string, never>>) => void;
|
|
2718
2567
|
}
|
|
2719
2568
|
export declare const Workspace: import('react').ForwardRefExoticComponent<WorkspaceProps & import('react').RefAttributes<HTMLElement>>;
|