@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
|
@@ -618,7 +618,7 @@
|
|
|
618
618
|
"type": {
|
|
619
619
|
"text": "undefined | { id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }[]"
|
|
620
620
|
},
|
|
621
|
-
"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).",
|
|
621
|
+
"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.",
|
|
622
622
|
"privacy": "public"
|
|
623
623
|
},
|
|
624
624
|
{
|
|
@@ -1761,7 +1761,7 @@
|
|
|
1761
1761
|
"kind": "field",
|
|
1762
1762
|
"name": "policy",
|
|
1763
1763
|
"type": {
|
|
1764
|
-
"text": "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
|
|
1764
|
+
"text": "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\" }"
|
|
1765
1765
|
},
|
|
1766
1766
|
"description": "Optional CardPolicy handling child events. Property: `el.policy`.",
|
|
1767
1767
|
"privacy": "public"
|
|
@@ -2095,6 +2095,24 @@
|
|
|
2095
2095
|
"description": "Enable Shiki syntax highlighting in code blocks. Turn off to render plain `<pre>` blocks (lighter, no highlighter load). Default true.",
|
|
2096
2096
|
"privacy": "public"
|
|
2097
2097
|
},
|
|
2098
|
+
{
|
|
2099
|
+
"kind": "field",
|
|
2100
|
+
"name": "reasoning",
|
|
2101
|
+
"type": {
|
|
2102
|
+
"text": "undefined | \"full\" | \"compact\" | \"off\""
|
|
2103
|
+
},
|
|
2104
|
+
"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`.",
|
|
2105
|
+
"privacy": "public"
|
|
2106
|
+
},
|
|
2107
|
+
{
|
|
2108
|
+
"kind": "field",
|
|
2109
|
+
"name": "reasoningOpen",
|
|
2110
|
+
"type": {
|
|
2111
|
+
"text": "undefined | false | true"
|
|
2112
|
+
},
|
|
2113
|
+
"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`.",
|
|
2114
|
+
"privacy": "public"
|
|
2115
|
+
},
|
|
2098
2116
|
{
|
|
2099
2117
|
"kind": "field",
|
|
2100
2118
|
"name": "chatTitle",
|
|
@@ -2212,6 +2230,15 @@
|
|
|
2212
2230
|
"description": "INJECT: footer row below the composer (disclaimers, token meter, …).",
|
|
2213
2231
|
"privacy": "public"
|
|
2214
2232
|
},
|
|
2233
|
+
{
|
|
2234
|
+
"kind": "field",
|
|
2235
|
+
"name": "attach",
|
|
2236
|
+
"type": {
|
|
2237
|
+
"text": "undefined | false | true"
|
|
2238
|
+
},
|
|
2239
|
+
"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.",
|
|
2240
|
+
"privacy": "public"
|
|
2241
|
+
},
|
|
2215
2242
|
{
|
|
2216
2243
|
"kind": "field",
|
|
2217
2244
|
"name": "webSearch",
|
|
@@ -2293,6 +2320,33 @@
|
|
|
2293
2320
|
"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.",
|
|
2294
2321
|
"privacy": "public"
|
|
2295
2322
|
},
|
|
2323
|
+
{
|
|
2324
|
+
"kind": "field",
|
|
2325
|
+
"name": "conversations",
|
|
2326
|
+
"type": {
|
|
2327
|
+
"text": "undefined | false | true"
|
|
2328
|
+
},
|
|
2329
|
+
"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.",
|
|
2330
|
+
"privacy": "public"
|
|
2331
|
+
},
|
|
2332
|
+
{
|
|
2333
|
+
"kind": "field",
|
|
2334
|
+
"name": "store",
|
|
2335
|
+
"type": {
|
|
2336
|
+
"text": "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>) }"
|
|
2337
|
+
},
|
|
2338
|
+
"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?)`.",
|
|
2339
|
+
"privacy": "public"
|
|
2340
|
+
},
|
|
2341
|
+
{
|
|
2342
|
+
"kind": "field",
|
|
2343
|
+
"name": "home",
|
|
2344
|
+
"type": {
|
|
2345
|
+
"text": "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 }[] }"
|
|
2346
|
+
},
|
|
2347
|
+
"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).",
|
|
2348
|
+
"privacy": "public"
|
|
2349
|
+
},
|
|
2296
2350
|
{
|
|
2297
2351
|
"kind": "method",
|
|
2298
2352
|
"name": "focus",
|
|
@@ -2424,6 +2478,22 @@
|
|
|
2424
2478
|
},
|
|
2425
2479
|
"description": "Enable Shiki syntax highlighting in code blocks. Turn off to render plain `<pre>` blocks (lighter, no highlighter load). Default true."
|
|
2426
2480
|
},
|
|
2481
|
+
{
|
|
2482
|
+
"name": "reasoning",
|
|
2483
|
+
"fieldName": "reasoning",
|
|
2484
|
+
"type": {
|
|
2485
|
+
"text": "undefined | \"full\" | \"compact\" | \"off\""
|
|
2486
|
+
},
|
|
2487
|
+
"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`."
|
|
2488
|
+
},
|
|
2489
|
+
{
|
|
2490
|
+
"name": "reasoning-open",
|
|
2491
|
+
"fieldName": "reasoningOpen",
|
|
2492
|
+
"type": {
|
|
2493
|
+
"text": "undefined | false | true"
|
|
2494
|
+
},
|
|
2495
|
+
"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`."
|
|
2496
|
+
},
|
|
2427
2497
|
{
|
|
2428
2498
|
"name": "chat-title",
|
|
2429
2499
|
"fieldName": "chatTitle",
|
|
@@ -2512,6 +2582,14 @@
|
|
|
2512
2582
|
},
|
|
2513
2583
|
"description": "INJECT: footer row below the composer (disclaimers, token meter, …)."
|
|
2514
2584
|
},
|
|
2585
|
+
{
|
|
2586
|
+
"name": "attach",
|
|
2587
|
+
"fieldName": "attach",
|
|
2588
|
+
"type": {
|
|
2589
|
+
"text": "undefined | false | true"
|
|
2590
|
+
},
|
|
2591
|
+
"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."
|
|
2592
|
+
},
|
|
2515
2593
|
{
|
|
2516
2594
|
"name": "web-search",
|
|
2517
2595
|
"fieldName": "webSearch",
|
|
@@ -2543,6 +2621,14 @@
|
|
|
2543
2621
|
"text": "undefined | string"
|
|
2544
2622
|
},
|
|
2545
2623
|
"description": "Which attachment media types the user may stage, in HTML `accept` syntax: `<kai-chat accept=\"image/*,application/pdf\">`. A plain string, so unlike `messages` it DOES work as an attribute. Omitted means no filter. MEDIA TYPES ONLY -- exact (`image/png`) or subtype wildcard (`text/*`). HTML allows a file extension here and this does not: `accept=\".py\"` THROWS with the entry named, rather than silently resolving to a picker that accepts nothing. It can only NARROW what the kit can already encode: `accept=\"image/*\"` resolves to the four image formats both APIs take, not to every image type the OS offers. Pass the SAME string to `toOpenAIMessages(msgs, { accept })` and the picker and the wire cannot disagree -- both resolve it through `resolveMediaPolicy` against one declaration. That declaration is readable as `encodableMediaTypes()` from `@kitn.ai/ui/wire`, if you would rather build your own picker than use this prop."
|
|
2624
|
+
},
|
|
2625
|
+
{
|
|
2626
|
+
"name": "conversations",
|
|
2627
|
+
"fieldName": "conversations",
|
|
2628
|
+
"type": {
|
|
2629
|
+
"text": "undefined | false | true"
|
|
2630
|
+
},
|
|
2631
|
+
"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."
|
|
2546
2632
|
}
|
|
2547
2633
|
],
|
|
2548
2634
|
"events": [
|
|
@@ -2560,6 +2646,20 @@
|
|
|
2560
2646
|
},
|
|
2561
2647
|
"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."
|
|
2562
2648
|
},
|
|
2649
|
+
{
|
|
2650
|
+
"name": "kai-conversation-load",
|
|
2651
|
+
"type": {
|
|
2652
|
+
"text": "CustomEvent<{ 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\" }[] }>"
|
|
2653
|
+
},
|
|
2654
|
+
"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."
|
|
2655
|
+
},
|
|
2656
|
+
{
|
|
2657
|
+
"name": "kai-home-link",
|
|
2658
|
+
"type": {
|
|
2659
|
+
"text": "CustomEvent<{ entry: { label: string; href?: undefined | string; description?: undefined | string; icon?: undefined | string } }>"
|
|
2660
|
+
},
|
|
2661
|
+
"description": "A `home.links` entry with no `href` was activated (tapped/clicked/Enter). Meaningful only when `home` is set."
|
|
2662
|
+
},
|
|
2563
2663
|
{
|
|
2564
2664
|
"name": "kai-message-action",
|
|
2565
2665
|
"type": {
|
|
@@ -2668,8 +2768,8 @@
|
|
|
2668
2768
|
{
|
|
2669
2769
|
"kind": "class",
|
|
2670
2770
|
"customElement": true,
|
|
2671
|
-
"tagName": "kai-
|
|
2672
|
-
"name": "
|
|
2771
|
+
"tagName": "kai-checkbox",
|
|
2772
|
+
"name": "KaiCheckboxElement",
|
|
2673
2773
|
"description": "",
|
|
2674
2774
|
"members": [
|
|
2675
2775
|
{
|
|
@@ -2683,38 +2783,101 @@
|
|
|
2683
2783
|
},
|
|
2684
2784
|
{
|
|
2685
2785
|
"kind": "field",
|
|
2686
|
-
"name": "
|
|
2786
|
+
"name": "checked",
|
|
2687
2787
|
"type": {
|
|
2688
|
-
"text": "undefined |
|
|
2788
|
+
"text": "undefined | false | true"
|
|
2689
2789
|
},
|
|
2690
|
-
"description": "
|
|
2790
|
+
"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.",
|
|
2691
2791
|
"privacy": "public"
|
|
2692
2792
|
},
|
|
2693
2793
|
{
|
|
2694
2794
|
"kind": "field",
|
|
2695
|
-
"name": "
|
|
2795
|
+
"name": "defaultChecked",
|
|
2796
|
+
"type": {
|
|
2797
|
+
"text": "undefined | false | true"
|
|
2798
|
+
},
|
|
2799
|
+
"description": "Initial checked state on mount (uncontrolled seed). Bare attribute (`<kai-checkbox default-checked>`) turns it on.",
|
|
2800
|
+
"privacy": "public"
|
|
2801
|
+
},
|
|
2802
|
+
{
|
|
2803
|
+
"kind": "field",
|
|
2804
|
+
"name": "indeterminate",
|
|
2805
|
+
"type": {
|
|
2806
|
+
"text": "undefined | false | true"
|
|
2807
|
+
},
|
|
2808
|
+
"description": "The mixed state, for a parent box whose children are partly ticked. Visual plus an accessibility hint: the box still reports `checked === false`.",
|
|
2809
|
+
"privacy": "public"
|
|
2810
|
+
},
|
|
2811
|
+
{
|
|
2812
|
+
"kind": "field",
|
|
2813
|
+
"name": "disabled",
|
|
2814
|
+
"type": {
|
|
2815
|
+
"text": "undefined | false | true"
|
|
2816
|
+
},
|
|
2817
|
+
"description": "Disable interaction.",
|
|
2818
|
+
"privacy": "public"
|
|
2819
|
+
},
|
|
2820
|
+
{
|
|
2821
|
+
"kind": "field",
|
|
2822
|
+
"name": "required",
|
|
2823
|
+
"type": {
|
|
2824
|
+
"text": "undefined | false | true"
|
|
2825
|
+
},
|
|
2826
|
+
"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.",
|
|
2827
|
+
"privacy": "public"
|
|
2828
|
+
},
|
|
2829
|
+
{
|
|
2830
|
+
"kind": "field",
|
|
2831
|
+
"name": "label",
|
|
2696
2832
|
"type": {
|
|
2697
2833
|
"text": "undefined | string"
|
|
2698
2834
|
},
|
|
2699
|
-
"description": "
|
|
2835
|
+
"description": "Accessible label. The visible text beside the box is the consumer's to render.",
|
|
2700
2836
|
"privacy": "public"
|
|
2701
2837
|
},
|
|
2702
2838
|
{
|
|
2703
2839
|
"kind": "field",
|
|
2704
|
-
"name": "
|
|
2840
|
+
"name": "name",
|
|
2705
2841
|
"type": {
|
|
2706
|
-
"text": "undefined |
|
|
2842
|
+
"text": "undefined | string"
|
|
2707
2843
|
},
|
|
2708
|
-
"description": "
|
|
2844
|
+
"description": "Form-control name (paired with `value`).",
|
|
2709
2845
|
"privacy": "public"
|
|
2710
2846
|
},
|
|
2711
2847
|
{
|
|
2712
2848
|
"kind": "field",
|
|
2713
|
-
"name": "
|
|
2849
|
+
"name": "value",
|
|
2714
2850
|
"type": {
|
|
2715
|
-
"text": "undefined |
|
|
2851
|
+
"text": "undefined | string"
|
|
2716
2852
|
},
|
|
2717
|
-
"description": "
|
|
2853
|
+
"description": "Submitted value when checked (paired with `name`). Defaults to `'on'`.",
|
|
2854
|
+
"privacy": "public"
|
|
2855
|
+
},
|
|
2856
|
+
{
|
|
2857
|
+
"kind": "method",
|
|
2858
|
+
"name": "toggle",
|
|
2859
|
+
"return": {
|
|
2860
|
+
"type": {
|
|
2861
|
+
"text": "void"
|
|
2862
|
+
}
|
|
2863
|
+
},
|
|
2864
|
+
"description": "Flip the box and fire `kai-change` (no-op while disabled).",
|
|
2865
|
+
"privacy": "public"
|
|
2866
|
+
},
|
|
2867
|
+
{
|
|
2868
|
+
"kind": "method",
|
|
2869
|
+
"name": "focus",
|
|
2870
|
+
"parameters": [
|
|
2871
|
+
{
|
|
2872
|
+
"name": "options?: FocusOptions"
|
|
2873
|
+
}
|
|
2874
|
+
],
|
|
2875
|
+
"return": {
|
|
2876
|
+
"type": {
|
|
2877
|
+
"text": "void"
|
|
2878
|
+
}
|
|
2879
|
+
},
|
|
2880
|
+
"description": "Focus the inner input (the host element can't reach it).",
|
|
2718
2881
|
"privacy": "public"
|
|
2719
2882
|
}
|
|
2720
2883
|
],
|
|
@@ -2728,45 +2891,77 @@
|
|
|
2728
2891
|
"description": "Color mode (`auto` follows prefers-color-scheme)."
|
|
2729
2892
|
},
|
|
2730
2893
|
{
|
|
2731
|
-
"name": "
|
|
2732
|
-
"fieldName": "
|
|
2894
|
+
"name": "checked",
|
|
2895
|
+
"fieldName": "checked",
|
|
2733
2896
|
"type": {
|
|
2734
|
-
"text": "undefined |
|
|
2897
|
+
"text": "undefined | false | true"
|
|
2735
2898
|
},
|
|
2736
|
-
"description": "
|
|
2899
|
+
"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."
|
|
2737
2900
|
},
|
|
2738
2901
|
{
|
|
2739
|
-
"name": "
|
|
2740
|
-
"fieldName": "
|
|
2902
|
+
"name": "default-checked",
|
|
2903
|
+
"fieldName": "defaultChecked",
|
|
2904
|
+
"type": {
|
|
2905
|
+
"text": "undefined | false | true"
|
|
2906
|
+
},
|
|
2907
|
+
"description": "Initial checked state on mount (uncontrolled seed). Bare attribute (`<kai-checkbox default-checked>`) turns it on."
|
|
2908
|
+
},
|
|
2909
|
+
{
|
|
2910
|
+
"name": "indeterminate",
|
|
2911
|
+
"fieldName": "indeterminate",
|
|
2912
|
+
"type": {
|
|
2913
|
+
"text": "undefined | false | true"
|
|
2914
|
+
},
|
|
2915
|
+
"description": "The mixed state, for a parent box whose children are partly ticked. Visual plus an accessibility hint: the box still reports `checked === false`."
|
|
2916
|
+
},
|
|
2917
|
+
{
|
|
2918
|
+
"name": "disabled",
|
|
2919
|
+
"fieldName": "disabled",
|
|
2920
|
+
"type": {
|
|
2921
|
+
"text": "undefined | false | true"
|
|
2922
|
+
},
|
|
2923
|
+
"description": "Disable interaction."
|
|
2924
|
+
},
|
|
2925
|
+
{
|
|
2926
|
+
"name": "required",
|
|
2927
|
+
"fieldName": "required",
|
|
2928
|
+
"type": {
|
|
2929
|
+
"text": "undefined | false | true"
|
|
2930
|
+
},
|
|
2931
|
+
"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."
|
|
2932
|
+
},
|
|
2933
|
+
{
|
|
2934
|
+
"name": "label",
|
|
2935
|
+
"fieldName": "label",
|
|
2741
2936
|
"type": {
|
|
2742
2937
|
"text": "undefined | string"
|
|
2743
2938
|
},
|
|
2744
|
-
"description": "
|
|
2939
|
+
"description": "Accessible label. The visible text beside the box is the consumer's to render."
|
|
2745
2940
|
},
|
|
2746
2941
|
{
|
|
2747
|
-
"name": "
|
|
2748
|
-
"fieldName": "
|
|
2942
|
+
"name": "name",
|
|
2943
|
+
"fieldName": "name",
|
|
2749
2944
|
"type": {
|
|
2750
|
-
"text": "undefined |
|
|
2945
|
+
"text": "undefined | string"
|
|
2751
2946
|
},
|
|
2752
|
-
"description": "
|
|
2947
|
+
"description": "Form-control name (paired with `value`)."
|
|
2753
2948
|
},
|
|
2754
2949
|
{
|
|
2755
|
-
"name": "
|
|
2756
|
-
"fieldName": "
|
|
2950
|
+
"name": "value",
|
|
2951
|
+
"fieldName": "value",
|
|
2757
2952
|
"type": {
|
|
2758
|
-
"text": "undefined |
|
|
2953
|
+
"text": "undefined | string"
|
|
2759
2954
|
},
|
|
2760
|
-
"description": "
|
|
2955
|
+
"description": "Submitted value when checked (paired with `name`). Defaults to `'on'`."
|
|
2761
2956
|
}
|
|
2762
2957
|
],
|
|
2763
2958
|
"events": [
|
|
2764
2959
|
{
|
|
2765
|
-
"name": "kai-
|
|
2960
|
+
"name": "kai-change",
|
|
2766
2961
|
"type": {
|
|
2767
|
-
"text": "CustomEvent"
|
|
2962
|
+
"text": "CustomEvent<{ checked: false | true }>"
|
|
2768
2963
|
},
|
|
2769
|
-
"description": "The
|
|
2964
|
+
"description": "The box was ticked or unticked."
|
|
2770
2965
|
}
|
|
2771
2966
|
],
|
|
2772
2967
|
"cssProperties": []
|
|
@@ -2774,8 +2969,8 @@
|
|
|
2774
2969
|
{
|
|
2775
2970
|
"kind": "class",
|
|
2776
2971
|
"customElement": true,
|
|
2777
|
-
"tagName": "kai-
|
|
2778
|
-
"name": "
|
|
2972
|
+
"tagName": "kai-checkbox-group",
|
|
2973
|
+
"name": "KaiCheckboxGroupElement",
|
|
2779
2974
|
"description": "",
|
|
2780
2975
|
"members": [
|
|
2781
2976
|
{
|
|
@@ -2789,65 +2984,47 @@
|
|
|
2789
2984
|
},
|
|
2790
2985
|
{
|
|
2791
2986
|
"kind": "field",
|
|
2792
|
-
"name": "
|
|
2987
|
+
"name": "options",
|
|
2793
2988
|
"type": {
|
|
2794
|
-
"text": "
|
|
2989
|
+
"text": "{ value: string; label: string; description?: undefined | string; disabled?: undefined | false | true }[]"
|
|
2795
2990
|
},
|
|
2796
|
-
"description": "The
|
|
2991
|
+
"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.",
|
|
2797
2992
|
"privacy": "public"
|
|
2798
2993
|
},
|
|
2799
2994
|
{
|
|
2800
2995
|
"kind": "field",
|
|
2801
|
-
"name": "
|
|
2996
|
+
"name": "value",
|
|
2802
2997
|
"type": {
|
|
2803
2998
|
"text": "undefined | string"
|
|
2804
2999
|
},
|
|
2805
|
-
"description": "
|
|
3000
|
+
"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`.",
|
|
2806
3001
|
"privacy": "public"
|
|
2807
3002
|
},
|
|
2808
3003
|
{
|
|
2809
3004
|
"kind": "field",
|
|
2810
|
-
"name": "
|
|
3005
|
+
"name": "name",
|
|
2811
3006
|
"type": {
|
|
2812
3007
|
"text": "undefined | string"
|
|
2813
3008
|
},
|
|
2814
|
-
"description": "
|
|
2815
|
-
"privacy": "public"
|
|
2816
|
-
},
|
|
2817
|
-
{
|
|
2818
|
-
"kind": "field",
|
|
2819
|
-
"name": "resolution",
|
|
2820
|
-
"type": {
|
|
2821
|
-
"text": "undefined | Record<string, unknown>"
|
|
2822
|
-
},
|
|
2823
|
-
"description": "Set when the user resolved this card; renders the read-only view. Property: `el.resolution = { kind:'action', action:'…' }`.",
|
|
3009
|
+
"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.",
|
|
2824
3010
|
"privacy": "public"
|
|
2825
3011
|
},
|
|
2826
3012
|
{
|
|
2827
3013
|
"kind": "field",
|
|
2828
|
-
"name": "
|
|
3014
|
+
"name": "disabled",
|
|
2829
3015
|
"type": {
|
|
2830
|
-
"text": "undefined |
|
|
3016
|
+
"text": "undefined | false | true"
|
|
2831
3017
|
},
|
|
2832
|
-
"description": "
|
|
3018
|
+
"description": "Disable every row. Individual rows carry their own `disabled`.",
|
|
2833
3019
|
"privacy": "public"
|
|
2834
3020
|
},
|
|
2835
3021
|
{
|
|
2836
3022
|
"kind": "field",
|
|
2837
|
-
"name": "
|
|
3023
|
+
"name": "label",
|
|
2838
3024
|
"type": {
|
|
2839
3025
|
"text": "undefined | string"
|
|
2840
3026
|
},
|
|
2841
|
-
"description": "
|
|
2842
|
-
"privacy": "public"
|
|
2843
|
-
},
|
|
2844
|
-
{
|
|
2845
|
-
"kind": "field",
|
|
2846
|
-
"name": "disabled",
|
|
2847
|
-
"type": {
|
|
2848
|
-
"text": "undefined | false | true"
|
|
2849
|
-
},
|
|
2850
|
-
"description": "Disable the whole radiogroup + Submit (e.g. while the agent is busy). Attribute: `disabled`.",
|
|
3027
|
+
"description": "Accessible name for the group.",
|
|
2851
3028
|
"privacy": "public"
|
|
2852
3029
|
},
|
|
2853
3030
|
{
|
|
@@ -2863,12 +3040,267 @@
|
|
|
2863
3040
|
"text": "void"
|
|
2864
3041
|
}
|
|
2865
3042
|
},
|
|
2866
|
-
"description": "Focus the
|
|
3043
|
+
"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.",
|
|
2867
3044
|
"privacy": "public"
|
|
2868
|
-
}
|
|
3045
|
+
}
|
|
3046
|
+
],
|
|
3047
|
+
"attributes": [
|
|
2869
3048
|
{
|
|
2870
|
-
"
|
|
2871
|
-
"
|
|
3049
|
+
"name": "theme",
|
|
3050
|
+
"fieldName": "theme",
|
|
3051
|
+
"type": {
|
|
3052
|
+
"text": "\"light\" | \"dark\" | \"auto\""
|
|
3053
|
+
},
|
|
3054
|
+
"description": "Color mode (`auto` follows prefers-color-scheme)."
|
|
3055
|
+
},
|
|
3056
|
+
{
|
|
3057
|
+
"name": "value",
|
|
3058
|
+
"fieldName": "value",
|
|
3059
|
+
"type": {
|
|
3060
|
+
"text": "undefined | string"
|
|
3061
|
+
},
|
|
3062
|
+
"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`."
|
|
3063
|
+
},
|
|
3064
|
+
{
|
|
3065
|
+
"name": "name",
|
|
3066
|
+
"fieldName": "name",
|
|
3067
|
+
"type": {
|
|
3068
|
+
"text": "undefined | string"
|
|
3069
|
+
},
|
|
3070
|
+
"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."
|
|
3071
|
+
},
|
|
3072
|
+
{
|
|
3073
|
+
"name": "disabled",
|
|
3074
|
+
"fieldName": "disabled",
|
|
3075
|
+
"type": {
|
|
3076
|
+
"text": "undefined | false | true"
|
|
3077
|
+
},
|
|
3078
|
+
"description": "Disable every row. Individual rows carry their own `disabled`."
|
|
3079
|
+
},
|
|
3080
|
+
{
|
|
3081
|
+
"name": "label",
|
|
3082
|
+
"fieldName": "label",
|
|
3083
|
+
"type": {
|
|
3084
|
+
"text": "undefined | string"
|
|
3085
|
+
},
|
|
3086
|
+
"description": "Accessible name for the group."
|
|
3087
|
+
}
|
|
3088
|
+
],
|
|
3089
|
+
"events": [
|
|
3090
|
+
{
|
|
3091
|
+
"name": "kai-change",
|
|
3092
|
+
"type": {
|
|
3093
|
+
"text": "CustomEvent<{ value: string; values: string[] }>"
|
|
3094
|
+
},
|
|
3095
|
+
"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."
|
|
3096
|
+
}
|
|
3097
|
+
],
|
|
3098
|
+
"cssProperties": []
|
|
3099
|
+
},
|
|
3100
|
+
{
|
|
3101
|
+
"kind": "class",
|
|
3102
|
+
"customElement": true,
|
|
3103
|
+
"tagName": "kai-checkpoint",
|
|
3104
|
+
"name": "KaiCheckpointElement",
|
|
3105
|
+
"description": "",
|
|
3106
|
+
"members": [
|
|
3107
|
+
{
|
|
3108
|
+
"kind": "field",
|
|
3109
|
+
"name": "theme",
|
|
3110
|
+
"type": {
|
|
3111
|
+
"text": "\"light\" | \"dark\" | \"auto\""
|
|
3112
|
+
},
|
|
3113
|
+
"description": "Color mode (`auto` follows prefers-color-scheme).",
|
|
3114
|
+
"privacy": "public"
|
|
3115
|
+
},
|
|
3116
|
+
{
|
|
3117
|
+
"kind": "field",
|
|
3118
|
+
"name": "label",
|
|
3119
|
+
"type": {
|
|
3120
|
+
"text": "undefined | string"
|
|
3121
|
+
},
|
|
3122
|
+
"description": "Optional text beside the icon.",
|
|
3123
|
+
"privacy": "public"
|
|
3124
|
+
},
|
|
3125
|
+
{
|
|
3126
|
+
"kind": "field",
|
|
3127
|
+
"name": "tooltip",
|
|
3128
|
+
"type": {
|
|
3129
|
+
"text": "undefined | string"
|
|
3130
|
+
},
|
|
3131
|
+
"description": "Tooltip on hover.",
|
|
3132
|
+
"privacy": "public"
|
|
3133
|
+
},
|
|
3134
|
+
{
|
|
3135
|
+
"kind": "field",
|
|
3136
|
+
"name": "variant",
|
|
3137
|
+
"type": {
|
|
3138
|
+
"text": "undefined | \"ghost\" | \"default\" | \"outline\""
|
|
3139
|
+
},
|
|
3140
|
+
"description": "Visual button style.",
|
|
3141
|
+
"privacy": "public"
|
|
3142
|
+
},
|
|
3143
|
+
{
|
|
3144
|
+
"kind": "field",
|
|
3145
|
+
"name": "size",
|
|
3146
|
+
"type": {
|
|
3147
|
+
"text": "undefined | \"sm\" | \"md\" | \"lg\" | \"icon\" | \"icon-sm\""
|
|
3148
|
+
},
|
|
3149
|
+
"description": "Button size (use an `icon*` size for an icon-only checkpoint).",
|
|
3150
|
+
"privacy": "public"
|
|
3151
|
+
}
|
|
3152
|
+
],
|
|
3153
|
+
"attributes": [
|
|
3154
|
+
{
|
|
3155
|
+
"name": "theme",
|
|
3156
|
+
"fieldName": "theme",
|
|
3157
|
+
"type": {
|
|
3158
|
+
"text": "\"light\" | \"dark\" | \"auto\""
|
|
3159
|
+
},
|
|
3160
|
+
"description": "Color mode (`auto` follows prefers-color-scheme)."
|
|
3161
|
+
},
|
|
3162
|
+
{
|
|
3163
|
+
"name": "label",
|
|
3164
|
+
"fieldName": "label",
|
|
3165
|
+
"type": {
|
|
3166
|
+
"text": "undefined | string"
|
|
3167
|
+
},
|
|
3168
|
+
"description": "Optional text beside the icon."
|
|
3169
|
+
},
|
|
3170
|
+
{
|
|
3171
|
+
"name": "tooltip",
|
|
3172
|
+
"fieldName": "tooltip",
|
|
3173
|
+
"type": {
|
|
3174
|
+
"text": "undefined | string"
|
|
3175
|
+
},
|
|
3176
|
+
"description": "Tooltip on hover."
|
|
3177
|
+
},
|
|
3178
|
+
{
|
|
3179
|
+
"name": "variant",
|
|
3180
|
+
"fieldName": "variant",
|
|
3181
|
+
"type": {
|
|
3182
|
+
"text": "undefined | \"ghost\" | \"default\" | \"outline\""
|
|
3183
|
+
},
|
|
3184
|
+
"description": "Visual button style."
|
|
3185
|
+
},
|
|
3186
|
+
{
|
|
3187
|
+
"name": "size",
|
|
3188
|
+
"fieldName": "size",
|
|
3189
|
+
"type": {
|
|
3190
|
+
"text": "undefined | \"sm\" | \"md\" | \"lg\" | \"icon\" | \"icon-sm\""
|
|
3191
|
+
},
|
|
3192
|
+
"description": "Button size (use an `icon*` size for an icon-only checkpoint)."
|
|
3193
|
+
}
|
|
3194
|
+
],
|
|
3195
|
+
"events": [
|
|
3196
|
+
{
|
|
3197
|
+
"name": "kai-select",
|
|
3198
|
+
"type": {
|
|
3199
|
+
"text": "CustomEvent"
|
|
3200
|
+
},
|
|
3201
|
+
"description": "The checkpoint was clicked."
|
|
3202
|
+
}
|
|
3203
|
+
],
|
|
3204
|
+
"cssProperties": []
|
|
3205
|
+
},
|
|
3206
|
+
{
|
|
3207
|
+
"kind": "class",
|
|
3208
|
+
"customElement": true,
|
|
3209
|
+
"tagName": "kai-choice",
|
|
3210
|
+
"name": "KaiChoiceElement",
|
|
3211
|
+
"description": "",
|
|
3212
|
+
"members": [
|
|
3213
|
+
{
|
|
3214
|
+
"kind": "field",
|
|
3215
|
+
"name": "theme",
|
|
3216
|
+
"type": {
|
|
3217
|
+
"text": "\"light\" | \"dark\" | \"auto\""
|
|
3218
|
+
},
|
|
3219
|
+
"description": "Color mode (`auto` follows prefers-color-scheme).",
|
|
3220
|
+
"privacy": "public"
|
|
3221
|
+
},
|
|
3222
|
+
{
|
|
3223
|
+
"kind": "field",
|
|
3224
|
+
"name": "data",
|
|
3225
|
+
"type": {
|
|
3226
|
+
"text": "undefined | { prompt?: undefined | string; options: { id: string; label: string; description?: undefined | string; media?: undefined | { image?: undefined | string; imageAlt?: undefined | string; icon?: undefined | string }; meta?: undefined | string; recommended?: undefined | false | true; disabled?: undefined | false | true; payload?: unknown }[]; allowOther?: undefined | false | true | { label?: undefined | string; placeholder?: undefined | string }; submitLabel?: undefined | string; dismissible?: undefined | false | true }"
|
|
3227
|
+
},
|
|
3228
|
+
"description": "The choice definition (the CardEnvelope.data). Set as a JS PROPERTY: `el.data = { prompt, options:[…], allowOther?, submitLabel? }`. Import `ChoiceCardData` from `@kitn.ai/ui` for the full shape.",
|
|
3229
|
+
"privacy": "public"
|
|
3230
|
+
},
|
|
3231
|
+
{
|
|
3232
|
+
"kind": "field",
|
|
3233
|
+
"name": "cardId",
|
|
3234
|
+
"type": {
|
|
3235
|
+
"text": "undefined | string"
|
|
3236
|
+
},
|
|
3237
|
+
"description": "Stable card id correlating every emitted CardEvent. Attribute: `card-id`.",
|
|
3238
|
+
"privacy": "public"
|
|
3239
|
+
},
|
|
3240
|
+
{
|
|
3241
|
+
"kind": "field",
|
|
3242
|
+
"name": "heading",
|
|
3243
|
+
"type": {
|
|
3244
|
+
"text": "undefined | string"
|
|
3245
|
+
},
|
|
3246
|
+
"description": "Heading rendered in the card chrome (= CardEnvelope.title). Attribute: `heading`.",
|
|
3247
|
+
"privacy": "public"
|
|
3248
|
+
},
|
|
3249
|
+
{
|
|
3250
|
+
"kind": "field",
|
|
3251
|
+
"name": "resolution",
|
|
3252
|
+
"type": {
|
|
3253
|
+
"text": "undefined | Record<string, unknown>"
|
|
3254
|
+
},
|
|
3255
|
+
"description": "Set when the user resolved this card; renders the read-only view. Property: `el.resolution = { kind:'action', action:'…' }`.",
|
|
3256
|
+
"privacy": "public"
|
|
3257
|
+
},
|
|
3258
|
+
{
|
|
3259
|
+
"kind": "field",
|
|
3260
|
+
"name": "value",
|
|
3261
|
+
"type": {
|
|
3262
|
+
"text": "undefined | string"
|
|
3263
|
+
},
|
|
3264
|
+
"description": "Controlled selection: the selected option id. When set, the consumer owns the current pick (RadioGroup `value`). Attribute: `value`.",
|
|
3265
|
+
"privacy": "public"
|
|
3266
|
+
},
|
|
3267
|
+
{
|
|
3268
|
+
"kind": "field",
|
|
3269
|
+
"name": "defaultValue",
|
|
3270
|
+
"type": {
|
|
3271
|
+
"text": "undefined | string"
|
|
3272
|
+
},
|
|
3273
|
+
"description": "Option id to pre-select on mount (uncontrolled seed). Attribute: `default-value`.",
|
|
3274
|
+
"privacy": "public"
|
|
3275
|
+
},
|
|
3276
|
+
{
|
|
3277
|
+
"kind": "field",
|
|
3278
|
+
"name": "disabled",
|
|
3279
|
+
"type": {
|
|
3280
|
+
"text": "undefined | false | true"
|
|
3281
|
+
},
|
|
3282
|
+
"description": "Disable the whole radiogroup + Submit (e.g. while the agent is busy). Attribute: `disabled`.",
|
|
3283
|
+
"privacy": "public"
|
|
3284
|
+
},
|
|
3285
|
+
{
|
|
3286
|
+
"kind": "method",
|
|
3287
|
+
"name": "focus",
|
|
3288
|
+
"parameters": [
|
|
3289
|
+
{
|
|
3290
|
+
"name": "options?: FocusOptions"
|
|
3291
|
+
}
|
|
3292
|
+
],
|
|
3293
|
+
"return": {
|
|
3294
|
+
"type": {
|
|
3295
|
+
"text": "void"
|
|
3296
|
+
}
|
|
3297
|
+
},
|
|
3298
|
+
"description": "Focus the radiogroup roving tab stop (or the Other input when selected).",
|
|
3299
|
+
"privacy": "public"
|
|
3300
|
+
},
|
|
3301
|
+
{
|
|
3302
|
+
"kind": "method",
|
|
3303
|
+
"name": "select",
|
|
2872
3304
|
"parameters": [
|
|
2873
3305
|
{
|
|
2874
3306
|
"name": "optionId: string"
|
|
@@ -3928,7 +4360,7 @@
|
|
|
3928
4360
|
"type": {
|
|
3929
4361
|
"text": "CustomEvent<{ 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> }[] }>"
|
|
3930
4362
|
},
|
|
3931
|
-
"description": "The user submitted the composer (Enter or programmatic submit)."
|
|
4363
|
+
"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."
|
|
3932
4364
|
},
|
|
3933
4365
|
{
|
|
3934
4366
|
"name": "kai-trigger",
|
|
@@ -4222,7 +4654,7 @@
|
|
|
4222
4654
|
"type": {
|
|
4223
4655
|
"text": "undefined | string"
|
|
4224
4656
|
},
|
|
4225
|
-
"description": "The row's identity
|
|
4657
|
+
"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.",
|
|
4226
4658
|
"privacy": "public"
|
|
4227
4659
|
},
|
|
4228
4660
|
{
|
|
@@ -4231,7 +4663,7 @@
|
|
|
4231
4663
|
"type": {
|
|
4232
4664
|
"text": "undefined | false | true"
|
|
4233
4665
|
},
|
|
4234
|
-
"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
|
|
4666
|
+
"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.",
|
|
4235
4667
|
"privacy": "public"
|
|
4236
4668
|
},
|
|
4237
4669
|
{
|
|
@@ -4259,7 +4691,7 @@
|
|
|
4259
4691
|
"type": {
|
|
4260
4692
|
"text": "undefined | string"
|
|
4261
4693
|
},
|
|
4262
|
-
"description": "The row's identity
|
|
4694
|
+
"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."
|
|
4263
4695
|
},
|
|
4264
4696
|
{
|
|
4265
4697
|
"name": "active",
|
|
@@ -4267,7 +4699,7 @@
|
|
|
4267
4699
|
"type": {
|
|
4268
4700
|
"text": "undefined | false | true"
|
|
4269
4701
|
},
|
|
4270
|
-
"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
|
|
4702
|
+
"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."
|
|
4271
4703
|
},
|
|
4272
4704
|
{
|
|
4273
4705
|
"name": "compact",
|
|
@@ -4278,13 +4710,21 @@
|
|
|
4278
4710
|
"description": "Dense single-line row padding."
|
|
4279
4711
|
}
|
|
4280
4712
|
],
|
|
4281
|
-
"events": [
|
|
4282
|
-
"cssProperties": [],
|
|
4283
|
-
"slots": [
|
|
4713
|
+
"events": [
|
|
4284
4714
|
{
|
|
4285
|
-
"name": "",
|
|
4286
|
-
"
|
|
4287
|
-
|
|
4715
|
+
"name": "kai-select",
|
|
4716
|
+
"type": {
|
|
4717
|
+
"text": "CustomEvent<{ id: string }>"
|
|
4718
|
+
},
|
|
4719
|
+
"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."
|
|
4720
|
+
}
|
|
4721
|
+
],
|
|
4722
|
+
"cssProperties": [],
|
|
4723
|
+
"slots": [
|
|
4724
|
+
{
|
|
4725
|
+
"name": "",
|
|
4726
|
+
"description": "The row title. `leading`, `meta` and `menu` are the named regions around it."
|
|
4727
|
+
},
|
|
4288
4728
|
{
|
|
4289
4729
|
"name": "leading",
|
|
4290
4730
|
"description": "Leading region before the title (an icon or avatar)."
|
|
@@ -4357,7 +4797,7 @@
|
|
|
4357
4797
|
"kind": "field",
|
|
4358
4798
|
"name": "conversations",
|
|
4359
4799
|
"type": {
|
|
4360
|
-
"text": "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 }[]"
|
|
4800
|
+
"text": "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 }[]"
|
|
4361
4801
|
},
|
|
4362
4802
|
"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.",
|
|
4363
4803
|
"privacy": "public"
|
|
@@ -4574,7 +5014,7 @@
|
|
|
4574
5014
|
}
|
|
4575
5015
|
],
|
|
4576
5016
|
"textContent": true,
|
|
4577
|
-
"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
|
|
5017
|
+
"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)."
|
|
4578
5018
|
}
|
|
4579
5019
|
],
|
|
4580
5020
|
"slots": [
|
|
@@ -4873,6 +5313,15 @@
|
|
|
4873
5313
|
"description": "Disable the launcher; `show()` and `toggle()` are gated on it.",
|
|
4874
5314
|
"privacy": "public"
|
|
4875
5315
|
},
|
|
5316
|
+
{
|
|
5317
|
+
"kind": "field",
|
|
5318
|
+
"name": "hideClose",
|
|
5319
|
+
"type": {
|
|
5320
|
+
"text": "undefined | false | true"
|
|
5321
|
+
},
|
|
5322
|
+
"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`.",
|
|
5323
|
+
"privacy": "public"
|
|
5324
|
+
},
|
|
4876
5325
|
{
|
|
4877
5326
|
"kind": "field",
|
|
4878
5327
|
"name": "focusOnOpen",
|
|
@@ -5005,6 +5454,14 @@
|
|
|
5005
5454
|
},
|
|
5006
5455
|
"description": "Disable the launcher; `show()` and `toggle()` are gated on it."
|
|
5007
5456
|
},
|
|
5457
|
+
{
|
|
5458
|
+
"name": "hide-close",
|
|
5459
|
+
"fieldName": "hideClose",
|
|
5460
|
+
"type": {
|
|
5461
|
+
"text": "undefined | false | true"
|
|
5462
|
+
},
|
|
5463
|
+
"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`."
|
|
5464
|
+
},
|
|
5008
5465
|
{
|
|
5009
5466
|
"name": "focus-on-open",
|
|
5010
5467
|
"fieldName": "focusOnOpen",
|
|
@@ -5971,7 +6428,7 @@
|
|
|
5971
6428
|
"kind": "field",
|
|
5972
6429
|
"name": "data",
|
|
5973
6430
|
"type": {
|
|
5974
|
-
"text": "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\" }[] }"
|
|
6431
|
+
"text": "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\" }[] }"
|
|
5975
6432
|
},
|
|
5976
6433
|
"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.",
|
|
5977
6434
|
"privacy": "public"
|
|
@@ -6522,7 +6979,7 @@
|
|
|
6522
6979
|
"type": {
|
|
6523
6980
|
"text": "undefined | string"
|
|
6524
6981
|
},
|
|
6525
|
-
"description": "Controlled value
|
|
6982
|
+
"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`.",
|
|
6526
6983
|
"privacy": "public"
|
|
6527
6984
|
},
|
|
6528
6985
|
{
|
|
@@ -6633,6 +7090,51 @@
|
|
|
6633
7090
|
"description": "Virtual-keyboard hint forwarded to the inner input (e.g. `numeric`, `email`).",
|
|
6634
7091
|
"privacy": "public"
|
|
6635
7092
|
},
|
|
7093
|
+
{
|
|
7094
|
+
"kind": "field",
|
|
7095
|
+
"name": "format",
|
|
7096
|
+
"type": {
|
|
7097
|
+
"text": "undefined | string"
|
|
7098
|
+
},
|
|
7099
|
+
"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.",
|
|
7100
|
+
"privacy": "public"
|
|
7101
|
+
},
|
|
7102
|
+
{
|
|
7103
|
+
"kind": "field",
|
|
7104
|
+
"name": "guide",
|
|
7105
|
+
"type": {
|
|
7106
|
+
"text": "undefined | string"
|
|
7107
|
+
},
|
|
7108
|
+
"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.",
|
|
7109
|
+
"privacy": "public"
|
|
7110
|
+
},
|
|
7111
|
+
{
|
|
7112
|
+
"kind": "field",
|
|
7113
|
+
"name": "semantic",
|
|
7114
|
+
"type": {
|
|
7115
|
+
"text": "undefined | \"credit-card\" | \"custom\" | \"ssn\" | \"tel\""
|
|
7116
|
+
},
|
|
7117
|
+
"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.",
|
|
7118
|
+
"privacy": "public"
|
|
7119
|
+
},
|
|
7120
|
+
{
|
|
7121
|
+
"kind": "field",
|
|
7122
|
+
"name": "caseMode",
|
|
7123
|
+
"type": {
|
|
7124
|
+
"text": "undefined | \"preserve\" | \"upper\" | \"lower\""
|
|
7125
|
+
},
|
|
7126
|
+
"description": "Case folding applied to typed and pasted text: `preserve` (default) · `upper` · `lower`. Attribute: `case-mode`.",
|
|
7127
|
+
"privacy": "public"
|
|
7128
|
+
},
|
|
7129
|
+
{
|
|
7130
|
+
"kind": "field",
|
|
7131
|
+
"name": "copyPolicy",
|
|
7132
|
+
"type": {
|
|
7133
|
+
"text": "undefined | \"formatted\" | \"canonical\" | \"obscured\" | \"blocked\""
|
|
7134
|
+
},
|
|
7135
|
+
"description": "What a copy or cut of a masked field puts on the clipboard: `canonical` (default) · `formatted` · `obscured` · `blocked`. Attribute: `copy-policy`.",
|
|
7136
|
+
"privacy": "public"
|
|
7137
|
+
},
|
|
6636
7138
|
{
|
|
6637
7139
|
"kind": "method",
|
|
6638
7140
|
"name": "focus",
|
|
@@ -6660,6 +7162,28 @@
|
|
|
6660
7162
|
"description": "Select the inner input's text.",
|
|
6661
7163
|
"privacy": "public"
|
|
6662
7164
|
},
|
|
7165
|
+
{
|
|
7166
|
+
"kind": "method",
|
|
7167
|
+
"name": "getRawValue",
|
|
7168
|
+
"return": {
|
|
7169
|
+
"type": {
|
|
7170
|
+
"text": "string"
|
|
7171
|
+
}
|
|
7172
|
+
},
|
|
7173
|
+
"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.",
|
|
7174
|
+
"privacy": "public"
|
|
7175
|
+
},
|
|
7176
|
+
{
|
|
7177
|
+
"kind": "method",
|
|
7178
|
+
"name": "getFormattedValue",
|
|
7179
|
+
"return": {
|
|
7180
|
+
"type": {
|
|
7181
|
+
"text": "string"
|
|
7182
|
+
}
|
|
7183
|
+
},
|
|
7184
|
+
"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.",
|
|
7185
|
+
"privacy": "public"
|
|
7186
|
+
},
|
|
6663
7187
|
{
|
|
6664
7188
|
"kind": "method",
|
|
6665
7189
|
"name": "clear",
|
|
@@ -6668,7 +7192,7 @@
|
|
|
6668
7192
|
"text": "void"
|
|
6669
7193
|
}
|
|
6670
7194
|
},
|
|
6671
|
-
"description": "Empty the value and fire `kai-change` with `''`.",
|
|
7195
|
+
"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.",
|
|
6672
7196
|
"privacy": "public"
|
|
6673
7197
|
}
|
|
6674
7198
|
],
|
|
@@ -6695,7 +7219,7 @@
|
|
|
6695
7219
|
"type": {
|
|
6696
7220
|
"text": "undefined | string"
|
|
6697
7221
|
},
|
|
6698
|
-
"description": "Controlled value
|
|
7222
|
+
"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`."
|
|
6699
7223
|
},
|
|
6700
7224
|
{
|
|
6701
7225
|
"name": "placeholder",
|
|
@@ -6792,22 +7316,69 @@
|
|
|
6792
7316
|
"text": "undefined | string"
|
|
6793
7317
|
},
|
|
6794
7318
|
"description": "Virtual-keyboard hint forwarded to the inner input (e.g. `numeric`, `email`)."
|
|
7319
|
+
},
|
|
7320
|
+
{
|
|
7321
|
+
"name": "format",
|
|
7322
|
+
"fieldName": "format",
|
|
7323
|
+
"type": {
|
|
7324
|
+
"text": "undefined | string"
|
|
7325
|
+
},
|
|
7326
|
+
"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."
|
|
7327
|
+
},
|
|
7328
|
+
{
|
|
7329
|
+
"name": "guide",
|
|
7330
|
+
"fieldName": "guide",
|
|
7331
|
+
"type": {
|
|
7332
|
+
"text": "undefined | string"
|
|
7333
|
+
},
|
|
7334
|
+
"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."
|
|
7335
|
+
},
|
|
7336
|
+
{
|
|
7337
|
+
"name": "semantic",
|
|
7338
|
+
"fieldName": "semantic",
|
|
7339
|
+
"type": {
|
|
7340
|
+
"text": "undefined | \"credit-card\" | \"custom\" | \"ssn\" | \"tel\""
|
|
7341
|
+
},
|
|
7342
|
+
"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."
|
|
7343
|
+
},
|
|
7344
|
+
{
|
|
7345
|
+
"name": "case-mode",
|
|
7346
|
+
"fieldName": "caseMode",
|
|
7347
|
+
"type": {
|
|
7348
|
+
"text": "undefined | \"preserve\" | \"upper\" | \"lower\""
|
|
7349
|
+
},
|
|
7350
|
+
"description": "Case folding applied to typed and pasted text: `preserve` (default) · `upper` · `lower`. Attribute: `case-mode`."
|
|
7351
|
+
},
|
|
7352
|
+
{
|
|
7353
|
+
"name": "copy-policy",
|
|
7354
|
+
"fieldName": "copyPolicy",
|
|
7355
|
+
"type": {
|
|
7356
|
+
"text": "undefined | \"formatted\" | \"canonical\" | \"obscured\" | \"blocked\""
|
|
7357
|
+
},
|
|
7358
|
+
"description": "What a copy or cut of a masked field puts on the clipboard: `canonical` (default) · `formatted` · `obscured` · `blocked`. Attribute: `copy-policy`."
|
|
6795
7359
|
}
|
|
6796
7360
|
],
|
|
6797
7361
|
"events": [
|
|
6798
7362
|
{
|
|
6799
7363
|
"name": "kai-change",
|
|
6800
7364
|
"type": {
|
|
6801
|
-
"text": "CustomEvent<{ value: string }>"
|
|
7365
|
+
"text": "CustomEvent<{ value: string; formattedValue: string }>"
|
|
6802
7366
|
},
|
|
6803
|
-
"description": "The value was committed (blur)."
|
|
7367
|
+
"description": "The value was committed (blur). Same detail shape as `kai-input`."
|
|
6804
7368
|
},
|
|
6805
7369
|
{
|
|
6806
7370
|
"name": "kai-input",
|
|
6807
7371
|
"type": {
|
|
6808
|
-
"text": "CustomEvent<{ value: string }>"
|
|
7372
|
+
"text": "CustomEvent<{ value: string; formattedValue: string }>"
|
|
6809
7373
|
},
|
|
6810
|
-
"description": "The value changed per keystroke."
|
|
7374
|
+
"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."
|
|
7375
|
+
},
|
|
7376
|
+
{
|
|
7377
|
+
"name": "kai-input-rejected",
|
|
7378
|
+
"type": {
|
|
7379
|
+
"text": "CustomEvent<{ reason: \"full\" | \"wrong-class\" | \"over-capacity\" | \"format-change-clipped\"; data: string }>"
|
|
7380
|
+
},
|
|
7381
|
+
"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."
|
|
6811
7382
|
}
|
|
6812
7383
|
],
|
|
6813
7384
|
"cssProperties": [],
|
|
@@ -8384,6 +8955,113 @@
|
|
|
8384
8955
|
}
|
|
8385
8956
|
]
|
|
8386
8957
|
},
|
|
8958
|
+
{
|
|
8959
|
+
"kind": "class",
|
|
8960
|
+
"customElement": true,
|
|
8961
|
+
"tagName": "kai-pane-grid",
|
|
8962
|
+
"name": "KaiPaneGridElement",
|
|
8963
|
+
"description": "",
|
|
8964
|
+
"members": [
|
|
8965
|
+
{
|
|
8966
|
+
"kind": "field",
|
|
8967
|
+
"name": "theme",
|
|
8968
|
+
"type": {
|
|
8969
|
+
"text": "\"light\" | \"dark\" | \"auto\""
|
|
8970
|
+
},
|
|
8971
|
+
"description": "Color mode (`auto` follows prefers-color-scheme).",
|
|
8972
|
+
"privacy": "public"
|
|
8973
|
+
},
|
|
8974
|
+
{
|
|
8975
|
+
"kind": "field",
|
|
8976
|
+
"name": "minPaneWidth",
|
|
8977
|
+
"type": {
|
|
8978
|
+
"text": "undefined | number"
|
|
8979
|
+
},
|
|
8980
|
+
"description": "Minimum width of every pane, in px, before columns drop / the grid scrolls. Defaults to `280`. Attribute: `min-pane-width`.",
|
|
8981
|
+
"privacy": "public"
|
|
8982
|
+
},
|
|
8983
|
+
{
|
|
8984
|
+
"kind": "field",
|
|
8985
|
+
"name": "minPaneHeight",
|
|
8986
|
+
"type": {
|
|
8987
|
+
"text": "undefined | number"
|
|
8988
|
+
},
|
|
8989
|
+
"description": "Minimum height of every pane, in px, before the grid scrolls vertically. Defaults to `200`. Attribute: `min-pane-height`.",
|
|
8990
|
+
"privacy": "public"
|
|
8991
|
+
},
|
|
8992
|
+
{
|
|
8993
|
+
"kind": "field",
|
|
8994
|
+
"name": "maxColumns",
|
|
8995
|
+
"type": {
|
|
8996
|
+
"text": "undefined | number"
|
|
8997
|
+
},
|
|
8998
|
+
"description": "Column cap when the container is wide (default `3`). Attribute: `max-columns`.",
|
|
8999
|
+
"privacy": "public"
|
|
9000
|
+
},
|
|
9001
|
+
{
|
|
9002
|
+
"kind": "field",
|
|
9003
|
+
"name": "gap",
|
|
9004
|
+
"type": {
|
|
9005
|
+
"text": "undefined | string"
|
|
9006
|
+
},
|
|
9007
|
+
"description": "Gap between panes, any CSS length. Defaults to the kit gap (`var(--kai-pane-grid-gap, 0.5rem)`). Attribute: `gap`.",
|
|
9008
|
+
"privacy": "public"
|
|
9009
|
+
},
|
|
9010
|
+
{
|
|
9011
|
+
"kind": "field",
|
|
9012
|
+
"name": "maximizedIndex",
|
|
9013
|
+
"type": {
|
|
9014
|
+
"text": "undefined | number | null"
|
|
9015
|
+
},
|
|
9016
|
+
"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`.",
|
|
9017
|
+
"privacy": "public"
|
|
9018
|
+
}
|
|
9019
|
+
],
|
|
9020
|
+
"attributes": [
|
|
9021
|
+
{
|
|
9022
|
+
"name": "theme",
|
|
9023
|
+
"fieldName": "theme",
|
|
9024
|
+
"type": {
|
|
9025
|
+
"text": "\"light\" | \"dark\" | \"auto\""
|
|
9026
|
+
},
|
|
9027
|
+
"description": "Color mode (`auto` follows prefers-color-scheme)."
|
|
9028
|
+
},
|
|
9029
|
+
{
|
|
9030
|
+
"name": "min-pane-width",
|
|
9031
|
+
"fieldName": "minPaneWidth",
|
|
9032
|
+
"type": {
|
|
9033
|
+
"text": "undefined | number"
|
|
9034
|
+
},
|
|
9035
|
+
"description": "Minimum width of every pane, in px, before columns drop / the grid scrolls. Defaults to `280`. Attribute: `min-pane-width`."
|
|
9036
|
+
},
|
|
9037
|
+
{
|
|
9038
|
+
"name": "min-pane-height",
|
|
9039
|
+
"fieldName": "minPaneHeight",
|
|
9040
|
+
"type": {
|
|
9041
|
+
"text": "undefined | number"
|
|
9042
|
+
},
|
|
9043
|
+
"description": "Minimum height of every pane, in px, before the grid scrolls vertically. Defaults to `200`. Attribute: `min-pane-height`."
|
|
9044
|
+
},
|
|
9045
|
+
{
|
|
9046
|
+
"name": "max-columns",
|
|
9047
|
+
"fieldName": "maxColumns",
|
|
9048
|
+
"type": {
|
|
9049
|
+
"text": "undefined | number"
|
|
9050
|
+
},
|
|
9051
|
+
"description": "Column cap when the container is wide (default `3`). Attribute: `max-columns`."
|
|
9052
|
+
},
|
|
9053
|
+
{
|
|
9054
|
+
"name": "gap",
|
|
9055
|
+
"fieldName": "gap",
|
|
9056
|
+
"type": {
|
|
9057
|
+
"text": "undefined | string"
|
|
9058
|
+
},
|
|
9059
|
+
"description": "Gap between panes, any CSS length. Defaults to the kit gap (`var(--kai-pane-grid-gap, 0.5rem)`). Attribute: `gap`."
|
|
9060
|
+
}
|
|
9061
|
+
],
|
|
9062
|
+
"events": [],
|
|
9063
|
+
"cssProperties": []
|
|
9064
|
+
},
|
|
8387
9065
|
{
|
|
8388
9066
|
"kind": "class",
|
|
8389
9067
|
"customElement": true,
|
|
@@ -9029,7 +9707,7 @@
|
|
|
9029
9707
|
"type": {
|
|
9030
9708
|
"text": "undefined | { id: string; type: \"file\" | \"source-document\"; filename?: undefined | string; mediaType?: undefined | string; url?: undefined | string; title?: undefined | string }[]"
|
|
9031
9709
|
},
|
|
9032
|
-
"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).",
|
|
9710
|
+
"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.)",
|
|
9033
9711
|
"privacy": "public"
|
|
9034
9712
|
},
|
|
9035
9713
|
{
|
|
@@ -9202,7 +9880,7 @@
|
|
|
9202
9880
|
"type": {
|
|
9203
9881
|
"text": "CustomEvent<{ 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 }[] }>"
|
|
9204
9882
|
},
|
|
9205
|
-
"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."
|
|
9883
|
+
"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."
|
|
9206
9884
|
},
|
|
9207
9885
|
{
|
|
9208
9886
|
"name": "kai-suggestion-click",
|
|
@@ -9290,8 +9968,8 @@
|
|
|
9290
9968
|
{
|
|
9291
9969
|
"kind": "class",
|
|
9292
9970
|
"customElement": true,
|
|
9293
|
-
"tagName": "kai-
|
|
9294
|
-
"name": "
|
|
9971
|
+
"tagName": "kai-radio-group",
|
|
9972
|
+
"name": "KaiRadioGroupElement",
|
|
9295
9973
|
"description": "",
|
|
9296
9974
|
"members": [
|
|
9297
9975
|
{
|
|
@@ -9305,98 +9983,63 @@
|
|
|
9305
9983
|
},
|
|
9306
9984
|
{
|
|
9307
9985
|
"kind": "field",
|
|
9308
|
-
"name": "
|
|
9986
|
+
"name": "options",
|
|
9309
9987
|
"type": {
|
|
9310
|
-
"text": "string"
|
|
9988
|
+
"text": "{ value: string; label: string; description?: undefined | string; disabled?: undefined | false | true }[]"
|
|
9311
9989
|
},
|
|
9312
|
-
"description": "The
|
|
9990
|
+
"description": "The choices, top to bottom. Set as a JS PROPERTY (array), never an attribute.",
|
|
9313
9991
|
"privacy": "public"
|
|
9314
9992
|
},
|
|
9315
9993
|
{
|
|
9316
9994
|
"kind": "field",
|
|
9317
|
-
"name": "
|
|
9995
|
+
"name": "value",
|
|
9318
9996
|
"type": {
|
|
9319
9997
|
"text": "undefined | string"
|
|
9320
9998
|
},
|
|
9321
|
-
"description": "
|
|
9322
|
-
"privacy": "public"
|
|
9323
|
-
},
|
|
9324
|
-
{
|
|
9325
|
-
"kind": "field",
|
|
9326
|
-
"name": "open",
|
|
9327
|
-
"type": {
|
|
9328
|
-
"text": "undefined | false | true"
|
|
9329
|
-
},
|
|
9330
|
-
"description": "Drive/observe open state (Shoelace-style: settable + reflected to the `open` attribute; the element still self-manages on trigger click + while streaming). Set `el.open = true`; listen for `kai-open-change`.",
|
|
9331
|
-
"privacy": "public"
|
|
9332
|
-
},
|
|
9333
|
-
{
|
|
9334
|
-
"kind": "field",
|
|
9335
|
-
"name": "defaultOpen",
|
|
9336
|
-
"type": {
|
|
9337
|
-
"text": "undefined | false | true"
|
|
9338
|
-
},
|
|
9339
|
-
"description": "Initial open state on mount (uncontrolled seed).",
|
|
9999
|
+
"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.",
|
|
9340
10000
|
"privacy": "public"
|
|
9341
10001
|
},
|
|
9342
10002
|
{
|
|
9343
10003
|
"kind": "field",
|
|
9344
|
-
"name": "
|
|
10004
|
+
"name": "name",
|
|
9345
10005
|
"type": {
|
|
9346
|
-
"text": "undefined |
|
|
10006
|
+
"text": "undefined | string"
|
|
9347
10007
|
},
|
|
9348
|
-
"description": "
|
|
10008
|
+
"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.",
|
|
9349
10009
|
"privacy": "public"
|
|
9350
10010
|
},
|
|
9351
10011
|
{
|
|
9352
10012
|
"kind": "field",
|
|
9353
|
-
"name": "
|
|
10013
|
+
"name": "disabled",
|
|
9354
10014
|
"type": {
|
|
9355
10015
|
"text": "undefined | false | true"
|
|
9356
10016
|
},
|
|
9357
|
-
"description": "
|
|
10017
|
+
"description": "Disable every row. Individual rows carry their own `disabled`.",
|
|
9358
10018
|
"privacy": "public"
|
|
9359
10019
|
},
|
|
9360
10020
|
{
|
|
9361
10021
|
"kind": "field",
|
|
9362
|
-
"name": "
|
|
10022
|
+
"name": "label",
|
|
9363
10023
|
"type": {
|
|
9364
|
-
"text": "undefined |
|
|
9365
|
-
},
|
|
9366
|
-
"description": "Gate the disclosure trigger: programmatic `show()/hide()/toggle()` still work, but the trigger click no longer toggles.",
|
|
9367
|
-
"privacy": "public"
|
|
9368
|
-
},
|
|
9369
|
-
{
|
|
9370
|
-
"kind": "method",
|
|
9371
|
-
"name": "show",
|
|
9372
|
-
"return": {
|
|
9373
|
-
"type": {
|
|
9374
|
-
"text": "void"
|
|
9375
|
-
}
|
|
10024
|
+
"text": "undefined | string"
|
|
9376
10025
|
},
|
|
9377
|
-
"description": "
|
|
10026
|
+
"description": "Accessible name for the group.",
|
|
9378
10027
|
"privacy": "public"
|
|
9379
10028
|
},
|
|
9380
10029
|
{
|
|
9381
10030
|
"kind": "method",
|
|
9382
|
-
"name": "
|
|
9383
|
-
"
|
|
9384
|
-
|
|
9385
|
-
"
|
|
10031
|
+
"name": "focus",
|
|
10032
|
+
"parameters": [
|
|
10033
|
+
{
|
|
10034
|
+
"name": "options?: FocusOptions"
|
|
9386
10035
|
}
|
|
9387
|
-
|
|
9388
|
-
"description": "Close it programmatically.",
|
|
9389
|
-
"privacy": "public"
|
|
9390
|
-
},
|
|
9391
|
-
{
|
|
9392
|
-
"kind": "method",
|
|
9393
|
-
"name": "toggle",
|
|
10036
|
+
],
|
|
9394
10037
|
"return": {
|
|
9395
10038
|
"type": {
|
|
9396
10039
|
"text": "void"
|
|
9397
10040
|
}
|
|
9398
10041
|
},
|
|
9399
|
-
"description": "
|
|
10042
|
+
"description": "Focus the group's tab stop. That is the selected radio, or the first row when nothing is selected yet.",
|
|
9400
10043
|
"privacy": "public"
|
|
9401
10044
|
}
|
|
9402
10045
|
],
|
|
@@ -9410,8 +10053,174 @@
|
|
|
9410
10053
|
"description": "Color mode (`auto` follows prefers-color-scheme)."
|
|
9411
10054
|
},
|
|
9412
10055
|
{
|
|
9413
|
-
"name": "
|
|
9414
|
-
"fieldName": "
|
|
10056
|
+
"name": "value",
|
|
10057
|
+
"fieldName": "value",
|
|
10058
|
+
"type": {
|
|
10059
|
+
"text": "undefined | string"
|
|
10060
|
+
},
|
|
10061
|
+
"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."
|
|
10062
|
+
},
|
|
10063
|
+
{
|
|
10064
|
+
"name": "name",
|
|
10065
|
+
"fieldName": "name",
|
|
10066
|
+
"type": {
|
|
10067
|
+
"text": "undefined | string"
|
|
10068
|
+
},
|
|
10069
|
+
"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."
|
|
10070
|
+
},
|
|
10071
|
+
{
|
|
10072
|
+
"name": "disabled",
|
|
10073
|
+
"fieldName": "disabled",
|
|
10074
|
+
"type": {
|
|
10075
|
+
"text": "undefined | false | true"
|
|
10076
|
+
},
|
|
10077
|
+
"description": "Disable every row. Individual rows carry their own `disabled`."
|
|
10078
|
+
},
|
|
10079
|
+
{
|
|
10080
|
+
"name": "label",
|
|
10081
|
+
"fieldName": "label",
|
|
10082
|
+
"type": {
|
|
10083
|
+
"text": "undefined | string"
|
|
10084
|
+
},
|
|
10085
|
+
"description": "Accessible name for the group."
|
|
10086
|
+
}
|
|
10087
|
+
],
|
|
10088
|
+
"events": [
|
|
10089
|
+
{
|
|
10090
|
+
"name": "kai-change",
|
|
10091
|
+
"type": {
|
|
10092
|
+
"text": "CustomEvent<{ value: string }>"
|
|
10093
|
+
},
|
|
10094
|
+
"description": "A row was chosen."
|
|
10095
|
+
}
|
|
10096
|
+
],
|
|
10097
|
+
"cssProperties": []
|
|
10098
|
+
},
|
|
10099
|
+
{
|
|
10100
|
+
"kind": "class",
|
|
10101
|
+
"customElement": true,
|
|
10102
|
+
"tagName": "kai-reasoning",
|
|
10103
|
+
"name": "KaiReasoningElement",
|
|
10104
|
+
"description": "",
|
|
10105
|
+
"members": [
|
|
10106
|
+
{
|
|
10107
|
+
"kind": "field",
|
|
10108
|
+
"name": "theme",
|
|
10109
|
+
"type": {
|
|
10110
|
+
"text": "\"light\" | \"dark\" | \"auto\""
|
|
10111
|
+
},
|
|
10112
|
+
"description": "Color mode (`auto` follows prefers-color-scheme).",
|
|
10113
|
+
"privacy": "public"
|
|
10114
|
+
},
|
|
10115
|
+
{
|
|
10116
|
+
"kind": "field",
|
|
10117
|
+
"name": "text",
|
|
10118
|
+
"type": {
|
|
10119
|
+
"text": "string"
|
|
10120
|
+
},
|
|
10121
|
+
"description": "The reasoning text to display.",
|
|
10122
|
+
"privacy": "public"
|
|
10123
|
+
},
|
|
10124
|
+
{
|
|
10125
|
+
"kind": "field",
|
|
10126
|
+
"name": "label",
|
|
10127
|
+
"type": {
|
|
10128
|
+
"text": "undefined | string"
|
|
10129
|
+
},
|
|
10130
|
+
"description": "Trigger label.",
|
|
10131
|
+
"privacy": "public"
|
|
10132
|
+
},
|
|
10133
|
+
{
|
|
10134
|
+
"kind": "field",
|
|
10135
|
+
"name": "open",
|
|
10136
|
+
"type": {
|
|
10137
|
+
"text": "undefined | false | true"
|
|
10138
|
+
},
|
|
10139
|
+
"description": "Drive/observe open state (Shoelace-style: settable + reflected to the `open` attribute; the element still self-manages on trigger click + while streaming). Set `el.open = true`; listen for `kai-open-change`.",
|
|
10140
|
+
"privacy": "public"
|
|
10141
|
+
},
|
|
10142
|
+
{
|
|
10143
|
+
"kind": "field",
|
|
10144
|
+
"name": "defaultOpen",
|
|
10145
|
+
"type": {
|
|
10146
|
+
"text": "undefined | false | true"
|
|
10147
|
+
},
|
|
10148
|
+
"description": "Initial open state on mount (uncontrolled seed).",
|
|
10149
|
+
"privacy": "public"
|
|
10150
|
+
},
|
|
10151
|
+
{
|
|
10152
|
+
"kind": "field",
|
|
10153
|
+
"name": "streaming",
|
|
10154
|
+
"type": {
|
|
10155
|
+
"text": "undefined | false | true"
|
|
10156
|
+
},
|
|
10157
|
+
"description": "While true, auto-expands (and re-collapses when it flips false).",
|
|
10158
|
+
"privacy": "public"
|
|
10159
|
+
},
|
|
10160
|
+
{
|
|
10161
|
+
"kind": "field",
|
|
10162
|
+
"name": "markdown",
|
|
10163
|
+
"type": {
|
|
10164
|
+
"text": "undefined | false | true"
|
|
10165
|
+
},
|
|
10166
|
+
"description": "Render `text` as markdown.",
|
|
10167
|
+
"privacy": "public"
|
|
10168
|
+
},
|
|
10169
|
+
{
|
|
10170
|
+
"kind": "field",
|
|
10171
|
+
"name": "disabled",
|
|
10172
|
+
"type": {
|
|
10173
|
+
"text": "undefined | false | true"
|
|
10174
|
+
},
|
|
10175
|
+
"description": "Gate the disclosure trigger: programmatic `show()/hide()/toggle()` still work, but the trigger click no longer toggles.",
|
|
10176
|
+
"privacy": "public"
|
|
10177
|
+
},
|
|
10178
|
+
{
|
|
10179
|
+
"kind": "method",
|
|
10180
|
+
"name": "show",
|
|
10181
|
+
"return": {
|
|
10182
|
+
"type": {
|
|
10183
|
+
"text": "void"
|
|
10184
|
+
}
|
|
10185
|
+
},
|
|
10186
|
+
"description": "Open it programmatically (no-op while disabled).",
|
|
10187
|
+
"privacy": "public"
|
|
10188
|
+
},
|
|
10189
|
+
{
|
|
10190
|
+
"kind": "method",
|
|
10191
|
+
"name": "hide",
|
|
10192
|
+
"return": {
|
|
10193
|
+
"type": {
|
|
10194
|
+
"text": "void"
|
|
10195
|
+
}
|
|
10196
|
+
},
|
|
10197
|
+
"description": "Close it programmatically.",
|
|
10198
|
+
"privacy": "public"
|
|
10199
|
+
},
|
|
10200
|
+
{
|
|
10201
|
+
"kind": "method",
|
|
10202
|
+
"name": "toggle",
|
|
10203
|
+
"return": {
|
|
10204
|
+
"type": {
|
|
10205
|
+
"text": "void"
|
|
10206
|
+
}
|
|
10207
|
+
},
|
|
10208
|
+
"description": "Flip the open state (closes while disabled).",
|
|
10209
|
+
"privacy": "public"
|
|
10210
|
+
}
|
|
10211
|
+
],
|
|
10212
|
+
"attributes": [
|
|
10213
|
+
{
|
|
10214
|
+
"name": "theme",
|
|
10215
|
+
"fieldName": "theme",
|
|
10216
|
+
"type": {
|
|
10217
|
+
"text": "\"light\" | \"dark\" | \"auto\""
|
|
10218
|
+
},
|
|
10219
|
+
"description": "Color mode (`auto` follows prefers-color-scheme)."
|
|
10220
|
+
},
|
|
10221
|
+
{
|
|
10222
|
+
"name": "text",
|
|
10223
|
+
"fieldName": "text",
|
|
9415
10224
|
"type": {
|
|
9416
10225
|
"text": "string"
|
|
9417
10226
|
},
|
|
@@ -10425,6 +11234,24 @@
|
|
|
10425
11234
|
},
|
|
10426
11235
|
"description": "Button size token. Defaults to `'icon'` (square).",
|
|
10427
11236
|
"privacy": "public"
|
|
11237
|
+
},
|
|
11238
|
+
{
|
|
11239
|
+
"kind": "field",
|
|
11240
|
+
"name": "label",
|
|
11241
|
+
"type": {
|
|
11242
|
+
"text": "undefined | string"
|
|
11243
|
+
},
|
|
11244
|
+
"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'`.",
|
|
11245
|
+
"privacy": "public"
|
|
11246
|
+
},
|
|
11247
|
+
{
|
|
11248
|
+
"kind": "field",
|
|
11249
|
+
"name": "showLabel",
|
|
11250
|
+
"type": {
|
|
11251
|
+
"text": "undefined | false | true"
|
|
11252
|
+
},
|
|
11253
|
+
"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.",
|
|
11254
|
+
"privacy": "public"
|
|
10428
11255
|
}
|
|
10429
11256
|
],
|
|
10430
11257
|
"attributes": [
|
|
@@ -10459,6 +11286,22 @@
|
|
|
10459
11286
|
"text": "undefined | \"sm\" | \"md\" | \"lg\" | \"icon\" | \"icon-sm\""
|
|
10460
11287
|
},
|
|
10461
11288
|
"description": "Button size token. Defaults to `'icon'` (square)."
|
|
11289
|
+
},
|
|
11290
|
+
{
|
|
11291
|
+
"name": "label",
|
|
11292
|
+
"fieldName": "label",
|
|
11293
|
+
"type": {
|
|
11294
|
+
"text": "undefined | string"
|
|
11295
|
+
},
|
|
11296
|
+
"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'`."
|
|
11297
|
+
},
|
|
11298
|
+
{
|
|
11299
|
+
"name": "show-label",
|
|
11300
|
+
"fieldName": "showLabel",
|
|
11301
|
+
"type": {
|
|
11302
|
+
"text": "undefined | false | true"
|
|
11303
|
+
},
|
|
11304
|
+
"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."
|
|
10462
11305
|
}
|
|
10463
11306
|
],
|
|
10464
11307
|
"events": [
|
|
@@ -10761,8 +11604,8 @@
|
|
|
10761
11604
|
{
|
|
10762
11605
|
"kind": "class",
|
|
10763
11606
|
"customElement": true,
|
|
10764
|
-
"tagName": "kai-
|
|
10765
|
-
"name": "
|
|
11607
|
+
"tagName": "kai-select",
|
|
11608
|
+
"name": "KaiSelectElement",
|
|
10766
11609
|
"description": "",
|
|
10767
11610
|
"members": [
|
|
10768
11611
|
{
|
|
@@ -10776,81 +11619,280 @@
|
|
|
10776
11619
|
},
|
|
10777
11620
|
{
|
|
10778
11621
|
"kind": "field",
|
|
10779
|
-
"name": "
|
|
11622
|
+
"name": "options",
|
|
10780
11623
|
"type": {
|
|
10781
|
-
"text": "undefined |
|
|
11624
|
+
"text": "{ value: string; label?: undefined | string; disabled?: undefined | false | true }[]"
|
|
10782
11625
|
},
|
|
10783
|
-
"description": "
|
|
11626
|
+
"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.",
|
|
10784
11627
|
"privacy": "public"
|
|
10785
|
-
}
|
|
10786
|
-
],
|
|
10787
|
-
"attributes": [
|
|
11628
|
+
},
|
|
10788
11629
|
{
|
|
10789
|
-
"
|
|
10790
|
-
"
|
|
11630
|
+
"kind": "field",
|
|
11631
|
+
"name": "value",
|
|
10791
11632
|
"type": {
|
|
10792
|
-
"text": "
|
|
11633
|
+
"text": "undefined | string"
|
|
10793
11634
|
},
|
|
10794
|
-
"description": "
|
|
11635
|
+
"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.",
|
|
11636
|
+
"privacy": "public"
|
|
10795
11637
|
},
|
|
10796
11638
|
{
|
|
10797
|
-
"
|
|
10798
|
-
"
|
|
11639
|
+
"kind": "field",
|
|
11640
|
+
"name": "placeholder",
|
|
10799
11641
|
"type": {
|
|
10800
|
-
"text": "undefined |
|
|
11642
|
+
"text": "undefined | string"
|
|
10801
11643
|
},
|
|
10802
|
-
"description": "
|
|
10803
|
-
|
|
10804
|
-
|
|
10805
|
-
"events": [],
|
|
10806
|
-
"cssProperties": [],
|
|
10807
|
-
"cssParts": [
|
|
10808
|
-
{
|
|
10809
|
-
"name": "separator",
|
|
10810
|
-
"description": "The divider line. Restyle its color, thickness, or inset from outside.",
|
|
10811
|
-
"recipe": "kai-separator::part(separator) { background: var(--color-border) }"
|
|
10812
|
-
}
|
|
10813
|
-
]
|
|
10814
|
-
},
|
|
10815
|
-
{
|
|
10816
|
-
"kind": "class",
|
|
10817
|
-
"customElement": true,
|
|
10818
|
-
"tagName": "kai-setting-item",
|
|
10819
|
-
"name": "KaiSettingItemElement",
|
|
10820
|
-
"description": "",
|
|
10821
|
-
"members": [
|
|
11644
|
+
"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.",
|
|
11645
|
+
"privacy": "public"
|
|
11646
|
+
},
|
|
10822
11647
|
{
|
|
10823
11648
|
"kind": "field",
|
|
10824
|
-
"name": "
|
|
11649
|
+
"name": "multiple",
|
|
10825
11650
|
"type": {
|
|
10826
|
-
"text": "
|
|
11651
|
+
"text": "undefined | false | true"
|
|
10827
11652
|
},
|
|
10828
|
-
"description": "
|
|
11653
|
+
"description": "Allow more than one selection. Turns the control into the platform's list box, so the kit's chevron is not drawn.",
|
|
10829
11654
|
"privacy": "public"
|
|
10830
11655
|
},
|
|
10831
11656
|
{
|
|
10832
11657
|
"kind": "field",
|
|
10833
|
-
"name": "
|
|
11658
|
+
"name": "invalid",
|
|
10834
11659
|
"type": {
|
|
10835
|
-
"text": "undefined |
|
|
11660
|
+
"text": "undefined | false | true"
|
|
10836
11661
|
},
|
|
10837
|
-
"description": "
|
|
11662
|
+
"description": "Force the invalid (destructive-border) state.",
|
|
10838
11663
|
"privacy": "public"
|
|
10839
11664
|
},
|
|
10840
11665
|
{
|
|
10841
11666
|
"kind": "field",
|
|
10842
|
-
"name": "
|
|
11667
|
+
"name": "disabled",
|
|
10843
11668
|
"type": {
|
|
10844
|
-
"text": "undefined |
|
|
11669
|
+
"text": "undefined | false | true"
|
|
10845
11670
|
},
|
|
10846
|
-
"description": "
|
|
11671
|
+
"description": "Disable interaction.",
|
|
10847
11672
|
"privacy": "public"
|
|
10848
|
-
}
|
|
10849
|
-
],
|
|
10850
|
-
"attributes": [
|
|
11673
|
+
},
|
|
10851
11674
|
{
|
|
10852
|
-
"
|
|
10853
|
-
"
|
|
11675
|
+
"kind": "field",
|
|
11676
|
+
"name": "required",
|
|
11677
|
+
"type": {
|
|
11678
|
+
"text": "undefined | false | true"
|
|
11679
|
+
},
|
|
11680
|
+
"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.",
|
|
11681
|
+
"privacy": "public"
|
|
11682
|
+
},
|
|
11683
|
+
{
|
|
11684
|
+
"kind": "field",
|
|
11685
|
+
"name": "label",
|
|
11686
|
+
"type": {
|
|
11687
|
+
"text": "undefined | string"
|
|
11688
|
+
},
|
|
11689
|
+
"description": "Accessible label for the control.",
|
|
11690
|
+
"privacy": "public"
|
|
11691
|
+
},
|
|
11692
|
+
{
|
|
11693
|
+
"kind": "field",
|
|
11694
|
+
"name": "name",
|
|
11695
|
+
"type": {
|
|
11696
|
+
"text": "undefined | string"
|
|
11697
|
+
},
|
|
11698
|
+
"description": "Form-control name, for a native form submit.",
|
|
11699
|
+
"privacy": "public"
|
|
11700
|
+
},
|
|
11701
|
+
{
|
|
11702
|
+
"kind": "method",
|
|
11703
|
+
"name": "focus",
|
|
11704
|
+
"parameters": [
|
|
11705
|
+
{
|
|
11706
|
+
"name": "options?: FocusOptions"
|
|
11707
|
+
}
|
|
11708
|
+
],
|
|
11709
|
+
"return": {
|
|
11710
|
+
"type": {
|
|
11711
|
+
"text": "void"
|
|
11712
|
+
}
|
|
11713
|
+
},
|
|
11714
|
+
"description": "Focus the inner select (the host element can't reach it).",
|
|
11715
|
+
"privacy": "public"
|
|
11716
|
+
}
|
|
11717
|
+
],
|
|
11718
|
+
"attributes": [
|
|
11719
|
+
{
|
|
11720
|
+
"name": "theme",
|
|
11721
|
+
"fieldName": "theme",
|
|
11722
|
+
"type": {
|
|
11723
|
+
"text": "\"light\" | \"dark\" | \"auto\""
|
|
11724
|
+
},
|
|
11725
|
+
"description": "Color mode (`auto` follows prefers-color-scheme)."
|
|
11726
|
+
},
|
|
11727
|
+
{
|
|
11728
|
+
"name": "value",
|
|
11729
|
+
"fieldName": "value",
|
|
11730
|
+
"type": {
|
|
11731
|
+
"text": "undefined | string"
|
|
11732
|
+
},
|
|
11733
|
+
"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."
|
|
11734
|
+
},
|
|
11735
|
+
{
|
|
11736
|
+
"name": "placeholder",
|
|
11737
|
+
"fieldName": "placeholder",
|
|
11738
|
+
"type": {
|
|
11739
|
+
"text": "undefined | string"
|
|
11740
|
+
},
|
|
11741
|
+
"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."
|
|
11742
|
+
},
|
|
11743
|
+
{
|
|
11744
|
+
"name": "multiple",
|
|
11745
|
+
"fieldName": "multiple",
|
|
11746
|
+
"type": {
|
|
11747
|
+
"text": "undefined | false | true"
|
|
11748
|
+
},
|
|
11749
|
+
"description": "Allow more than one selection. Turns the control into the platform's list box, so the kit's chevron is not drawn."
|
|
11750
|
+
},
|
|
11751
|
+
{
|
|
11752
|
+
"name": "invalid",
|
|
11753
|
+
"fieldName": "invalid",
|
|
11754
|
+
"type": {
|
|
11755
|
+
"text": "undefined | false | true"
|
|
11756
|
+
},
|
|
11757
|
+
"description": "Force the invalid (destructive-border) state."
|
|
11758
|
+
},
|
|
11759
|
+
{
|
|
11760
|
+
"name": "disabled",
|
|
11761
|
+
"fieldName": "disabled",
|
|
11762
|
+
"type": {
|
|
11763
|
+
"text": "undefined | false | true"
|
|
11764
|
+
},
|
|
11765
|
+
"description": "Disable interaction."
|
|
11766
|
+
},
|
|
11767
|
+
{
|
|
11768
|
+
"name": "required",
|
|
11769
|
+
"fieldName": "required",
|
|
11770
|
+
"type": {
|
|
11771
|
+
"text": "undefined | false | true"
|
|
11772
|
+
},
|
|
11773
|
+
"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."
|
|
11774
|
+
},
|
|
11775
|
+
{
|
|
11776
|
+
"name": "label",
|
|
11777
|
+
"fieldName": "label",
|
|
11778
|
+
"type": {
|
|
11779
|
+
"text": "undefined | string"
|
|
11780
|
+
},
|
|
11781
|
+
"description": "Accessible label for the control."
|
|
11782
|
+
},
|
|
11783
|
+
{
|
|
11784
|
+
"name": "name",
|
|
11785
|
+
"fieldName": "name",
|
|
11786
|
+
"type": {
|
|
11787
|
+
"text": "undefined | string"
|
|
11788
|
+
},
|
|
11789
|
+
"description": "Form-control name, for a native form submit."
|
|
11790
|
+
}
|
|
11791
|
+
],
|
|
11792
|
+
"events": [
|
|
11793
|
+
{
|
|
11794
|
+
"name": "kai-change",
|
|
11795
|
+
"type": {
|
|
11796
|
+
"text": "CustomEvent<{ value: string; values: string[] }>"
|
|
11797
|
+
},
|
|
11798
|
+
"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."
|
|
11799
|
+
}
|
|
11800
|
+
],
|
|
11801
|
+
"cssProperties": []
|
|
11802
|
+
},
|
|
11803
|
+
{
|
|
11804
|
+
"kind": "class",
|
|
11805
|
+
"customElement": true,
|
|
11806
|
+
"tagName": "kai-separator",
|
|
11807
|
+
"name": "KaiSeparatorElement",
|
|
11808
|
+
"description": "",
|
|
11809
|
+
"members": [
|
|
11810
|
+
{
|
|
11811
|
+
"kind": "field",
|
|
11812
|
+
"name": "theme",
|
|
11813
|
+
"type": {
|
|
11814
|
+
"text": "\"light\" | \"dark\" | \"auto\""
|
|
11815
|
+
},
|
|
11816
|
+
"description": "Color mode (`auto` follows prefers-color-scheme).",
|
|
11817
|
+
"privacy": "public"
|
|
11818
|
+
},
|
|
11819
|
+
{
|
|
11820
|
+
"kind": "field",
|
|
11821
|
+
"name": "orientation",
|
|
11822
|
+
"type": {
|
|
11823
|
+
"text": "undefined | \"horizontal\" | \"vertical\""
|
|
11824
|
+
},
|
|
11825
|
+
"description": "`horizontal` (default, block + full-width) or `vertical` (a rule inside a flex/grid row, stretching to the row height).",
|
|
11826
|
+
"privacy": "public"
|
|
11827
|
+
}
|
|
11828
|
+
],
|
|
11829
|
+
"attributes": [
|
|
11830
|
+
{
|
|
11831
|
+
"name": "theme",
|
|
11832
|
+
"fieldName": "theme",
|
|
11833
|
+
"type": {
|
|
11834
|
+
"text": "\"light\" | \"dark\" | \"auto\""
|
|
11835
|
+
},
|
|
11836
|
+
"description": "Color mode (`auto` follows prefers-color-scheme)."
|
|
11837
|
+
},
|
|
11838
|
+
{
|
|
11839
|
+
"name": "orientation",
|
|
11840
|
+
"fieldName": "orientation",
|
|
11841
|
+
"type": {
|
|
11842
|
+
"text": "undefined | \"horizontal\" | \"vertical\""
|
|
11843
|
+
},
|
|
11844
|
+
"description": "`horizontal` (default, block + full-width) or `vertical` (a rule inside a flex/grid row, stretching to the row height)."
|
|
11845
|
+
}
|
|
11846
|
+
],
|
|
11847
|
+
"events": [],
|
|
11848
|
+
"cssProperties": [],
|
|
11849
|
+
"cssParts": [
|
|
11850
|
+
{
|
|
11851
|
+
"name": "separator",
|
|
11852
|
+
"description": "The divider line. Restyle its color, thickness, or inset from outside.",
|
|
11853
|
+
"recipe": "kai-separator::part(separator) { background: var(--color-border) }"
|
|
11854
|
+
}
|
|
11855
|
+
]
|
|
11856
|
+
},
|
|
11857
|
+
{
|
|
11858
|
+
"kind": "class",
|
|
11859
|
+
"customElement": true,
|
|
11860
|
+
"tagName": "kai-setting-item",
|
|
11861
|
+
"name": "KaiSettingItemElement",
|
|
11862
|
+
"description": "",
|
|
11863
|
+
"members": [
|
|
11864
|
+
{
|
|
11865
|
+
"kind": "field",
|
|
11866
|
+
"name": "theme",
|
|
11867
|
+
"type": {
|
|
11868
|
+
"text": "\"light\" | \"dark\" | \"auto\""
|
|
11869
|
+
},
|
|
11870
|
+
"description": "Color mode (`auto` follows prefers-color-scheme).",
|
|
11871
|
+
"privacy": "public"
|
|
11872
|
+
},
|
|
11873
|
+
{
|
|
11874
|
+
"kind": "field",
|
|
11875
|
+
"name": "label",
|
|
11876
|
+
"type": {
|
|
11877
|
+
"text": "undefined | string"
|
|
11878
|
+
},
|
|
11879
|
+
"description": "Row label (primary text). Attribute: `label`.",
|
|
11880
|
+
"privacy": "public"
|
|
11881
|
+
},
|
|
11882
|
+
{
|
|
11883
|
+
"kind": "field",
|
|
11884
|
+
"name": "description",
|
|
11885
|
+
"type": {
|
|
11886
|
+
"text": "undefined | string"
|
|
11887
|
+
},
|
|
11888
|
+
"description": "Optional secondary description under the label. Attribute: `description`.",
|
|
11889
|
+
"privacy": "public"
|
|
11890
|
+
}
|
|
11891
|
+
],
|
|
11892
|
+
"attributes": [
|
|
11893
|
+
{
|
|
11894
|
+
"name": "theme",
|
|
11895
|
+
"fieldName": "theme",
|
|
10854
11896
|
"type": {
|
|
10855
11897
|
"text": "\"light\" | \"dark\" | \"auto\""
|
|
10856
11898
|
},
|
|
@@ -11131,6 +12173,195 @@
|
|
|
11131
12173
|
}
|
|
11132
12174
|
]
|
|
11133
12175
|
},
|
|
12176
|
+
{
|
|
12177
|
+
"kind": "class",
|
|
12178
|
+
"customElement": true,
|
|
12179
|
+
"tagName": "kai-slider",
|
|
12180
|
+
"name": "KaiSliderElement",
|
|
12181
|
+
"description": "",
|
|
12182
|
+
"members": [
|
|
12183
|
+
{
|
|
12184
|
+
"kind": "field",
|
|
12185
|
+
"name": "theme",
|
|
12186
|
+
"type": {
|
|
12187
|
+
"text": "\"light\" | \"dark\" | \"auto\""
|
|
12188
|
+
},
|
|
12189
|
+
"description": "Color mode (`auto` follows prefers-color-scheme).",
|
|
12190
|
+
"privacy": "public"
|
|
12191
|
+
},
|
|
12192
|
+
{
|
|
12193
|
+
"kind": "field",
|
|
12194
|
+
"name": "min",
|
|
12195
|
+
"type": {
|
|
12196
|
+
"text": "undefined | number"
|
|
12197
|
+
},
|
|
12198
|
+
"description": "Lowest selectable value. Required: a range with no bounds is a guess, and the guess belongs to whoever knows what the number means.",
|
|
12199
|
+
"privacy": "public"
|
|
12200
|
+
},
|
|
12201
|
+
{
|
|
12202
|
+
"kind": "field",
|
|
12203
|
+
"name": "max",
|
|
12204
|
+
"type": {
|
|
12205
|
+
"text": "undefined | number"
|
|
12206
|
+
},
|
|
12207
|
+
"description": "Highest selectable value. Required, for the same reason as `min`.",
|
|
12208
|
+
"privacy": "public"
|
|
12209
|
+
},
|
|
12210
|
+
{
|
|
12211
|
+
"kind": "field",
|
|
12212
|
+
"name": "step",
|
|
12213
|
+
"type": {
|
|
12214
|
+
"text": "undefined | number | \"any\""
|
|
12215
|
+
},
|
|
12216
|
+
"description": "Granularity. Omitted means the native default of 1; `any` means continuous.",
|
|
12217
|
+
"privacy": "public"
|
|
12218
|
+
},
|
|
12219
|
+
{
|
|
12220
|
+
"kind": "field",
|
|
12221
|
+
"name": "value",
|
|
12222
|
+
"type": {
|
|
12223
|
+
"text": "undefined | number"
|
|
12224
|
+
},
|
|
12225
|
+
"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.",
|
|
12226
|
+
"privacy": "public"
|
|
12227
|
+
},
|
|
12228
|
+
{
|
|
12229
|
+
"kind": "field",
|
|
12230
|
+
"name": "disabled",
|
|
12231
|
+
"type": {
|
|
12232
|
+
"text": "undefined | false | true"
|
|
12233
|
+
},
|
|
12234
|
+
"description": "Disable interaction.",
|
|
12235
|
+
"privacy": "public"
|
|
12236
|
+
},
|
|
12237
|
+
{
|
|
12238
|
+
"kind": "field",
|
|
12239
|
+
"name": "label",
|
|
12240
|
+
"type": {
|
|
12241
|
+
"text": "undefined | string"
|
|
12242
|
+
},
|
|
12243
|
+
"description": "Accessible label for the slider.",
|
|
12244
|
+
"privacy": "public"
|
|
12245
|
+
},
|
|
12246
|
+
{
|
|
12247
|
+
"kind": "field",
|
|
12248
|
+
"name": "name",
|
|
12249
|
+
"type": {
|
|
12250
|
+
"text": "undefined | string"
|
|
12251
|
+
},
|
|
12252
|
+
"description": "Form-control name, for a native form submit.",
|
|
12253
|
+
"privacy": "public"
|
|
12254
|
+
},
|
|
12255
|
+
{
|
|
12256
|
+
"kind": "field",
|
|
12257
|
+
"name": "valueLabel",
|
|
12258
|
+
"type": {
|
|
12259
|
+
"text": "undefined | false | true | ((value: number) => string)"
|
|
12260
|
+
},
|
|
12261
|
+
"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.",
|
|
12262
|
+
"privacy": "public"
|
|
12263
|
+
},
|
|
12264
|
+
{
|
|
12265
|
+
"kind": "method",
|
|
12266
|
+
"name": "focus",
|
|
12267
|
+
"parameters": [
|
|
12268
|
+
{
|
|
12269
|
+
"name": "options?: FocusOptions"
|
|
12270
|
+
}
|
|
12271
|
+
],
|
|
12272
|
+
"return": {
|
|
12273
|
+
"type": {
|
|
12274
|
+
"text": "void"
|
|
12275
|
+
}
|
|
12276
|
+
},
|
|
12277
|
+
"description": "Focus the inner range input (the host element can't reach it).",
|
|
12278
|
+
"privacy": "public"
|
|
12279
|
+
}
|
|
12280
|
+
],
|
|
12281
|
+
"attributes": [
|
|
12282
|
+
{
|
|
12283
|
+
"name": "theme",
|
|
12284
|
+
"fieldName": "theme",
|
|
12285
|
+
"type": {
|
|
12286
|
+
"text": "\"light\" | \"dark\" | \"auto\""
|
|
12287
|
+
},
|
|
12288
|
+
"description": "Color mode (`auto` follows prefers-color-scheme)."
|
|
12289
|
+
},
|
|
12290
|
+
{
|
|
12291
|
+
"name": "min",
|
|
12292
|
+
"fieldName": "min",
|
|
12293
|
+
"type": {
|
|
12294
|
+
"text": "undefined | number"
|
|
12295
|
+
},
|
|
12296
|
+
"description": "Lowest selectable value. Required: a range with no bounds is a guess, and the guess belongs to whoever knows what the number means."
|
|
12297
|
+
},
|
|
12298
|
+
{
|
|
12299
|
+
"name": "max",
|
|
12300
|
+
"fieldName": "max",
|
|
12301
|
+
"type": {
|
|
12302
|
+
"text": "undefined | number"
|
|
12303
|
+
},
|
|
12304
|
+
"description": "Highest selectable value. Required, for the same reason as `min`."
|
|
12305
|
+
},
|
|
12306
|
+
{
|
|
12307
|
+
"name": "step",
|
|
12308
|
+
"fieldName": "step",
|
|
12309
|
+
"type": {
|
|
12310
|
+
"text": "undefined | number | \"any\""
|
|
12311
|
+
},
|
|
12312
|
+
"description": "Granularity. Omitted means the native default of 1; `any` means continuous."
|
|
12313
|
+
},
|
|
12314
|
+
{
|
|
12315
|
+
"name": "value",
|
|
12316
|
+
"fieldName": "value",
|
|
12317
|
+
"type": {
|
|
12318
|
+
"text": "undefined | number"
|
|
12319
|
+
},
|
|
12320
|
+
"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."
|
|
12321
|
+
},
|
|
12322
|
+
{
|
|
12323
|
+
"name": "disabled",
|
|
12324
|
+
"fieldName": "disabled",
|
|
12325
|
+
"type": {
|
|
12326
|
+
"text": "undefined | false | true"
|
|
12327
|
+
},
|
|
12328
|
+
"description": "Disable interaction."
|
|
12329
|
+
},
|
|
12330
|
+
{
|
|
12331
|
+
"name": "label",
|
|
12332
|
+
"fieldName": "label",
|
|
12333
|
+
"type": {
|
|
12334
|
+
"text": "undefined | string"
|
|
12335
|
+
},
|
|
12336
|
+
"description": "Accessible label for the slider."
|
|
12337
|
+
},
|
|
12338
|
+
{
|
|
12339
|
+
"name": "name",
|
|
12340
|
+
"fieldName": "name",
|
|
12341
|
+
"type": {
|
|
12342
|
+
"text": "undefined | string"
|
|
12343
|
+
},
|
|
12344
|
+
"description": "Form-control name, for a native form submit."
|
|
12345
|
+
}
|
|
12346
|
+
],
|
|
12347
|
+
"events": [
|
|
12348
|
+
{
|
|
12349
|
+
"name": "kai-change",
|
|
12350
|
+
"type": {
|
|
12351
|
+
"text": "CustomEvent<{ value: number }>"
|
|
12352
|
+
},
|
|
12353
|
+
"description": "The value was committed: pointer released, or a key press finished."
|
|
12354
|
+
},
|
|
12355
|
+
{
|
|
12356
|
+
"name": "kai-input",
|
|
12357
|
+
"type": {
|
|
12358
|
+
"text": "CustomEvent<{ value: number }>"
|
|
12359
|
+
},
|
|
12360
|
+
"description": "The thumb moved. Fires per step during a drag or a key press."
|
|
12361
|
+
}
|
|
12362
|
+
],
|
|
12363
|
+
"cssProperties": []
|
|
12364
|
+
},
|
|
11134
12365
|
{
|
|
11135
12366
|
"kind": "class",
|
|
11136
12367
|
"customElement": true,
|
|
@@ -12571,7 +13802,7 @@
|
|
|
12571
13802
|
"type": {
|
|
12572
13803
|
"text": "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 }[]"
|
|
12573
13804
|
},
|
|
12574
|
-
"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.",
|
|
13805
|
+
"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.",
|
|
12575
13806
|
"privacy": "public"
|
|
12576
13807
|
},
|
|
12577
13808
|
{
|
|
@@ -13057,7 +14288,7 @@
|
|
|
13057
14288
|
"kind": "field",
|
|
13058
14289
|
"name": "transcribe",
|
|
13059
14290
|
"type": {
|
|
13060
|
-
"text": "undefined | (audio: Blob) => Promise<string>"
|
|
14291
|
+
"text": "undefined | ((audio: Blob) => Promise<string>)"
|
|
13061
14292
|
},
|
|
13062
14293
|
"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.",
|
|
13063
14294
|
"privacy": "public"
|
|
@@ -13223,7 +14454,7 @@
|
|
|
13223
14454
|
"kind": "field",
|
|
13224
14455
|
"name": "synthesize",
|
|
13225
14456
|
"type": {
|
|
13226
|
-
"text": "undefined | (text: string) => Promise<Blob>"
|
|
14457
|
+
"text": "undefined | ((text: string) => Promise<Blob>)"
|
|
13227
14458
|
},
|
|
13228
14459
|
"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.",
|
|
13229
14460
|
"privacy": "public"
|