@kitn.ai/ui 0.16.0 → 0.18.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 +55 -17
- 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 +39 -16
- package/dist/components/choice-card.d.ts +27 -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/dismissed-stub.d.ts +22 -0
- 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 +71 -2
- 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-types.d.ts +66 -0
- package/dist/components/response-compare.d.ts +65 -0
- package/dist/components/screen.d.ts +46 -0
- package/dist/components/tasks-card.d.ts +50 -1
- package/dist/components/toast.d.ts +58 -0
- package/dist/components/tool-types.d.ts +10 -0
- package/dist/components/tool.d.ts +8 -8
- package/dist/components/use-card-resolution.d.ts +10 -6
- 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 +8472 -1691
- package/dist/elements/agent-card.d.ts +1 -0
- package/dist/elements/agent-card.js +1 -0
- package/dist/elements/artifact.js +1 -0
- package/dist/elements/attachments.js +1 -0
- package/dist/elements/autoloader.d.ts +2 -0
- package/dist/elements/autoloader.js +1 -0
- 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 -0
- package/dist/elements/cards.d.ts +1 -0
- package/dist/elements/cards.js +1 -0
- package/dist/elements/chain-of-thought.d.ts +0 -12
- package/dist/elements/chain-of-thought.js +1 -0
- package/dist/elements/chat-scope-picker.js +1 -0
- package/dist/elements/chat-types.d.ts +8 -2
- package/dist/elements/chat-workspace.js +1 -0
- package/dist/elements/chat.js +1 -0
- package/dist/elements/checkpoint.js +1 -0
- package/dist/elements/choice.js +1 -0
- package/dist/elements/chunks/Icon-DLLBeLG5.js +1 -0
- package/dist/elements/chunks/action-icons-UB4V5FNq.js +1 -0
- package/dist/elements/chunks/arrow-left-C-gwlUmx.js +1 -0
- package/dist/elements/chunks/attachments-CgbErf1r.js +1 -0
- package/dist/elements/chunks/badge-DTQpgB6N.js +1 -0
- package/dist/elements/chunks/bash-InADTalH.js +1 -0
- package/dist/elements/chunks/button-XDUM6lXs.js +1 -0
- package/dist/elements/chunks/card-CBlFZ-7I.js +1 -0
- package/dist/elements/chunks/card-routing-C986KuUA.js +1 -0
- package/dist/elements/chunks/chat-thread-BIhmqwNL.js +1 -0
- package/dist/elements/chunks/check-hGUoVIKb.js +1 -0
- package/dist/elements/chunks/chevron-down-DDoaSUtO.js +1 -0
- package/dist/elements/chunks/chevron-right-CdGEUakB.js +1 -0
- package/dist/elements/chunks/circle-BKAZdmzb.js +1 -0
- package/dist/elements/chunks/circle-check-CmYG-y3I.js +1 -0
- package/dist/elements/chunks/circle-x-DewgAEym.js +1 -0
- package/dist/elements/chunks/cn-CU7UAWzk.js +1 -0
- package/dist/elements/chunks/code-block-DedwxwFI.js +1 -0
- package/dist/elements/chunks/collapsible-FfgmTHtM.js +1 -0
- package/dist/elements/chunks/composer-Cfbw5HKT.js +65 -0
- package/dist/elements/chunks/context-DwJmxlRE.js +1 -0
- package/dist/elements/chunks/conversation-list-DsCQMfPq.js +1 -0
- package/dist/elements/chunks/core-AYMC6_lb.js +12 -0
- package/dist/elements/chunks/css-M7EaDHN_.js +1 -0
- package/dist/elements/chunks/default-input-BuqsoENC.js +1 -0
- package/dist/elements/chunks/define-rGsaWsLL.js +1 -0
- package/dist/elements/chunks/disclosure-CwoAkpMH.js +1 -0
- package/dist/elements/chunks/download-DJ06G3Bz.js +1 -0
- package/dist/elements/chunks/dropdown-BFg8ri_R.js +1 -0
- package/dist/elements/chunks/ellipsis-dlN6YvGw.js +1 -0
- package/dist/elements/chunks/engine-javascript-vq0WuIJl.js +141 -0
- package/dist/elements/chunks/external-link-DBX2lc_R.js +1 -0
- package/dist/elements/chunks/file-text-HfwUx4F9.js +1 -0
- package/dist/elements/chunks/file-tree-C6Toj71u.js +1 -0
- package/dist/elements/chunks/folder-MYuqa9Xp.js +1 -0
- package/dist/elements/chunks/github-dark-dimmed-DUshB20C.js +1 -0
- package/dist/elements/chunks/github-light-JYsPkUQd.js +1 -0
- package/dist/elements/chunks/hover-card-gE7iyXdW.js +1 -0
- package/dist/elements/chunks/html-CPZ3oZQ7.js +1 -0
- package/dist/elements/chunks/icon-Vqz4ivrY.js +1 -0
- package/dist/elements/chunks/index-BCRhi84a.js +1 -0
- package/dist/elements/chunks/info-B_toFS0l.js +1 -0
- package/dist/elements/chunks/input-gzbHYZvQ.js +1 -0
- package/dist/elements/chunks/javascript-C25yR2R2.js +1 -0
- package/dist/elements/chunks/json-DxJze_jm.js +1 -0
- package/dist/elements/chunks/kbd-n49c4KZm.js +1 -0
- package/dist/elements/chunks/link-CKPs9yM0.js +1 -0
- package/dist/elements/chunks/loader-q6MamGus.js +1 -0
- package/dist/elements/chunks/markdown-DBrcqq4S.js +64 -0
- package/dist/elements/chunks/message-CTqaYI0s.js +1 -0
- package/dist/elements/chunks/message-feedback-Cvzm03w0.js +1 -0
- package/dist/elements/chunks/message-square-CUg9eRCi.js +1 -0
- package/dist/elements/chunks/minimize-2-l2klxP6K.js +1 -0
- package/dist/elements/chunks/model-switcher-CmyjiHO1.js +1 -0
- package/dist/elements/chunks/overlay-C8sOYqjT.js +1 -0
- package/dist/elements/chunks/paperclip-42Ia7xHD.js +1 -0
- package/dist/elements/chunks/progress-bar-tzKMWAwO.js +1 -0
- package/dist/elements/chunks/prompt-suggestion-D3F6vP_A.js +1 -0
- package/dist/elements/chunks/reasoning-BJNmmyov.js +1 -0
- package/dist/elements/chunks/resizable-BRsk19qI.js +1 -0
- package/dist/elements/chunks/rotate-cw-BgcggLHC.js +1 -0
- package/dist/elements/chunks/scroll-area-CgGbFFbT.js +1 -0
- package/dist/elements/chunks/separator-8hM4GdHE.js +1 -0
- package/dist/elements/chunks/settings-CaUIYOg-.js +1 -0
- package/dist/elements/chunks/settings-group-CYjOVIZQ.js +1 -0
- package/dist/elements/chunks/share-BTYM3Ddt.js +1 -0
- package/dist/elements/chunks/skeleton-DsTYrPUe.js +1 -0
- package/dist/elements/chunks/slots-DkZ-Cmha.js +1 -0
- package/dist/elements/chunks/star-9R3LBQ9n.js +1 -0
- package/dist/elements/chunks/store-CYl5Y0_u.js +1 -0
- package/dist/elements/chunks/svelte--5p79yCD.js +1 -0
- package/dist/elements/chunks/text-shimmer-CaYGv8Se.js +1 -0
- package/dist/elements/chunks/textarea-NEr2SLcD.js +1 -0
- package/dist/elements/chunks/thumbs-up-DZYZkFfc.js +1 -0
- package/dist/elements/chunks/toast-store-ClxVZRcc.js +1 -0
- package/dist/elements/chunks/tool-CHZOmoe9.js +1 -0
- package/dist/elements/chunks/tooltip-WpHElELC.js +1 -0
- package/dist/elements/chunks/triangle-alert-BlS80PUg.js +1 -0
- package/dist/elements/chunks/tsx-B8rCNbgL.js +1 -0
- package/dist/elements/chunks/typescript-RycA9KXf.js +1 -0
- package/dist/elements/chunks/use-card-resolution-VSVoxDeJ.js +1 -0
- package/dist/elements/chunks/video-DxTPZqT8.js +1 -0
- package/dist/elements/chunks/vue-BmIZj4XD.js +1 -0
- package/dist/elements/chunks/x-C1qtndxn.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 -0
- package/dist/elements/command.d.ts +1 -0
- package/dist/elements/command.js +1 -0
- package/dist/elements/compare.d.ts +1 -0
- package/dist/elements/compare.js +1 -0
- package/dist/elements/composer.d.ts +1 -0
- package/dist/elements/composer.js +1 -0
- package/dist/elements/confirm-card.js +1 -0
- package/dist/elements/context-meter.js +1 -0
- package/dist/elements/conversation-list.d.ts +1 -11
- package/dist/elements/conversation-list.js +1 -0
- package/dist/elements/default-input.d.ts +20 -9
- package/dist/elements/define.d.ts +11 -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 -0
- package/dist/elements/empty.js +1 -0
- package/dist/elements/feedback-bar.js +1 -0
- package/dist/elements/file-tree.js +1 -0
- package/dist/elements/file-upload.js +1 -0
- package/dist/elements/form.js +1 -0
- 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 -0
- 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 -0
- package/dist/elements/loader.js +1 -0
- package/dist/elements/markdown.js +1 -0
- package/dist/elements/menu.d.ts +1 -0
- package/dist/elements/menu.js +1 -0
- package/dist/elements/message-skills.d.ts +0 -16
- package/dist/elements/message-skills.js +1 -0
- package/dist/elements/message.js +1 -0
- package/dist/elements/model-switcher.d.ts +1 -11
- package/dist/elements/model-switcher.js +1 -0
- 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 -0
- 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.d.ts +1 -9
- package/dist/elements/prompt-input.js +1 -0
- package/dist/elements/prompt-suggestions.d.ts +0 -6
- package/dist/elements/prompt-suggestions.js +1 -0
- package/dist/elements/reasoning.js +1 -0
- package/dist/elements/register.d.ts +10 -0
- package/dist/elements/remote.js +1 -0
- package/dist/elements/resizable.d.ts +1 -17
- package/dist/elements/resizable.js +1 -0
- package/dist/elements/response-stream.js +14 -0
- 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 -0
- 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.d.ts +0 -17
- package/dist/elements/source.js +1 -0
- package/dist/elements/status.d.ts +1 -0
- package/dist/elements/status.js +1 -0
- package/dist/elements/switch.js +1 -0
- package/dist/elements/tabs.d.ts +1 -0
- package/dist/elements/tabs.js +1 -0
- package/dist/elements/tasks.js +1 -0
- package/dist/elements/text-shimmer.js +1 -0
- package/dist/elements/thinking-bar.js +1 -0
- package/dist/elements/toast.d.ts +1 -0
- package/dist/elements/toast.js +1 -0
- package/dist/elements/tool.js +1 -0
- package/dist/elements/tooltip.d.ts +1 -0
- package/dist/elements/tooltip.js +1 -0
- package/dist/elements/voice-input.js +1 -0
- package/dist/elements/voice-output.d.ts +1 -0
- package/dist/elements/voice-output.js +1 -0
- package/dist/elements.d.ts +772 -61
- package/dist/engine-javascript-C1x7zo1_.js +141 -0
- package/dist/index.d.ts +15 -2
- package/dist/index.js +14405 -9810
- package/dist/kai.es.js +1 -0
- package/dist/llms/llms-full.txt +1234 -107
- package/dist/llms/llms.txt +4 -4
- package/dist/mcp.es.js +217 -6
- package/dist/primitives/card-contract.d.ts +20 -4
- package/dist/primitives/card-recovery.d.ts +55 -0
- 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/message-feedback.d.ts +35 -0
- package/dist/primitives/toast-store.d.ts +118 -0
- package/dist/primitives/use-speech-recognition.d.ts +26 -0
- package/dist/react/index.d.ts +1166 -98
- package/dist/react/runtime.d.ts +9 -2
- package/dist/react/use-kai-chat.d.ts +41 -0
- package/dist/react.js +575 -186
- package/dist/register-impl-CYWGkgbI.js +141 -0
- package/dist/schemas/choice.schema.json +5 -0
- package/dist/schemas/tasks.schema.json +7 -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 +75 -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 +20 -1
- package/frameworks/react/index.tsx +1100 -163
- package/frameworks/react/runtime.tsx +30 -1
- package/frameworks/react/use-kai-chat.tsx +87 -0
- package/llms-full.txt +1234 -107
- package/llms.txt +4 -4
- package/package.json +36 -12
- package/src/agent-tooling/mcp/manifest.ts +14 -0
- package/src/agent-tooling/mcp/tools/debug.ts +194 -6
- package/src/agent-tooling/mcp/tools/reference.ts +32 -0
- package/src/agent-tooling/mcp/tools/scaffold.ts +162 -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 +238 -137
- package/src/components/choice-card.tsx +136 -15
- package/src/components/coachmark.tsx +245 -0
- package/src/components/component-meta.json +921 -108
- 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 +69 -2
- package/src/components/conversation-item.tsx +69 -7
- package/src/components/conversation-list.tsx +134 -37
- package/src/components/dismissed-stub.tsx +80 -0
- package/src/components/file-tree.tsx +197 -47
- package/src/components/form-widgets.tsx +9 -7
- package/src/components/form.tsx +161 -20
- 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 +174 -14
- 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-types.ts +127 -0
- package/src/components/response-compare.tsx +460 -0
- package/src/components/screen.tsx +176 -0
- package/src/components/tasks-card.tsx +374 -23
- package/src/components/toast.tsx +486 -0
- package/src/components/tool-types.ts +10 -0
- package/src/components/tool.tsx +22 -16
- package/src/components/use-card-resolution.ts +24 -8
- 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/autoloader.ts +89 -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 +9 -2
- package/src/elements/chat-workspace.tsx +157 -43
- package/src/elements/chat.tsx +49 -25
- 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 +110 -0
- package/src/elements/compiled.css +1 -1
- 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 +47 -6
- 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 +310 -0
- package/src/elements/element-meta.json +5954 -1605
- package/src/elements/element-types.d.ts +771 -60
- 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 +84 -55
- 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 +41 -3
- package/src/elements/register.ts +20 -3
- package/src/elements/remote.tsx +4 -0
- 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/styles.css +19 -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 +89 -0
- 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 +35 -2
- package/src/primitives/card-contract.ts +14 -5
- package/src/primitives/card-recovery.ts +149 -0
- package/src/primitives/card-routing.ts +3 -0
- package/src/primitives/card-schemas/choice.schema.json +5 -0
- package/src/primitives/card-schemas/tasks.schema.json +7 -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/message-feedback.ts +123 -0
- package/src/primitives/toast-store.ts +276 -0
- 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 +212 -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 +116 -0
- package/src/ui/pane-group.tsx +280 -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 +57 -7
- package/theme.css +113 -0
- package/dist/components/slash-command.d.ts +0 -15
- package/dist/kitn-chat.es.js +0 -1
- package/dist/register-impl-wCsFPoh9.js +0 -77
- package/dist/register-ujhr1nBS.js +0 -1
- package/src/components/slash-command.tsx +0 -232
- package/src/elements/framework-usage.json +0 -563
- /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
package/src/ui/tooltip.tsx
CHANGED
|
@@ -1,45 +1,95 @@
|
|
|
1
|
-
import { createSignal, createUniqueId, onCleanup, Show, type JSX, splitProps } from 'solid-js';
|
|
1
|
+
import { createSignal, createUniqueId, onCleanup, Show, type JSX, type Accessor, splitProps } from 'solid-js';
|
|
2
2
|
import { Portal } from 'solid-js/web';
|
|
3
|
+
import { type Placement } from '@floating-ui/dom';
|
|
3
4
|
import { cn } from '../utils/cn';
|
|
4
5
|
import { useChatConfig } from '../primitives/chat-config';
|
|
5
6
|
import { createPresence, usePosition, useDismiss, As } from './overlay';
|
|
6
7
|
|
|
7
|
-
|
|
8
|
+
/** Imperative open controller, handed to a parent (e.g. the kai-tooltip facade)
|
|
9
|
+
* via `controllerRef` so it can drive/observe open state. */
|
|
10
|
+
export interface TooltipController { open: Accessor<boolean>; setOpen: (v: boolean) => void; }
|
|
11
|
+
|
|
12
|
+
export interface TooltipProps {
|
|
13
|
+
content: string;
|
|
14
|
+
children: JSX.Element;
|
|
15
|
+
class?: string;
|
|
16
|
+
openDelay?: number;
|
|
17
|
+
/** Delay (ms) before it hides after the pointer leaves. Defaults to 0 (hides
|
|
18
|
+
* immediately). */
|
|
19
|
+
closeDelay?: number;
|
|
20
|
+
/** Preferred placement (post flip/shift). Defaults to `'top'`. */
|
|
21
|
+
placement?: Placement;
|
|
22
|
+
/** Initial open state on mount (uncontrolled seed). */
|
|
23
|
+
defaultOpen?: boolean;
|
|
24
|
+
/** When true, hover/focus (and `show()`) never opens the tooltip. */
|
|
25
|
+
disabled?: boolean;
|
|
26
|
+
/** Receive the open controller (open accessor + setOpen) once mounted. */
|
|
27
|
+
controllerRef?: (api: TooltipController) => void;
|
|
28
|
+
dismissOnClick?: boolean;
|
|
29
|
+
}
|
|
8
30
|
|
|
9
31
|
export function Tooltip(props: TooltipProps) {
|
|
10
|
-
const [local] = splitProps(props, ['content', 'children', 'class', 'openDelay']);
|
|
32
|
+
const [local] = splitProps(props, ['content', 'children', 'class', 'openDelay', 'closeDelay', 'placement', 'defaultOpen', 'disabled', 'controllerRef', 'dismissOnClick']);
|
|
11
33
|
const config = useChatConfig();
|
|
12
34
|
const id = createUniqueId();
|
|
13
|
-
const [open, setOpen] = createSignal(false);
|
|
35
|
+
const [open, setOpen] = createSignal(local.defaultOpen ?? false);
|
|
14
36
|
const [triggerEl, setTriggerEl] = createSignal<HTMLElement>();
|
|
15
37
|
const [contentEl, setContentEl] = createSignal<HTMLElement>();
|
|
38
|
+
// Hand the open controller up so a facade (kai-tooltip) can drive/observe it.
|
|
39
|
+
// setOpen is gated on `disabled` so the disclosure surface (show/hide/toggle)
|
|
40
|
+
// can never force the tooltip open while disabled.
|
|
41
|
+
local.controllerRef?.({ open, setOpen: (v) => setOpen(v && !local.disabled) });
|
|
16
42
|
let timer: number | undefined;
|
|
43
|
+
// True for the span of a click (pointerdown → focus → click). Suppresses the
|
|
44
|
+
// focus-show so clicking a hovered trigger DISMISSES it instead of flickering
|
|
45
|
+
// hide→show→hide (pointerdown hid it, the click-induced focus re-showed it,
|
|
46
|
+
// then click hid it again). Keyboard focus has no preceding pointerdown, so it
|
|
47
|
+
// still shows the tooltip normally.
|
|
48
|
+
let pointerDown = false;
|
|
17
49
|
|
|
18
50
|
const [pointerInside, setPointerInside] = createSignal(false);
|
|
19
51
|
const [focusInside, setFocusInside] = createSignal(false);
|
|
20
52
|
|
|
21
53
|
const show = (delay = 0) => {
|
|
54
|
+
if (local.disabled) return;
|
|
22
55
|
clearTimeout(timer);
|
|
23
56
|
if (delay) timer = window.setTimeout(() => setOpen(true), delay);
|
|
24
57
|
else setOpen(true);
|
|
25
58
|
};
|
|
26
|
-
const hide = () => {
|
|
59
|
+
const hide = () => {
|
|
60
|
+
clearTimeout(timer);
|
|
61
|
+
const delay = local.closeDelay ?? 0;
|
|
62
|
+
if (delay) timer = window.setTimeout(() => setOpen(false), delay);
|
|
63
|
+
else setOpen(false);
|
|
64
|
+
};
|
|
27
65
|
const maybeHide = () => { if (!pointerInside() && !focusInside()) hide(); };
|
|
66
|
+
// Action-style tooltips should dismiss when their trigger is clicked: the pointer
|
|
67
|
+
// never "leaves", so reset the inside flags and force-close until the next genuine
|
|
68
|
+
// hover/focus. Opt out with dismissOnClick={false}.
|
|
69
|
+
const dismiss = () => { if (local.dismissOnClick === false) return; setPointerInside(false); setFocusInside(false); hide(); };
|
|
28
70
|
onCleanup(() => clearTimeout(timer));
|
|
29
71
|
|
|
30
72
|
const presence = createPresence(open);
|
|
31
|
-
const position = usePosition(triggerEl, contentEl, {
|
|
73
|
+
const position = usePosition(triggerEl, contentEl, {
|
|
74
|
+
placement: local.placement ?? 'top',
|
|
75
|
+
gutter: 6,
|
|
76
|
+
// Trigger removed from the DOM -> close so the tooltip portal doesn't orphan.
|
|
77
|
+
onDisconnect: () => setOpen(false),
|
|
78
|
+
});
|
|
32
79
|
useDismiss({ enabled: open, onDismiss: hide, refs: () => [triggerEl(), contentEl()] });
|
|
33
80
|
|
|
34
81
|
return (
|
|
35
82
|
<>
|
|
36
83
|
<As
|
|
37
84
|
as="span"
|
|
85
|
+
class="inline-flex"
|
|
38
86
|
ref={setTriggerEl}
|
|
39
87
|
aria-describedby={open() ? id : undefined}
|
|
40
88
|
onPointerEnter={() => { setPointerInside(true); show(local.openDelay ?? 600); }}
|
|
41
89
|
onPointerLeave={() => { setPointerInside(false); maybeHide(); }}
|
|
42
|
-
|
|
90
|
+
onPointerDown={() => { pointerDown = true; dismiss(); window.setTimeout(() => { pointerDown = false; }, 0); }}
|
|
91
|
+
onClick={dismiss}
|
|
92
|
+
onFocusIn={() => { setFocusInside(true); if (!pointerDown) show(); }}
|
|
43
93
|
onFocusOut={(e: FocusEvent) => { const t = triggerEl(); if (t && t.contains(e.relatedTarget as Node)) return; setFocusInside(false); maybeHide(); }}
|
|
44
94
|
>
|
|
45
95
|
{local.children}
|
package/theme.css
CHANGED
|
@@ -23,10 +23,57 @@
|
|
|
23
23
|
--color-secondary-foreground: var(--kai-color-secondary-foreground, hsl(240 5.9% 10%));
|
|
24
24
|
--color-muted: var(--kai-color-muted, hsl(240 4.8% 95.9%));
|
|
25
25
|
--color-muted-foreground: var(--kai-color-muted-foreground, hsl(240 3.8% 43%));
|
|
26
|
+
/* Subtle SURFACE — an opaque "muted panel" for things that sit OVER content
|
|
27
|
+
(the prompt input, message bubbles, artifact/card headers, chips). CALCULATED
|
|
28
|
+
from existing tokens — `--color-muted` blended 40% onto `--color-background`
|
|
29
|
+
— so it tracks the theme (incl. dark) automatically and needs no hand-picked
|
|
30
|
+
value. SOLID (no alpha), so nothing behind it bleeds through. This replaces
|
|
31
|
+
ad-hoc `bg-muted/40` surfaces. Retint via the --kai-color-surface knob (or a
|
|
32
|
+
bare value); --color-surface-strong is the stronger step (hover/raised) and
|
|
33
|
+
--color-surface-sunken is recessed BELOW the base surface (wells, or a banner
|
|
34
|
+
that sits behind a card). Sunken is theme-specific: "darker than the card"
|
|
35
|
+
means a LOWER muted% in dark but a HIGHER one in light, so the two scopes
|
|
36
|
+
can't share a number — see the .dark block. */
|
|
37
|
+
--color-surface: var(--kai-color-surface, color-mix(in srgb, var(--color-muted) 40%, var(--color-background)));
|
|
38
|
+
--color-surface-strong: var(--kai-color-surface-strong, color-mix(in srgb, var(--color-muted) 60%, var(--color-background)));
|
|
39
|
+
--color-surface-sunken: var(--kai-color-surface-sunken, color-mix(in srgb, var(--color-muted) 85%, var(--color-background)));
|
|
26
40
|
--color-accent: var(--kai-color-accent, hsl(240 4.8% 95.9%));
|
|
27
41
|
--color-accent-foreground: var(--kai-color-accent-foreground, hsl(240 5.9% 10%));
|
|
28
42
|
--color-destructive: var(--kai-color-destructive, hsl(0 72% 45%));
|
|
29
43
|
--color-destructive-foreground: var(--kai-color-destructive-foreground, hsl(0 0% 98%));
|
|
44
|
+
/* Semantic status colors - solid fills with a legible foreground, matched to
|
|
45
|
+
the kit's tool-green / -amber / -blue hues so they read on-brand. Use
|
|
46
|
+
bg-success / bg-warning / bg-info with the matching -foreground for badges,
|
|
47
|
+
banners, and buttons; or text-success / -warning / -info on a soft tint
|
|
48
|
+
(below). destructive (above) is the danger/error member of the same family.
|
|
49
|
+
Light uses darker hues so the color carries a light foreground AND stays
|
|
50
|
+
legible as text on a pale tint; dark (see .dark) flips to brighter hues over
|
|
51
|
+
a near-black foreground. Override via --kai-color-success / -warning / -info
|
|
52
|
+
(+ -foreground). */
|
|
53
|
+
--color-success: var(--kai-color-success, hsl(142 71% 30%));
|
|
54
|
+
--color-success-foreground: var(--kai-color-success-foreground, hsl(0 0% 98%));
|
|
55
|
+
--color-warning: var(--kai-color-warning, hsl(38 92% 30%));
|
|
56
|
+
--color-warning-foreground: var(--kai-color-warning-foreground, hsl(0 0% 98%));
|
|
57
|
+
--color-info: var(--kai-color-info, hsl(217 91% 42%));
|
|
58
|
+
--color-info-foreground: var(--kai-color-info-foreground, hsl(0 0% 98%));
|
|
59
|
+
/* Soft tinted status surfaces - OPAQUE, theme-tracking fills derived as ~14% of
|
|
60
|
+
the status hue blended onto the background. Use these for subtle callouts /
|
|
61
|
+
banners instead of an eyeballed bg-success/10; pair with text-success /
|
|
62
|
+
-warning / -info / -destructive. Derived, so declared in BOTH light and dark
|
|
63
|
+
(a color-mix resolves where it's declared - see the surface tokens above). A
|
|
64
|
+
bare bg- utility for a color-mix token is added at the bottom (see bg-surface). */
|
|
65
|
+
--color-success-soft: var(--kai-color-success-soft, color-mix(in oklab, var(--color-success) 14%, var(--color-background)));
|
|
66
|
+
--color-warning-soft: var(--kai-color-warning-soft, color-mix(in oklab, var(--color-warning) 14%, var(--color-background)));
|
|
67
|
+
--color-info-soft: var(--kai-color-info-soft, color-mix(in oklab, var(--color-info) 14%, var(--color-background)));
|
|
68
|
+
--color-destructive-soft: var(--kai-color-destructive-soft, color-mix(in oklab, var(--color-destructive) 14%, var(--color-background)));
|
|
69
|
+
/* Interaction-state backgrounds - opaque, theme-tracking fills for row/control
|
|
70
|
+
states so consumers stop eyeballing /10 opacities. --color-hover is a subtle
|
|
71
|
+
neutral (a little --color-muted on the background); --color-selected is a
|
|
72
|
+
faint --color-primary tint so a selected row tracks the brand. Use bg-hover /
|
|
73
|
+
bg-selected. Derived, so declared in BOTH light and dark; bare bg- utilities
|
|
74
|
+
added at the bottom. */
|
|
75
|
+
--color-hover: var(--kai-color-hover, color-mix(in oklab, var(--color-muted) 60%, var(--color-background)));
|
|
76
|
+
--color-selected: var(--kai-color-selected, color-mix(in oklab, var(--color-primary) 8%, var(--color-background)));
|
|
30
77
|
--color-border: var(--kai-color-border, hsl(240 5.9% 90%));
|
|
31
78
|
--color-input: var(--kai-color-input, hsl(240 5.9% 90%));
|
|
32
79
|
/* Focus ring — a deliberate blue (not a neutral) so keyboard focus is always
|
|
@@ -103,10 +150,36 @@
|
|
|
103
150
|
--color-secondary-foreground: var(--kai-color-secondary-foreground, hsl(0 0% 98%));
|
|
104
151
|
--color-muted: var(--kai-color-muted, hsl(45 4% 17%));
|
|
105
152
|
--color-muted-foreground: var(--kai-color-muted-foreground, hsl(45 4% 64%));
|
|
153
|
+
/* Re-declared in the dark scope so the color-mix recomputes with the DARK
|
|
154
|
+
muted/background (a derived token is computed where it's declared, not where
|
|
155
|
+
it's used — see the light --color-surface for the full note). */
|
|
156
|
+
--color-surface: var(--kai-color-surface, color-mix(in srgb, var(--color-muted) 40%, var(--color-background)));
|
|
157
|
+
--color-surface-strong: var(--kai-color-surface-strong, color-mix(in srgb, var(--color-muted) 60%, var(--color-background)));
|
|
158
|
+
/* Sunken: in dark a LOWER muted% is darker (blends toward the dark background). */
|
|
159
|
+
--color-surface-sunken: var(--kai-color-surface-sunken, color-mix(in srgb, var(--color-muted) 18%, var(--color-background)));
|
|
106
160
|
--color-accent: var(--kai-color-accent, hsl(45 4% 17%));
|
|
107
161
|
--color-accent-foreground: var(--kai-color-accent-foreground, hsl(0 0% 98%));
|
|
108
162
|
--color-destructive: var(--kai-color-destructive, hsl(0 62.8% 30.6%));
|
|
109
163
|
--color-destructive-foreground: var(--kai-color-destructive-foreground, hsl(0 0% 98%));
|
|
164
|
+
/* Semantic status colors - dark mode flips to the brighter tool-* dark hues
|
|
165
|
+
(matching the chip values) carried over a near-black foreground, so the color
|
|
166
|
+
both reads as text on a dark soft tint AND backs a legible foreground. See
|
|
167
|
+
the light @theme note. */
|
|
168
|
+
--color-success: var(--kai-color-success, hsl(142 71% 45%));
|
|
169
|
+
--color-success-foreground: var(--kai-color-success-foreground, hsl(45 4% 11%));
|
|
170
|
+
--color-warning: var(--kai-color-warning, hsl(38 92% 50%));
|
|
171
|
+
--color-warning-foreground: var(--kai-color-warning-foreground, hsl(45 4% 11%));
|
|
172
|
+
--color-info: var(--kai-color-info, hsl(217 91% 70%));
|
|
173
|
+
--color-info-foreground: var(--kai-color-info-foreground, hsl(45 4% 11%));
|
|
174
|
+
/* Soft status surfaces + interaction states - re-declared so each color-mix
|
|
175
|
+
recomputes with the DARK hues/background (a derived token resolves where it's
|
|
176
|
+
declared; see the light block for the full note). */
|
|
177
|
+
--color-success-soft: var(--kai-color-success-soft, color-mix(in oklab, var(--color-success) 14%, var(--color-background)));
|
|
178
|
+
--color-warning-soft: var(--kai-color-warning-soft, color-mix(in oklab, var(--color-warning) 14%, var(--color-background)));
|
|
179
|
+
--color-info-soft: var(--kai-color-info-soft, color-mix(in oklab, var(--color-info) 14%, var(--color-background)));
|
|
180
|
+
--color-destructive-soft: var(--kai-color-destructive-soft, color-mix(in oklab, var(--color-destructive) 14%, var(--color-background)));
|
|
181
|
+
--color-hover: var(--kai-color-hover, color-mix(in oklab, var(--color-muted) 60%, var(--color-background)));
|
|
182
|
+
--color-selected: var(--kai-color-selected, color-mix(in oklab, var(--color-primary) 8%, var(--color-background)));
|
|
110
183
|
--color-border: var(--kai-color-border, hsl(45 4% 17%));
|
|
111
184
|
--color-input: var(--kai-color-input, hsl(45 4% 17%));
|
|
112
185
|
--color-ring: var(--kai-color-ring, hsl(217 91% 68%));
|
|
@@ -187,3 +260,43 @@
|
|
|
187
260
|
}
|
|
188
261
|
.scrollbar-thin::-webkit-scrollbar-thumb:hover { background-color: var(--color-scrollbar-thumb-hover); }
|
|
189
262
|
.scrollbar-thin::-webkit-scrollbar-corner { background: transparent; }
|
|
263
|
+
|
|
264
|
+
/* Surface utilities — `bg-surface` / `bg-surface-strong` paint the opaque,
|
|
265
|
+
theme-derived surface tokens (see --color-surface above). Defined explicitly
|
|
266
|
+
because a color-mix-valued @theme token does NOT emit a bare `bg-` utility on
|
|
267
|
+
its own (only opacity variants). Use these for panels that sit OVER content
|
|
268
|
+
instead of `bg-muted/NN`. */
|
|
269
|
+
@utility bg-surface {
|
|
270
|
+
background-color: var(--color-surface);
|
|
271
|
+
}
|
|
272
|
+
@utility bg-surface-strong {
|
|
273
|
+
background-color: var(--color-surface-strong);
|
|
274
|
+
}
|
|
275
|
+
@utility bg-surface-sunken {
|
|
276
|
+
background-color: var(--color-surface-sunken);
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
/* Soft-status + interaction-state utilities. Same reason as bg-surface above: a
|
|
280
|
+
color-mix-valued @theme token does NOT emit a bare `bg-` utility on its own, so
|
|
281
|
+
bg-success-soft / bg-warning-soft / bg-info-soft / bg-destructive-soft and
|
|
282
|
+
bg-hover / bg-selected are declared here. (The SOLID tokens - success / warning
|
|
283
|
+
/ info + their -foreground - are plain hsl values, so bg-success / text-success
|
|
284
|
+
etc. ARE auto-generated by @theme and need no explicit utility.) */
|
|
285
|
+
@utility bg-success-soft {
|
|
286
|
+
background-color: var(--color-success-soft);
|
|
287
|
+
}
|
|
288
|
+
@utility bg-warning-soft {
|
|
289
|
+
background-color: var(--color-warning-soft);
|
|
290
|
+
}
|
|
291
|
+
@utility bg-info-soft {
|
|
292
|
+
background-color: var(--color-info-soft);
|
|
293
|
+
}
|
|
294
|
+
@utility bg-destructive-soft {
|
|
295
|
+
background-color: var(--color-destructive-soft);
|
|
296
|
+
}
|
|
297
|
+
@utility bg-hover {
|
|
298
|
+
background-color: var(--color-hover);
|
|
299
|
+
}
|
|
300
|
+
@utility bg-selected {
|
|
301
|
+
background-color: var(--color-selected);
|
|
302
|
+
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
export interface SlashCommandItem {
|
|
2
|
-
id: string;
|
|
3
|
-
label: string;
|
|
4
|
-
description?: string;
|
|
5
|
-
category?: string;
|
|
6
|
-
}
|
|
7
|
-
export interface SlashCommandProps {
|
|
8
|
-
commands: SlashCommandItem[];
|
|
9
|
-
activeIds?: string[];
|
|
10
|
-
onSelect: (command: SlashCommandItem) => void;
|
|
11
|
-
compact?: boolean;
|
|
12
|
-
class?: string;
|
|
13
|
-
}
|
|
14
|
-
declare function SlashCommand(props: SlashCommandProps): import("solid-js").JSX.Element;
|
|
15
|
-
export { SlashCommand };
|
package/dist/kitn-chat.es.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as i,i as g}from"./register-ujhr1nBS.js";export{i as configureCodeHighlighting,g as isCodeHighlightingEnabled};
|