@kitn.ai/ui 0.17.0 → 0.18.1
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 +28 -5
- package/dist/components/artifact.d.ts +39 -1
- package/dist/components/attachment-types.d.ts +12 -0
- package/dist/components/attachments.d.ts +2 -10
- package/dist/components/card.d.ts +27 -0
- package/dist/components/chain-of-thought.d.ts +78 -2
- package/dist/components/chat-scope-picker.d.ts +7 -0
- package/dist/components/chat-thread.d.ts +37 -12
- package/dist/components/choice-card.d.ts +26 -0
- package/dist/components/coachmark.d.ts +49 -0
- package/dist/components/composer-dom.d.ts +35 -0
- package/dist/components/composer-highlight.d.ts +48 -0
- package/dist/components/composer-history.d.ts +34 -0
- package/dist/components/composer.d.ts +86 -0
- package/dist/components/confirm-card.d.ts +17 -0
- package/dist/components/conversation-item.d.ts +9 -0
- package/dist/components/conversation-list.d.ts +36 -1
- package/dist/components/file-tree.d.ts +15 -0
- package/dist/components/form.d.ts +34 -0
- package/dist/components/markdown.d.ts +3 -0
- package/dist/components/message.d.ts +12 -0
- package/dist/components/model-switcher.d.ts +7 -0
- package/dist/components/prompt-input.d.ts +13 -4
- package/dist/components/prompt-suggestion.d.ts +9 -1
- package/dist/components/reasoning.d.ts +14 -1
- package/dist/components/response-compare.d.ts +14 -0
- package/dist/components/screen.d.ts +46 -0
- package/dist/components/tasks-card.d.ts +49 -1
- package/dist/components/toast.d.ts +12 -2
- package/dist/components/tool-types.d.ts +10 -0
- package/dist/components/tool.d.ts +8 -8
- package/dist/components/voice-input.d.ts +27 -0
- package/dist/components/voice-output.d.ts +33 -0
- package/dist/core-C8fzo39E.js +12 -0
- package/dist/custom-elements.json +8392 -1860
- package/dist/elements/agent-card.d.ts +1 -0
- package/dist/elements/agent-card.js +1 -0
- package/dist/elements/artifact.js +1 -1
- package/dist/elements/attachments.js +1 -1
- package/dist/elements/autoloader.js +1 -1
- package/dist/elements/avatar.d.ts +1 -0
- package/dist/elements/avatar.js +1 -0
- package/dist/elements/badge.d.ts +1 -0
- package/dist/elements/badge.js +1 -0
- package/dist/elements/button.d.ts +1 -0
- package/dist/elements/button.js +1 -0
- package/dist/elements/card.js +1 -1
- package/dist/elements/cards.js +1 -1
- package/dist/elements/chain-of-thought.js +1 -1
- package/dist/elements/chat-scope-picker.js +1 -1
- package/dist/elements/chat-types.d.ts +47 -0
- package/dist/elements/chat-workspace.js +1 -1
- package/dist/elements/chat.js +1 -1
- package/dist/elements/checkpoint.js +1 -1
- package/dist/elements/choice.js +1 -1
- package/dist/elements/chunks/Icon-C2LTALdM.js +1 -0
- package/dist/elements/chunks/action-icons-Dtl8Ox5D.js +1 -0
- package/dist/elements/chunks/arrow-left-GbBceGBE.js +1 -0
- package/dist/elements/chunks/attachments-DLJcWCDV.js +1 -0
- package/dist/elements/chunks/badge-BTNZTODL.js +1 -0
- package/dist/elements/chunks/button-DBDZebGr.js +1 -0
- package/dist/elements/chunks/card-YfCyI4fH.js +1 -0
- package/dist/elements/chunks/chat-thread-Dz2qbzvI.js +1 -0
- package/dist/elements/chunks/check-fhmRksq_.js +1 -0
- package/dist/elements/chunks/chevron-down-DcRg1aRU.js +1 -0
- package/dist/elements/chunks/chevron-right-ChzBcNJ-.js +1 -0
- package/dist/elements/chunks/circle-B4fTe9v6.js +1 -0
- package/dist/elements/chunks/circle-check-CJV-3Rem.js +1 -0
- package/dist/elements/chunks/circle-x-pDtzlghQ.js +1 -0
- package/dist/elements/chunks/cn-CU7UAWzk.js +1 -0
- package/dist/elements/chunks/code-block-DZ6mz6vs.js +1 -0
- package/dist/elements/chunks/collapsible-CWUAShMC.js +1 -0
- package/dist/elements/chunks/composer-BZyPU6gD.js +65 -0
- package/dist/elements/chunks/context-Cx6eQA_G.js +1 -0
- package/dist/elements/chunks/conversation-list-C4xTQSpT.js +1 -0
- package/dist/elements/chunks/default-input-BZcwyKcP.js +1 -0
- package/dist/elements/chunks/define-CNSKFZCd.js +1 -0
- package/dist/elements/chunks/disclosure-BcBs--Jf.js +1 -0
- package/dist/elements/chunks/download-BDQwcFav.js +1 -0
- package/dist/elements/chunks/dropdown-wgs8xCJZ.js +1 -0
- package/dist/elements/chunks/ellipsis-CUiEJ6R1.js +1 -0
- package/dist/elements/chunks/external-link-DJUmC7g2.js +1 -0
- package/dist/elements/chunks/file-text-DOYfYvrh.js +1 -0
- package/dist/elements/chunks/file-tree-DQzNQrbr.js +1 -0
- package/dist/elements/chunks/folder-DBDUBANz.js +1 -0
- package/dist/elements/chunks/hover-card-BQGdGAQ3.js +1 -0
- package/dist/elements/chunks/icon-CAyRqVrg.js +1 -0
- package/dist/elements/chunks/{index-CTBEJeo6.js → index-BCRhi84a.js} +1 -1
- package/dist/elements/chunks/info-DBQl-m6e.js +1 -0
- package/dist/elements/chunks/input-DZD67EvW.js +1 -0
- package/dist/elements/chunks/kbd-DbyVrlnU.js +1 -0
- package/dist/elements/chunks/link-vko7AttA.js +1 -0
- package/dist/elements/chunks/loader-Cg6rO8tQ.js +1 -0
- package/dist/elements/chunks/{markdown-CMTGx9r8.js → markdown-n3Xbj3PR.js} +9 -9
- package/dist/elements/chunks/message-CgKytiSB.js +1 -0
- package/dist/elements/chunks/message-feedback-Ds3-US0e.js +1 -0
- package/dist/elements/chunks/message-square-MmRkvc-M.js +1 -0
- package/dist/elements/chunks/minimize-2-3kCdE0q3.js +1 -0
- package/dist/elements/chunks/model-switcher-BMtXGwLU.js +1 -0
- package/dist/elements/chunks/overlay-B1-MBI6h.js +1 -0
- package/dist/elements/chunks/paperclip-DDEfmkHc.js +1 -0
- package/dist/elements/chunks/progress-bar-Dwbiyv3s.js +1 -0
- package/dist/elements/chunks/prompt-suggestion-9lvgFcEa.js +1 -0
- package/dist/elements/chunks/reasoning-DzHWsdAJ.js +1 -0
- package/dist/elements/chunks/resizable-Bq_eHxUm.js +1 -0
- package/dist/elements/chunks/rotate-cw-jpisOdOV.js +1 -0
- package/dist/elements/chunks/scroll-area-g5Ze3K6f.js +1 -0
- package/dist/elements/chunks/separator-Bmjc5XyX.js +1 -0
- package/dist/elements/chunks/settings-Cz1bMJP9.js +1 -0
- package/dist/elements/chunks/settings-group-9imY3kRA.js +1 -0
- package/dist/elements/chunks/share-BdenF0wQ.js +1 -0
- package/dist/elements/chunks/skeleton-Pjc5jiaY.js +1 -0
- package/dist/elements/chunks/slots-DkZ-Cmha.js +1 -0
- package/dist/elements/chunks/star-DY6z1UUH.js +1 -0
- package/dist/elements/chunks/store-th4VyJXM.js +1 -0
- package/dist/elements/chunks/text-shimmer-CEi-tlXr.js +1 -0
- package/dist/elements/chunks/textarea-CboigarR.js +1 -0
- package/dist/elements/chunks/thumbs-up-BR33KLfA.js +1 -0
- package/dist/elements/chunks/toast-store-BEMda0fv.js +1 -0
- package/dist/elements/chunks/tool-TMued3WO.js +1 -0
- package/dist/elements/chunks/tooltip-Cft_Rxiw.js +1 -0
- package/dist/elements/chunks/triangle-alert-B07fX3Q8.js +1 -0
- package/dist/elements/chunks/use-card-resolution-M36zVciB.js +1 -0
- package/dist/elements/chunks/video-MKp3LmNT.js +1 -0
- package/dist/elements/chunks/x-Ckwicf6g.js +1 -0
- package/dist/elements/coachmark.d.ts +1 -0
- package/dist/elements/coachmark.js +1 -0
- package/dist/elements/code-block.js +1 -1
- package/dist/elements/command.d.ts +1 -0
- package/dist/elements/command.js +1 -0
- package/dist/elements/compare.js +1 -1
- package/dist/elements/composer.d.ts +1 -0
- package/dist/elements/composer.js +1 -0
- package/dist/elements/confirm-card.js +1 -1
- package/dist/elements/context-meter.js +1 -1
- package/dist/elements/conversation-list.js +1 -1
- package/dist/elements/css.d.ts +1 -0
- package/dist/elements/default-input.d.ts +51 -0
- package/dist/elements/define.d.ts +53 -0
- package/dist/elements/dialog.d.ts +1 -0
- package/dist/elements/dialog.js +1 -0
- package/dist/elements/disclosure.d.ts +37 -0
- package/dist/elements/editable-label.d.ts +1 -0
- package/dist/elements/editable-label.js +1 -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.d.ts +1 -0
- package/dist/elements/hover-card.js +1 -0
- package/dist/elements/icon.d.ts +1 -0
- package/dist/elements/icon.js +1 -0
- package/dist/elements/image.js +1 -1
- package/dist/elements/input.d.ts +1 -0
- package/dist/elements/input.js +1 -0
- package/dist/elements/kbd.d.ts +1 -0
- package/dist/elements/kbd.js +1 -0
- 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.d.ts +1 -0
- package/dist/elements/menu.js +1 -0
- 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.d.ts +1 -0
- package/dist/elements/nav.js +1 -0
- package/dist/elements/notice.d.ts +1 -0
- package/dist/elements/notice.js +1 -0
- package/dist/elements/pane-group.d.ts +1 -0
- package/dist/elements/pane-group.js +1 -0
- package/dist/elements/pane.d.ts +1 -0
- package/dist/elements/pane.js +1 -0
- package/dist/elements/popover.js +1 -1
- package/dist/elements/progress-bar.d.ts +1 -0
- package/dist/elements/progress-bar.js +1 -0
- package/dist/elements/prompt-dock.d.ts +1 -0
- package/dist/elements/prompt-dock.js +1 -0
- package/dist/elements/prompt-input.js +1 -1
- package/dist/elements/prompt-suggestions.js +1 -1
- package/dist/elements/reasoning.js +1 -1
- package/dist/elements/register-impl.d.ts +0 -0
- package/dist/elements/register.d.ts +13 -0
- package/dist/elements/remote.d.ts +1 -0
- package/dist/elements/remote.js +1 -0
- package/dist/elements/resizable.js +1 -1
- package/dist/elements/response-stream.js +2 -2
- package/dist/elements/screen.d.ts +1 -0
- package/dist/elements/screen.js +1 -0
- package/dist/elements/scroll-area.d.ts +1 -0
- package/dist/elements/scroll-area.js +1 -0
- package/dist/elements/scroll-button.js +1 -1
- package/dist/elements/search.d.ts +1 -0
- package/dist/elements/search.js +1 -0
- package/dist/elements/segmented.d.ts +1 -0
- package/dist/elements/segmented.js +1 -0
- package/dist/elements/separator.d.ts +1 -0
- package/dist/elements/separator.js +1 -0
- package/dist/elements/setting-item.d.ts +1 -0
- package/dist/elements/setting-item.js +1 -0
- package/dist/elements/settings-group.d.ts +1 -0
- package/dist/elements/settings-group.js +1 -0
- package/dist/elements/skeleton.d.ts +1 -0
- package/dist/elements/skeleton.js +1 -0
- package/dist/elements/slots.d.ts +176 -0
- package/dist/elements/source.js +1 -1
- package/dist/elements/status.d.ts +1 -0
- package/dist/elements/status.js +1 -0
- package/dist/elements/switch.js +1 -1
- package/dist/elements/tabs.d.ts +1 -0
- package/dist/elements/tabs.js +1 -0
- 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/toast.js +1 -1
- package/dist/elements/tool.js +1 -1
- package/dist/elements/tooltip.d.ts +1 -0
- package/dist/elements/tooltip.js +1 -0
- package/dist/elements/voice-input.js +1 -1
- package/dist/elements/voice-output.d.ts +1 -0
- package/dist/elements/voice-output.js +1 -0
- package/dist/elements.d.ts +733 -58
- package/dist/engine-javascript-C1x7zo1_.js +141 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.js +8255 -5703
- package/dist/kai.es.js +1 -0
- package/dist/llms/llms-full.txt +1146 -64
- package/dist/llms/llms.txt +4 -4
- package/dist/mcp.es.js +62 -7
- package/dist/primitives/composer-model.d.ts +22 -0
- package/dist/primitives/composer-triggers.d.ts +19 -0
- package/dist/primitives/create-kai-chat.d.ts +38 -0
- package/dist/primitives/toast-store.d.ts +32 -2
- package/dist/primitives/use-speech-recognition.d.ts +26 -0
- package/dist/react/index.d.ts +1085 -97
- package/dist/react/runtime.d.ts +9 -2
- package/dist/react/use-kai-chat.d.ts +41 -0
- package/dist/react.js +572 -193
- package/dist/register-impl-cKscku5m.js +141 -0
- package/dist/schemas/tasks.schema.json +2 -2
- package/dist/state/index.d.ts +4 -0
- package/dist/state/messages.d.ts +11 -0
- package/dist/state/stream.d.ts +22 -0
- package/dist/state/suggestions.d.ts +4 -0
- package/dist/state.js +117 -0
- package/dist/theme.tokens.css +87 -0
- package/dist/types.d.ts +4 -0
- package/dist/ui/agent-card.d.ts +61 -0
- package/dist/ui/button.d.ts +5 -2
- package/dist/ui/card.d.ts +61 -0
- package/dist/ui/collapsible.d.ts +15 -1
- package/dist/ui/command.d.ts +33 -0
- package/dist/ui/dialog.d.ts +42 -0
- package/dist/ui/dropdown.d.ts +95 -1
- package/dist/ui/editable-label.d.ts +26 -0
- package/dist/ui/hover-card.d.ts +13 -1
- package/dist/ui/icon.d.ts +18 -0
- package/dist/ui/input.d.ts +33 -0
- package/dist/ui/kbd.d.ts +21 -0
- package/dist/ui/nav.d.ts +62 -0
- package/dist/ui/notice.d.ts +31 -0
- package/dist/ui/overlay.d.ts +12 -0
- package/dist/ui/pane-grid.d.ts +58 -0
- package/dist/ui/pane-group.d.ts +77 -0
- package/dist/ui/pane.d.ts +78 -0
- package/dist/ui/popover.d.ts +11 -1
- package/dist/ui/progress-bar.d.ts +23 -0
- package/dist/ui/prompt-dock.d.ts +96 -0
- package/dist/ui/resizable.d.ts +12 -0
- package/dist/ui/scroll-area.d.ts +4 -0
- package/dist/ui/segmented.d.ts +28 -0
- package/dist/ui/settings-group.d.ts +32 -0
- package/dist/ui/skeleton.d.ts +12 -0
- package/dist/ui/stat.d.ts +16 -0
- package/dist/ui/status.d.ts +13 -0
- package/dist/ui/switch.d.ts +8 -1
- package/dist/ui/tabs.d.ts +35 -0
- package/dist/ui/tooltip.d.ts +19 -1
- package/frameworks/react/index.tsx +1042 -157
- package/frameworks/react/runtime.tsx +30 -1
- package/frameworks/react/use-kai-chat.tsx +87 -0
- package/llms-full.txt +1146 -64
- package/llms.txt +4 -4
- package/package.json +31 -10
- package/src/agent-tooling/mcp/manifest.ts +14 -0
- package/src/agent-tooling/mcp/tools/debug.ts +11 -7
- package/src/agent-tooling/mcp/tools/reference.ts +32 -0
- package/src/agent-tooling/mcp/tools/scaffold.ts +30 -1
- package/src/components/artifact.tsx +98 -13
- package/src/components/attachment-types.ts +13 -0
- package/src/components/attachments.tsx +4 -14
- package/src/components/card.tsx +109 -15
- package/src/components/chain-of-thought.tsx +210 -1
- package/src/components/chat-scope-picker.tsx +13 -3
- package/src/components/chat-thread.tsx +225 -116
- package/src/components/choice-card.tsx +103 -11
- package/src/components/coachmark.tsx +249 -0
- package/src/components/component-meta.json +699 -110
- package/src/components/composer-dom.ts +159 -0
- package/src/components/composer-highlight.ts +242 -0
- package/src/components/composer-history.ts +82 -0
- package/src/components/composer.tsx +979 -0
- package/src/components/confirm-card.tsx +54 -1
- package/src/components/conversation-item.tsx +69 -7
- package/src/components/conversation-list.tsx +134 -37
- package/src/components/file-tree.tsx +197 -47
- package/src/components/form-widgets.tsx +9 -7
- package/src/components/form.tsx +140 -17
- package/src/components/image.tsx +3 -5
- package/src/components/link-preview.tsx +5 -4
- package/src/components/markdown.tsx +5 -2
- package/src/components/message.tsx +23 -4
- package/src/components/model-switcher.tsx +19 -4
- package/src/components/prompt-input.tsx +46 -75
- package/src/components/prompt-suggestion.tsx +48 -16
- package/src/components/reasoning.tsx +29 -6
- package/src/components/response-compare.tsx +31 -2
- package/src/components/screen.tsx +176 -0
- package/src/components/tasks-card.tsx +341 -21
- package/src/components/toast.tsx +119 -31
- package/src/components/tool-types.ts +10 -0
- package/src/components/tool.tsx +22 -16
- package/src/components/voice-input.tsx +102 -19
- package/src/components/voice-output.tsx +202 -0
- package/src/elements/agent-card.tsx +67 -0
- package/src/elements/artifact.tsx +53 -4
- package/src/elements/attachments.tsx +1 -0
- package/src/elements/avatar.tsx +33 -0
- package/src/elements/badge.tsx +32 -0
- package/src/elements/button.tsx +126 -0
- package/src/elements/card-media.jpg +0 -0
- package/src/elements/card.tsx +124 -31
- package/src/elements/cards.tsx +81 -7
- package/src/elements/chain-of-thought.tsx +77 -32
- package/src/elements/chat-scope-picker.tsx +35 -8
- package/src/elements/chat-types.ts +2 -2
- package/src/elements/chat-workspace.tsx +153 -41
- package/src/elements/chat.tsx +45 -23
- package/src/elements/choice.tsx +71 -19
- package/src/elements/coachmark.tsx +90 -0
- package/src/elements/command.tsx +209 -0
- package/src/elements/compare.tsx +24 -2
- package/src/elements/compiled.css +2 -2
- package/src/elements/composer.tsx +151 -0
- package/src/elements/confirm-card.tsx +36 -11
- package/src/elements/conversation-list.tsx +80 -11
- package/src/elements/default-input.tsx +75 -53
- package/src/elements/define.tsx +87 -7
- package/src/elements/dialog.tsx +98 -0
- package/src/elements/disclosure.ts +73 -0
- package/src/elements/editable-label.tsx +125 -0
- package/src/elements/element-manifest.json +129 -1
- package/src/elements/element-meta.json +5562 -1336
- package/src/elements/element-types.d.ts +732 -57
- package/src/elements/file-tree.tsx +12 -2
- package/src/elements/file-upload.tsx +1 -1
- package/src/elements/form.tsx +54 -11
- package/src/elements/hover-card.tsx +80 -0
- package/src/elements/icon-names.json +48 -0
- package/src/elements/icon.tsx +41 -0
- package/src/elements/input.tsx +203 -0
- package/src/elements/kbd.tsx +45 -0
- package/src/elements/menu.tsx +217 -0
- package/src/elements/message.tsx +58 -11
- package/src/elements/model-switcher.tsx +27 -1
- package/src/elements/nav.tsx +87 -0
- package/src/elements/notice.tsx +53 -0
- package/src/elements/pane-group.tsx +119 -0
- package/src/elements/pane.tsx +129 -0
- package/src/elements/popover.tsx +39 -17
- package/src/elements/progress-bar.tsx +39 -0
- package/src/elements/prompt-dock.tsx +81 -0
- package/src/elements/prompt-input.tsx +112 -63
- package/src/elements/prompt-suggestions.tsx +25 -9
- package/src/elements/reasoning.tsx +30 -9
- package/src/elements/register-impl.ts +38 -3
- package/src/elements/register.ts +11 -3
- package/src/elements/resizable.tsx +48 -11
- package/src/elements/screen.tsx +90 -0
- package/src/elements/scroll-area.tsx +33 -0
- package/src/elements/search.tsx +180 -0
- package/src/elements/segmented.tsx +135 -0
- package/src/elements/separator.tsx +36 -0
- package/src/elements/setting-item.tsx +50 -0
- package/src/elements/settings-group.tsx +37 -0
- package/src/elements/skeleton.tsx +45 -0
- package/src/elements/slots.ts +607 -0
- package/src/elements/source.tsx +13 -6
- package/src/elements/status.tsx +42 -0
- package/src/elements/switch.tsx +89 -14
- package/src/elements/tabs.tsx +95 -0
- package/src/elements/tasks.tsx +70 -14
- package/src/elements/toast.tsx +17 -2
- package/src/elements/tool.tsx +43 -9
- package/src/elements/tooltip.tsx +85 -0
- package/src/elements/video-poster.jpg +0 -0
- package/src/elements/voice-input.tsx +66 -16
- package/src/elements/voice-output.tsx +69 -0
- package/src/index.ts +5 -2
- package/src/primitives/card-schemas/tasks.schema.json +2 -2
- package/src/primitives/composer-model.ts +49 -0
- package/src/primitives/composer-triggers.ts +35 -0
- package/src/primitives/create-kai-chat.ts +66 -0
- package/src/primitives/toast-store.ts +43 -2
- package/src/primitives/use-speech-recognition.ts +135 -0
- package/src/state/index.ts +6 -0
- package/src/state/messages.ts +36 -0
- package/src/state/stream.ts +92 -0
- package/src/state/suggestions.ts +9 -0
- package/src/types.ts +4 -0
- package/src/ui/agent-card.tsx +218 -0
- package/src/ui/button.tsx +16 -5
- package/src/ui/card.tsx +245 -0
- package/src/ui/collapsible.tsx +30 -4
- package/src/ui/command.tsx +99 -0
- package/src/ui/dialog.tsx +217 -0
- package/src/ui/dropdown.tsx +375 -13
- package/src/ui/editable-label.tsx +112 -0
- package/src/ui/hover-card.tsx +28 -5
- package/src/ui/icon.tsx +110 -0
- package/src/ui/input.tsx +132 -0
- package/src/ui/kbd.tsx +118 -0
- package/src/ui/nav.tsx +282 -0
- package/src/ui/notice.tsx +84 -0
- package/src/ui/overlay.tsx +108 -2
- package/src/ui/pane-grid.tsx +117 -0
- package/src/ui/pane-group.tsx +291 -0
- package/src/ui/pane.tsx +193 -0
- package/src/ui/popover.tsx +16 -2
- package/src/ui/progress-bar.tsx +83 -0
- package/src/ui/prompt-dock.tsx +145 -0
- package/src/ui/resizable.tsx +69 -1
- package/src/ui/scroll-area.tsx +14 -3
- package/src/ui/segmented.tsx +109 -0
- package/src/ui/settings-group.tsx +67 -0
- package/src/ui/skeleton.tsx +62 -5
- package/src/ui/stat.tsx +41 -0
- package/src/ui/status.tsx +48 -0
- package/src/ui/switch.tsx +49 -23
- package/src/ui/tabs.tsx +168 -0
- package/src/ui/tooltip.tsx +52 -8
- package/theme.css +113 -0
- package/dist/components/slash-command.d.ts +0 -15
- package/dist/elements/chunks/Icon-D_Zmwmwh.js +0 -1
- package/dist/elements/chunks/action-icons-PVfIvcuG.js +0 -1
- package/dist/elements/chunks/attachments-Dp6vqtrc.js +0 -1
- package/dist/elements/chunks/button-CKyYD9G4.js +0 -1
- package/dist/elements/chunks/card-Cjho-PYk.js +0 -1
- package/dist/elements/chunks/chat-thread-RT808iPf.js +0 -1
- package/dist/elements/chunks/check-CDYaMYrM.js +0 -1
- package/dist/elements/chunks/chevron-down-3SBiq8HF.js +0 -1
- package/dist/elements/chunks/chevron-right-k2UFlIVK.js +0 -1
- package/dist/elements/chunks/cn-Dogu6PbV.js +0 -1
- package/dist/elements/chunks/code-block-BYUmfFSd.js +0 -1
- package/dist/elements/chunks/collapsible-BiNwdOn6.js +0 -1
- package/dist/elements/chunks/context-18g6oi4J.js +0 -1
- package/dist/elements/chunks/conversation-list-D9Y0NVdo.js +0 -1
- package/dist/elements/chunks/default-input-CSAoYYMd.js +0 -1
- package/dist/elements/chunks/download-D8K0Je8r.js +0 -1
- package/dist/elements/chunks/dropdown-bUs2iTia.js +0 -1
- package/dist/elements/chunks/external-link-6mA0wxab.js +0 -1
- package/dist/elements/chunks/file-text-DnaYk3Dm.js +0 -1
- package/dist/elements/chunks/file-tree-CgtRLlxK.js +0 -1
- package/dist/elements/chunks/hover-card-CIGw62gP.js +0 -1
- package/dist/elements/chunks/link-BlGSeoPy.js +0 -1
- package/dist/elements/chunks/loader-DvhR4qa0.js +0 -1
- package/dist/elements/chunks/message-CDZwXjhL.js +0 -1
- package/dist/elements/chunks/message-feedback-CYx81QiA.js +0 -1
- package/dist/elements/chunks/model-switcher-O_tUhoOT.js +0 -1
- package/dist/elements/chunks/overlay-DydXYMQW.js +0 -1
- package/dist/elements/chunks/prompt-suggestion-ldlWV5kd.js +0 -1
- package/dist/elements/chunks/reasoning-2PUnHlmr.js +0 -1
- package/dist/elements/chunks/resizable-B5WNbSeb.js +0 -1
- package/dist/elements/chunks/star-t9tI-P0q.js +0 -1
- package/dist/elements/chunks/store-C6rIooZz.js +0 -1
- package/dist/elements/chunks/text-shimmer-uh9V_KUh.js +0 -1
- package/dist/elements/chunks/textarea-3nm6Ia9U.js +0 -1
- package/dist/elements/chunks/thumbs-up-BBtguGld.js +0 -1
- package/dist/elements/chunks/toast-store-D8cL3fWl.js +0 -1
- package/dist/elements/chunks/tool-GJ3vwp1U.js +0 -1
- package/dist/elements/chunks/tooltip-DwKAz4XR.js +0 -1
- package/dist/elements/chunks/triangle-alert-Ct1zt2JL.js +0 -1
- package/dist/elements/chunks/use-card-resolution-D-_0Alzy.js +0 -1
- package/dist/elements/chunks/video-mVYiM99-.js +0 -1
- package/dist/elements/chunks/x-CzxL27Ch.js +0 -1
- package/dist/kitn-chat.es.js +0 -1
- package/dist/register-JyTglR6m.js +0 -1
- package/dist/register-impl-C6wlSsts.js +0 -77
- package/src/components/slash-command.tsx +0 -232
- package/src/elements/framework-usage.json +0 -588
- /package/dist/{kitn-chat-provider.d.ts → kai-provider.d.ts} +0 -0
- /package/dist/{kitn-chat-provider.es.js → kai-provider.es.js} +0 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { JSX } from 'solid-js';
|
|
2
|
+
import { ComposerDoc, EntityRef } from '../primitives/composer-model';
|
|
3
|
+
export interface TriggerItem {
|
|
4
|
+
id: string;
|
|
5
|
+
label: string;
|
|
6
|
+
icon?: string;
|
|
7
|
+
/** Secondary muted text shown beside the label in the menu (Codex-style). */
|
|
8
|
+
description?: string;
|
|
9
|
+
/** Section header to group this item under in the menu (e.g. 'Plugins', 'Agents'). */
|
|
10
|
+
group?: string;
|
|
11
|
+
/** Entity kind for the inserted pill; overrides the trigger's default `kind` so
|
|
12
|
+
* one trigger can mix kinds across sections (e.g. agents + plugins under `@`). */
|
|
13
|
+
kind?: string;
|
|
14
|
+
promptText?: string;
|
|
15
|
+
data?: Record<string, unknown>;
|
|
16
|
+
}
|
|
17
|
+
export interface TriggerDef {
|
|
18
|
+
char: string;
|
|
19
|
+
kind: string;
|
|
20
|
+
items?: TriggerItem[];
|
|
21
|
+
}
|
|
22
|
+
export type HighlightRule = string | {
|
|
23
|
+
pattern: string;
|
|
24
|
+
flags?: string;
|
|
25
|
+
class?: string;
|
|
26
|
+
};
|
|
27
|
+
export interface ComposerChange {
|
|
28
|
+
doc: ComposerDoc;
|
|
29
|
+
text: string;
|
|
30
|
+
entities: EntityRef[];
|
|
31
|
+
}
|
|
32
|
+
/** Imperative handle exposed via `controllerRef` — surfaces the composer's latent
|
|
33
|
+
* capabilities (focus/blur the editable, clear the doc, submit, insert a pill) so
|
|
34
|
+
* the `<kai-composer>` facade can forward them as instance methods. */
|
|
35
|
+
export interface ComposerController {
|
|
36
|
+
focus(options?: FocusOptions): void;
|
|
37
|
+
blur(): void;
|
|
38
|
+
clear(): void;
|
|
39
|
+
send(): void;
|
|
40
|
+
insertEntity(entity: EntityRef): void;
|
|
41
|
+
}
|
|
42
|
+
export interface ComposerProps {
|
|
43
|
+
value?: string | ComposerDoc;
|
|
44
|
+
placeholder?: string;
|
|
45
|
+
disabled?: boolean;
|
|
46
|
+
loading?: boolean;
|
|
47
|
+
maxHeight?: number | string;
|
|
48
|
+
submitOnEnter?: boolean;
|
|
49
|
+
triggers?: TriggerDef[];
|
|
50
|
+
highlights?: HighlightRule[];
|
|
51
|
+
/** Default icon per entity kind (kind → image URL/data-URI), shown on a pill +
|
|
52
|
+
* menu item when the item has no `icon` of its own. Overrides the built-in
|
|
53
|
+
* glyphs (agent/plugin). Example: `{ agent: '/icons/bot.svg' }`. */
|
|
54
|
+
kindIcons?: Record<string, string>;
|
|
55
|
+
/** Render WITHOUT the rounded frame/background/padding — just the editable +
|
|
56
|
+
* placeholder + menu. For embedding inside another frame (e.g. PromptInput). */
|
|
57
|
+
bare?: boolean;
|
|
58
|
+
/** Override the editable element's classes (used in `bare` mode to match an
|
|
59
|
+
* existing input's exact look). The placeholder mirrors these for alignment. */
|
|
60
|
+
editableClass?: string;
|
|
61
|
+
/** Accessible name for the editable (role=textbox). Falls back to the
|
|
62
|
+
* placeholder, then "Message input". */
|
|
63
|
+
ariaLabel?: string;
|
|
64
|
+
/** Receive the editable element (e.g. to register it for click-to-focus). */
|
|
65
|
+
editableRef?: (el: HTMLDivElement) => void;
|
|
66
|
+
/** Receive the imperative controller once mounted. The `<kai-composer>` facade
|
|
67
|
+
* forwards these as element methods (focus/blur/clear/send/insertEntity). */
|
|
68
|
+
controllerRef?: (controller: ComposerController) => void;
|
|
69
|
+
onChange?: (change: ComposerChange) => void;
|
|
70
|
+
onSubmit?: (change: ComposerChange) => void;
|
|
71
|
+
onTrigger?: (info: {
|
|
72
|
+
char: string;
|
|
73
|
+
query: string;
|
|
74
|
+
rect: DOMRect;
|
|
75
|
+
}) => void;
|
|
76
|
+
onTriggerClose?: () => void;
|
|
77
|
+
onEntityAdd?: (entity: EntityRef) => void;
|
|
78
|
+
onEntityRemove?: (entity: EntityRef) => void;
|
|
79
|
+
/** The editable gained focus. `focus`/`blur` are NOT composed, so they don't
|
|
80
|
+
* escape the shadow root — this re-exposes them. (keydown/paste/focusin/focusout
|
|
81
|
+
* are composed and already reach the host as native events; no wrapper needed.) */
|
|
82
|
+
onFocus?: (e: FocusEvent) => void;
|
|
83
|
+
/** The editable lost focus. */
|
|
84
|
+
onBlur?: (e: FocusEvent) => void;
|
|
85
|
+
}
|
|
86
|
+
export declare function Composer(props: ComposerProps): JSX.Element;
|
|
@@ -28,6 +28,20 @@ export declare function normalizeActions(actions: unknown): {
|
|
|
28
28
|
};
|
|
29
29
|
/** The id of the default action (first with `default:true`), if any. */
|
|
30
30
|
export declare function defaultActionId(actions: ConfirmAction[]): string | undefined;
|
|
31
|
+
/** Imperative handle exposed via `controllerRef` — surfaces the confirm card's
|
|
32
|
+
* latent action/dismiss capabilities so the `<kai-confirm>` facade can forward
|
|
33
|
+
* them as instance methods (focus/confirm/dismiss/reopen). */
|
|
34
|
+
export interface ConfirmController {
|
|
35
|
+
/** Focus the default action button (or the first action if none default). */
|
|
36
|
+
focus(options?: FocusOptions): void;
|
|
37
|
+
/** Activate an action by id (or the default action when omitted) — emits the
|
|
38
|
+
* `action` verb + resolves single-shot. */
|
|
39
|
+
confirm(actionId?: string): void;
|
|
40
|
+
/** Dismiss the card — emits `dismiss` + optimistically collapses to the stub. */
|
|
41
|
+
dismiss(): void;
|
|
42
|
+
/** Re-open a dismissed card from its stub — emits `reopen`. */
|
|
43
|
+
reopen(): void;
|
|
44
|
+
}
|
|
31
45
|
export interface ConfirmCardProps {
|
|
32
46
|
/** The confirm definition (CardEnvelope.data). */
|
|
33
47
|
data?: ConfirmCardData;
|
|
@@ -45,6 +59,9 @@ export interface ConfirmCardProps {
|
|
|
45
59
|
class?: string;
|
|
46
60
|
/** When set, render the chromed read-only view instead of the buttons. */
|
|
47
61
|
resolution?: CardResolution;
|
|
62
|
+
/** Receive the imperative controller once mounted. The `<kai-confirm>` facade
|
|
63
|
+
* forwards these as element methods (focus/confirm/dismiss/reopen). */
|
|
64
|
+
controllerRef?: (controller: ConfirmController) => void;
|
|
48
65
|
}
|
|
49
66
|
/**
|
|
50
67
|
* `ConfirmCard` — a named-intent approval card. Renders a title + body + a small
|
|
@@ -3,6 +3,15 @@ export interface ConversationItemProps {
|
|
|
3
3
|
conversation: ConversationSummary;
|
|
4
4
|
isActive: boolean;
|
|
5
5
|
onSelect: (id: string) => void;
|
|
6
|
+
/** Dense single-line row: a leading dot + title, no message count. */
|
|
7
|
+
compact?: boolean;
|
|
6
8
|
class?: string;
|
|
7
9
|
}
|
|
10
|
+
/**
|
|
11
|
+
* Short relative time from an ISO date string: "just now", "5m ago", "3h ago",
|
|
12
|
+
* "2d ago", "24d ago". Pure — it snapshots `now` (defaults to `Date.now()`) at
|
|
13
|
+
* call time, so it re-derives whenever the list re-renders; there is no internal
|
|
14
|
+
* ticking clock. Returns '' for a missing or unparseable date.
|
|
15
|
+
*/
|
|
16
|
+
export declare function relativeTimeShort(iso?: string, now?: number): string;
|
|
8
17
|
export declare function ConversationItem(props: ConversationItemProps): import("solid-js").JSX.Element;
|
|
@@ -1,4 +1,17 @@
|
|
|
1
|
+
import { JSX } from 'solid-js';
|
|
1
2
|
import { ConversationSummary, ConversationGroup } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* The collapsed-rail fallback: a floating reopen button shown when the
|
|
5
|
+
* conversation sidebar is collapsed. Shared by `kai-workspace` (its collapsed
|
|
6
|
+
* branch) and the standalone `kai-conversations` (collapsed mode), so the rail
|
|
7
|
+
* collapses identically in both. Renders only the button; the host owns the
|
|
8
|
+
* surrounding region (the workspace puts the thread beside it, the standalone
|
|
9
|
+
* element stands alone). `onExpand` reopens the rail.
|
|
10
|
+
*/
|
|
11
|
+
export declare function CollapsedRail(props: {
|
|
12
|
+
onExpand: () => void;
|
|
13
|
+
class?: string;
|
|
14
|
+
}): JSX.Element;
|
|
2
15
|
export interface ConversationListProps {
|
|
3
16
|
groups: ConversationGroup[];
|
|
4
17
|
conversations: ConversationSummary[];
|
|
@@ -6,6 +19,28 @@ export interface ConversationListProps {
|
|
|
6
19
|
onSelect: (id: string) => void;
|
|
7
20
|
onNewChat: () => void;
|
|
8
21
|
onToggleSidebar?: () => void;
|
|
22
|
+
/** Replaces the built-in title bar (toggle / "Chats" / New chat). */
|
|
23
|
+
header?: JSX.Element;
|
|
24
|
+
/** A row below the list (e.g. account / settings / usage). */
|
|
25
|
+
footer?: JSX.Element;
|
|
26
|
+
/** Replaces the built-in "no conversations yet" state. */
|
|
27
|
+
empty?: JSX.Element;
|
|
28
|
+
/** Dense single-line rows (a leading dot + title, no message count). */
|
|
29
|
+
compact?: boolean;
|
|
30
|
+
/** Fired whenever the built-in search box query changes (typing or a
|
|
31
|
+
* programmatic `clear()`). Lets the facade surface a `kai-search` event. */
|
|
32
|
+
onSearchChange?: (query: string) => void;
|
|
33
|
+
/** Receive the imperative controller once mounted. The `kai-conversations`
|
|
34
|
+
* facade uses it to focus / clear the internal search input. */
|
|
35
|
+
controllerRef?: (controller: ConversationListController) => void;
|
|
9
36
|
class?: string;
|
|
10
37
|
}
|
|
11
|
-
|
|
38
|
+
/** Imperative handle exposed via `controllerRef` — surfaces the internal search
|
|
39
|
+
* box to the `kai-conversations` facade (the searchQuery signal lives here). */
|
|
40
|
+
export interface ConversationListController {
|
|
41
|
+
/** Focus the built-in search `<input>`. */
|
|
42
|
+
focus(options?: FocusOptions): void;
|
|
43
|
+
/** Clear the internal search query (resets the list filter). */
|
|
44
|
+
clearSearch(): void;
|
|
45
|
+
}
|
|
46
|
+
export declare function ConversationList(props: ConversationListProps): JSX.Element;
|
|
@@ -11,7 +11,18 @@ export interface FileTreeFile {
|
|
|
11
11
|
language?: string;
|
|
12
12
|
/** Kind — drives the icon + whether Code applies. */
|
|
13
13
|
type?: 'html' | 'pdf' | 'image' | 'other';
|
|
14
|
+
/** Lines added vs the base. Rendered as a trailing `+N` stat (success hue,
|
|
15
|
+
* tabular-nums). Only shown when present; omit for a plain file row. */
|
|
16
|
+
additions?: number;
|
|
17
|
+
/** Lines removed vs the base. Rendered as a trailing `-N` stat (error hue). */
|
|
18
|
+
deletions?: number;
|
|
19
|
+
/** Change status vs the base. Drives a small trailing status letter in the
|
|
20
|
+
* conventional VCS hue (added=green, modified=amber, deleted=red,
|
|
21
|
+
* renamed=blue, untracked=muted). Only shown when present. */
|
|
22
|
+
status?: 'added' | 'modified' | 'deleted' | 'renamed' | 'untracked';
|
|
14
23
|
}
|
|
24
|
+
/** A change status a file can carry. */
|
|
25
|
+
export type FileStatus = NonNullable<FileTreeFile['status']>;
|
|
15
26
|
/** A folder node in the built tree. */
|
|
16
27
|
export interface FileTreeFolderNode {
|
|
17
28
|
kind: 'folder';
|
|
@@ -48,6 +59,10 @@ export interface FileTreeProps extends Omit<JSX.HTMLAttributes<HTMLDivElement>,
|
|
|
48
59
|
onSelect?: (path: string, file: FileTreeFile) => void;
|
|
49
60
|
/** Folder paths expanded by default. When omitted, all folders start open. */
|
|
50
61
|
defaultExpanded?: string[];
|
|
62
|
+
/** Show a summary header above the tree: the changed-file count, the summed
|
|
63
|
+
* `+additions / -deletions`, and a Collapse-all/Expand-all toggle wired to the
|
|
64
|
+
* folder-expand state. Off by default (no header — unchanged behavior). */
|
|
65
|
+
summary?: boolean;
|
|
51
66
|
}
|
|
52
67
|
/**
|
|
53
68
|
* `FileTree` — a collapsible, keyboard-navigable file explorer built from a flat
|
|
@@ -77,6 +77,27 @@ export declare function summarizeForm(def: FormDefinition, data: Record<string,
|
|
|
77
77
|
/** Build the result object: coerced values with empty optional fields omitted.
|
|
78
78
|
* `false` and `0` are kept (they are real values, not "empty"). */
|
|
79
79
|
export declare function buildResult(def: FormDefinition, values: Record<string, unknown>): Record<string, unknown>;
|
|
80
|
+
/** Imperative handle exposed via `controllerRef` — surfaces the form's latent
|
|
81
|
+
* capabilities (focus the first/first-invalid control, validate, programmatic
|
|
82
|
+
* send, reset to defaults, dismiss/reopen) so the `<kai-form>` facade can forward
|
|
83
|
+
* them as instance methods. */
|
|
84
|
+
export interface FormController {
|
|
85
|
+
/** Focus the first control, or the first INVALID control after a failed validation. */
|
|
86
|
+
focus(options?: FocusOptions): void;
|
|
87
|
+
/** Run full validation + submit: focus the first invalid field on failure, else emit `submit`. */
|
|
88
|
+
send(): void;
|
|
89
|
+
/** Run client-side validation now and return per-field errors WITHOUT submitting. */
|
|
90
|
+
validate(): {
|
|
91
|
+
valid: boolean;
|
|
92
|
+
errors?: Record<string, string>;
|
|
93
|
+
};
|
|
94
|
+
/** Re-seed from each field's `default` and clear errors. */
|
|
95
|
+
reset(): void;
|
|
96
|
+
/** Trigger the dismiss path (emit `dismiss` + collapse to the re-openable stub). */
|
|
97
|
+
dismiss(): void;
|
|
98
|
+
/** Re-open a dismissed card from its stub (emit `reopen`). */
|
|
99
|
+
reopen(): void;
|
|
100
|
+
}
|
|
80
101
|
export interface FormProps {
|
|
81
102
|
/** The form definition (CardEnvelope.data). */
|
|
82
103
|
data?: FormDefinition;
|
|
@@ -92,6 +113,19 @@ export interface FormProps {
|
|
|
92
113
|
class?: string;
|
|
93
114
|
/** When set, render the chromed read-only view instead of the form inputs. */
|
|
94
115
|
resolution?: CardResolution;
|
|
116
|
+
/** Controlled field values — when set, this wins over internal/uncontrolled state. */
|
|
117
|
+
values?: Record<string, unknown>;
|
|
118
|
+
/** Initial values overlaying the schema defaults (uncontrolled seed). */
|
|
119
|
+
defaultValues?: Record<string, unknown>;
|
|
120
|
+
/** Disable all fields + submit. */
|
|
121
|
+
disabled?: boolean;
|
|
122
|
+
/** Fires on input with the current coerced values + validity (distinct from submit). */
|
|
123
|
+
onValuesChange?: (payload: {
|
|
124
|
+
values: Record<string, unknown>;
|
|
125
|
+
valid: boolean;
|
|
126
|
+
}) => void;
|
|
127
|
+
/** Receive the imperative controller once mounted. */
|
|
128
|
+
controllerRef?: (controller: FormController) => void;
|
|
95
129
|
}
|
|
96
130
|
/**
|
|
97
131
|
* `Form` — renders a JSON-Schema form definition into themed, accessible widgets
|
|
@@ -3,6 +3,9 @@ export interface MarkdownProps {
|
|
|
3
3
|
id?: string;
|
|
4
4
|
class?: string;
|
|
5
5
|
codeTheme?: string;
|
|
6
|
+
/** Optional `::part` name(s) to expose on the rendered root. Lets callers
|
|
7
|
+
* (e.g. the message bubble) surface a styleable part through the shadow. */
|
|
8
|
+
part?: string;
|
|
6
9
|
}
|
|
7
10
|
declare function Markdown(props: MarkdownProps): import("solid-js").JSX.Element;
|
|
8
11
|
export { Markdown };
|
|
@@ -16,6 +16,10 @@ declare function MessageAvatar(props: MessageAvatarProps): JSX.Element;
|
|
|
16
16
|
export interface MessageContentProps extends JSX.HTMLAttributes<HTMLDivElement> {
|
|
17
17
|
children: JSX.Element | string;
|
|
18
18
|
markdown?: boolean;
|
|
19
|
+
/** `::part` name(s) exposed on the content node. The body passes
|
|
20
|
+
* `"bubble content"` so consumers can target either the rounded bubble or the
|
|
21
|
+
* text region from outside the shadow boundary. */
|
|
22
|
+
part?: string;
|
|
19
23
|
}
|
|
20
24
|
declare function MessageContent(props: MessageContentProps): JSX.Element;
|
|
21
25
|
export interface MessageActionsProps extends JSX.HTMLAttributes<HTMLDivElement> {
|
|
@@ -85,6 +89,14 @@ export interface MessageBodyProps {
|
|
|
85
89
|
activeFeedback?: FeedbackVote;
|
|
86
90
|
/** When true, the copy button shows its "copied" check icon. */
|
|
87
91
|
copied?: boolean;
|
|
92
|
+
/** INJECT slot projected at the TOP of the body — above the reasoning / tools /
|
|
93
|
+
* content. A per-message header: a model-name label, a role + timestamp line.
|
|
94
|
+
* In the `<kai-message>` shadow this is `<slot name="before-body" />`. */
|
|
95
|
+
beforeBody?: JSX.Element;
|
|
96
|
+
/** INJECT slot projected at the BOTTOM of the body — below the action bar. A
|
|
97
|
+
* citation / sources row, a token-cost / latency line. In the `<kai-message>`
|
|
98
|
+
* shadow this is `<slot name="after-body" />`. */
|
|
99
|
+
afterBody?: JSX.Element;
|
|
88
100
|
}
|
|
89
101
|
/**
|
|
90
102
|
* The shared message body: an optional reasoning block, tool calls, inline
|
|
@@ -1,8 +1,15 @@
|
|
|
1
|
+
import { DropdownController } from '../ui/dropdown';
|
|
1
2
|
import { ModelOption } from '../types';
|
|
2
3
|
export interface ModelSwitcherProps {
|
|
3
4
|
models: ModelOption[];
|
|
4
5
|
currentModelId: string;
|
|
5
6
|
onModelChange: (modelId: string) => void;
|
|
6
7
|
class?: string;
|
|
8
|
+
/** Initial open state of the dropdown (uncontrolled seed). */
|
|
9
|
+
defaultOpen?: boolean;
|
|
10
|
+
/** Disable the trigger — click/keyboard no longer open the dropdown. */
|
|
11
|
+
disabled?: boolean;
|
|
12
|
+
/** Receive the dropdown's open controller (forwarded from the inner Dropdown). */
|
|
13
|
+
controllerRef?: (api: DropdownController) => void;
|
|
7
14
|
}
|
|
8
15
|
export declare function ModelSwitcher(props: ModelSwitcherProps): import("solid-js").JSX.Element;
|
|
@@ -1,18 +1,21 @@
|
|
|
1
1
|
import { JSX } from 'solid-js';
|
|
2
|
+
import { TriggerDef, ComposerChange } from './composer';
|
|
3
|
+
import { ComposerDoc } from '../primitives/composer-model';
|
|
2
4
|
interface PromptInputContextType {
|
|
3
5
|
isLoading: boolean;
|
|
4
|
-
value: () => string;
|
|
6
|
+
value: () => string | ComposerDoc;
|
|
5
7
|
setValue: (value: string) => void;
|
|
6
8
|
maxHeight: number | string;
|
|
7
9
|
onSubmit?: () => void;
|
|
8
10
|
disabled?: boolean;
|
|
9
|
-
textareaRef:
|
|
10
|
-
setTextareaRef: (el:
|
|
11
|
+
textareaRef: HTMLElement | undefined;
|
|
12
|
+
setTextareaRef: (el: HTMLElement) => void;
|
|
11
13
|
}
|
|
12
14
|
declare function usePromptInput(): PromptInputContextType;
|
|
13
15
|
export interface PromptInputProps extends JSX.HTMLAttributes<HTMLDivElement> {
|
|
14
16
|
isLoading?: boolean;
|
|
15
|
-
|
|
17
|
+
/** String = controlled text; ComposerDoc = a seed that pre-populates pills. */
|
|
18
|
+
value?: string | ComposerDoc;
|
|
16
19
|
onValueChange?: (value: string) => void;
|
|
17
20
|
maxHeight?: number | string;
|
|
18
21
|
onSubmit?: () => void;
|
|
@@ -22,6 +25,12 @@ export interface PromptInputProps extends JSX.HTMLAttributes<HTMLDivElement> {
|
|
|
22
25
|
declare function PromptInput(props: PromptInputProps): JSX.Element;
|
|
23
26
|
export interface PromptInputTextareaProps extends JSX.TextareaHTMLAttributes<HTMLTextAreaElement> {
|
|
24
27
|
disableAutosize?: boolean;
|
|
28
|
+
/** Rich entity triggers (`/`, `@`) forwarded to the composer. */
|
|
29
|
+
triggers?: TriggerDef[];
|
|
30
|
+
/** Default icon per entity kind (kind → image src), forwarded to the composer. */
|
|
31
|
+
kindIcons?: Record<string, string>;
|
|
32
|
+
/** Structured change (doc + entities) from the composer, on every edit. */
|
|
33
|
+
onComposerChange?: (change: ComposerChange) => void;
|
|
25
34
|
}
|
|
26
35
|
declare function PromptInputTextarea(props: PromptInputTextareaProps): JSX.Element;
|
|
27
36
|
export interface PromptInputActionsProps extends JSX.HTMLAttributes<HTMLDivElement> {
|
|
@@ -2,12 +2,20 @@ import { JSX } from 'solid-js';
|
|
|
2
2
|
export interface PromptSuggestionProps extends JSX.ButtonHTMLAttributes<HTMLButtonElement> {
|
|
3
3
|
children: JSX.Element | string;
|
|
4
4
|
variant?: 'outline' | 'ghost' | 'default';
|
|
5
|
-
|
|
5
|
+
/** Row height for the `list` layout: `'md'` (default) or `'lg'` for taller
|
|
6
|
+
* rows (more vertical padding). Chips/block/highlight are unaffected. */
|
|
7
|
+
size?: 'md' | 'lg';
|
|
8
|
+
/** Optional leading icon (named icon, image URL/data-URI, or text). */
|
|
9
|
+
icon?: string;
|
|
6
10
|
highlight?: string;
|
|
7
11
|
/** Render as a full-width, left-aligned list row (the "suggested questions"
|
|
8
12
|
* idiom) instead of a rounded pill. Wraps long text. Ignored in highlight
|
|
9
13
|
* mode, which is always a list row. */
|
|
10
14
|
block?: boolean;
|
|
15
|
+
/** Render as a full-width "Ideas for you" list row: a leading icon, a
|
|
16
|
+
* left-aligned label, and a hover background. Like `block`, but keeps the
|
|
17
|
+
* leading icon. Ignored in highlight mode. */
|
|
18
|
+
list?: boolean;
|
|
11
19
|
}
|
|
12
20
|
declare function PromptSuggestion(props: PromptSuggestionProps): JSX.Element;
|
|
13
21
|
export { PromptSuggestion };
|
|
@@ -1,10 +1,23 @@
|
|
|
1
|
-
import { JSX } from 'solid-js';
|
|
1
|
+
import { JSX, Accessor } from 'solid-js';
|
|
2
|
+
/** Imperative open controller, handed to a parent (the kai-reasoning facade) via
|
|
3
|
+
* `controllerRef` so it can drive/observe open state — mirrors
|
|
4
|
+
* CollapsibleController/HoverCardController. */
|
|
5
|
+
export interface ReasoningController {
|
|
6
|
+
open: Accessor<boolean>;
|
|
7
|
+
setOpen: (v: boolean) => void;
|
|
8
|
+
}
|
|
2
9
|
export interface ReasoningProps {
|
|
3
10
|
children: JSX.Element;
|
|
4
11
|
class?: string;
|
|
5
12
|
open?: boolean;
|
|
13
|
+
/** Initial open state (uncontrolled seed). */
|
|
14
|
+
defaultOpen?: boolean;
|
|
6
15
|
onOpenChange?: (open: boolean) => void;
|
|
7
16
|
isStreaming?: boolean;
|
|
17
|
+
/** Gate the trigger — programmatic control via the controller still works. */
|
|
18
|
+
disabled?: boolean;
|
|
19
|
+
/** Receive the open controller (open accessor + setOpen) once mounted. */
|
|
20
|
+
controllerRef?: (api: ReasoningController) => void;
|
|
8
21
|
}
|
|
9
22
|
declare function Reasoning(props: ReasoningProps): JSX.Element;
|
|
10
23
|
export interface ReasoningTriggerProps extends JSX.ButtonHTMLAttributes<HTMLButtonElement> {
|
|
@@ -3,6 +3,17 @@ import { CompareSelection, ResponseCompareData } from './response-compare-types'
|
|
|
3
3
|
export type { CompareCandidate, ComparePair, CompareCollapse, ResponseCompareData, CompareSelection, } from './response-compare-types';
|
|
4
4
|
export { normalizeCandidates, buildSelection, isAnyStreaming } from './response-compare-types';
|
|
5
5
|
export type CompareLayout = 'auto' | 'columns' | 'tabs';
|
|
6
|
+
/** Imperative handle exposed via `controllerRef` — surfaces the compare's latent
|
|
7
|
+
* capabilities (commit a pick by candidate id, focus the roving tab stop) so the
|
|
8
|
+
* `<kai-compare>` facade can forward them as instance methods (Pattern C). */
|
|
9
|
+
export interface ResponseCompareController {
|
|
10
|
+
/** Commit a pick by candidate id — same path as the "Pick this" button: emits
|
|
11
|
+
* onSelect + optimistically collapses (single-shot; inert while streaming or
|
|
12
|
+
* already resolved). No-op for an unknown id. */
|
|
13
|
+
select(candidateId: string): void;
|
|
14
|
+
/** Focus the current roving tab stop (the focused candidate's "Pick this" radio). */
|
|
15
|
+
focus(options?: FocusOptions): void;
|
|
16
|
+
}
|
|
6
17
|
export interface ResolvedController<T> {
|
|
7
18
|
value: Accessor<T | undefined>;
|
|
8
19
|
isResolved: Accessor<boolean>;
|
|
@@ -26,6 +37,9 @@ export interface ResponseCompareProps {
|
|
|
26
37
|
* component is ≥640px wide, tabs when narrower (e.g. on a phone). */
|
|
27
38
|
layout?: CompareLayout;
|
|
28
39
|
class?: string;
|
|
40
|
+
/** Receive the imperative controller once mounted. The `<kai-compare>` facade
|
|
41
|
+
* forwards these as element methods (select/focus). */
|
|
42
|
+
controllerRef?: (controller: ResponseCompareController) => void;
|
|
29
43
|
/** Fired when the user commits a pick. */
|
|
30
44
|
onSelect?: (sel: CompareSelection) => void;
|
|
31
45
|
/** Fired once both candidates have settled (stopped streaming) and a valid
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Accessor, JSX } from 'solid-js';
|
|
2
|
+
/** Imperative open controller, handed to a parent (the kai-screen facade) via
|
|
3
|
+
* `controllerRef` so it can drive/observe open state with `wireDisclosure`. */
|
|
4
|
+
export interface ScreenController {
|
|
5
|
+
open: Accessor<boolean>;
|
|
6
|
+
setOpen: (v: boolean) => void;
|
|
7
|
+
}
|
|
8
|
+
export interface ScreenProps {
|
|
9
|
+
/** The screen body. */
|
|
10
|
+
children?: JSX.Element;
|
|
11
|
+
/** Header title text. A projected `title` slot overrides this. */
|
|
12
|
+
title?: JSX.Element;
|
|
13
|
+
/** Header title slot content (the facade's `<slot name="title" />`). Overrides `title`. */
|
|
14
|
+
titleSlot?: JSX.Element;
|
|
15
|
+
/** Header trailing cluster (the facade's `<slot name="actions" />`). */
|
|
16
|
+
actions?: JSX.Element;
|
|
17
|
+
/** Controlled open state. When set, the component never changes it itself;
|
|
18
|
+
* drive it from `onOpenChange`. Omit for uncontrolled (internal) state. */
|
|
19
|
+
open?: boolean;
|
|
20
|
+
/** Initial open state when uncontrolled. */
|
|
21
|
+
defaultOpen?: boolean;
|
|
22
|
+
/** Show the back button (default true). */
|
|
23
|
+
back?: boolean;
|
|
24
|
+
/** Skip marking sibling elements inert/aria-hidden while open. */
|
|
25
|
+
noInert?: boolean;
|
|
26
|
+
/** The custom-element host, whose siblings get inert-ed while open. */
|
|
27
|
+
host?: () => HTMLElement | undefined;
|
|
28
|
+
/** Fires whenever open wants to change (back button / method). */
|
|
29
|
+
onOpenChange?: (open: boolean) => void;
|
|
30
|
+
/** Back navigation intent: the back button or Escape. */
|
|
31
|
+
onBack?: () => void;
|
|
32
|
+
/** Receive the open controller once mounted. */
|
|
33
|
+
controllerRef?: (api: ScreenController) => void;
|
|
34
|
+
/** Receive the focusable surface node so the facade's `focus()` can target it. */
|
|
35
|
+
surfaceRef?: (el: HTMLElement) => void;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Screen is the presentational full-bleed overlay surface. It owns the hard parts
|
|
39
|
+
* of being a takeover: it fills its mount point while open, marks sibling
|
|
40
|
+
* elements `inert` + `aria-hidden` (the standard modal pattern), moves focus into
|
|
41
|
+
* the surface on open and restores it on close, fires `onBack` on Escape, and
|
|
42
|
+
* runs an enter/exit transition that honors `prefers-reduced-motion`. When closed
|
|
43
|
+
* it is removed from layout (no space, not focusable). The developer owns the swap
|
|
44
|
+
* (their own routing flips `open`); this owns being the overlay.
|
|
45
|
+
*/
|
|
46
|
+
export declare function Screen(props: ScreenProps): JSX.Element;
|
|
@@ -8,7 +8,15 @@ export interface TasksTask {
|
|
|
8
8
|
disabled?: boolean;
|
|
9
9
|
}
|
|
10
10
|
export interface TasksCardData {
|
|
11
|
-
|
|
11
|
+
/**
|
|
12
|
+
* `select` (default) = checkbox rows + a confirm button that emits the contract
|
|
13
|
+
* `submit`. `progress` = an onboarding/checklist look: a header `done / total`
|
|
14
|
+
* count, circular indicators, per-item title + muted description, and NO confirm
|
|
15
|
+
* button (checking a row is itself the terminal action). Both share the same
|
|
16
|
+
* selection model (toggle by id, the `max` gate, `kai-value-change`); `progress`
|
|
17
|
+
* is purely a presentational variant.
|
|
18
|
+
*/
|
|
19
|
+
mode?: 'select' | 'progress';
|
|
12
20
|
heading?: string;
|
|
13
21
|
tasks: TasksTask[];
|
|
14
22
|
selectAll?: boolean;
|
|
@@ -40,12 +48,36 @@ export declare function selectAllState(tasks: TasksTask[], selected: Set<string>
|
|
|
40
48
|
/** Whether select-all should be shown: requested AND not blocked by `max` (since
|
|
41
49
|
* "all" would violate max). */
|
|
42
50
|
export declare function showSelectAll(data: TasksCardData, tasks: TasksTask[]): boolean;
|
|
51
|
+
/** Whether the card is in the onboarding-checklist `progress` look (no confirm). */
|
|
52
|
+
export declare function isProgressMode(data: TasksCardData): boolean;
|
|
53
|
+
/** The header progress count (`done` checked / `total` rows) for `progress` mode. */
|
|
54
|
+
export declare function progressCount(tasks: TasksTask[], selected: Set<string>): {
|
|
55
|
+
done: number;
|
|
56
|
+
total: number;
|
|
57
|
+
};
|
|
43
58
|
/** Whether confirm is enabled for the current selection count. */
|
|
44
59
|
export declare function canConfirm(data: TasksCardData, count: number): boolean;
|
|
45
60
|
/** Whether an unchecked row is blocked because `max` is reached. */
|
|
46
61
|
export declare function isMaxReached(data: TasksCardData, count: number): boolean;
|
|
47
62
|
/** The disabled-reason text for confirm (for aria-describedby), or undefined. */
|
|
48
63
|
export declare function confirmReason(data: TasksCardData, count: number): string | undefined;
|
|
64
|
+
/** Imperative handle exposed via `controllerRef` — surfaces the tasks card's latent
|
|
65
|
+
* selection model (set the checked ids, toggle one, confirm, focus the group,
|
|
66
|
+
* dismiss/reopen) so the `<kai-tasks>` facade can forward them as instance methods. */
|
|
67
|
+
export interface TasksCardController {
|
|
68
|
+
/** Set the checked ids (local-only, no emit), respecting disabled/max. No arg = select all toggleable rows. */
|
|
69
|
+
select(taskIds?: string[]): void;
|
|
70
|
+
/** Toggle one task by id, honoring the max gate. */
|
|
71
|
+
toggle(taskId: string, checked?: boolean): void;
|
|
72
|
+
/** Confirm the current selection (only when allowed) — emits `submit` + resolves. */
|
|
73
|
+
send(): void;
|
|
74
|
+
/** Focus the task group (select-all checkbox if shown, else the first row). */
|
|
75
|
+
focus(options?: FocusOptions): void;
|
|
76
|
+
/** Trigger the dismiss path (emit `dismiss` + collapse to the re-openable stub). */
|
|
77
|
+
dismiss(): void;
|
|
78
|
+
/** Re-open a dismissed card from its stub (emit `reopen`). */
|
|
79
|
+
reopen(): void;
|
|
80
|
+
}
|
|
49
81
|
export interface TasksCardProps {
|
|
50
82
|
/** The tasks definition (CardEnvelope.data). */
|
|
51
83
|
data?: TasksCardData;
|
|
@@ -61,6 +93,22 @@ export interface TasksCardProps {
|
|
|
61
93
|
class?: string;
|
|
62
94
|
/** When set, render the chromed read-only summary instead of the interactive controls. */
|
|
63
95
|
resolution?: CardResolution;
|
|
96
|
+
/** Controlled selection (task ids) — when set, this wins over internal state. */
|
|
97
|
+
value?: string[];
|
|
98
|
+
/** Uncontrolled initial selection (task ids), overlaying per-task `checked`. */
|
|
99
|
+
defaultValue?: string[];
|
|
100
|
+
/** Freeze the whole list + Confirm. */
|
|
101
|
+
disabled?: boolean;
|
|
102
|
+
/** Display-only: rows can't be toggled and show the default cursor (no pointer,
|
|
103
|
+
* no hover background, no focus ring). Keeps the visual content as-is — this only
|
|
104
|
+
* drops the interactive affordances + a11y exposure. */
|
|
105
|
+
readonly?: boolean;
|
|
106
|
+
/** Fires on every selection change with the selected ids (distinct from submit). */
|
|
107
|
+
onValueChange?: (payload: {
|
|
108
|
+
value: string[];
|
|
109
|
+
}) => void;
|
|
110
|
+
/** Receive the imperative controller once mounted. */
|
|
111
|
+
controllerRef?: (controller: TasksCardController) => void;
|
|
64
112
|
}
|
|
65
113
|
/**
|
|
66
114
|
* `TasksCard` — a selectable task/plan list (checkbox rows + optional select-all
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ToastItem, ToastVariant } from '../primitives/toast-store';
|
|
2
|
-
export type { ToastItem, ToastVariant };
|
|
1
|
+
import { ToastItem, ToastVariant, ToastAppearance } from '../primitives/toast-store';
|
|
2
|
+
export type { ToastItem, ToastVariant, ToastAppearance };
|
|
3
3
|
/** Why a toast went away — surfaced to `onDismiss` (and the facade event). */
|
|
4
4
|
export type ToastDismissReason = 'timeout' | 'close' | 'action';
|
|
5
5
|
export type ToastPosition = 'top-center' | 'top-right' | 'top-left' | 'bottom-center' | 'bottom-right' | 'bottom-left';
|
|
@@ -15,6 +15,12 @@ export interface ToastRegionProps {
|
|
|
15
15
|
/** Stacking: 'expanded' (default, full column) | 'collapsed' (Sonner-style
|
|
16
16
|
* pile that expands on hover/focus). Attribute: stack. */
|
|
17
17
|
stack?: 'expanded' | 'collapsed';
|
|
18
|
+
/** Region-level default appearance for toasts that don't set their own. A
|
|
19
|
+
* per-toast `appearance` always wins. Defaults to `'pill'`. */
|
|
20
|
+
appearance?: ToastAppearance;
|
|
21
|
+
/** Region-level default inverse treatment for toasts that don't set their own.
|
|
22
|
+
* A per-toast `inverse` always wins. Defaults to `false`. */
|
|
23
|
+
inverse?: boolean;
|
|
18
24
|
/** When set, this region renders only the toasts scoped to that element and
|
|
19
25
|
* anchors over its bounds (top-center), following it on scroll/resize. Unset =
|
|
20
26
|
* the global, viewport-anchored region. */
|
|
@@ -31,6 +37,10 @@ interface ToastProps {
|
|
|
31
37
|
/** Hold the auto-dismiss timer (the region sets this true while the whole stack
|
|
32
38
|
* is hovered/expanded, so peers don't dismiss out from under the cursor). */
|
|
33
39
|
paused?: boolean;
|
|
40
|
+
/** Region-level default appearance, used when the item doesn't set its own. */
|
|
41
|
+
appearance?: ToastAppearance;
|
|
42
|
+
/** Region-level default inverse, used when the item doesn't set its own. */
|
|
43
|
+
inverse?: boolean;
|
|
34
44
|
}
|
|
35
45
|
/**
|
|
36
46
|
* A single toast pill. Auto-dismisses after its (action-floored) duration, holds
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** A tool-call part rendered by <Tool>. Pure type — kept JSX-free so it can be
|
|
2
|
+
* imported by the framework-neutral state core and the React typecheck pass. */
|
|
3
|
+
export interface ToolPart {
|
|
4
|
+
type: string;
|
|
5
|
+
state: 'input-streaming' | 'input-available' | 'output-available' | 'output-error';
|
|
6
|
+
input?: Record<string, unknown>;
|
|
7
|
+
output?: Record<string, unknown>;
|
|
8
|
+
toolCallId?: string;
|
|
9
|
+
errorText?: string;
|
|
10
|
+
}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { JSX } from 'solid-js';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
input?: Record<string, unknown>;
|
|
6
|
-
output?: Record<string, unknown>;
|
|
7
|
-
toolCallId?: string;
|
|
8
|
-
errorText?: string;
|
|
9
|
-
}
|
|
2
|
+
import { CollapsibleController } from '../ui/collapsible';
|
|
3
|
+
import { ToolPart } from './tool-types';
|
|
4
|
+
export type { ToolPart } from './tool-types';
|
|
10
5
|
export interface ToolProps {
|
|
11
6
|
toolPart: ToolPart;
|
|
12
7
|
defaultOpen?: boolean;
|
|
8
|
+
/** Gate the disclosure trigger (programmatic control still works). */
|
|
9
|
+
disabled?: boolean;
|
|
10
|
+
/** Receive the open controller once mounted (forwarded from the Collapsible),
|
|
11
|
+
* so a parent (the kai-tool facade) can drive/observe open state. */
|
|
12
|
+
controllerRef?: (api: CollapsibleController) => void;
|
|
13
13
|
class?: string;
|
|
14
14
|
}
|
|
15
15
|
declare function Tool(props: ToolProps): JSX.Element;
|