@kitn.ai/ui 0.26.0 → 0.28.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 +25 -6
- package/bin/mcp.js +16 -3
- package/bin/route.js +23 -0
- package/bin/route.test.js +58 -0
- package/dist/{elements/chunks/Icon--Y8vsFal.js → Icon-DObhsRtm.js} +1 -1
- package/dist/action-icons-CcgNN2oT.js +1 -0
- package/dist/arrow-down-CjRU3JgV.js +1 -0
- package/dist/arrow-left-Bnpb1UEW.js +1 -0
- package/dist/artifact-Bwt7OgcR.js +1 -0
- package/dist/assets/dev-5XzXYR21.js +91 -0
- package/dist/attachments-Qr4kg-2b.js +1 -0
- package/dist/{elements/chunks/audio-visualizer-D7lB6mvR.js → audio-visualizer-DToYdfSc.js} +1 -1
- package/dist/badge-CdEu_jn2.js +1 -0
- package/dist/bash-InADTalH.js +1 -6
- package/dist/bell-DQAAOpDz.js +1 -0
- package/dist/{elements/chunks/button-flUbeufF.js → button-DkuOnGLy.js} +1 -1
- package/dist/card-renderer-Jx70m6_l.js +1 -0
- package/dist/card-routing-0YidER_3.js +1 -0
- package/dist/check-njkVdZu2.js +1 -0
- package/dist/checkbox-D7iRB3nL.js +1 -0
- package/dist/checkbox-group-B2_rpoPM.js +1 -0
- package/dist/chevron-down-B72s6PXR.js +1 -0
- package/dist/chevron-right-BatuHzUm.js +1 -0
- package/dist/choice-card-m0BYqqOK.js +1 -0
- package/dist/circle-check-B62pODB3.js +1 -0
- package/dist/circle-x-BPG0iPst.js +1 -0
- package/dist/circle-zx0ByzY9.js +1 -0
- package/dist/{elements/chunks/cn-CU7UAWzk.js → cn-DN5AWfiS.js} +1 -1
- package/dist/code-block-ClMLKb7C.js +1 -0
- package/dist/{elements/chunks/collapsible-BzbXpPzr.js → collapsible-B4DlWicL.js} +1 -1
- package/dist/components/attachment-types.d.ts +7 -0
- package/dist/components/audio-visualizer/fit-scale.d.ts +1 -1
- package/dist/components/card-renderer.d.ts +13 -0
- package/dist/components/card.d.ts +4 -0
- package/dist/components/chat-thread.d.ts +135 -2
- package/dist/components/conversation-item.d.ts +35 -7
- package/dist/components/conversation-list.d.ts +17 -5
- package/dist/components/conversation-panel.d.ts +29 -0
- package/dist/components/form-widgets.d.ts +67 -2
- package/dist/components/form.d.ts +48 -1
- package/dist/components/home-panel.d.ts +34 -0
- package/dist/components/message.d.ts +25 -3
- package/dist/components/reasoning.d.ts +6 -0
- package/dist/components/scroll-button.d.ts +11 -0
- package/dist/components/thread.d.ts +5 -0
- package/dist/components/tool-types.d.ts +9 -0
- package/dist/components/widget-tab-bar.d.ts +16 -0
- package/dist/composer-sQ0HcvyG.js +106 -0
- package/dist/confirm-card-rQWDQsnC.js +1 -0
- package/dist/construct-cli.es.js +1337 -0
- package/dist/{elements/chunks/context-VLIL3sJ-.js → context-0kg4ZX1J.js} +1 -1
- package/dist/controllable-CnGpMF6r.js +1 -0
- package/dist/conversation-item-BxwQLaFJ.js +1 -0
- package/dist/conversation-list-BCfGN1JU.js +1 -0
- package/dist/copy-n9u9rqpi.js +1 -0
- package/dist/core-AYMC6_lb.js +12 -5874
- package/dist/{create-tween-BFT6c-Y8.js → create-tween-C-q-JCM-.js} +1 -1
- package/dist/{create-tween-CJNlzoaO.js → create-tween-CRrJXxBd.js} +1 -1
- package/dist/{create-tween-CQED4T0g.js → create-tween-DZ3RRDHD.js} +1 -1
- package/dist/{elements/chunks/create-tween-c4Z8TDYz.js → create-tween-uPkArjIG.js} +2 -2
- package/dist/css-M7EaDHN_.js +1 -6
- package/dist/custom-elements.json +1433 -202
- package/dist/default-input-CaMrJkgH.js +1 -0
- package/dist/define-By-uL588.js +1 -0
- package/dist/define.d.ts +4 -0
- package/dist/define.js +510 -0
- package/dist/define.server.d.ts +5 -0
- package/dist/define.server.js +506 -0
- package/dist/{elements/chunks/disclosure-CcNbyLy0.js → disclosure-WUImBbDv.js} +1 -1
- package/dist/{elements/chunks/dropdown-BgWTthUx.js → dropdown-wZVeJOMd.js} +1 -1
- 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/checkbox-group.d.ts +1 -0
- package/dist/elements/checkbox-group.js +1 -0
- package/dist/elements/checkbox.d.ts +1 -0
- package/dist/elements/checkbox.js +1 -0
- package/dist/elements/checkpoint.js +1 -1
- package/dist/elements/choice.js +1 -1
- 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.js +1 -1
- package/dist/elements/conversation-list.js +1 -1
- package/dist/elements/define-entry.d.ts +12 -0
- package/dist/elements/dialog.js +1 -1
- package/dist/elements/dock.js +102 -8
- package/dist/elements/dropdown.js +1 -1
- package/dist/elements/editable-label.js +1 -1
- package/dist/elements/element-data-types.d.ts +37 -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-grid.d.ts +1 -0
- package/dist/elements/pane-grid.js +1 -0
- 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/radio-group.d.ts +1 -0
- package/dist/elements/radio-group.js +1 -0
- package/dist/elements/reasoning.js +1 -1
- package/dist/elements/remote.js +1 -1
- package/dist/elements/resizable.js +1 -1
- package/dist/elements/response-stream.js +2 -2
- 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/select.d.ts +1 -0
- package/dist/elements/select.js +1 -0
- 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/slider.d.ts +1 -0
- package/dist/elements/slider.js +1 -0
- package/dist/elements/slots.d.ts +1 -1
- 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 +380 -26
- package/dist/{elements/chunks/ellipsis-7gU33mL2.js → ellipsis-CbOpJnU3.js} +1 -1
- package/dist/embed-CrfjkbUG.js +1 -0
- package/dist/engine-javascript-vq0WuIJl.js +14 -2516
- package/dist/{elements/chunks/external-link-CSOEsNlx.js → external-link-ByXAwBBQ.js} +1 -1
- package/dist/file-text-DMib2qwt.js +1 -0
- package/dist/{elements/chunks/file-tree-zvB2i7P9.js → file-tree-CJqM2aP7.js} +1 -1
- package/dist/folder-_BAb929C.js +1 -0
- package/dist/form-DSZgZQZk.js +1 -0
- package/dist/github-dark-dimmed-DUshB20C.js +1 -4
- package/dist/github-light-JYsPkUQd.js +1 -4
- package/dist/hover-card-BQbul9eq.js +1 -0
- package/dist/html-CPZ3oZQ7.js +1 -10
- package/dist/icon-CdcfRhYI.js +1 -0
- package/dist/{elements/chunks/index-BCRhi84a.js → index-xu_pdcPi.js} +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.js +7474 -5857
- package/dist/index.server.js +5965 -4762
- package/dist/info-DsFjGuI_.js +1 -0
- package/dist/input-DKbmkMos.js +1 -0
- package/dist/javascript-C25yR2R2.js +1 -6
- package/dist/json-DxJze_jm.js +1 -6
- package/dist/kai.es.js +1 -1
- package/dist/kbd-PvdGhX4s.js +1 -0
- package/dist/{elements/chunks/link-preview-OQ9IEq0f.js → link-preview-DbM1866N.js} +1 -1
- package/dist/link-zF8PzWfF.js +1 -0
- package/dist/loader-BM4CEz4G.js +1 -0
- package/dist/{elements/chunks/markdown-DgBFaGAz.js → markdown-LMvmAyBk.js} +7 -7
- package/dist/mcp.es.js +1361 -81
- package/dist/message-BSsgvHvf.js +1 -0
- package/dist/message-BYZECyek.js +1 -0
- package/dist/message-circle-DruwObfX.js +1 -0
- package/dist/message-square-BG6q6mlm.js +1 -0
- package/dist/{elements/chunks/minimize-2-DPIUKTrT.js → minimize-2-BQRoBV1V.js} +1 -1
- package/dist/{elements/chunks/model-switcher-DsT8tFB0.js → model-switcher-CMpCOYcB.js} +1 -1
- package/dist/{elements/chunks/overlay-DuiwdXjm.js → overlay-Cb-MkyDa.js} +1 -1
- package/dist/panel-right-i8warFxT.js +1 -0
- package/dist/paperclip-ByY3UVO6.js +1 -0
- package/dist/play-BvKKq3fX.js +1 -0
- package/dist/primitives/card-data-types.d.ts +49 -0
- package/dist/primitives/card-routing.d.ts +1 -33
- package/dist/primitives/card-validate.d.ts +2 -2
- package/dist/primitives/chat-config.d.ts +29 -2
- package/dist/primitives/conversation-store.d.ts +54 -0
- package/dist/primitives/field-mask.d.ts +96 -0
- package/dist/primitives/field-semantics.d.ts +36 -0
- package/dist/primitives/input-mask.d.ts +46 -0
- package/dist/primitives/url-scheme-policy.d.ts +34 -0
- package/dist/primitives/use-resize-observer.d.ts +2 -2
- package/dist/progress-bar-jVAHvMUf.js +1 -0
- package/dist/prompt-suggestion-CD-qtNgC.js +1 -0
- package/dist/radio-BsoBMhkF.js +1 -0
- package/dist/react/index.d.ts +586 -19
- package/dist/react.js +223 -187
- package/dist/reasoning-4kBPtlTx.js +1 -0
- package/dist/register-impl-B1hLkrI8.js +424 -0
- package/dist/{elements/chunks/resizable-D181b4fM.js → resizable-uPmY9VY-.js} +1 -1
- package/dist/rotate-ccw-B2xn93py.js +1 -0
- package/dist/rotate-cw-CMVLoCyH.js +1 -0
- package/dist/schemas/form.schema.json +21 -1
- package/dist/schemas/tool-defs.d.ts +11 -1
- package/dist/schemas.js +81 -81
- package/dist/scroll-area-BqLUo8ZZ.js +1 -0
- package/dist/scroll-button-DslXiJyL.js +1 -0
- package/dist/select-2cLRtPGT.js +1 -0
- package/dist/{elements/chunks/separator-CeJHQqLW.js → separator-BWQtNJcM.js} +1 -1
- package/dist/{elements/chunks/settings-CqaHgJF9.js → settings-BBR63jLg.js} +1 -1
- package/dist/{elements/chunks/settings-group-CjqjLCOn.js → settings-group-B2ciy-Iw.js} +1 -1
- package/dist/{elements/chunks/skeleton-D8akBnKS.js → skeleton-CkHI-HgC.js} +1 -1
- package/dist/slider-DDR9U-i0.js +1 -0
- package/dist/{solid-BtdqNZI7.js → solid-BzCFdL25.js} +9771 -7594
- package/dist/{solid-CnavwBye.js → solid-DruVOXnf.js} +7893 -6183
- package/dist/solid.d.ts +16 -2
- package/dist/solid.js +256 -243
- package/dist/solid.server.js +256 -243
- package/dist/source-GEnFF528.js +1 -0
- package/dist/star-CilHq8GP.js +1 -0
- package/dist/state/index.d.ts +1 -1
- package/dist/state/mock.d.ts +32 -2
- package/dist/state.js +133 -108
- package/dist/store-Ciyk6eZG.js +1 -0
- package/dist/svelte--5p79yCD.js +1 -15
- package/dist/switch-KkeQIbuH.js +1 -0
- package/dist/tasks-card-BrN4bggJ.js +1 -0
- package/dist/text-shimmer-Dcj1MHuq.js +1 -0
- package/dist/textarea-Dpvbngbg.js +1 -0
- package/dist/theme.tokens.css +110 -13
- package/dist/{elements/chunks/thumbs-up-DX2Ijk3H.js → thumbs-up-CsT9Wzb9.js} +1 -1
- package/dist/toast-store-tgK6MuMv.js +1 -0
- package/dist/{elements/chunks/tool-DKQ2D1DP.js → tool-DzUjIBT8.js} +1 -1
- package/dist/{elements/chunks/tooltip-B0G99y8w.js → tooltip-Bkkg_4t0.js} +1 -1
- package/dist/trash-2-jBKxjGGQ.js +1 -0
- package/dist/{elements/chunks/triangle-alert-F9cyUEyy.js → triangle-alert-DlQ68ppf.js} +1 -1
- package/dist/tsx-B8rCNbgL.js +1 -6
- package/dist/types.d.ts +48 -3
- package/dist/typescript-RycA9KXf.js +1 -6
- package/dist/ui/checkbox-group.d.ts +83 -0
- package/dist/ui/checkbox.d.ts +40 -0
- package/dist/ui/dock.d.ts +51 -0
- package/dist/ui/icon.d.ts +3 -0
- package/dist/ui/input.d.ts +48 -2
- package/dist/ui/radio.d.ts +85 -0
- package/dist/ui/select.d.ts +71 -0
- package/dist/ui/slider.d.ts +65 -0
- package/dist/ui/switch.d.ts +9 -2
- package/dist/upload-TcAHXv9W.js +1 -0
- package/dist/url-scheme-policy-DR5DgvkM.js +1 -0
- package/dist/use-card-resolution-DaZqAdWf.js +1 -0
- package/dist/{elements/chunks/variant-aurora-qt6Zct8M.js → variant-aurora-BhLuYxJR.js} +1 -1
- package/dist/{variant-aurora-B8II3-I1.js → variant-aurora-CNmfHhcx.js} +2 -2
- package/dist/{variant-aurora-CMNWOSJR.js → variant-aurora-D6GsdTPA.js} +2 -2
- package/dist/{variant-aurora-CcuDMWwQ.js → variant-aurora-DbW_OWL2.js} +1 -1
- package/dist/{elements/chunks/variant-custom-tJp22_BQ.js → variant-custom-BRvaNHSi.js} +1 -1
- package/dist/{variant-custom-L16JLLZy.js → variant-custom-BvYHR62b.js} +1 -1
- package/dist/{variant-custom-BdvYC7af.js → variant-custom-DMTrEO5w.js} +2 -2
- package/dist/{variant-custom-C714mqKl.js → variant-custom-DV2x254s.js} +2 -2
- package/dist/{variant-wave-ecwykeyL.js → variant-wave-BNMGrDfj.js} +2 -2
- package/dist/{variant-wave-2S4La2Ka.js → variant-wave-BpDd8t3Z.js} +1 -1
- package/dist/{variant-wave-D7ruiA1W.js → variant-wave-CyBueXj9.js} +2 -2
- package/dist/{elements/chunks/variant-wave-CaQ5ti39.js → variant-wave-sp-qwsdI.js} +1 -1
- package/dist/vue-BmIZj4XD.js +1 -33
- package/dist/x-Z5UntkIJ.js +1 -0
- package/frameworks/react/index.tsx +210 -22
- package/llms-full.txt +1184 -22
- package/llms.txt +6 -3
- package/package.json +17 -4
- package/src/agent-tooling/README.md +192 -0
- package/src/agent-tooling/catalog/invariants.ts +3 -3
- package/src/agent-tooling/catalog/surfaces.ts +72 -0
- package/src/agent-tooling/construct/cli-entry.ts +8 -0
- package/src/agent-tooling/construct/cli.ts +147 -0
- package/src/agent-tooling/construct/codegen.ts +1635 -0
- package/src/agent-tooling/construct/construct.v1.schema.json +319 -0
- package/src/agent-tooling/construct/dev.ts +148 -0
- package/src/agent-tooling/construct/fixtures/demo-widget.construct.json +7 -0
- package/src/agent-tooling/construct/fixtures/ops-console.construct.json +44 -0
- package/src/agent-tooling/construct/fixtures/owner-widget.construct.json +32 -0
- package/src/agent-tooling/construct/schema.ts +452 -0
- package/src/agent-tooling/mcp/server.ts +2 -1
- package/src/agent-tooling/mcp/tools/construct.ts +130 -0
- package/src/agent-tooling/mcp/tools/debug.ts +126 -4
- package/src/agent-tooling/mcp/tools/reference.ts +104 -3
- package/src/agent-tooling/recipes/composed-thread.ts +714 -0
- package/src/agent-tooling/recipes/index.ts +22 -0
- package/src/agent-tooling/recipes/types.ts +32 -0
- package/src/agent-tooling/registry.ts +5 -0
- package/src/components/attachment-types.ts +7 -0
- package/src/components/audio-visualizer/fit-scale.ts +1 -1
- package/src/components/card-renderer.tsx +39 -8
- package/src/components/card.tsx +10 -2
- package/src/components/chat-scope-picker.tsx +2 -2
- package/src/components/chat-thread.tsx +602 -43
- package/src/components/choice-card.tsx +102 -37
- package/src/components/coachmark.tsx +1 -1
- package/src/components/code-block.tsx +2 -2
- package/src/components/composer.tsx +89 -15
- package/src/components/confirm-card.tsx +20 -4
- package/src/components/conversation-item.tsx +56 -9
- package/src/components/conversation-list.tsx +25 -10
- package/src/components/conversation-panel.tsx +118 -0
- package/src/components/empty.tsx +14 -3
- package/src/components/file-tree.tsx +5 -1
- package/src/components/form-widgets.tsx +257 -195
- package/src/components/form.tsx +297 -9
- package/src/components/home-panel.tsx +159 -0
- package/src/components/loader.tsx +12 -5
- package/src/components/message-skills.tsx +1 -1
- package/src/components/message.tsx +71 -11
- package/src/components/prompt-input.tsx +7 -1
- package/src/components/prompt-suggestion.tsx +4 -1
- package/src/components/reasoning.tsx +30 -3
- package/src/components/response-compare.tsx +2 -2
- package/src/components/scroll-button.tsx +56 -4
- package/src/components/source.tsx +6 -1
- package/src/components/tasks-card.tsx +58 -16
- package/src/components/thread.tsx +10 -1
- package/src/components/toast.tsx +1 -1
- package/src/components/tool-types.ts +9 -0
- package/src/components/widget-tab-bar.tsx +73 -0
- package/src/elements/attachments.tsx +3 -1
- package/src/elements/chat-workspace.tsx +1 -1
- package/src/elements/chat.tsx +115 -5
- package/src/elements/checkbox-group.tsx +164 -0
- package/src/elements/checkbox.tsx +134 -0
- package/src/elements/compiled.css +1 -1
- package/src/elements/composer.tsx +12 -1
- package/src/elements/conversation-item.tsx +62 -22
- package/src/elements/conversation-list.tsx +2 -2
- package/src/elements/define-entry.ts +12 -0
- package/src/elements/dock.tsx +11 -0
- package/src/elements/element-data-types.ts +40 -0
- package/src/elements/element-manifest.json +24 -0
- package/src/elements/element-meta.json +767 -34
- package/src/elements/element-nonscalar.json +17 -0
- package/src/elements/element-types.d.ts +380 -26
- package/src/elements/feedback-bar.tsx +5 -0
- package/src/elements/icon-names.json +29 -0
- package/src/elements/input.tsx +312 -23
- package/src/elements/message.tsx +2 -0
- package/src/elements/pane-grid.tsx +111 -0
- package/src/elements/prompt-input.tsx +8 -2
- package/src/elements/radio-group.tsx +129 -0
- package/src/elements/register-impl.ts +6 -0
- package/src/elements/scroll-button.tsx +54 -6
- package/src/elements/select.tsx +165 -0
- package/src/elements/slider.tsx +171 -0
- package/src/elements/slots.ts +1 -1
- package/src/elements/styles.css +89 -3
- package/src/elements/thread.tsx +2 -0
- package/src/elements/toast.tsx +14 -1
- package/src/index.ts +5 -2
- package/src/primitives/card-data-types.ts +49 -0
- package/src/primitives/card-host.tsx +4 -2
- package/src/primitives/card-routing.ts +7 -56
- package/src/primitives/card-schemas/form.schema.json +21 -1
- package/src/primitives/card-validate.ts +10 -2
- package/src/primitives/chat-config.tsx +33 -6
- package/src/primitives/conversation-store.ts +248 -0
- package/src/primitives/field-mask.ts +256 -0
- package/src/primitives/field-semantics.ts +115 -0
- package/src/primitives/input-mask.ts +853 -0
- package/src/primitives/toast-store.ts +66 -4
- package/src/primitives/url-scheme-policy.ts +70 -0
- package/src/primitives/use-resize-observer.ts +2 -2
- package/src/schemas/tool-defs.ts +12 -2
- package/src/solid.ts +20 -2
- package/src/state/index.ts +1 -1
- package/src/state/mock.ts +92 -6
- package/src/types.ts +45 -3
- package/src/ui/agent-card.tsx +2 -2
- package/src/ui/avatar.tsx +1 -1
- package/src/ui/checkbox-group.tsx +153 -0
- package/src/ui/checkbox.tsx +63 -0
- package/src/ui/dock.tsx +192 -7
- package/src/ui/icon.tsx +53 -0
- package/src/ui/input.tsx +249 -9
- package/src/ui/kbd.tsx +1 -1
- package/src/ui/nav.tsx +1 -1
- package/src/ui/pane-group.tsx +2 -2
- package/src/ui/radio.tsx +150 -0
- package/src/ui/select.tsx +168 -0
- package/src/ui/slider.tsx +178 -0
- package/src/ui/switch.tsx +49 -18
- package/src/utils/cn.ts +11 -5
- package/theme.css +112 -13
- package/dist/elements/chunks/action-icons-D9u3OzYW.js +0 -1
- package/dist/elements/chunks/arrow-left-CVh1TeN7.js +0 -1
- package/dist/elements/chunks/artifact-BkYcfIlZ.js +0 -1
- package/dist/elements/chunks/attachments-DwfNlubq.js +0 -1
- package/dist/elements/chunks/badge-Q0-Cmwzz.js +0 -1
- package/dist/elements/chunks/bash-InADTalH.js +0 -1
- package/dist/elements/chunks/card-renderer-3Dyl-FpN.js +0 -1
- package/dist/elements/chunks/card-routing-BK09BdmL.js +0 -1
- package/dist/elements/chunks/check-B5kBPKeo.js +0 -1
- package/dist/elements/chunks/chevron-down-DZ1GS39h.js +0 -1
- package/dist/elements/chunks/chevron-right-CvP7OUd2.js +0 -1
- package/dist/elements/chunks/choice-card-D4QUIOWZ.js +0 -1
- package/dist/elements/chunks/circle-CDf9g6MQ.js +0 -1
- package/dist/elements/chunks/circle-check-CA47Nqbz.js +0 -1
- package/dist/elements/chunks/circle-x-CJ_HVbC8.js +0 -1
- package/dist/elements/chunks/code-block-BdLiTitd.js +0 -1
- package/dist/elements/chunks/composer-Byve-n8K.js +0 -69
- package/dist/elements/chunks/confirm-card-B0flE3MN.js +0 -1
- package/dist/elements/chunks/controllable-DTwTIlwp.js +0 -1
- package/dist/elements/chunks/conversation-item-BDztezOG.js +0 -1
- package/dist/elements/chunks/copy-Nf-kqxXH.js +0 -1
- package/dist/elements/chunks/core-AYMC6_lb.js +0 -12
- package/dist/elements/chunks/css-M7EaDHN_.js +0 -1
- package/dist/elements/chunks/default-input-C2iLFq0b.js +0 -1
- package/dist/elements/chunks/define-wjHR1MkU.js +0 -1
- package/dist/elements/chunks/download-C4V7tBdb.js +0 -1
- package/dist/elements/chunks/embed-D3KewsIJ.js +0 -1
- package/dist/elements/chunks/engine-javascript-vq0WuIJl.js +0 -141
- package/dist/elements/chunks/file-text-D1G8khle.js +0 -1
- package/dist/elements/chunks/folder-WW2LGLid.js +0 -1
- package/dist/elements/chunks/form-CQirdC4W.js +0 -1
- package/dist/elements/chunks/github-dark-dimmed-DUshB20C.js +0 -1
- package/dist/elements/chunks/github-light-JYsPkUQd.js +0 -1
- package/dist/elements/chunks/hover-card-CJJkfHTK.js +0 -1
- package/dist/elements/chunks/html-CPZ3oZQ7.js +0 -1
- package/dist/elements/chunks/icon-Cfgmf4fa.js +0 -1
- package/dist/elements/chunks/info-DX3YMOt6.js +0 -1
- package/dist/elements/chunks/input-BtW9U6Sq.js +0 -1
- package/dist/elements/chunks/javascript-C25yR2R2.js +0 -1
- package/dist/elements/chunks/json-DxJze_jm.js +0 -1
- package/dist/elements/chunks/kbd-LGXwuT_V.js +0 -1
- package/dist/elements/chunks/link-2My69BqT.js +0 -1
- package/dist/elements/chunks/loader-iOxc_Tu-.js +0 -1
- package/dist/elements/chunks/message-VMZohrXx.js +0 -1
- package/dist/elements/chunks/message-circle-CpXMM-_n.js +0 -1
- package/dist/elements/chunks/message-square-DxcWtETQ.js +0 -1
- package/dist/elements/chunks/message-tZmV2A3p.js +0 -1
- package/dist/elements/chunks/paperclip-CRZVp4z_.js +0 -1
- package/dist/elements/chunks/progress-bar-DNy66e_E.js +0 -1
- package/dist/elements/chunks/prompt-suggestion-Bn64Nl7L.js +0 -1
- package/dist/elements/chunks/reasoning-Emn9N4-T.js +0 -1
- package/dist/elements/chunks/rotate-cw-CPWe37D9.js +0 -1
- package/dist/elements/chunks/scroll-area-ClZkZxIk.js +0 -1
- package/dist/elements/chunks/scroll-button-DPE-t3x_.js +0 -1
- package/dist/elements/chunks/share-CyfnNEqp.js +0 -1
- package/dist/elements/chunks/source-UWCvmVak.js +0 -1
- package/dist/elements/chunks/star-DoHFAikQ.js +0 -1
- package/dist/elements/chunks/store-Cjq0qwYN.js +0 -1
- package/dist/elements/chunks/svelte--5p79yCD.js +0 -1
- package/dist/elements/chunks/tasks-card-CmZ5xh6v.js +0 -1
- package/dist/elements/chunks/text-shimmer-DYn09zrz.js +0 -1
- package/dist/elements/chunks/textarea-skiGHURM.js +0 -1
- package/dist/elements/chunks/toast-store-CFnQpThX.js +0 -1
- package/dist/elements/chunks/tsx-B8rCNbgL.js +0 -1
- package/dist/elements/chunks/typescript-RycA9KXf.js +0 -1
- package/dist/elements/chunks/use-card-resolution-DoA2f_EU.js +0 -1
- package/dist/elements/chunks/vue-BmIZj4XD.js +0 -1
- package/dist/elements/chunks/x-B6UnOiLw.js +0 -1
- package/dist/llms/llms-full.txt +0 -2949
- package/dist/llms/llms.txt +0 -156
- package/dist/register-impl-DpE7icIb.js +0 -293
- package/dist/ui/stat.d.ts +0 -16
- package/src/ui/stat.tsx +0 -41
- /package/dist/{elements/chunks/card-tags-D8lZ-C_U.js → card-tags-D8lZ-C_U.js} +0 -0
- /package/dist/{elements/chunks/link-preview-DNILK391.js → link-preview-DNILK391.js} +0 -0
- /package/dist/{elements/chunks/slots-DaNjX0rc.js → slots-DaNjX0rc.js} +0 -0
|
@@ -378,7 +378,7 @@
|
|
|
378
378
|
"type": "undefined | { id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }[]",
|
|
379
379
|
"optional": true,
|
|
380
380
|
"scalar": false,
|
|
381
|
-
"description": "The attachments to render. Omit (or pass an empty array) for the empty state, which shows `emptyText` if set and nothing otherwise. Set as a JS property (array).",
|
|
381
|
+
"description": "The attachments to render. Omit (or pass an empty array) for the empty state, which shows `emptyText` if set and nothing otherwise. Set as a JS property (array). Each item's `url` must be a `data:` URI or an https URL, never `URL.createObjectURL`: a `blob:` URL previews here but the wire encoders (`toOpenAIMessages`/`toAnthropicMessages`) refuse it.",
|
|
382
382
|
"typeName": "AttachmentData[]",
|
|
383
383
|
"typeShape": "{ id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }[]",
|
|
384
384
|
"default": "[]",
|
|
@@ -1183,14 +1183,14 @@
|
|
|
1183
1183
|
},
|
|
1184
1184
|
{
|
|
1185
1185
|
"name": "policy",
|
|
1186
|
-
"type": "undefined | { onSubmit?: undefined | (cardId: string, data: unknown) => void; onAction?: undefined | (cardId: string, action: string, payload?: unknown) => void; onSendPrompt?: undefined | (text: string, opts: { mode: \"compose\" | \"send\"; context?: unknown
|
|
1186
|
+
"type": "undefined | { onSubmit?: undefined | ((cardId: string, data: unknown) => void); onAction?: undefined | ((cardId: string, action: string, payload?: unknown) => void); onSendPrompt?: undefined | ((text: string, opts: { mode: \"compose\" | \"send\"; context?: unknown }) => void); onOpen?: undefined | ((url: string, target: \"tab\" | \"artifact\") => void); onState?: undefined | ((cardId: string, patch: unknown) => void); onDismiss?: undefined | ((cardId: string) => void); onReopen?: undefined | ((cardId: string) => void); onError?: undefined | ((cardId: string, message: string) => void); maxSendPromptMode?: undefined | \"compose\" | \"send\" }",
|
|
1187
1187
|
"optional": true,
|
|
1188
1188
|
"scalar": false,
|
|
1189
1189
|
"description": "Optional CardPolicy handling child events. Property: `el.policy`.",
|
|
1190
1190
|
"typeName": "CardPolicy",
|
|
1191
|
-
"typeShape": "{ onSubmit?: undefined | (cardId: string, data: unknown) => void; onAction?: undefined | (cardId: string, action: string, payload?: unknown) => void; onSendPrompt?: undefined | (text: string, opts: { mode: \"compose\" | \"send\"; context?: unknown
|
|
1191
|
+
"typeShape": "{ onSubmit?: undefined | ((cardId: string, data: unknown) => void); onAction?: undefined | ((cardId: string, action: string, payload?: unknown) => void); onSendPrompt?: undefined | ((text: string, opts: { mode: \"compose\" | \"send\"; context?: unknown }) => void); onOpen?: undefined | ((url: string, target: \"tab\" | \"artifact\") => void); onState?: undefined | ((cardId: string, patch: unknown) => void); onDismiss?: undefined | ((cardId: string) => void); onReopen?: undefined | ((cardId: string) => void); onError?: undefined | ((cardId: string, message: string) => void); maxSendPromptMode?: undefined | \"compose\" | \"send\" }",
|
|
1192
1192
|
"typeImport": "CardPolicy",
|
|
1193
|
-
"displayType": "undefined | { onSubmit?: undefined | (cardId: string, data: unknown) => void; onAction?: undefined | (cardId: string, action: string, payload?: unknown) => void; onSendPrompt?: undefined | (text: string, opts: { mode: \"compose\" | \"send\"; context?: unknown
|
|
1193
|
+
"displayType": "undefined | { onSubmit?: undefined | ((cardId: string, data: unknown) => void); onAction?: undefined | ((cardId: string, action: string, payload?: unknown) => void); onSendPrompt?: undefined | ((text: string, opts: { mode: \"compose\" | \"send\"; context?: unknown }) => void); onOpen?: undefined | ((url: string, target: \"tab\" | \"artifact\") => void); onState?: undefined | ((cardId: string, patch: unknown) => void); onDismiss?: undefined | ((cardId: string) => void); onReopen?: undefined | ((cardId: string) => void); onError?: undefined | ((cardId: string, message: string) => void); maxSendPromptMode?: undefined | \"compose\" | \"send\" }"
|
|
1194
1194
|
},
|
|
1195
1195
|
{
|
|
1196
1196
|
"name": "validateCards",
|
|
@@ -1433,6 +1433,22 @@
|
|
|
1433
1433
|
"default": "true",
|
|
1434
1434
|
"displayType": "undefined | false | true"
|
|
1435
1435
|
},
|
|
1436
|
+
{
|
|
1437
|
+
"name": "reasoning",
|
|
1438
|
+
"type": "undefined | \"full\" | \"compact\" | \"off\"",
|
|
1439
|
+
"optional": true,
|
|
1440
|
+
"scalar": true,
|
|
1441
|
+
"description": "How `reasoning` parts render across the thread. `'full'` (default) is the current collapsible-disclosure behavior; `'compact'` shows only a shimmer loader while a reasoning part streams and nothing once it settles (no expandable detail); `'off'` renders reasoning parts not at all. Forwarded to every `MessageBody` as `reasoningMode`.",
|
|
1442
|
+
"displayType": "undefined | \"full\" | \"compact\" | \"off\""
|
|
1443
|
+
},
|
|
1444
|
+
{
|
|
1445
|
+
"name": "reasoningOpen",
|
|
1446
|
+
"type": "undefined | false | true",
|
|
1447
|
+
"optional": true,
|
|
1448
|
+
"scalar": true,
|
|
1449
|
+
"description": "Seeds the reasoning disclosure open AND keeps it tracking the stream (open while streaming, closes when it settles): the pre-Task-19f `full` behavior. Default false/absent: the panel starts closed (just the \"Thinking\" shimmer chip) and only opens on click, the current default (owner ruling, 2026-08-26). Meaningless when `reasoning` is `'compact'` or `'off'`. Forwarded to every `MessageBody` as `reasoningDefaultOpen`.",
|
|
1450
|
+
"displayType": "undefined | false | true"
|
|
1451
|
+
},
|
|
1436
1452
|
{
|
|
1437
1453
|
"name": "chatTitle",
|
|
1438
1454
|
"type": "undefined | string",
|
|
@@ -1544,6 +1560,15 @@
|
|
|
1544
1560
|
"description": "INJECT: footer row below the composer (disclaimers, token meter, …).",
|
|
1545
1561
|
"displayType": "undefined | false | true"
|
|
1546
1562
|
},
|
|
1563
|
+
{
|
|
1564
|
+
"name": "attach",
|
|
1565
|
+
"type": "undefined | false | true",
|
|
1566
|
+
"optional": true,
|
|
1567
|
+
"scalar": true,
|
|
1568
|
+
"description": "When `false`, hides the built-in paperclip attach button. Defaults to `true` (undeclared keeps today's behavior: attach visible), matching `DefaultPromptInput`'s own default: only an explicit `false` hides it.",
|
|
1569
|
+
"default": "true",
|
|
1570
|
+
"displayType": "undefined | false | true"
|
|
1571
|
+
},
|
|
1547
1572
|
{
|
|
1548
1573
|
"name": "webSearch",
|
|
1549
1574
|
"type": "undefined | false | true",
|
|
@@ -1625,6 +1650,37 @@
|
|
|
1625
1650
|
"scalar": false,
|
|
1626
1651
|
"description": "JSON Schemas for the card types this app renders, keyed by envelope type. The companion of `cardTypes`, which says what DRAWS a card while this says what a VALID one looks like. An OBJECT, so it is a JS property only: `el.cardSchemas = { 'pricing-table': pricingSchema }`, never an attribute. `createCardRegistry(...).validationSchemas` is exactly this shape. Without it the kit validates its own seven built-ins and leaves your own card type, the one your app actually cares about, as the only unchecked thing on screen. A schema here WINS over a built-in of the same name. Typed `Record<string, object>` rather than `Record<string, JsonSchema>` deliberately: an imported `.json` schema widens `\"type\"` to `string`, and an authored one carries `$schema`/`title`/`description`/`additionalProperties`, so the tighter type would reject both of the normal ways to supply one.",
|
|
1627
1652
|
"displayType": "undefined | Record<string, object>"
|
|
1653
|
+
},
|
|
1654
|
+
{
|
|
1655
|
+
"name": "conversations",
|
|
1656
|
+
"type": "undefined | false | true",
|
|
1657
|
+
"optional": true,
|
|
1658
|
+
"scalar": true,
|
|
1659
|
+
"description": "Turns on the prior-conversations list (a list-toggle button in the header, plus a second list view sharing the panel, C-1). Attribute- settable like every other boolean flag on this element: `<kai-chat conversations>`. Requires `store`. A row select, \"new conversation,\" or the visitor's mount-time auto-restore all deliver their messages the same way: listen for `kai-conversation-load` and set `el.messages` from `event.detail.messages` (a fresh array): this element does not update `messages` for you. Set with no `store`, the underlying `ChatThread` decides loudly (one console.error) and stays visually off; this facade always supplies its own internal load handler (the `kai-conversation-load` dispatch below), so the second ChatThread guard, missing `onConversationLoad`, never trips here, even for a consumer who never listens for the event. Default false.",
|
|
1660
|
+
"default": "false",
|
|
1661
|
+
"displayType": "undefined | false | true"
|
|
1662
|
+
},
|
|
1663
|
+
{
|
|
1664
|
+
"name": "store",
|
|
1665
|
+
"type": "undefined | { list: () => Promise<{ id: string; title: string; groupId?: undefined | string; scope?: undefined | { type: \"document\" | \"collection\"; documentId?: undefined | string; filters?: undefined | { tags?: undefined | string[]; authors?: undefined | string[]; contentType?: undefined | \"transcript\" | \"markdown\"; dateRange?: undefined | { from: string; to: string } } }; messageCount: number; lastMessageAt?: undefined | string; updatedAt: string; trailing?: undefined | string; lastReadAt?: undefined | string }[]>; load: (id: string) => Promise<{ id: string; role: \"user\" | \"assistant\"; parts: ({ type: \"text\"; text: string; raw?: undefined | { source: string; payload: unknown } } | { type: \"reasoning\"; text: string; label?: undefined | string; index?: undefined | number; streamId?: undefined | string; signature?: undefined | string; raw?: undefined | { source: string; payload: unknown } } | { type: \"tool\"; tool: { type: string; kind?: undefined | \"command\" | \"file-change\" | \"search\" | \"fetch\" | \"mcp\" | \"image\" | \"generic\"; state: \"input-streaming\" | \"input-available\" | \"output-available\" | \"output-error\"; input?: undefined | Record<string, unknown>; rawInput?: undefined | string; output?: undefined | Record<string, unknown>; toolCallId?: undefined | string; errorText?: undefined | string; raw?: undefined | { source: string; payload: unknown } }; raw?: undefined | { source: string; payload: unknown } } | { type: \"card\"; envelope: { type: string; id: string; data: unknown; title?: undefined | string; resolution?: undefined | { kind: \"action\"; action: string; payload?: unknown; at?: undefined | string } | { kind: \"submit\"; data: unknown; at?: undefined | string } | { kind: \"dismissed\"; at?: undefined | string } | { kind: \"expired\"; reason?: undefined | string; at?: undefined | string } }; raw?: undefined | { source: string; payload: unknown } } | { type: \"source\"; source: { id?: undefined | string; url?: undefined | string; title?: undefined | string; snippet?: undefined | string; index?: undefined | number }; raw?: undefined | { source: string; payload: unknown } } | { type: \"file\"; attachment: { id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }; raw?: undefined | { source: string; payload: unknown } })[]; actions?: undefined | (\"copy\" | \"like\" | \"dislike\" | \"regenerate\" | \"edit\" | { id: string; label: string; icon?: undefined | string; tooltip?: undefined | string })[]; avatar?: undefined | { src?: undefined | string; fallback?: undefined | string; alt?: undefined | string }; feedback?: undefined | \"like\" | \"dislike\" }[]>; save: (id: string, messages: { id: string; role: \"user\" | \"assistant\"; parts: ({ type: \"text\"; text: string; raw?: undefined | { source: string; payload: unknown } } | { type: \"reasoning\"; text: string; label?: undefined | string; index?: undefined | number; streamId?: undefined | string; signature?: undefined | string; raw?: undefined | { source: string; payload: unknown } } | { type: \"tool\"; tool: { type: string; kind?: undefined | \"command\" | \"file-change\" | \"search\" | \"fetch\" | \"mcp\" | \"image\" | \"generic\"; state: \"input-streaming\" | \"input-available\" | \"output-available\" | \"output-error\"; input?: undefined | Record<string, unknown>; rawInput?: undefined | string; output?: undefined | Record<string, unknown>; toolCallId?: undefined | string; errorText?: undefined | string; raw?: undefined | { source: string; payload: unknown } }; raw?: undefined | { source: string; payload: unknown } } | { type: \"card\"; envelope: { type: string; id: string; data: unknown; title?: undefined | string; resolution?: undefined | { kind: \"action\"; action: string; payload?: unknown; at?: undefined | string } | { kind: \"submit\"; data: unknown; at?: undefined | string } | { kind: \"dismissed\"; at?: undefined | string } | { kind: \"expired\"; reason?: undefined | string; at?: undefined | string } }; raw?: undefined | { source: string; payload: unknown } } | { type: \"source\"; source: { id?: undefined | string; url?: undefined | string; title?: undefined | string; snippet?: undefined | string; index?: undefined | number }; raw?: undefined | { source: string; payload: unknown } } | { type: \"file\"; attachment: { id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }; raw?: undefined | { source: string; payload: unknown } })[]; actions?: undefined | (\"copy\" | \"like\" | \"dislike\" | \"regenerate\" | \"edit\" | { id: string; label: string; icon?: undefined | string; tooltip?: undefined | string })[]; avatar?: undefined | { src?: undefined | string; fallback?: undefined | string; alt?: undefined | string }; feedback?: undefined | \"like\" | \"dislike\" }[]) => Promise<void>; markRead?: undefined | ((id: string) => Promise<void>) }",
|
|
1666
|
+
"optional": true,
|
|
1667
|
+
"scalar": false,
|
|
1668
|
+
"description": "The adapter this thread persists conversations through: an object of three functions (`list`/`load`/`save`; `ConversationStore`, exported from `@kitn.ai/ui`'s `primitives/conversation-store`). A JS PROPERTY ONLY: `el.store = myAdapter`. It can never be an attribute, since a function-bearing object has no HTML string form, the same reasoning that keeps `messages`/`cardSchemas` property-only (the kai- contract: array/object props are JS properties, never attributes). Two built-ins ship: `localStorageStore(name, userId?)` and `fetchStore(url, userId?)`.",
|
|
1669
|
+
"typeName": "ConversationStore",
|
|
1670
|
+
"typeShape": "{ list: () => Promise<{ id: string; title: string; groupId?: undefined | string; scope?: undefined | { type: \"document\" | \"collection\"; documentId?: undefined | string; filters?: undefined | { tags?: undefined | string[]; authors?: undefined | string[]; contentType?: undefined | \"transcript\" | \"markdown\"; dateRange?: undefined | { from: string; to: string } } }; messageCount: number; lastMessageAt?: undefined | string; updatedAt: string; trailing?: undefined | string; lastReadAt?: undefined | string }[]>; load: (id: string) => Promise<{ id: string; role: \"user\" | \"assistant\"; parts: ({ type: \"text\"; text: string; raw?: undefined | { source: string; payload: unknown } } | { type: \"reasoning\"; text: string; label?: undefined | string; index?: undefined | number; streamId?: undefined | string; signature?: undefined | string; raw?: undefined | { source: string; payload: unknown } } | { type: \"tool\"; tool: { type: string; kind?: undefined | \"command\" | \"file-change\" | \"search\" | \"fetch\" | \"mcp\" | \"image\" | \"generic\"; state: \"input-streaming\" | \"input-available\" | \"output-available\" | \"output-error\"; input?: undefined | Record<string, unknown>; rawInput?: undefined | string; output?: undefined | Record<string, unknown>; toolCallId?: undefined | string; errorText?: undefined | string; raw?: undefined | { source: string; payload: unknown } }; raw?: undefined | { source: string; payload: unknown } } | { type: \"card\"; envelope: { type: string; id: string; data: unknown; title?: undefined | string; resolution?: undefined | { kind: \"action\"; action: string; payload?: unknown; at?: undefined | string } | { kind: \"submit\"; data: unknown; at?: undefined | string } | { kind: \"dismissed\"; at?: undefined | string } | { kind: \"expired\"; reason?: undefined | string; at?: undefined | string } }; raw?: undefined | { source: string; payload: unknown } } | { type: \"source\"; source: { id?: undefined | string; url?: undefined | string; title?: undefined | string; snippet?: undefined | string; index?: undefined | number }; raw?: undefined | { source: string; payload: unknown } } | { type: \"file\"; attachment: { id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }; raw?: undefined | { source: string; payload: unknown } })[]; actions?: undefined | (\"copy\" | \"like\" | \"dislike\" | \"regenerate\" | \"edit\" | { id: string; label: string; icon?: undefined | string; tooltip?: undefined | string })[]; avatar?: undefined | { src?: undefined | string; fallback?: undefined | string; alt?: undefined | string }; feedback?: undefined | \"like\" | \"dislike\" }[]>; save: (id: string, messages: { id: string; role: \"user\" | \"assistant\"; parts: ({ type: \"text\"; text: string; raw?: undefined | { source: string; payload: unknown } } | { type: \"reasoning\"; text: string; label?: undefined | string; index?: undefined | number; streamId?: undefined | string; signature?: undefined | string; raw?: undefined | { source: string; payload: unknown } } | { type: \"tool\"; tool: { type: string; kind?: undefined | \"command\" | \"file-change\" | \"search\" | \"fetch\" | \"mcp\" | \"image\" | \"generic\"; state: \"input-streaming\" | \"input-available\" | \"output-available\" | \"output-error\"; input?: undefined | Record<string, unknown>; rawInput?: undefined | string; output?: undefined | Record<string, unknown>; toolCallId?: undefined | string; errorText?: undefined | string; raw?: undefined | { source: string; payload: unknown } }; raw?: undefined | { source: string; payload: unknown } } | { type: \"card\"; envelope: { type: string; id: string; data: unknown; title?: undefined | string; resolution?: undefined | { kind: \"action\"; action: string; payload?: unknown; at?: undefined | string } | { kind: \"submit\"; data: unknown; at?: undefined | string } | { kind: \"dismissed\"; at?: undefined | string } | { kind: \"expired\"; reason?: undefined | string; at?: undefined | string } }; raw?: undefined | { source: string; payload: unknown } } | { type: \"source\"; source: { id?: undefined | string; url?: undefined | string; title?: undefined | string; snippet?: undefined | string; index?: undefined | number }; raw?: undefined | { source: string; payload: unknown } } | { type: \"file\"; attachment: { id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }; raw?: undefined | { source: string; payload: unknown } })[]; actions?: undefined | (\"copy\" | \"like\" | \"dislike\" | \"regenerate\" | \"edit\" | { id: string; label: string; icon?: undefined | string; tooltip?: undefined | string })[]; avatar?: undefined | { src?: undefined | string; fallback?: undefined | string; alt?: undefined | string }; feedback?: undefined | \"like\" | \"dislike\" }[]) => Promise<void>; markRead?: undefined | ((id: string) => Promise<void>) }",
|
|
1671
|
+
"typeImport": "ConversationStore",
|
|
1672
|
+
"displayType": "undefined | { list: () => Promise<{ id: string; title: string; groupId?: undefined | string; scope?: undefined | { type: \"document\" | \"collection\"; documentId?: undefined | string; filters?: undefined | { tags?: undefined | string[]; authors?: undefined | string[]; contentType?: undefined | \"transcript\" | \"markdown\"; dateRange?: undefined | { from: string; to: string } } }; messageCount: number; lastMessageAt?: undefined | string; updatedAt: string; trailing?: undefined | string; lastReadAt?: undefined | string }[]>; load: (id: string) => Promise<{ id: string; role: \"user\" | \"assistant\"; parts: ({ type: \"text\"; text: string; raw?: undefined | { source: string; payload: unknown } } | { type: \"reasoning\"; text: string; label?: undefined | string; index?: undefined | number; streamId?: undefined | string; signature?: undefined | string; raw?: undefined | { source: string; payload: unknown } } | { type: \"tool\"; tool: { type: string; kind?: undefined | \"command\" | \"file-change\" | \"search\" | \"fetch\" | \"mcp\" | \"image\" | \"generic\"; state: \"input-streaming\" | \"input-available\" | \"output-available\" | \"output-error\"; input?: undefined | Record<string, unknown>; rawInput?: undefined | string; output?: undefined | Record<string, unknown>; toolCallId?: undefined | string; errorText?: undefined | string; raw?: undefined | { source: string; payload: unknown } }; raw?: undefined | { source: string; payload: unknown } } | { type: \"card\"; envelope: { type: string; id: string; data: unknown; title?: undefined | string; resolution?: undefined | { kind: \"action\"; action: string; payload?: unknown; at?: undefined | string } | { kind: \"submit\"; data: unknown; at?: undefined | string } | { kind: \"dismissed\"; at?: undefined | string } | { kind: \"expired\"; reason?: undefined | string; at?: undefined | string } }; raw?: undefined | { source: string; payload: unknown } } | { type: \"source\"; source: { id?: undefined | string; url?: undefined | string; title?: undefined | string; snippet?: undefined | string; index?: undefined | number }; raw?: undefined | { source: string; payload: unknown } } | { type: \"file\"; attachment: { id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }; raw?: undefined | { source: string; payload: unknown } })[]; actions?: undefined | (\"copy\" | \"like\" | \"dislike\" | \"regenerate\" | \"edit\" | { id: string; label: string; icon?: undefined | string; tooltip?: undefined | string })[]; avatar?: undefined | { src?: undefined | string; fallback?: undefined | string; alt?: undefined | string }; feedback?: undefined | \"like\" | \"dislike\" }[]>; save: (id: string, messages: { id: string; role: \"user\" | \"assistant\"; parts: ({ type: \"text\"; text: string; raw?: undefined | { source: string; payload: unknown } } | { type: \"reasoning\"; text: string; label?: undefined | string; index?: undefined | number; streamId?: undefined | string; signature?: undefined | string; raw?: undefined | { source: string; payload: unknown } } | { type: \"tool\"; tool: { type: string; kind?: undefined | \"command\" | \"file-change\" | \"search\" | \"fetch\" | \"mcp\" | \"image\" | \"generic\"; state: \"input-streaming\" | \"input-available\" | \"output-available\" | \"output-error\"; input?: undefined | Record<string, unknown>; rawInput?: undefined | string; output?: undefined | Record<string, unknown>; toolCallId?: undefined | string; errorText?: undefined | string; raw?: undefined | { source: string; payload: unknown } }; raw?: undefined | { source: string; payload: unknown } } | { type: \"card\"; envelope: { type: string; id: string; data: unknown; title?: undefined | string; resolution?: undefined | { kind: \"action\"; action: string; payload?: unknown; at?: undefined | string } | { kind: \"submit\"; data: unknown; at?: undefined | string } | { kind: \"dismissed\"; at?: undefined | string } | { kind: \"expired\"; reason?: undefined | string; at?: undefined | string } }; raw?: undefined | { source: string; payload: unknown } } | { type: \"source\"; source: { id?: undefined | string; url?: undefined | string; title?: undefined | string; snippet?: undefined | string; index?: undefined | number }; raw?: undefined | { source: string; payload: unknown } } | { type: \"file\"; attachment: { id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }; raw?: undefined | { source: string; payload: unknown } })[]; actions?: undefined | (\"copy\" | \"like\" | \"dislike\" | \"regenerate\" | \"edit\" | { id: string; label: string; icon?: undefined | string; tooltip?: undefined | string })[]; avatar?: undefined | { src?: undefined | string; fallback?: undefined | string; alt?: undefined | string }; feedback?: undefined | \"like\" | \"dislike\" }[]) => Promise<void>; markRead?: undefined | ((id: string) => Promise<void>) }"
|
|
1673
|
+
},
|
|
1674
|
+
{
|
|
1675
|
+
"name": "home",
|
|
1676
|
+
"type": "undefined | { greeting?: undefined | { title?: undefined | string; subtitle?: undefined | string }; recentConversation?: undefined | false | true; newConversation?: undefined | { label?: undefined | string }; links?: undefined | { label: string; href?: undefined | string; description?: undefined | string; icon?: undefined | string }[] }",
|
|
1677
|
+
"optional": true,
|
|
1678
|
+
"scalar": false,
|
|
1679
|
+
"description": "Turns on the widget home screen (Intercom-pattern): the panel boots into a `home` view, with a greeting, most-recent-conversation card, a \"new conversation\" CTA, and host-defined links, plus a Home/Messages tab bar for switching back to the thread. An OBJECT, so it is a JS property only: `el.home = { greeting: { title: 'Hey' }, links: [...] }`, never an attribute (the kai- contract: array/object props are JS properties). A `links` entry with no `href` fires `kai-home-link` with that entry when tapped, rather than navigating; one WITH `href` opens it directly (only when the URL passes the kit's own scheme allowlist). Omit for the no-home widget (chat view only, unchanged).",
|
|
1680
|
+
"typeName": "HomeConfig",
|
|
1681
|
+
"typeShape": "{ greeting?: undefined | { title?: undefined | string; subtitle?: undefined | string }; recentConversation?: undefined | false | true; newConversation?: undefined | { label?: undefined | string }; links?: undefined | { label: string; href?: undefined | string; description?: undefined | string; icon?: undefined | string }[] }",
|
|
1682
|
+
"typeImport": "HomeConfig",
|
|
1683
|
+
"displayType": "undefined | { greeting?: undefined | { title?: undefined | string; subtitle?: undefined | string }; recentConversation?: undefined | false | true; newConversation?: undefined | { label?: undefined | string }; links?: undefined | { label: string; href?: undefined | string; description?: undefined | string; icon?: undefined | string }[] }"
|
|
1628
1684
|
}
|
|
1629
1685
|
],
|
|
1630
1686
|
"events": [
|
|
@@ -1640,6 +1696,18 @@
|
|
|
1640
1696
|
"description": "One or more picked files were refused because `accept` excluded them. The element renders NO message of its own: it reports the facts (name, media type, whether the kit could have sent it) and what the user should see is the application's call. Only ever fires when `accept` is set.",
|
|
1641
1697
|
"displayDetail": "{ rejected: { filename: string; mediaType: string; reason: \"filtered\" | \"unsupported\" }[] }"
|
|
1642
1698
|
},
|
|
1699
|
+
{
|
|
1700
|
+
"name": "kai-conversation-load",
|
|
1701
|
+
"detail": "{ id: string | undefined; messages: { id: string; role: \"user\" | \"assistant\"; parts: ({ type: \"text\"; text: string; raw?: undefined | { source: string; payload: unknown } } | { type: \"reasoning\"; text: string; label?: undefined | string; index?: undefined | number; streamId?: undefined | string; signature?: undefined | string; raw?: undefined | { source: string; payload: unknown } } | { type: \"tool\"; tool: { type: string; kind?: undefined | \"command\" | \"file-change\" | \"search\" | \"fetch\" | \"mcp\" | \"image\" | \"generic\"; state: \"input-streaming\" | \"input-available\" | \"output-available\" | \"output-error\"; input?: undefined | Record<string, unknown>; rawInput?: undefined | string; output?: undefined | Record<string, unknown>; toolCallId?: undefined | string; errorText?: undefined | string; raw?: undefined | { source: string; payload: unknown } }; raw?: undefined | { source: string; payload: unknown } } | { type: \"card\"; envelope: { type: string; id: string; data: unknown; title?: undefined | string; resolution?: undefined | { kind: \"action\"; action: string; payload?: unknown; at?: undefined | string } | { kind: \"submit\"; data: unknown; at?: undefined | string } | { kind: \"dismissed\"; at?: undefined | string } | { kind: \"expired\"; reason?: undefined | string; at?: undefined | string } }; raw?: undefined | { source: string; payload: unknown } } | { type: \"source\"; source: { id?: undefined | string; url?: undefined | string; title?: undefined | string; snippet?: undefined | string; index?: undefined | number }; raw?: undefined | { source: string; payload: unknown } } | { type: \"file\"; attachment: { id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }; raw?: undefined | { source: string; payload: unknown } })[]; actions?: undefined | (\"copy\" | \"like\" | \"dislike\" | \"regenerate\" | \"edit\" | { id: string; label: string; icon?: undefined | string; tooltip?: undefined | string })[]; avatar?: undefined | { src?: undefined | string; fallback?: undefined | string; alt?: undefined | string }; feedback?: undefined | \"like\" | \"dislike\" }[] }",
|
|
1702
|
+
"description": "A conversation's history loaded: a row tap in the list, \"new conversation,\" or the visitor's own mount-time auto-restore of their most recent thread (only fires when `conversations` is on and a `store` is set). `detail.id` is that conversation's id, `undefined` for the \"new conversation\" case (no id exists until the first message mints one, C-6). Set `el.messages = event.detail.messages` (already a fresh array) to actually render it, since this element does not do that for you; `messages` stays your own state like everywhere else on this element.",
|
|
1703
|
+
"displayDetail": "{ id: string | undefined; messages: { id: string; role: \"user\" | \"assistant\"; parts: ({ type: \"text\"; text: string; raw?: undefined | { source: string; payload: unknown } } | { type: \"reasoning\"; text: string; label?: undefined | string; index?: undefined | number; streamId?: undefined | string; signature?: undefined | string; raw?: undefined | { source: string; payload: unknown } } | { type: \"tool\"; tool: { type: string; kind?: undefined | \"command\" | \"file-change\" | \"search\" | \"fetch\" | \"mcp\" | \"image\" | \"generic\"; state: \"input-streaming\" | \"input-available\" | \"output-available\" | \"output-error\"; input?: undefined | Record<string, unknown>; rawInput?: undefined | string; output?: undefined | Record<string, unknown>; toolCallId?: undefined | string; errorText?: undefined | string; raw?: undefined | { source: string; payload: unknown } }; raw?: undefined | { source: string; payload: unknown } } | { type: \"card\"; envelope: { type: string; id: string; data: unknown; title?: undefined | string; resolution?: undefined | { kind: \"action\"; action: string; payload?: unknown; at?: undefined | string } | { kind: \"submit\"; data: unknown; at?: undefined | string } | { kind: \"dismissed\"; at?: undefined | string } | { kind: \"expired\"; reason?: undefined | string; at?: undefined | string } }; raw?: undefined | { source: string; payload: unknown } } | { type: \"source\"; source: { id?: undefined | string; url?: undefined | string; title?: undefined | string; snippet?: undefined | string; index?: undefined | number }; raw?: undefined | { source: string; payload: unknown } } | { type: \"file\"; attachment: { id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }; raw?: undefined | { source: string; payload: unknown } })[]; actions?: undefined | (\"copy\" | \"like\" | \"dislike\" | \"regenerate\" | \"edit\" | { id: string; label: string; icon?: undefined | string; tooltip?: undefined | string })[]; avatar?: undefined | { src?: undefined | string; fallback?: undefined | string; alt?: undefined | string }; feedback?: undefined | \"like\" | \"dislike\" }[] }"
|
|
1704
|
+
},
|
|
1705
|
+
{
|
|
1706
|
+
"name": "kai-home-link",
|
|
1707
|
+
"detail": "{ entry: { label: string; href?: undefined | string; description?: undefined | string; icon?: undefined | string } }",
|
|
1708
|
+
"description": "A `home.links` entry with no `href` was activated (tapped/clicked/Enter). Meaningful only when `home` is set.",
|
|
1709
|
+
"displayDetail": "{ entry: { label: string; href?: undefined | string; description?: undefined | string; icon?: undefined | string } }"
|
|
1710
|
+
},
|
|
1643
1711
|
{
|
|
1644
1712
|
"name": "kai-message-action",
|
|
1645
1713
|
"detail": "{ messageId: string; action: string; state?: undefined | \"on\" | \"off\" }",
|
|
@@ -1788,6 +1856,202 @@
|
|
|
1788
1856
|
}
|
|
1789
1857
|
]
|
|
1790
1858
|
},
|
|
1859
|
+
{
|
|
1860
|
+
"tag": "kai-checkbox",
|
|
1861
|
+
"className": "KaiCheckboxElement",
|
|
1862
|
+
"displayName": "Checkbox",
|
|
1863
|
+
"props": [
|
|
1864
|
+
{
|
|
1865
|
+
"name": "theme",
|
|
1866
|
+
"type": "\"light\" | \"dark\" | \"auto\"",
|
|
1867
|
+
"optional": true,
|
|
1868
|
+
"scalar": true,
|
|
1869
|
+
"description": "Color mode (`auto` follows prefers-color-scheme).",
|
|
1870
|
+
"default": "'auto'",
|
|
1871
|
+
"universal": true,
|
|
1872
|
+
"displayType": "\"light\" | \"dark\" | \"auto\""
|
|
1873
|
+
},
|
|
1874
|
+
{
|
|
1875
|
+
"name": "checked",
|
|
1876
|
+
"type": "undefined | false | true",
|
|
1877
|
+
"optional": true,
|
|
1878
|
+
"scalar": true,
|
|
1879
|
+
"description": "Controlled checked state. Settable and reflected to the `checked` attribute. `el.checked = true` (or `<kai-checkbox checked>`) drives it; ticking the box updates it and fires `kai-change`. Read `el.checked` for live state.",
|
|
1880
|
+
"displayType": "undefined | false | true"
|
|
1881
|
+
},
|
|
1882
|
+
{
|
|
1883
|
+
"name": "defaultChecked",
|
|
1884
|
+
"type": "undefined | false | true",
|
|
1885
|
+
"optional": true,
|
|
1886
|
+
"scalar": true,
|
|
1887
|
+
"description": "Initial checked state on mount (uncontrolled seed). Bare attribute (`<kai-checkbox default-checked>`) turns it on.",
|
|
1888
|
+
"displayType": "undefined | false | true"
|
|
1889
|
+
},
|
|
1890
|
+
{
|
|
1891
|
+
"name": "indeterminate",
|
|
1892
|
+
"type": "undefined | false | true",
|
|
1893
|
+
"optional": true,
|
|
1894
|
+
"scalar": true,
|
|
1895
|
+
"description": "The mixed state, for a parent box whose children are partly ticked. Visual plus an accessibility hint: the box still reports `checked === false`.",
|
|
1896
|
+
"displayType": "undefined | false | true"
|
|
1897
|
+
},
|
|
1898
|
+
{
|
|
1899
|
+
"name": "disabled",
|
|
1900
|
+
"type": "undefined | false | true",
|
|
1901
|
+
"optional": true,
|
|
1902
|
+
"scalar": true,
|
|
1903
|
+
"description": "Disable interaction.",
|
|
1904
|
+
"displayType": "undefined | false | true"
|
|
1905
|
+
},
|
|
1906
|
+
{
|
|
1907
|
+
"name": "required",
|
|
1908
|
+
"type": "undefined | false | true",
|
|
1909
|
+
"optional": true,
|
|
1910
|
+
"scalar": true,
|
|
1911
|
+
"description": "Set the native `required` attribute, and nothing more. Whether an unticked box is an error is the application's rule, not the kit's.",
|
|
1912
|
+
"displayType": "undefined | false | true"
|
|
1913
|
+
},
|
|
1914
|
+
{
|
|
1915
|
+
"name": "label",
|
|
1916
|
+
"type": "undefined | string",
|
|
1917
|
+
"optional": true,
|
|
1918
|
+
"scalar": true,
|
|
1919
|
+
"description": "Accessible label. The visible text beside the box is the consumer's to render.",
|
|
1920
|
+
"displayType": "undefined | string"
|
|
1921
|
+
},
|
|
1922
|
+
{
|
|
1923
|
+
"name": "name",
|
|
1924
|
+
"type": "undefined | string",
|
|
1925
|
+
"optional": true,
|
|
1926
|
+
"scalar": true,
|
|
1927
|
+
"description": "Form-control name (paired with `value`).",
|
|
1928
|
+
"displayType": "undefined | string"
|
|
1929
|
+
},
|
|
1930
|
+
{
|
|
1931
|
+
"name": "value",
|
|
1932
|
+
"type": "undefined | string",
|
|
1933
|
+
"optional": true,
|
|
1934
|
+
"scalar": true,
|
|
1935
|
+
"description": "Submitted value when checked (paired with `name`). Defaults to `'on'`.",
|
|
1936
|
+
"displayType": "undefined | string"
|
|
1937
|
+
}
|
|
1938
|
+
],
|
|
1939
|
+
"events": [
|
|
1940
|
+
{
|
|
1941
|
+
"name": "kai-change",
|
|
1942
|
+
"detail": "{ checked: false | true }",
|
|
1943
|
+
"description": "The box was ticked or unticked.",
|
|
1944
|
+
"displayDetail": "{ checked: false | true }"
|
|
1945
|
+
}
|
|
1946
|
+
],
|
|
1947
|
+
"methods": [
|
|
1948
|
+
{
|
|
1949
|
+
"name": "toggle",
|
|
1950
|
+
"params": "",
|
|
1951
|
+
"returns": "void",
|
|
1952
|
+
"description": "Flip the box and fire `kai-change` (no-op while disabled)."
|
|
1953
|
+
},
|
|
1954
|
+
{
|
|
1955
|
+
"name": "focus",
|
|
1956
|
+
"params": "options?: FocusOptions",
|
|
1957
|
+
"returns": "void",
|
|
1958
|
+
"description": "Focus the inner input (the host element can't reach it)."
|
|
1959
|
+
}
|
|
1960
|
+
],
|
|
1961
|
+
"composedFrom": [
|
|
1962
|
+
{
|
|
1963
|
+
"name": "Checkbox",
|
|
1964
|
+
"group": "UI",
|
|
1965
|
+
"storyId": "solid-advanced-primitives-checkbox--docs"
|
|
1966
|
+
}
|
|
1967
|
+
],
|
|
1968
|
+
"tokens": []
|
|
1969
|
+
},
|
|
1970
|
+
{
|
|
1971
|
+
"tag": "kai-checkbox-group",
|
|
1972
|
+
"className": "KaiCheckboxGroupElement",
|
|
1973
|
+
"displayName": "CheckboxGroup",
|
|
1974
|
+
"props": [
|
|
1975
|
+
{
|
|
1976
|
+
"name": "theme",
|
|
1977
|
+
"type": "\"light\" | \"dark\" | \"auto\"",
|
|
1978
|
+
"optional": true,
|
|
1979
|
+
"scalar": true,
|
|
1980
|
+
"description": "Color mode (`auto` follows prefers-color-scheme).",
|
|
1981
|
+
"default": "'auto'",
|
|
1982
|
+
"universal": true,
|
|
1983
|
+
"displayType": "\"light\" | \"dark\" | \"auto\""
|
|
1984
|
+
},
|
|
1985
|
+
{
|
|
1986
|
+
"name": "options",
|
|
1987
|
+
"type": "{ value: string; label: string; description?: undefined | string; disabled?: undefined | false | true }[]",
|
|
1988
|
+
"optional": false,
|
|
1989
|
+
"scalar": false,
|
|
1990
|
+
"description": "The choices, top to bottom. Set as a JS PROPERTY (array), never an attribute. Rendered in full: the kit never truncates, re-orders or de-duplicates them.",
|
|
1991
|
+
"typeName": "KaiCheckboxOption[]",
|
|
1992
|
+
"typeShape": "{ value: string; label: string; description?: undefined | string; disabled?: undefined | false | true }[]",
|
|
1993
|
+
"default": "[]",
|
|
1994
|
+
"typeImport": "KaiCheckboxOption",
|
|
1995
|
+
"displayType": "{ value: string; label: string; description?: undefined | string; disabled?: undefined | false | true }[]"
|
|
1996
|
+
},
|
|
1997
|
+
{
|
|
1998
|
+
"name": "value",
|
|
1999
|
+
"type": "undefined | string",
|
|
2000
|
+
"optional": true,
|
|
2001
|
+
"scalar": true,
|
|
2002
|
+
"description": "The FIRST selected value. Settable and reflected to the `value` attribute, so `:host([value])` and `el.value` see live state, and a seed can be written in markup. Writing it makes that the whole selection; to read or drive the rest, use `el.values`.",
|
|
2003
|
+
"displayType": "undefined | string"
|
|
2004
|
+
},
|
|
2005
|
+
{
|
|
2006
|
+
"name": "name",
|
|
2007
|
+
"type": "undefined | string",
|
|
2008
|
+
"optional": true,
|
|
2009
|
+
"scalar": true,
|
|
2010
|
+
"description": "The shared form-control name every box carries, so `FormData.getAll(name)` reads the whole selection back under one key. NO DEFAULT, unlike `<kai-radio-group>`. A radio set needs a shared `name` for the browser to make it exclusive and arrow-navigable, so one is generated when none is given; checkboxes are independent controls and behave correctly with no name at all. Generating one here would submit the selection under a random key, which is worse than submitting nothing. The element is NOT form-associated (no `ElementInternals`, no `setFormValue()`), the same known gap `<kai-input>` records: the boxes live in a shadow root, so a surrounding `<form>` collects nothing from them whether or not `name` is set. Read `el.values`. The name still lands on every inner input, so it is right the day form association arrives.",
|
|
2011
|
+
"displayType": "undefined | string"
|
|
2012
|
+
},
|
|
2013
|
+
{
|
|
2014
|
+
"name": "disabled",
|
|
2015
|
+
"type": "undefined | false | true",
|
|
2016
|
+
"optional": true,
|
|
2017
|
+
"scalar": true,
|
|
2018
|
+
"description": "Disable every row. Individual rows carry their own `disabled`.",
|
|
2019
|
+
"displayType": "undefined | false | true"
|
|
2020
|
+
},
|
|
2021
|
+
{
|
|
2022
|
+
"name": "label",
|
|
2023
|
+
"type": "undefined | string",
|
|
2024
|
+
"optional": true,
|
|
2025
|
+
"scalar": true,
|
|
2026
|
+
"description": "Accessible name for the group.",
|
|
2027
|
+
"displayType": "undefined | string"
|
|
2028
|
+
}
|
|
2029
|
+
],
|
|
2030
|
+
"events": [
|
|
2031
|
+
{
|
|
2032
|
+
"name": "kai-change",
|
|
2033
|
+
"detail": "{ value: string; values: string[] }",
|
|
2034
|
+
"description": "A row was ticked or unticked. `values` is the whole selection after the change, which is what a multi-select control needs; `value` is the first of them (empty when nothing is selected). Both are always present, so neither shape silently loses the other. This is `<kai-select>`'s detail, deliberately.",
|
|
2035
|
+
"displayDetail": "{ value: string; values: string[] }"
|
|
2036
|
+
}
|
|
2037
|
+
],
|
|
2038
|
+
"methods": [
|
|
2039
|
+
{
|
|
2040
|
+
"name": "focus",
|
|
2041
|
+
"params": "options?: FocusOptions",
|
|
2042
|
+
"returns": "void",
|
|
2043
|
+
"description": "Focus the group's first box. Not \"the first ticked one\", which is `<kai-radio-group>`'s rule: a radio group is ONE tab stop that lands on the selection, while every checkbox here is its own tab stop, so the entry point is simply the top of the list."
|
|
2044
|
+
}
|
|
2045
|
+
],
|
|
2046
|
+
"composedFrom": [
|
|
2047
|
+
{
|
|
2048
|
+
"name": "CheckboxGroup",
|
|
2049
|
+
"group": "UI",
|
|
2050
|
+
"storyId": "solid-advanced-primitives-checkboxgroup--docs"
|
|
2051
|
+
}
|
|
2052
|
+
],
|
|
2053
|
+
"tokens": []
|
|
2054
|
+
},
|
|
1791
2055
|
{
|
|
1792
2056
|
"tag": "kai-checkpoint",
|
|
1793
2057
|
"className": "KaiCheckpointElement",
|
|
@@ -2577,7 +2841,7 @@
|
|
|
2577
2841
|
{
|
|
2578
2842
|
"name": "kai-submit",
|
|
2579
2843
|
"detail": "{ doc: ({ type: \"text\"; text: string } | { type: \"entity\"; entity: { kind: string; id: string; label: string; icon?: undefined | string; promptText?: undefined | string; data?: undefined | Record<string, unknown> } })[]; text: string; entities: { kind: string; id: string; label: string; icon?: undefined | string; promptText?: undefined | string; data?: undefined | Record<string, unknown> }[] }",
|
|
2580
|
-
"description": "The user submitted the composer (Enter or programmatic submit).",
|
|
2844
|
+
"description": "The user submitted the composer (Enter or programmatic submit). Note the detail carries no `attachments`; `<kai-composer>` is the bare editing surface: no send button, toolbar, or attachments. For a drop-in composer row with all three, reach for `<kai-prompt-input>`, which is built on this.",
|
|
2581
2845
|
"displayDetail": "{ doc: ({ type: \"text\"; text: string } | { type: \"entity\"; entity: { kind: string; id: string; label: string; icon?: undefined | string; promptText?: undefined | string; data?: undefined | Record<string, unknown> } })[]; text: string; entities: { kind: string; id: string; label: string; icon?: undefined | string; promptText?: undefined | string; data?: undefined | Record<string, unknown> }[] }"
|
|
2582
2846
|
},
|
|
2583
2847
|
{
|
|
@@ -2874,7 +3138,7 @@
|
|
|
2874
3138
|
"type": "undefined | string",
|
|
2875
3139
|
"optional": true,
|
|
2876
3140
|
"scalar": true,
|
|
2877
|
-
"description": "The row's identity
|
|
3141
|
+
"description": "The row's identity: the `conversation-id` attribute (host `id` is the fallback). Inside `<kai-conversations>` it is handed to the container's selection contract (`kai-conversation-select`); standalone it is the `id` in this element's own `kai-select` detail.",
|
|
2878
3142
|
"displayType": "undefined | string"
|
|
2879
3143
|
},
|
|
2880
3144
|
{
|
|
@@ -2882,7 +3146,7 @@
|
|
|
2882
3146
|
"type": "undefined | false | true",
|
|
2883
3147
|
"optional": true,
|
|
2884
3148
|
"scalar": true,
|
|
2885
|
-
"description": "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
|
|
3149
|
+
"description": "Selected state. Reflected as `aria-current` on the row body and a `data-active` styling hook on the row; inside a container the container drives it from its `activeId`, standalone you set it yourself.",
|
|
2886
3150
|
"displayType": "undefined | false | true"
|
|
2887
3151
|
},
|
|
2888
3152
|
{
|
|
@@ -2894,7 +3158,14 @@
|
|
|
2894
3158
|
"displayType": "undefined | false | true"
|
|
2895
3159
|
}
|
|
2896
3160
|
],
|
|
2897
|
-
"events": [
|
|
3161
|
+
"events": [
|
|
3162
|
+
{
|
|
3163
|
+
"name": "kai-select",
|
|
3164
|
+
"detail": "{ id: string }",
|
|
3165
|
+
"description": "STANDALONE activation only: the row was activated (click, Enter or Space on its body) while the item is NOT a direct child of `<kai-conversations>`. `id` is the row's identity: the `conversation-id` attribute, else the host `id`. Inside a container this never fires: activation surfaces once, as `kai-conversation-select` on the container.",
|
|
3166
|
+
"displayDetail": "{ id: string }"
|
|
3167
|
+
}
|
|
3168
|
+
],
|
|
2898
3169
|
"methods": [],
|
|
2899
3170
|
"composedFrom": [
|
|
2900
3171
|
{
|
|
@@ -2988,15 +3259,15 @@
|
|
|
2988
3259
|
},
|
|
2989
3260
|
{
|
|
2990
3261
|
"name": "conversations",
|
|
2991
|
-
"type": "undefined | { id: string; title: string; groupId?: undefined | string; scope?: undefined | { type: \"document\" | \"collection\"; documentId?: undefined | string; filters?: undefined | { tags?: undefined | string[]; authors?: undefined | string[]; contentType?: undefined | \"transcript\" | \"markdown\"; dateRange?: undefined | { from: string; to: string } } }; messageCount: number; lastMessageAt?: undefined | string; updatedAt: string; trailing?: undefined | string }[]",
|
|
3262
|
+
"type": "undefined | { id: string; title: string; groupId?: undefined | string; scope?: undefined | { type: \"document\" | \"collection\"; documentId?: undefined | string; filters?: undefined | { tags?: undefined | string[]; authors?: undefined | string[]; contentType?: undefined | \"transcript\" | \"markdown\"; dateRange?: undefined | { from: string; to: string } } }; messageCount: number; lastMessageAt?: undefined | string; updatedAt: string; trailing?: undefined | string; lastReadAt?: undefined | string }[]",
|
|
2992
3263
|
"optional": true,
|
|
2993
3264
|
"scalar": false,
|
|
2994
3265
|
"description": "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.",
|
|
2995
3266
|
"typeName": "ConversationSummary[]",
|
|
2996
|
-
"typeShape": "{ id: string; title: string; groupId?: undefined | string; scope?: undefined | { type: \"document\" | \"collection\"; documentId?: undefined | string; filters?: undefined | { tags?: undefined | string[]; authors?: undefined | string[]; contentType?: undefined | \"transcript\" | \"markdown\"; dateRange?: undefined | { from: string; to: string } } }; messageCount: number; lastMessageAt?: undefined | string; updatedAt: string; trailing?: undefined | string }[]",
|
|
3267
|
+
"typeShape": "{ id: string; title: string; groupId?: undefined | string; scope?: undefined | { type: \"document\" | \"collection\"; documentId?: undefined | string; filters?: undefined | { tags?: undefined | string[]; authors?: undefined | string[]; contentType?: undefined | \"transcript\" | \"markdown\"; dateRange?: undefined | { from: string; to: string } } }; messageCount: number; lastMessageAt?: undefined | string; updatedAt: string; trailing?: undefined | string; lastReadAt?: undefined | string }[]",
|
|
2997
3268
|
"default": "[]",
|
|
2998
3269
|
"typeImport": "ConversationSummary",
|
|
2999
|
-
"displayType": "undefined | { id: string; title: string; groupId?: undefined | string; scope?: undefined | { type: \"document\" | \"collection\"; documentId?: undefined | string; filters?: undefined | { tags?: undefined | string[]; authors?: undefined | string[]; contentType?: undefined | \"transcript\" | \"markdown\"; dateRange?: undefined | { from: string; to: string } } }; messageCount: number; lastMessageAt?: undefined | string; updatedAt: string; trailing?: undefined | string }[]"
|
|
3270
|
+
"displayType": "undefined | { id: string; title: string; groupId?: undefined | string; scope?: undefined | { type: \"document\" | \"collection\"; documentId?: undefined | string; filters?: undefined | { tags?: undefined | string[]; authors?: undefined | string[]; contentType?: undefined | \"transcript\" | \"markdown\"; dateRange?: undefined | { from: string; to: string } } }; messageCount: number; lastMessageAt?: undefined | string; updatedAt: string; trailing?: undefined | string; lastReadAt?: undefined | string }[]"
|
|
3000
3271
|
},
|
|
3001
3272
|
{
|
|
3002
3273
|
"name": "activeId",
|
|
@@ -3125,7 +3396,7 @@
|
|
|
3125
3396
|
"id"
|
|
3126
3397
|
],
|
|
3127
3398
|
"text": true,
|
|
3128
|
-
"description": "Parse a single light-DOM `<kai-conversation>` element into a `ConversationSummary`. Attribute mapping: - `id` → ConversationSummary.id - `group-id` → ConversationSummary.groupId (optional) - textContent → ConversationSummary.title Fields not expressible as HTML attributes are NOT fabricated
|
|
3399
|
+
"description": "Parse a single light-DOM `<kai-conversation>` element into a `ConversationSummary`. Attribute mapping: - `id` → ConversationSummary.id - `group-id` → ConversationSummary.groupId (optional) - textContent → ConversationSummary.title Fields not expressible as HTML attributes are NOT fabricated: the optional `scope` and `lastMessageAt` stay absent, and the required `messageCount`/`updatedAt` get honest defaults — zero messages, and an empty `updatedAt` from which no trailing relative time is derived (the epoch it used to fabricate rendered a bogus \"many days ago\" on every declarative row)."
|
|
3129
3400
|
}
|
|
3130
3401
|
],
|
|
3131
3402
|
"slots": [
|
|
@@ -3372,6 +3643,14 @@
|
|
|
3372
3643
|
"description": "Disable the launcher; `show()` and `toggle()` are gated on it.",
|
|
3373
3644
|
"displayType": "undefined | false | true"
|
|
3374
3645
|
},
|
|
3646
|
+
{
|
|
3647
|
+
"name": "hideClose",
|
|
3648
|
+
"type": "undefined | false | true",
|
|
3649
|
+
"optional": true,
|
|
3650
|
+
"scalar": true,
|
|
3651
|
+
"description": "Suppress the dock's own built-in mobile close X. Set this when your slotted panel content supplies its own close affordance (e.g. a `<kai-chat slot=\"header-end\">` close button), otherwise the two stack. TRADEOFF: the mobile panel reserves a padding band above its content so the built-in X never paints over slotted content; that band stays reserved unless you set this true, so only set it once your own control is actually in place. Attribute: `hide-close`.",
|
|
3652
|
+
"displayType": "undefined | false | true"
|
|
3653
|
+
},
|
|
3375
3654
|
{
|
|
3376
3655
|
"name": "focusOnOpen",
|
|
3377
3656
|
"type": "undefined | \"content\" | \"panel\" | \"none\"",
|
|
@@ -4141,14 +4420,14 @@
|
|
|
4141
4420
|
},
|
|
4142
4421
|
{
|
|
4143
4422
|
"name": "data",
|
|
4144
|
-
"type": "undefined | { type: \"object\"; title?: undefined | string; description?: undefined | string; required?: undefined | string[]; properties: Record<string, { type: \"string\" | \"number\" | \"integer\" | \"boolean\" | \"array\" | \"object\"; title?: undefined | string; description?: undefined | string; default?: unknown; enum?: undefined | unknown[]; format?: undefined | \"email\" | \"uri\" | \"url\" | \"date\" | \"date-time\" | \"time\"; minimum?: undefined | number; maximum?: undefined | number; minLength?: undefined | number; maxLength?: undefined | number; pattern?: undefined | string; minItems?: undefined | number; maxItems?: undefined | number; items?: undefined | Record<string, unknown> | { enum: unknown[] }; properties?: undefined | Record<string, Record<string, unknown>>; required?: undefined | string[]; readOnly?: undefined | false | true; \"x-kai-widget\"?: undefined | \"textarea\" | \"slider\" | \"rating\" | \"radio\" | \"select\" | \"checkbox\" | \"password\" | \"switch\"; \"x-kai-placeholder\"?: undefined | string; \"x-kai-step\"?: undefined | number }>; \"x-kai-order\"?: undefined | string[]; \"x-kai-inlineMax\"?: undefined | number; \"x-kai-submitLabel\"?: undefined | string; \"x-kai-dismissible\"?: undefined | false | true; \"x-kai-actions\"?: undefined | { id: string; label: string; variant?: undefined | \"default\" | \"ghost\" | \"outline\" }[] }",
|
|
4423
|
+
"type": "undefined | { type: \"object\"; title?: undefined | string; description?: undefined | string; required?: undefined | string[]; properties: Record<string, { type: \"string\" | \"number\" | \"integer\" | \"boolean\" | \"array\" | \"object\"; title?: undefined | string; description?: undefined | string; default?: unknown; enum?: undefined | unknown[]; format?: undefined | \"email\" | \"uri\" | \"url\" | \"date\" | \"date-time\" | \"time\"; minimum?: undefined | number; maximum?: undefined | number; minLength?: undefined | number; maxLength?: undefined | number; pattern?: undefined | string; minItems?: undefined | number; maxItems?: undefined | number; items?: undefined | Record<string, unknown> | { enum: unknown[] }; properties?: undefined | Record<string, Record<string, unknown>>; required?: undefined | string[]; readOnly?: undefined | false | true; \"x-kai-widget\"?: undefined | \"textarea\" | \"slider\" | \"rating\" | \"radio\" | \"select\" | \"checkbox\" | \"password\" | \"switch\"; \"x-kai-placeholder\"?: undefined | string; \"x-kai-step\"?: undefined | number; \"x-kai-format\"?: undefined | \"tel\" | \"ssn\" | \"credit-card\" | \"custom\"; \"x-kai-mask\"?: undefined | string; \"x-kai-mask-guide\"?: undefined | string }>; \"x-kai-order\"?: undefined | string[]; \"x-kai-inlineMax\"?: undefined | number; \"x-kai-submitLabel\"?: undefined | string; \"x-kai-dismissible\"?: undefined | false | true; \"x-kai-actions\"?: undefined | { id: string; label: string; variant?: undefined | \"default\" | \"ghost\" | \"outline\" }[] }",
|
|
4145
4424
|
"optional": true,
|
|
4146
4425
|
"scalar": false,
|
|
4147
4426
|
"description": "The form definition: a JSON Schema (`type:'object'`) + `x-kai-*` UI hints (the CardEnvelope.data). Set as a JS PROPERTY: `el.data = { type:'object', properties:{…} }`. Import the `FormDefinition` type from `@kitn.ai/ui` for the full shape. It IS self-referential (`FormField.properties` is another `FormField` map), and the generated `element-types.d.ts` inlines every named type, so the shipped declaration bottoms out in a `Record<string, unknown>` placeholder one level down rather than carrying the recursion. That is why `FormDefinition` is a `type` alias: an interface gets no implicit index signature, so it would not be assignable to that placeholder.",
|
|
4148
4427
|
"typeName": "FormDefinition",
|
|
4149
|
-
"typeShape": "{ type: \"object\"; title?: undefined | string; description?: undefined | string; required?: undefined | string[]; properties: Record<string, { type: \"string\" | \"number\" | \"integer\" | \"boolean\" | \"array\" | \"object\"; title?: undefined | string; description?: undefined | string; default?: unknown; enum?: undefined | unknown[]; format?: undefined | \"email\" | \"uri\" | \"url\" | \"date\" | \"date-time\" | \"time\"; minimum?: undefined | number; maximum?: undefined | number; minLength?: undefined | number; maxLength?: undefined | number; pattern?: undefined | string; minItems?: undefined | number; maxItems?: undefined | number; items?: undefined | Record<string, unknown> | { enum: unknown[] }; properties?: undefined | Record<string, Record<string, unknown>>; required?: undefined | string[]; readOnly?: undefined | false | true; \"x-kai-widget\"?: undefined | \"textarea\" | \"slider\" | \"rating\" | \"radio\" | \"select\" | \"checkbox\" | \"password\" | \"switch\"; \"x-kai-placeholder\"?: undefined | string; \"x-kai-step\"?: undefined | number }>; \"x-kai-order\"?: undefined | string[]; \"x-kai-inlineMax\"?: undefined | number; \"x-kai-submitLabel\"?: undefined | string; \"x-kai-dismissible\"?: undefined | false | true; \"x-kai-actions\"?: undefined | { id: string; label: string; variant?: undefined | \"default\" | \"ghost\" | \"outline\" }[] }",
|
|
4428
|
+
"typeShape": "{ type: \"object\"; title?: undefined | string; description?: undefined | string; required?: undefined | string[]; properties: Record<string, { type: \"string\" | \"number\" | \"integer\" | \"boolean\" | \"array\" | \"object\"; title?: undefined | string; description?: undefined | string; default?: unknown; enum?: undefined | unknown[]; format?: undefined | \"email\" | \"uri\" | \"url\" | \"date\" | \"date-time\" | \"time\"; minimum?: undefined | number; maximum?: undefined | number; minLength?: undefined | number; maxLength?: undefined | number; pattern?: undefined | string; minItems?: undefined | number; maxItems?: undefined | number; items?: undefined | Record<string, unknown> | { enum: unknown[] }; properties?: undefined | Record<string, Record<string, unknown>>; required?: undefined | string[]; readOnly?: undefined | false | true; \"x-kai-widget\"?: undefined | \"textarea\" | \"slider\" | \"rating\" | \"radio\" | \"select\" | \"checkbox\" | \"password\" | \"switch\"; \"x-kai-placeholder\"?: undefined | string; \"x-kai-step\"?: undefined | number; \"x-kai-format\"?: undefined | \"tel\" | \"ssn\" | \"credit-card\" | \"custom\"; \"x-kai-mask\"?: undefined | string; \"x-kai-mask-guide\"?: undefined | string }>; \"x-kai-order\"?: undefined | string[]; \"x-kai-inlineMax\"?: undefined | number; \"x-kai-submitLabel\"?: undefined | string; \"x-kai-dismissible\"?: undefined | false | true; \"x-kai-actions\"?: undefined | { id: string; label: string; variant?: undefined | \"default\" | \"ghost\" | \"outline\" }[] }",
|
|
4150
4429
|
"typeImport": "FormDefinition",
|
|
4151
|
-
"displayType": "undefined | { type: \"object\"; title?: undefined | string; description?: undefined | string; required?: undefined | string[]; properties: Record<string, { type: \"string\" | \"number\" | \"integer\" | \"boolean\" | \"array\" | \"object\"; title?: undefined | string; description?: undefined | string; default?: unknown; enum?: undefined | unknown[]; format?: undefined | \"email\" | \"uri\" | \"url\" | \"date\" | \"date-time\" | \"time\"; minimum?: undefined | number; maximum?: undefined | number; minLength?: undefined | number; maxLength?: undefined | number; pattern?: undefined | string; minItems?: undefined | number; maxItems?: undefined | number; items?: undefined | Record<string, unknown> | { enum: unknown[] }; properties?: undefined | Record<string, Record<string, unknown>>; required?: undefined | string[]; readOnly?: undefined | false | true; \"x-kai-widget\"?: undefined | \"textarea\" | \"slider\" | \"rating\" | \"radio\" | \"select\" | \"checkbox\" | \"password\" | \"switch\"; \"x-kai-placeholder\"?: undefined | string; \"x-kai-step\"?: undefined | number }>; \"x-kai-order\"?: undefined | string[]; \"x-kai-inlineMax\"?: undefined | number; \"x-kai-submitLabel\"?: undefined | string; \"x-kai-dismissible\"?: undefined | false | true; \"x-kai-actions\"?: undefined | { id: string; label: string; variant?: undefined | \"default\" | \"ghost\" | \"outline\" }[] }"
|
|
4430
|
+
"displayType": "undefined | { type: \"object\"; title?: undefined | string; description?: undefined | string; required?: undefined | string[]; properties: Record<string, { type: \"string\" | \"number\" | \"integer\" | \"boolean\" | \"array\" | \"object\"; title?: undefined | string; description?: undefined | string; default?: unknown; enum?: undefined | unknown[]; format?: undefined | \"email\" | \"uri\" | \"url\" | \"date\" | \"date-time\" | \"time\"; minimum?: undefined | number; maximum?: undefined | number; minLength?: undefined | number; maxLength?: undefined | number; pattern?: undefined | string; minItems?: undefined | number; maxItems?: undefined | number; items?: undefined | Record<string, unknown> | { enum: unknown[] }; properties?: undefined | Record<string, Record<string, unknown>>; required?: undefined | string[]; readOnly?: undefined | false | true; \"x-kai-widget\"?: undefined | \"textarea\" | \"slider\" | \"rating\" | \"radio\" | \"select\" | \"checkbox\" | \"password\" | \"switch\"; \"x-kai-placeholder\"?: undefined | string; \"x-kai-step\"?: undefined | number; \"x-kai-format\"?: undefined | \"tel\" | \"ssn\" | \"credit-card\" | \"custom\"; \"x-kai-mask\"?: undefined | string; \"x-kai-mask-guide\"?: undefined | string }>; \"x-kai-order\"?: undefined | string[]; \"x-kai-inlineMax\"?: undefined | number; \"x-kai-submitLabel\"?: undefined | string; \"x-kai-dismissible\"?: undefined | false | true; \"x-kai-actions\"?: undefined | { id: string; label: string; variant?: undefined | \"default\" | \"ghost\" | \"outline\" }[] }"
|
|
4152
4431
|
},
|
|
4153
4432
|
{
|
|
4154
4433
|
"name": "cardId",
|
|
@@ -4513,7 +4792,7 @@
|
|
|
4513
4792
|
"type": "undefined | string",
|
|
4514
4793
|
"optional": true,
|
|
4515
4794
|
"scalar": true,
|
|
4516
|
-
"description": "Controlled value
|
|
4795
|
+
"description": "Controlled value, and always the CANONICAL one when a mask is active: digits for `tel` / `ssn` / `credit-card`, the formatted text for `custom`. Settable and reflected to the `value` attribute. `el.value = '5551234567'` drives it (no event) and is re-fitted to the mask on the way in, so the field shows `555-123-4567`. Read `el.value` for live state; the formatted text rides along on every `kai-input` / `kai-change` detail as `formattedValue`.",
|
|
4517
4796
|
"displayType": "undefined | string"
|
|
4518
4797
|
},
|
|
4519
4798
|
{
|
|
@@ -4612,20 +4891,66 @@
|
|
|
4612
4891
|
"scalar": true,
|
|
4613
4892
|
"description": "Virtual-keyboard hint forwarded to the inner input (e.g. `numeric`, `email`).",
|
|
4614
4893
|
"displayType": "undefined | string"
|
|
4894
|
+
},
|
|
4895
|
+
{
|
|
4896
|
+
"name": "format",
|
|
4897
|
+
"type": "undefined | string",
|
|
4898
|
+
"optional": true,
|
|
4899
|
+
"scalar": true,
|
|
4900
|
+
"description": "Mask pattern: `#` a digit, `@` a letter or digit, `*` an obscurable letter or digit, and every other character a positional literal (`@@@-####` → `CHG-4821`). The literal `default` is the opt-in sentinel: it resolves to the default format of `semantic` (`tel` → `###-###-####`). A bare `semantic` never starts masking on its own, so an opt-in token is what turns tier 2 on.",
|
|
4901
|
+
"displayType": "undefined | string"
|
|
4902
|
+
},
|
|
4903
|
+
{
|
|
4904
|
+
"name": "guide",
|
|
4905
|
+
"type": "undefined | string",
|
|
4906
|
+
"optional": true,
|
|
4907
|
+
"scalar": true,
|
|
4908
|
+
"description": "Placeholder guide shown at unfilled positions, aligned position for position with `format`: `mm/dd/yyyy` against `##/##/####`. Spaces are a valid guide character, so a guide of blanks and separators is how a phone field shows its shape without showing letters. Without a guide the field shows only up to the last typed character. A guide is a visual aid, never an accessible name: keep the `hint` text as well.",
|
|
4909
|
+
"displayType": "undefined | string"
|
|
4910
|
+
},
|
|
4911
|
+
{
|
|
4912
|
+
"name": "semantic",
|
|
4913
|
+
"type": "undefined | \"credit-card\" | \"custom\" | \"ssn\" | \"tel\"",
|
|
4914
|
+
"optional": true,
|
|
4915
|
+
"scalar": true,
|
|
4916
|
+
"description": "Semantic field type: `tel` · `ssn` · `credit-card` · `custom`. On its own it sets `inputmode` / `autocomplete` / `spellcheck` / `autocorrect` / `autocapitalize` and decides the canonical value; it never starts masking by itself.",
|
|
4917
|
+
"displayType": "undefined | \"credit-card\" | \"custom\" | \"ssn\" | \"tel\""
|
|
4918
|
+
},
|
|
4919
|
+
{
|
|
4920
|
+
"name": "caseMode",
|
|
4921
|
+
"type": "undefined | \"preserve\" | \"upper\" | \"lower\"",
|
|
4922
|
+
"optional": true,
|
|
4923
|
+
"scalar": true,
|
|
4924
|
+
"description": "Case folding applied to typed and pasted text: `preserve` (default) · `upper` · `lower`. Attribute: `case-mode`.",
|
|
4925
|
+
"displayType": "undefined | \"preserve\" | \"upper\" | \"lower\""
|
|
4926
|
+
},
|
|
4927
|
+
{
|
|
4928
|
+
"name": "copyPolicy",
|
|
4929
|
+
"type": "undefined | \"formatted\" | \"canonical\" | \"obscured\" | \"blocked\"",
|
|
4930
|
+
"optional": true,
|
|
4931
|
+
"scalar": true,
|
|
4932
|
+
"description": "What a copy or cut of a masked field puts on the clipboard: `canonical` (default) · `formatted` · `obscured` · `blocked`. Attribute: `copy-policy`.",
|
|
4933
|
+
"displayType": "undefined | \"formatted\" | \"canonical\" | \"obscured\" | \"blocked\""
|
|
4615
4934
|
}
|
|
4616
4935
|
],
|
|
4617
4936
|
"events": [
|
|
4618
4937
|
{
|
|
4619
4938
|
"name": "kai-change",
|
|
4620
|
-
"detail": "{ value: string }",
|
|
4621
|
-
"description": "The value was committed (blur).",
|
|
4622
|
-
"displayDetail": "{ value: string }"
|
|
4939
|
+
"detail": "{ value: string; formattedValue: string }",
|
|
4940
|
+
"description": "The value was committed (blur). Same detail shape as `kai-input`.",
|
|
4941
|
+
"displayDetail": "{ value: string; formattedValue: string }"
|
|
4623
4942
|
},
|
|
4624
4943
|
{
|
|
4625
4944
|
"name": "kai-input",
|
|
4626
|
-
"detail": "{ value: string }",
|
|
4627
|
-
"description": "The value changed per keystroke.",
|
|
4628
|
-
"displayDetail": "{ value: string }"
|
|
4945
|
+
"detail": "{ value: string; formattedValue: string }",
|
|
4946
|
+
"description": "The value changed per keystroke. `value` is the canonical value (what a backend wants); `formattedValue` is the text on screen. With no mask the two are equal.",
|
|
4947
|
+
"displayDetail": "{ value: string; formattedValue: string }"
|
|
4948
|
+
},
|
|
4949
|
+
{
|
|
4950
|
+
"name": "kai-input-rejected",
|
|
4951
|
+
"detail": "{ reason: \"full\" | \"wrong-class\" | \"over-capacity\" | \"format-change-clipped\"; data: string }",
|
|
4952
|
+
"description": "A mask refused, or partly refused, some content. The reasons are `full` (no free position left), `wrong-class` (a letter into a digit position), `over-capacity` (a paste longer than the mask holds; what fits was kept), and `format-change-clipped` (the `format` changed under a value that no longer fits). `data` is the content that was refused. The first three are USER-INPUT errors, and are the ones worth announcing in a polite live region. `format-change-clipped` is not one: it follows the app changing its own configuration, so it reports and nothing more. None of the four touches validity, so `invalid` and `error` stay the consumer decision.",
|
|
4953
|
+
"displayDetail": "{ reason: \"full\" | \"wrong-class\" | \"over-capacity\" | \"format-change-clipped\"; data: string }"
|
|
4629
4954
|
}
|
|
4630
4955
|
],
|
|
4631
4956
|
"methods": [
|
|
@@ -4641,11 +4966,23 @@
|
|
|
4641
4966
|
"returns": "void",
|
|
4642
4967
|
"description": "Select the inner input's text."
|
|
4643
4968
|
},
|
|
4969
|
+
{
|
|
4970
|
+
"name": "getRawValue",
|
|
4971
|
+
"params": "",
|
|
4972
|
+
"returns": "string",
|
|
4973
|
+
"description": "The canonical value: digits for `tel` / `ssn` / `credit-card`, the formatted text for `custom`, and the field text when no mask is on. Identical to reading `el.value`, under the name backends use for the submitted form of a masked field. The mask engine has a third, narrower notion of raw (the fill characters with no literals at all) and that one is internal: it is not what any backend wants and it is not exposed here."
|
|
4974
|
+
},
|
|
4975
|
+
{
|
|
4976
|
+
"name": "getFormattedValue",
|
|
4977
|
+
"params": "",
|
|
4978
|
+
"returns": "string",
|
|
4979
|
+
"description": "The text on screen, literals and guide included. The counterpart to `formattedValue` on the `kai-input` / `kai-change` details, for a consumer that needs it outside an event."
|
|
4980
|
+
},
|
|
4644
4981
|
{
|
|
4645
4982
|
"name": "clear",
|
|
4646
4983
|
"params": "",
|
|
4647
4984
|
"returns": "void",
|
|
4648
|
-
"description": "Empty the value and fire `kai-change` with `''`."
|
|
4985
|
+
"description": "Empty the value and fire `kai-change` with `''`. On a masked field this resets the mask itself, not just the text on screen, so the next character starts over."
|
|
4649
4986
|
}
|
|
4650
4987
|
],
|
|
4651
4988
|
"composedFrom": [
|
|
@@ -5843,9 +6180,9 @@
|
|
|
5843
6180
|
]
|
|
5844
6181
|
},
|
|
5845
6182
|
{
|
|
5846
|
-
"tag": "kai-pane-
|
|
5847
|
-
"className": "
|
|
5848
|
-
"displayName": "
|
|
6183
|
+
"tag": "kai-pane-grid",
|
|
6184
|
+
"className": "KaiPaneGridElement",
|
|
6185
|
+
"displayName": "PaneGrid",
|
|
5849
6186
|
"props": [
|
|
5850
6187
|
{
|
|
5851
6188
|
"name": "theme",
|
|
@@ -5858,7 +6195,74 @@
|
|
|
5858
6195
|
"displayType": "\"light\" | \"dark\" | \"auto\""
|
|
5859
6196
|
},
|
|
5860
6197
|
{
|
|
5861
|
-
"name": "
|
|
6198
|
+
"name": "minPaneWidth",
|
|
6199
|
+
"type": "undefined | number",
|
|
6200
|
+
"optional": true,
|
|
6201
|
+
"scalar": true,
|
|
6202
|
+
"description": "Minimum width of every pane, in px, before columns drop / the grid scrolls. Defaults to `280`. Attribute: `min-pane-width`.",
|
|
6203
|
+
"displayType": "undefined | number"
|
|
6204
|
+
},
|
|
6205
|
+
{
|
|
6206
|
+
"name": "minPaneHeight",
|
|
6207
|
+
"type": "undefined | number",
|
|
6208
|
+
"optional": true,
|
|
6209
|
+
"scalar": true,
|
|
6210
|
+
"description": "Minimum height of every pane, in px, before the grid scrolls vertically. Defaults to `200`. Attribute: `min-pane-height`.",
|
|
6211
|
+
"displayType": "undefined | number"
|
|
6212
|
+
},
|
|
6213
|
+
{
|
|
6214
|
+
"name": "maxColumns",
|
|
6215
|
+
"type": "undefined | number",
|
|
6216
|
+
"optional": true,
|
|
6217
|
+
"scalar": true,
|
|
6218
|
+
"description": "Column cap when the container is wide (default `3`). Attribute: `max-columns`.",
|
|
6219
|
+
"displayType": "undefined | number"
|
|
6220
|
+
},
|
|
6221
|
+
{
|
|
6222
|
+
"name": "gap",
|
|
6223
|
+
"type": "undefined | string",
|
|
6224
|
+
"optional": true,
|
|
6225
|
+
"scalar": true,
|
|
6226
|
+
"description": "Gap between panes, any CSS length. Defaults to the kit gap (`var(--kai-pane-grid-gap, 0.5rem)`). Attribute: `gap`.",
|
|
6227
|
+
"displayType": "undefined | string"
|
|
6228
|
+
},
|
|
6229
|
+
{
|
|
6230
|
+
"name": "maximizedIndex",
|
|
6231
|
+
"type": "undefined | number | null",
|
|
6232
|
+
"optional": true,
|
|
6233
|
+
"scalar": false,
|
|
6234
|
+
"description": "When set to a valid child index, render ONLY that pane full-bleed: a simple maximize hook the consumer drives (pair it with `<kai-pane>`'s `kai-maximize` event). Clear it (or point out of range) for the full tiled grid. Attribute: `maximized-index`.",
|
|
6235
|
+
"displayType": "undefined | number | null"
|
|
6236
|
+
}
|
|
6237
|
+
],
|
|
6238
|
+
"events": [],
|
|
6239
|
+
"methods": [],
|
|
6240
|
+
"composedFrom": [
|
|
6241
|
+
{
|
|
6242
|
+
"name": "PaneGrid",
|
|
6243
|
+
"group": "UI",
|
|
6244
|
+
"storyId": "solid-advanced-primitives-panegrid--docs"
|
|
6245
|
+
}
|
|
6246
|
+
],
|
|
6247
|
+
"tokens": []
|
|
6248
|
+
},
|
|
6249
|
+
{
|
|
6250
|
+
"tag": "kai-pane-group",
|
|
6251
|
+
"className": "KaiPaneGroupElement",
|
|
6252
|
+
"displayName": "PaneGroup",
|
|
6253
|
+
"props": [
|
|
6254
|
+
{
|
|
6255
|
+
"name": "theme",
|
|
6256
|
+
"type": "\"light\" | \"dark\" | \"auto\"",
|
|
6257
|
+
"optional": true,
|
|
6258
|
+
"scalar": true,
|
|
6259
|
+
"description": "Color mode (`auto` follows prefers-color-scheme).",
|
|
6260
|
+
"default": "'auto'",
|
|
6261
|
+
"universal": true,
|
|
6262
|
+
"displayType": "\"light\" | \"dark\" | \"auto\""
|
|
6263
|
+
},
|
|
6264
|
+
{
|
|
6265
|
+
"name": "tabs",
|
|
5862
6266
|
"type": "undefined | { id: string; name: string; status?: undefined | { tone: \"working\" | \"idle\" | \"done\" | \"error\" | \"blocked\"; label?: undefined | string; pulse?: undefined | false | true }; needsAttention?: undefined | false | true; number?: undefined | number }[]",
|
|
5863
6267
|
"optional": true,
|
|
5864
6268
|
"scalar": false,
|
|
@@ -6338,7 +6742,7 @@
|
|
|
6338
6742
|
"type": "undefined | { id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }[]",
|
|
6339
6743
|
"optional": true,
|
|
6340
6744
|
"scalar": false,
|
|
6341
|
-
"description": "Attachments to seed the input with (so a consumer can pre-populate staged files without an upload). Set as a JS property; the element then manages its own attachment state from there (add via the paperclip, remove per chip).",
|
|
6745
|
+
"description": "Attachments to seed the input with (so a consumer can pre-populate staged files without an upload). Set as a JS property; the element then manages its own attachment state from there (add via the paperclip, remove per chip). Each item's `url` must be a `data:` URI or an https URL, never `URL.createObjectURL`: a `blob:` URL previews perfectly and is meaningless outside this tab, so `toOpenAIMessages`/`toAnthropicMessages` refuse it. (The built-in paperclip already stages files as `data:` URIs.)",
|
|
6342
6746
|
"typeName": "AttachmentData[]",
|
|
6343
6747
|
"typeShape": "{ id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }[]",
|
|
6344
6748
|
"typeImport": "AttachmentData",
|
|
@@ -6380,7 +6784,7 @@
|
|
|
6380
6784
|
{
|
|
6381
6785
|
"name": "kai-submit",
|
|
6382
6786
|
"detail": "{ value: string; doc: ({ type: \"text\"; text: string } | { type: \"entity\"; entity: { kind: string; id: string; label: string; icon?: undefined | string; promptText?: undefined | string; data?: undefined | Record<string, unknown> } })[]; entities: { kind: string; id: string; label: string; icon?: undefined | string; promptText?: undefined | string; data?: undefined | Record<string, unknown> }[]; attachments: { id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }[] }",
|
|
6383
|
-
"description": "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.",
|
|
6787
|
+
"description": "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. `<kai-prompt-input>` is the batteries-included composer row (send button, toolbar, attachment staging) built on `<kai-composer>`, the bare editor.",
|
|
6384
6788
|
"displayDetail": "{ value: string; doc: ({ type: \"text\"; text: string } | { type: \"entity\"; entity: { kind: string; id: string; label: string; icon?: undefined | string; promptText?: undefined | string; data?: undefined | Record<string, unknown> } })[]; entities: { kind: string; id: string; label: string; icon?: undefined | string; promptText?: undefined | string; data?: undefined | Record<string, unknown> }[]; attachments: { id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }[] }"
|
|
6385
6789
|
},
|
|
6386
6790
|
{
|
|
@@ -6536,6 +6940,91 @@
|
|
|
6536
6940
|
}
|
|
6537
6941
|
]
|
|
6538
6942
|
},
|
|
6943
|
+
{
|
|
6944
|
+
"tag": "kai-radio-group",
|
|
6945
|
+
"className": "KaiRadioGroupElement",
|
|
6946
|
+
"displayName": "RadioGroup",
|
|
6947
|
+
"props": [
|
|
6948
|
+
{
|
|
6949
|
+
"name": "theme",
|
|
6950
|
+
"type": "\"light\" | \"dark\" | \"auto\"",
|
|
6951
|
+
"optional": true,
|
|
6952
|
+
"scalar": true,
|
|
6953
|
+
"description": "Color mode (`auto` follows prefers-color-scheme).",
|
|
6954
|
+
"default": "'auto'",
|
|
6955
|
+
"universal": true,
|
|
6956
|
+
"displayType": "\"light\" | \"dark\" | \"auto\""
|
|
6957
|
+
},
|
|
6958
|
+
{
|
|
6959
|
+
"name": "options",
|
|
6960
|
+
"type": "{ value: string; label: string; description?: undefined | string; disabled?: undefined | false | true }[]",
|
|
6961
|
+
"optional": false,
|
|
6962
|
+
"scalar": false,
|
|
6963
|
+
"description": "The choices, top to bottom. Set as a JS PROPERTY (array), never an attribute.",
|
|
6964
|
+
"typeName": "KaiRadioOption[]",
|
|
6965
|
+
"typeShape": "{ value: string; label: string; description?: undefined | string; disabled?: undefined | false | true }[]",
|
|
6966
|
+
"default": "[]",
|
|
6967
|
+
"typeImport": "KaiRadioOption",
|
|
6968
|
+
"displayType": "{ value: string; label: string; description?: undefined | string; disabled?: undefined | false | true }[]"
|
|
6969
|
+
},
|
|
6970
|
+
{
|
|
6971
|
+
"name": "value",
|
|
6972
|
+
"type": "undefined | string",
|
|
6973
|
+
"optional": true,
|
|
6974
|
+
"scalar": true,
|
|
6975
|
+
"description": "Controlled selected `value`. Settable and reflected to the `value` attribute. `el.value = 'degraded'` drives it; choosing a row updates it and fires `kai-change`. Read `el.value` for live state.",
|
|
6976
|
+
"displayType": "undefined | string"
|
|
6977
|
+
},
|
|
6978
|
+
{
|
|
6979
|
+
"name": "name",
|
|
6980
|
+
"type": "undefined | string",
|
|
6981
|
+
"optional": true,
|
|
6982
|
+
"scalar": true,
|
|
6983
|
+
"description": "Shared form-control name for every radio in the group. Defaults to a generated id, so the group is exclusive and keyboard-navigable even when nothing is submitted.",
|
|
6984
|
+
"displayType": "undefined | string"
|
|
6985
|
+
},
|
|
6986
|
+
{
|
|
6987
|
+
"name": "disabled",
|
|
6988
|
+
"type": "undefined | false | true",
|
|
6989
|
+
"optional": true,
|
|
6990
|
+
"scalar": true,
|
|
6991
|
+
"description": "Disable every row. Individual rows carry their own `disabled`.",
|
|
6992
|
+
"displayType": "undefined | false | true"
|
|
6993
|
+
},
|
|
6994
|
+
{
|
|
6995
|
+
"name": "label",
|
|
6996
|
+
"type": "undefined | string",
|
|
6997
|
+
"optional": true,
|
|
6998
|
+
"scalar": true,
|
|
6999
|
+
"description": "Accessible name for the group.",
|
|
7000
|
+
"displayType": "undefined | string"
|
|
7001
|
+
}
|
|
7002
|
+
],
|
|
7003
|
+
"events": [
|
|
7004
|
+
{
|
|
7005
|
+
"name": "kai-change",
|
|
7006
|
+
"detail": "{ value: string }",
|
|
7007
|
+
"description": "A row was chosen.",
|
|
7008
|
+
"displayDetail": "{ value: string }"
|
|
7009
|
+
}
|
|
7010
|
+
],
|
|
7011
|
+
"methods": [
|
|
7012
|
+
{
|
|
7013
|
+
"name": "focus",
|
|
7014
|
+
"params": "options?: FocusOptions",
|
|
7015
|
+
"returns": "void",
|
|
7016
|
+
"description": "Focus the group's tab stop. That is the selected radio, or the first row when nothing is selected yet."
|
|
7017
|
+
}
|
|
7018
|
+
],
|
|
7019
|
+
"composedFrom": [
|
|
7020
|
+
{
|
|
7021
|
+
"name": "RadioGroup",
|
|
7022
|
+
"group": "UI",
|
|
7023
|
+
"storyId": "solid-advanced-primitives-radiogroup--docs"
|
|
7024
|
+
}
|
|
7025
|
+
],
|
|
7026
|
+
"tokens": []
|
|
7027
|
+
},
|
|
6539
7028
|
{
|
|
6540
7029
|
"tag": "kai-reasoning",
|
|
6541
7030
|
"className": "KaiReasoningElement",
|
|
@@ -7322,6 +7811,22 @@
|
|
|
7322
7811
|
"description": "Button size token. Defaults to `'icon'` (square).",
|
|
7323
7812
|
"default": "'icon'",
|
|
7324
7813
|
"displayType": "undefined | \"sm\" | \"md\" | \"lg\" | \"icon\" | \"icon-sm\""
|
|
7814
|
+
},
|
|
7815
|
+
{
|
|
7816
|
+
"name": "label",
|
|
7817
|
+
"type": "undefined | string",
|
|
7818
|
+
"optional": true,
|
|
7819
|
+
"scalar": true,
|
|
7820
|
+
"description": "The button's accessible name. It is announced whether or not the label is visible, so the text is always localisable. Defaults to `'Scroll to bottom'`.",
|
|
7821
|
+
"displayType": "undefined | string"
|
|
7822
|
+
},
|
|
7823
|
+
{
|
|
7824
|
+
"name": "showLabel",
|
|
7825
|
+
"type": "undefined | false | true",
|
|
7826
|
+
"optional": true,
|
|
7827
|
+
"scalar": true,
|
|
7828
|
+
"description": "Also render `label` visibly beside the icon. Defaults to `false`, which is the icon-only button. When the text is visible it IS the accessible name, so nothing gets announced twice.",
|
|
7829
|
+
"displayType": "undefined | false | true"
|
|
7325
7830
|
}
|
|
7326
7831
|
],
|
|
7327
7832
|
"events": [
|
|
@@ -7555,6 +8060,123 @@
|
|
|
7555
8060
|
}
|
|
7556
8061
|
]
|
|
7557
8062
|
},
|
|
8063
|
+
{
|
|
8064
|
+
"tag": "kai-select",
|
|
8065
|
+
"className": "KaiSelectElement",
|
|
8066
|
+
"displayName": "Select",
|
|
8067
|
+
"props": [
|
|
8068
|
+
{
|
|
8069
|
+
"name": "theme",
|
|
8070
|
+
"type": "\"light\" | \"dark\" | \"auto\"",
|
|
8071
|
+
"optional": true,
|
|
8072
|
+
"scalar": true,
|
|
8073
|
+
"description": "Color mode (`auto` follows prefers-color-scheme).",
|
|
8074
|
+
"default": "'auto'",
|
|
8075
|
+
"universal": true,
|
|
8076
|
+
"displayType": "\"light\" | \"dark\" | \"auto\""
|
|
8077
|
+
},
|
|
8078
|
+
{
|
|
8079
|
+
"name": "options",
|
|
8080
|
+
"type": "{ value: string; label?: undefined | string; disabled?: undefined | false | true }[]",
|
|
8081
|
+
"optional": false,
|
|
8082
|
+
"scalar": false,
|
|
8083
|
+
"description": "The choices, in display order. Set as a JS PROPERTY (array), never an attribute. Rendered in full: the kit never truncates, re-orders or de-duplicates them.",
|
|
8084
|
+
"typeName": "KaiSelectOption[]",
|
|
8085
|
+
"typeShape": "{ value: string; label?: undefined | string; disabled?: undefined | false | true }[]",
|
|
8086
|
+
"default": "[]",
|
|
8087
|
+
"typeImport": "KaiSelectOption",
|
|
8088
|
+
"displayType": "{ value: string; label?: undefined | string; disabled?: undefined | false | true }[]"
|
|
8089
|
+
},
|
|
8090
|
+
{
|
|
8091
|
+
"name": "value",
|
|
8092
|
+
"type": "undefined | string",
|
|
8093
|
+
"optional": true,
|
|
8094
|
+
"scalar": true,
|
|
8095
|
+
"description": "Controlled selected value. Settable and reflected to the `value` attribute. `el.value = 'high'` drives it; choosing an option updates it and fires `kai-change`. Read `el.value` for live state; for a `multiple` select read `el.values` instead.",
|
|
8096
|
+
"displayType": "undefined | string"
|
|
8097
|
+
},
|
|
8098
|
+
{
|
|
8099
|
+
"name": "placeholder",
|
|
8100
|
+
"type": "undefined | string",
|
|
8101
|
+
"optional": true,
|
|
8102
|
+
"scalar": true,
|
|
8103
|
+
"description": "Text for a leading, disabled, empty option: the \"nothing chosen yet\" row. Omitted means no such row at all; there is no default wording, because inventing one would put words in your UI.",
|
|
8104
|
+
"displayType": "undefined | string"
|
|
8105
|
+
},
|
|
8106
|
+
{
|
|
8107
|
+
"name": "multiple",
|
|
8108
|
+
"type": "undefined | false | true",
|
|
8109
|
+
"optional": true,
|
|
8110
|
+
"scalar": true,
|
|
8111
|
+
"description": "Allow more than one selection. Turns the control into the platform's list box, so the kit's chevron is not drawn.",
|
|
8112
|
+
"displayType": "undefined | false | true"
|
|
8113
|
+
},
|
|
8114
|
+
{
|
|
8115
|
+
"name": "invalid",
|
|
8116
|
+
"type": "undefined | false | true",
|
|
8117
|
+
"optional": true,
|
|
8118
|
+
"scalar": true,
|
|
8119
|
+
"description": "Force the invalid (destructive-border) state.",
|
|
8120
|
+
"displayType": "undefined | false | true"
|
|
8121
|
+
},
|
|
8122
|
+
{
|
|
8123
|
+
"name": "disabled",
|
|
8124
|
+
"type": "undefined | false | true",
|
|
8125
|
+
"optional": true,
|
|
8126
|
+
"scalar": true,
|
|
8127
|
+
"description": "Disable interaction.",
|
|
8128
|
+
"displayType": "undefined | false | true"
|
|
8129
|
+
},
|
|
8130
|
+
{
|
|
8131
|
+
"name": "required",
|
|
8132
|
+
"type": "undefined | false | true",
|
|
8133
|
+
"optional": true,
|
|
8134
|
+
"scalar": true,
|
|
8135
|
+
"description": "Set the native `required` attribute, and nothing more. Whether an empty select is an error is the application's rule, not the kit's.",
|
|
8136
|
+
"displayType": "undefined | false | true"
|
|
8137
|
+
},
|
|
8138
|
+
{
|
|
8139
|
+
"name": "label",
|
|
8140
|
+
"type": "undefined | string",
|
|
8141
|
+
"optional": true,
|
|
8142
|
+
"scalar": true,
|
|
8143
|
+
"description": "Accessible label for the control.",
|
|
8144
|
+
"displayType": "undefined | string"
|
|
8145
|
+
},
|
|
8146
|
+
{
|
|
8147
|
+
"name": "name",
|
|
8148
|
+
"type": "undefined | string",
|
|
8149
|
+
"optional": true,
|
|
8150
|
+
"scalar": true,
|
|
8151
|
+
"description": "Form-control name, for a native form submit.",
|
|
8152
|
+
"displayType": "undefined | string"
|
|
8153
|
+
}
|
|
8154
|
+
],
|
|
8155
|
+
"events": [
|
|
8156
|
+
{
|
|
8157
|
+
"name": "kai-change",
|
|
8158
|
+
"detail": "{ value: string; values: string[] }",
|
|
8159
|
+
"description": "A choice was made. `value` is the first selected option (empty when nothing is selected); `values` is every selected option, which is what a `multiple` select needs. Both are always present, so neither shape silently loses the other.",
|
|
8160
|
+
"displayDetail": "{ value: string; values: string[] }"
|
|
8161
|
+
}
|
|
8162
|
+
],
|
|
8163
|
+
"methods": [
|
|
8164
|
+
{
|
|
8165
|
+
"name": "focus",
|
|
8166
|
+
"params": "options?: FocusOptions",
|
|
8167
|
+
"returns": "void",
|
|
8168
|
+
"description": "Focus the inner select (the host element can't reach it)."
|
|
8169
|
+
}
|
|
8170
|
+
],
|
|
8171
|
+
"composedFrom": [
|
|
8172
|
+
{
|
|
8173
|
+
"name": "Select",
|
|
8174
|
+
"group": "UI",
|
|
8175
|
+
"storyId": "solid-advanced-primitives-select--docs"
|
|
8176
|
+
}
|
|
8177
|
+
],
|
|
8178
|
+
"tokens": []
|
|
8179
|
+
},
|
|
7558
8180
|
{
|
|
7559
8181
|
"tag": "kai-separator",
|
|
7560
8182
|
"className": "KaiSeparatorElement",
|
|
@@ -7840,6 +8462,117 @@
|
|
|
7840
8462
|
}
|
|
7841
8463
|
]
|
|
7842
8464
|
},
|
|
8465
|
+
{
|
|
8466
|
+
"tag": "kai-slider",
|
|
8467
|
+
"className": "KaiSliderElement",
|
|
8468
|
+
"displayName": "Slider",
|
|
8469
|
+
"props": [
|
|
8470
|
+
{
|
|
8471
|
+
"name": "theme",
|
|
8472
|
+
"type": "\"light\" | \"dark\" | \"auto\"",
|
|
8473
|
+
"optional": true,
|
|
8474
|
+
"scalar": true,
|
|
8475
|
+
"description": "Color mode (`auto` follows prefers-color-scheme).",
|
|
8476
|
+
"default": "'auto'",
|
|
8477
|
+
"universal": true,
|
|
8478
|
+
"displayType": "\"light\" | \"dark\" | \"auto\""
|
|
8479
|
+
},
|
|
8480
|
+
{
|
|
8481
|
+
"name": "min",
|
|
8482
|
+
"type": "undefined | number",
|
|
8483
|
+
"optional": true,
|
|
8484
|
+
"scalar": true,
|
|
8485
|
+
"description": "Lowest selectable value. Required: a range with no bounds is a guess, and the guess belongs to whoever knows what the number means.",
|
|
8486
|
+
"displayType": "undefined | number"
|
|
8487
|
+
},
|
|
8488
|
+
{
|
|
8489
|
+
"name": "max",
|
|
8490
|
+
"type": "undefined | number",
|
|
8491
|
+
"optional": true,
|
|
8492
|
+
"scalar": true,
|
|
8493
|
+
"description": "Highest selectable value. Required, for the same reason as `min`.",
|
|
8494
|
+
"displayType": "undefined | number"
|
|
8495
|
+
},
|
|
8496
|
+
{
|
|
8497
|
+
"name": "step",
|
|
8498
|
+
"type": "undefined | number | \"any\"",
|
|
8499
|
+
"optional": true,
|
|
8500
|
+
"scalar": true,
|
|
8501
|
+
"description": "Granularity. Omitted means the native default of 1; `any` means continuous.",
|
|
8502
|
+
"displayType": "undefined | number | \"any\""
|
|
8503
|
+
},
|
|
8504
|
+
{
|
|
8505
|
+
"name": "value",
|
|
8506
|
+
"type": "undefined | number",
|
|
8507
|
+
"optional": true,
|
|
8508
|
+
"scalar": true,
|
|
8509
|
+
"description": "Controlled value. Settable and reflected to the `value` attribute. `el.value = 40` drives it; dragging updates it and fires `kai-input` per step, `kai-change` on release. Read `el.value` for live state.",
|
|
8510
|
+
"displayType": "undefined | number"
|
|
8511
|
+
},
|
|
8512
|
+
{
|
|
8513
|
+
"name": "disabled",
|
|
8514
|
+
"type": "undefined | false | true",
|
|
8515
|
+
"optional": true,
|
|
8516
|
+
"scalar": true,
|
|
8517
|
+
"description": "Disable interaction.",
|
|
8518
|
+
"displayType": "undefined | false | true"
|
|
8519
|
+
},
|
|
8520
|
+
{
|
|
8521
|
+
"name": "label",
|
|
8522
|
+
"type": "undefined | string",
|
|
8523
|
+
"optional": true,
|
|
8524
|
+
"scalar": true,
|
|
8525
|
+
"description": "Accessible label for the slider.",
|
|
8526
|
+
"displayType": "undefined | string"
|
|
8527
|
+
},
|
|
8528
|
+
{
|
|
8529
|
+
"name": "name",
|
|
8530
|
+
"type": "undefined | string",
|
|
8531
|
+
"optional": true,
|
|
8532
|
+
"scalar": true,
|
|
8533
|
+
"description": "Form-control name, for a native form submit.",
|
|
8534
|
+
"displayType": "undefined | string"
|
|
8535
|
+
},
|
|
8536
|
+
{
|
|
8537
|
+
"name": "valueLabel",
|
|
8538
|
+
"type": "undefined | false | true | ((value: number) => string)",
|
|
8539
|
+
"optional": true,
|
|
8540
|
+
"scalar": false,
|
|
8541
|
+
"description": "Show the current value beside the track. Off by default. Two ways in, because one of them is not a scalar. As a bare ATTRIBUTE (`<kai-slider value-label>`) it renders the raw number. As a JS PROPERTY it also accepts a formatter function (`el.valueLabel = (v) => v + '%'`), for a slider that is not counting bare numbers. A function cannot survive an attribute, so that half is property-only. The readout is hidden from assistive tech: the slider already reports the same number, and an exposed copy would be announced twice.",
|
|
8542
|
+
"displayType": "undefined | false | true | ((value: number) => string)"
|
|
8543
|
+
}
|
|
8544
|
+
],
|
|
8545
|
+
"events": [
|
|
8546
|
+
{
|
|
8547
|
+
"name": "kai-change",
|
|
8548
|
+
"detail": "{ value: number }",
|
|
8549
|
+
"description": "The value was committed: pointer released, or a key press finished.",
|
|
8550
|
+
"displayDetail": "{ value: number }"
|
|
8551
|
+
},
|
|
8552
|
+
{
|
|
8553
|
+
"name": "kai-input",
|
|
8554
|
+
"detail": "{ value: number }",
|
|
8555
|
+
"description": "The thumb moved. Fires per step during a drag or a key press.",
|
|
8556
|
+
"displayDetail": "{ value: number }"
|
|
8557
|
+
}
|
|
8558
|
+
],
|
|
8559
|
+
"methods": [
|
|
8560
|
+
{
|
|
8561
|
+
"name": "focus",
|
|
8562
|
+
"params": "options?: FocusOptions",
|
|
8563
|
+
"returns": "void",
|
|
8564
|
+
"description": "Focus the inner range input (the host element can't reach it)."
|
|
8565
|
+
}
|
|
8566
|
+
],
|
|
8567
|
+
"composedFrom": [
|
|
8568
|
+
{
|
|
8569
|
+
"name": "Slider",
|
|
8570
|
+
"group": "UI",
|
|
8571
|
+
"storyId": "solid-advanced-primitives-slider--docs"
|
|
8572
|
+
}
|
|
8573
|
+
],
|
|
8574
|
+
"tokens": []
|
|
8575
|
+
},
|
|
7843
8576
|
{
|
|
7844
8577
|
"tag": "kai-source",
|
|
7845
8578
|
"className": "KaiSourceElement",
|
|
@@ -8806,7 +9539,7 @@
|
|
|
8806
9539
|
"type": "undefined | { id: string; message: string; variant?: undefined | \"neutral\" | \"success\" | \"warning\" | \"error\" | \"info\"; appearance?: undefined | \"pill\" | \"card\"; inverse?: undefined | false | true; description?: undefined | string; action?: undefined | { label: string; onAction: () => void | false }; duration?: undefined | number; dismissible?: undefined | false | true; target?: undefined | HTMLElement }[]",
|
|
8807
9540
|
"optional": true,
|
|
8808
9541
|
"scalar": false,
|
|
8809
|
-
"description": "The toasts to render. Newest is shown on top. Set as a JS property (array); pass a new array reference to update. Omit for an empty region, which is the normal resting state and how the imperative `toast()` API starts.",
|
|
9542
|
+
"description": "The toasts to render. Newest is shown on top. Set as a JS property (array); pass a new array reference to update. Omit for an empty region, which is the normal resting state and how the imperative `toast()` API starts. Note the handover: the first `toast()` call ADOPTS a region you placed in markup (no second region mounts) and binds the imperative store to this property, replacing any array you set. Drive a region as data OR via `toast()`, not both at once.",
|
|
8810
9543
|
"typeName": "ToastItem[]",
|
|
8811
9544
|
"typeShape": "{ id: string; message: string; variant?: undefined | \"neutral\" | \"success\" | \"warning\" | \"error\" | \"info\"; appearance?: undefined | \"pill\" | \"card\"; inverse?: undefined | false | true; description?: undefined | string; action?: undefined | { label: string; onAction: () => void | false }; duration?: undefined | number; dismissible?: undefined | false | true; target?: undefined | HTMLElement }[]",
|
|
8812
9545
|
"default": "[]",
|
|
@@ -9118,11 +9851,11 @@
|
|
|
9118
9851
|
},
|
|
9119
9852
|
{
|
|
9120
9853
|
"name": "transcribe",
|
|
9121
|
-
"type": "undefined | (audio: Blob) => Promise<string>",
|
|
9854
|
+
"type": "undefined | ((audio: Blob) => Promise<string>)",
|
|
9122
9855
|
"optional": true,
|
|
9123
9856
|
"scalar": false,
|
|
9124
9857
|
"description": "Transcriber the host supplies: records audio, returns the text. This is a **function-valued property** (`el.transcribe = async blob => '...'`) because a value-returning callback can't be modelled as a fire-and-forget event.",
|
|
9125
|
-
"displayType": "undefined | (audio: Blob) => Promise<string>"
|
|
9858
|
+
"displayType": "undefined | ((audio: Blob) => Promise<string>)"
|
|
9126
9859
|
},
|
|
9127
9860
|
{
|
|
9128
9861
|
"name": "disabled",
|
|
@@ -9241,11 +9974,11 @@
|
|
|
9241
9974
|
},
|
|
9242
9975
|
{
|
|
9243
9976
|
"name": "synthesize",
|
|
9244
|
-
"type": "undefined | (text: string) => Promise<Blob>",
|
|
9977
|
+
"type": "undefined | ((text: string) => Promise<Blob>)",
|
|
9245
9978
|
"optional": true,
|
|
9246
9979
|
"scalar": false,
|
|
9247
9980
|
"description": "TTS model seam the host supplies: given text, returns an audio `Blob` to play. This is a **function-valued property** (`el.synthesize = async text => blob`); when set, the native `speechSynthesis` path is bypassed. Mirrors `<kai-voice-input>`'s `transcribe`. A value-returning callback can't be modelled as a fire-and-forget event, hence a property.",
|
|
9248
|
-
"displayType": "undefined | (text: string) => Promise<Blob>"
|
|
9981
|
+
"displayType": "undefined | ((text: string) => Promise<Blob>)"
|
|
9249
9982
|
},
|
|
9250
9983
|
{
|
|
9251
9984
|
"name": "disabled",
|