@kitn.ai/ui 0.28.0 → 0.30.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 +11 -7
- package/dist/{Icon-DObhsRtm.js → Icon-BzBET3E-.js} +1 -1
- package/dist/{action-icons-CcgNN2oT.js → action-icons-DaW2pU6m.js} +1 -1
- package/dist/agent-tooling/construct/public.d.ts +15 -0
- package/dist/agent-tooling/construct/schema.d.ts +111 -0
- package/dist/arrow-down-D783iMJj.js +1 -0
- package/dist/arrow-left-0VLM5kyg.js +1 -0
- package/dist/artifact-DGjzHYUT.js +1 -0
- package/dist/{attachments-Qr4kg-2b.js → attachments-YvXHlg88.js} +1 -1
- package/dist/{audio-visualizer-DToYdfSc.js → audio-visualizer-9lz5IHsL.js} +1 -1
- package/dist/{badge-CdEu_jn2.js → badge-Dh_vp8A5.js} +1 -1
- package/dist/{bell-DQAAOpDz.js → bell-CT7_WUwS.js} +1 -1
- package/dist/{button-DkuOnGLy.js → button-C_3te6fm.js} +1 -1
- package/dist/{card-renderer-Jx70m6_l.js → card-renderer-DZVaGH2e.js} +1 -1
- package/dist/check-CiEOVnEN.js +1 -0
- package/dist/{checkbox-D7iRB3nL.js → checkbox-Bu2T2e0U.js} +1 -1
- package/dist/{checkbox-group-B2_rpoPM.js → checkbox-group-BiryEXPQ.js} +1 -1
- package/dist/chevron-down-CSobuZRG.js +1 -0
- package/dist/chevron-right-DR9ZAP-2.js +1 -0
- package/dist/{choice-card-m0BYqqOK.js → choice-card-CM6IjkmL.js} +1 -1
- package/dist/circle-BC66EYF7.js +1 -0
- package/dist/circle-check-BqmahW0O.js +1 -0
- package/dist/{circle-x-BPG0iPst.js → circle-x-Bk-dA5Wf.js} +1 -1
- package/dist/{code-block-ClMLKb7C.js → code-block-B26t-Q7q.js} +1 -1
- package/dist/{collapsible-B4DlWicL.js → collapsible-Bhc636Cf.js} +1 -1
- package/dist/components/builder-composer-triggers.d.ts +62 -0
- package/dist/components/builder-layout.d.ts +54 -0
- package/dist/components/builder-message-actions.d.ts +72 -0
- package/dist/components/builder-panel.d.ts +189 -0
- package/dist/components/builder-preview.d.ts +11 -0
- package/dist/components/builder-shell-controls.d.ts +69 -0
- package/dist/components/builder-skeleton.d.ts +58 -0
- package/dist/components/builder-start.d.ts +75 -0
- package/dist/components/builder-workspace-variants.d.ts +23 -0
- package/dist/components/captions.d.ts +66 -0
- package/dist/{composer-sQ0HcvyG.js → composer-DMI85B6j.js} +1 -1
- package/dist/{confirm-card-rQWDQsnC.js → confirm-card-B0YIAwXp.js} +1 -1
- package/dist/construct-cli.es.js +3 -3
- package/dist/construct.d.ts +5 -0
- package/dist/construct.js +327 -0
- package/dist/{context-0kg4ZX1J.js → context-DWgfhqWp.js} +1 -1
- package/dist/controllable-BagRpyHv.js +1 -0
- package/dist/{conversation-item-BxwQLaFJ.js → conversation-item-BsOsVGmT.js} +1 -1
- package/dist/{conversation-list-BCfGN1JU.js → conversation-list-aX3Vtc7L.js} +1 -1
- package/dist/{copy-n9u9rqpi.js → copy-BmEwsNhJ.js} +1 -1
- package/dist/core-C8fzo39E.js +1 -12
- package/dist/{create-tween-uPkArjIG.js → create-tween-CNOAU3Fx.js} +1 -1
- package/dist/{create-tween-C-q-JCM-.js → create-tween-WfqiENls.js} +1 -1
- package/dist/{create-tween-CRrJXxBd.js → create-tween-wlFtW9Kh.js} +1 -1
- package/dist/{create-tween-DZ3RRDHD.js → create-tween-zt79ba32.js} +1 -1
- package/dist/{default-input-CaMrJkgH.js → default-input-DMV5Eaze.js} +1 -1
- package/dist/define-CI0y3eE4.js +1 -0
- package/dist/define.js +40 -40
- package/dist/define.server.js +45 -45
- package/dist/{disclosure-WUImBbDv.js → disclosure-NnACBxsC.js} +1 -1
- package/dist/{dropdown-wZVeJOMd.js → dropdown-DT7G0RGR.js} +1 -1
- package/dist/elements/agent-card.js +1 -1
- package/dist/elements/artifact.js +1 -1
- package/dist/elements/attachments.js +1 -1
- package/dist/elements/audio-visualizer.js +1 -1
- package/dist/elements/avatar.js +1 -1
- package/dist/elements/badge.js +1 -1
- package/dist/elements/button.js +1 -1
- package/dist/elements/card.js +1 -1
- package/dist/elements/cards.js +1 -1
- package/dist/elements/chain-of-thought.js +1 -1
- package/dist/elements/chat-scope-picker.js +1 -1
- package/dist/elements/chat-workspace.js +1 -1
- package/dist/elements/chat.js +1 -1
- package/dist/elements/checkbox-group.js +1 -1
- package/dist/elements/checkbox.js +1 -1
- package/dist/elements/checkpoint.js +1 -1
- package/dist/elements/choice.js +1 -1
- package/dist/elements/coachmark.js +1 -1
- package/dist/elements/code-block.js +1 -1
- package/dist/elements/command.js +1 -1
- package/dist/elements/compare.js +1 -1
- package/dist/elements/composer.js +1 -1
- package/dist/elements/confirm-card.js +1 -1
- package/dist/elements/context-meter.js +1 -1
- package/dist/elements/conversation-item.js +1 -1
- package/dist/elements/conversation-list.js +1 -1
- package/dist/elements/dialog.js +1 -1
- package/dist/elements/dock.js +1 -1
- package/dist/elements/dropdown.js +1 -1
- package/dist/elements/editable-label.js +1 -1
- package/dist/elements/embed.js +1 -1
- package/dist/elements/empty.js +1 -1
- package/dist/elements/feedback-bar.js +1 -1
- package/dist/elements/file-tree.js +1 -1
- package/dist/elements/file-upload.js +1 -1
- package/dist/elements/form.js +1 -1
- package/dist/elements/hover-card.js +1 -1
- package/dist/elements/icon.js +1 -1
- package/dist/elements/image.js +1 -1
- package/dist/elements/input.js +1 -1
- package/dist/elements/kbd.js +1 -1
- package/dist/elements/link-preview.js +1 -1
- package/dist/elements/loader.js +1 -1
- package/dist/elements/markdown.js +1 -1
- package/dist/elements/menu.js +1 -1
- package/dist/elements/message-skills.js +1 -1
- package/dist/elements/message.js +1 -1
- package/dist/elements/model-switcher.js +1 -1
- package/dist/elements/nav.js +1 -1
- package/dist/elements/notice.js +1 -1
- package/dist/elements/pane-grid.js +1 -1
- package/dist/elements/pane-group.js +1 -1
- package/dist/elements/pane.js +1 -1
- package/dist/elements/popover.js +1 -1
- package/dist/elements/progress-bar.js +1 -1
- package/dist/elements/prompt-dock.js +1 -1
- package/dist/elements/prompt-input.js +1 -1
- package/dist/elements/prompt-suggestions.js +1 -1
- package/dist/elements/radio-group.js +1 -1
- package/dist/elements/reasoning.js +1 -1
- package/dist/elements/remote.js +1 -1
- package/dist/elements/resizable.js +1 -1
- package/dist/elements/response-stream.js +1 -1
- package/dist/elements/screen.js +1 -1
- package/dist/elements/scroll-area.js +1 -1
- package/dist/elements/scroll-button.js +1 -1
- package/dist/elements/search.js +1 -1
- package/dist/elements/segmented.js +1 -1
- package/dist/elements/select.js +1 -1
- package/dist/elements/separator.js +1 -1
- package/dist/elements/setting-item.js +1 -1
- package/dist/elements/settings-group.js +1 -1
- package/dist/elements/skeleton.js +1 -1
- package/dist/elements/slider.js +1 -1
- package/dist/elements/source.js +1 -1
- package/dist/elements/status.js +1 -1
- package/dist/elements/switch.js +1 -1
- package/dist/elements/tabs.js +1 -1
- package/dist/elements/tasks.js +1 -1
- package/dist/elements/text-shimmer.js +1 -1
- package/dist/elements/thinking-bar.js +1 -1
- package/dist/elements/thread.js +1 -1
- package/dist/elements/toast.js +1 -1
- package/dist/elements/tool.js +1 -1
- package/dist/elements/tooltip.js +1 -1
- package/dist/elements/voice-input.js +1 -1
- package/dist/elements/voice-output.js +1 -1
- package/dist/{ellipsis-CbOpJnU3.js → ellipsis-6pJ7SxYT.js} +1 -1
- package/dist/{embed-CrfjkbUG.js → embed-BMje-nxj.js} +1 -1
- package/dist/engine-javascript-C1x7zo1_.js +1 -141
- package/dist/{external-link-ByXAwBBQ.js → external-link-Beh9DKeR.js} +1 -1
- package/dist/{file-text-DMib2qwt.js → file-text-D1GPfZ8Q.js} +1 -1
- package/dist/{file-tree-CJqM2aP7.js → file-tree-Dwj2lqg-.js} +1 -1
- package/dist/{folder-_BAb929C.js → folder-b6D8x1DY.js} +1 -1
- package/dist/{form-DSZgZQZk.js → form-DWgdxDXu.js} +1 -1
- package/dist/{hover-card-BQbul9eq.js → hover-card-CWRkqm40.js} +1 -1
- package/dist/{icon-CdcfRhYI.js → icon-CL0jdhsf.js} +1 -1
- package/dist/index.js +1741 -1725
- package/dist/index.server.js +1582 -1566
- package/dist/{info-DsFjGuI_.js → info-0cOUherQ.js} +1 -1
- package/dist/{input-DKbmkMos.js → input-BH6Ru91Q.js} +1 -1
- package/dist/kai.es.js +1 -1
- package/dist/{kbd-PvdGhX4s.js → kbd-DRAnVtNX.js} +1 -1
- package/dist/{link-zF8PzWfF.js → link-Dlr0vssB.js} +1 -1
- package/dist/{link-preview-DbM1866N.js → link-preview-DODgRyV9.js} +1 -1
- package/dist/loader-KvJB6NrT.js +1 -0
- package/dist/{markdown-LMvmAyBk.js → markdown-DX9tuJVj.js} +1 -1
- package/dist/mcp.es.js +9 -5
- package/dist/{message-BYZECyek.js → message-BqQ7Ot5q.js} +1 -1
- package/dist/{message-BSsgvHvf.js → message-DkaGfBd8.js} +1 -1
- package/dist/message-circle-BPpp5QKv.js +1 -0
- package/dist/message-square-BLbsd9BJ.js +1 -0
- package/dist/{minimize-2-BQRoBV1V.js → minimize-2-CyOHJwcN.js} +1 -1
- package/dist/{model-switcher-CMpCOYcB.js → model-switcher-0hrKDiK2.js} +1 -1
- package/dist/{overlay-Cb-MkyDa.js → overlay-DBMFXie6.js} +1 -1
- package/dist/{panel-right-i8warFxT.js → panel-right-t8SWJL6e.js} +1 -1
- package/dist/{paperclip-ByY3UVO6.js → paperclip-CdzuOjbU.js} +1 -1
- package/dist/play-BXy1u7rW.js +1 -0
- package/dist/primitives/use-auto-resize.d.ts +11 -0
- package/dist/{progress-bar-jVAHvMUf.js → progress-bar-CiBtxMWT.js} +1 -1
- package/dist/{prompt-suggestion-CD-qtNgC.js → prompt-suggestion-I_DHP21i.js} +1 -1
- package/dist/{radio-BsoBMhkF.js → radio-C_p3n39l.js} +1 -1
- package/dist/{reasoning-4kBPtlTx.js → reasoning-BDwy_tIe.js} +1 -1
- package/dist/register-impl-DvEnhIxx.js +424 -0
- package/dist/{resizable-uPmY9VY-.js → resizable-SYC-fStM.js} +1 -1
- package/dist/{rotate-ccw-B2xn93py.js → rotate-ccw-B1nwmwuY.js} +1 -1
- package/dist/{rotate-cw-CMVLoCyH.js → rotate-cw-CLAnBcm1.js} +1 -1
- package/dist/{scroll-area-BqLUo8ZZ.js → scroll-area-zRyXoLhI.js} +1 -1
- package/dist/{scroll-button-DslXiJyL.js → scroll-button-jzrbYCG9.js} +1 -1
- package/dist/{select-2cLRtPGT.js → select-DM-0nEe0.js} +1 -1
- package/dist/{separator-BWQtNJcM.js → separator-BToOOoOt.js} +1 -1
- package/dist/{settings-BBR63jLg.js → settings-PaGo_S4U.js} +1 -1
- package/dist/{settings-group-B2ciy-Iw.js → settings-group-BFXGIfXq.js} +1 -1
- package/dist/{skeleton-CkHI-HgC.js → skeleton-DYpmFnnm.js} +1 -1
- package/dist/{slider-DDR9U-i0.js → slider-ebutAmkQ.js} +1 -1
- package/dist/{solid-DruVOXnf.js → solid-15v_3WVL.js} +3563 -3412
- package/dist/{solid-BzCFdL25.js → solid-5P-otgdi.js} +4502 -4296
- package/dist/solid.d.ts +6 -0
- package/dist/solid.js +259 -254
- package/dist/solid.server.js +259 -254
- package/dist/{source-GEnFF528.js → source-c1gpRl9h.js} +1 -1
- package/dist/{star-CilHq8GP.js → star-pcV_3LqF.js} +1 -1
- package/dist/{store-Ciyk6eZG.js → store-CSgbFFCg.js} +1 -1
- package/dist/{switch-KkeQIbuH.js → switch-Bh2OdLV2.js} +1 -1
- package/dist/{tasks-card-BrN4bggJ.js → tasks-card-CbqQAn2S.js} +1 -1
- package/dist/text-shimmer-BSzgEnDH.js +1 -0
- package/dist/textarea-DrYNt_0z.js +1 -0
- package/dist/theme.tokens.css +22 -21
- package/dist/{thumbs-up-CsT9Wzb9.js → thumbs-up-BL3-NenK.js} +1 -1
- package/dist/{toast-store-tgK6MuMv.js → toast-store-DkOlYczt.js} +1 -1
- package/dist/{tool-DzUjIBT8.js → tool-CeIWUVUe.js} +1 -1
- package/dist/{tooltip-Bkkg_4t0.js → tooltip-GA-nmg06.js} +1 -1
- package/dist/{trash-2-jBKxjGGQ.js → trash-2-CT66QWlm.js} +1 -1
- package/dist/{triangle-alert-DlQ68ppf.js → triangle-alert-CeHLWxhD.js} +1 -1
- package/dist/ui/color-field.d.ts +48 -0
- package/dist/ui/textarea.d.ts +4 -0
- package/dist/ui/toggle-chip.d.ts +40 -0
- package/dist/{upload-TcAHXv9W.js → upload-9Csb0F0J.js} +1 -1
- package/dist/{use-card-resolution-DaZqAdWf.js → use-card-resolution-Zg0a08Z-.js} +1 -1
- package/dist/{variant-aurora-DbW_OWL2.js → variant-aurora-4VBQHIKV.js} +1 -1
- package/dist/{variant-aurora-CNmfHhcx.js → variant-aurora-DBeCAQNk.js} +2 -2
- package/dist/{variant-aurora-D6GsdTPA.js → variant-aurora-FzHVXHby.js} +2 -2
- package/dist/{variant-aurora-BhLuYxJR.js → variant-aurora-LE3fqxgw.js} +1 -1
- package/dist/{variant-custom-BvYHR62b.js → variant-custom-AFRGcOBS.js} +1 -1
- package/dist/{variant-custom-DV2x254s.js → variant-custom-BQkNuPpE.js} +2 -2
- package/dist/{variant-custom-BRvaNHSi.js → variant-custom-DI5R0rln.js} +1 -1
- package/dist/{variant-custom-DMTrEO5w.js → variant-custom-WWnrrRHS.js} +2 -2
- package/dist/{variant-wave-CyBueXj9.js → variant-wave-DUCbH5oI.js} +2 -2
- package/dist/{variant-wave-BNMGrDfj.js → variant-wave-DuQV7DhQ.js} +2 -2
- package/dist/{variant-wave-BpDd8t3Z.js → variant-wave-nSI2sfII.js} +1 -1
- package/dist/{variant-wave-sp-qwsdI.js → variant-wave-wTP5v_jU.js} +1 -1
- package/dist/x-eiO9V6J6.js +1 -0
- package/{src/elements/styles.css → kit-base.css} +27 -44
- package/package.json +32 -17
- package/solid.css +33 -0
- package/theme.css +39 -23
- package/bin/route.test.js +0 -58
- package/dist/arrow-down-CjRU3JgV.js +0 -1
- package/dist/arrow-left-Bnpb1UEW.js +0 -1
- package/dist/artifact-Bwt7OgcR.js +0 -1
- package/dist/check-njkVdZu2.js +0 -1
- package/dist/chevron-down-B72s6PXR.js +0 -1
- package/dist/chevron-right-BatuHzUm.js +0 -1
- package/dist/circle-check-B62pODB3.js +0 -1
- package/dist/circle-zx0ByzY9.js +0 -1
- package/dist/controllable-CnGpMF6r.js +0 -1
- package/dist/define-By-uL588.js +0 -1
- package/dist/loader-BM4CEz4G.js +0 -1
- package/dist/message-circle-DruwObfX.js +0 -1
- package/dist/message-square-BG6q6mlm.js +0 -1
- package/dist/play-BvKKq3fX.js +0 -1
- package/dist/register-impl-B1hLkrI8.js +0 -424
- package/dist/text-shimmer-Dcj1MHuq.js +0 -1
- package/dist/textarea-Dpvbngbg.js +0 -1
- package/dist/x-Z5UntkIJ.js +0 -1
- package/src/agent-tooling/README.md +0 -192
- package/src/agent-tooling/archetypes.ts +0 -205
- package/src/agent-tooling/catalog/README.md +0 -676
- package/src/agent-tooling/catalog/catalog-types.ts +0 -231
- package/src/agent-tooling/catalog/fabrications.ts +0 -96
- package/src/agent-tooling/catalog/invariants.ts +0 -284
- package/src/agent-tooling/catalog/labs-titles.ts +0 -114
- package/src/agent-tooling/catalog/scenarios.ts +0 -87
- package/src/agent-tooling/catalog/surfaces.ts +0 -347
- package/src/agent-tooling/construct/cli-entry.ts +0 -8
- package/src/agent-tooling/construct/cli.ts +0 -147
- package/src/agent-tooling/construct/codegen.ts +0 -1635
- package/src/agent-tooling/construct/construct.v1.schema.json +0 -319
- package/src/agent-tooling/construct/dev.ts +0 -148
- package/src/agent-tooling/construct/fixtures/demo-widget.construct.json +0 -7
- package/src/agent-tooling/construct/fixtures/ops-console.construct.json +0 -44
- package/src/agent-tooling/construct/fixtures/owner-widget.construct.json +0 -32
- package/src/agent-tooling/construct/schema.ts +0 -452
- package/src/agent-tooling/integrations/anthropic.ts +0 -442
- package/src/agent-tooling/integrations/cloudflare.ts +0 -218
- package/src/agent-tooling/integrations/langgraph.ts +0 -133
- package/src/agent-tooling/integrations/mastra.ts +0 -182
- package/src/agent-tooling/integrations/mock.ts +0 -148
- package/src/agent-tooling/integrations/ollama.ts +0 -97
- package/src/agent-tooling/integrations/openai.ts +0 -95
- package/src/agent-tooling/integrations/openrouter.ts +0 -82
- package/src/agent-tooling/integrations/pi.ts +0 -176
- package/src/agent-tooling/integrations/pydantic-ai.ts +0 -108
- package/src/agent-tooling/integrations/vercel-ai-sdk.ts +0 -398
- package/src/agent-tooling/mcp/css-raw.d.ts +0 -12
- package/src/agent-tooling/mcp/manifest.ts +0 -422
- package/src/agent-tooling/mcp/server.ts +0 -116
- package/src/agent-tooling/mcp/stdio.ts +0 -18
- package/src/agent-tooling/mcp/tools/construct.ts +0 -130
- package/src/agent-tooling/mcp/tools/debug.ts +0 -621
- package/src/agent-tooling/mcp/tools/reference.ts +0 -980
- package/src/agent-tooling/mcp/tools/scaffold.ts +0 -6708
- package/src/agent-tooling/mcp/tools/theme.ts +0 -456
- package/src/agent-tooling/mcp/tools/types.ts +0 -14
- package/src/agent-tooling/mcp/validate-args.ts +0 -141
- package/src/agent-tooling/recipes/composed-thread.ts +0 -714
- package/src/agent-tooling/recipes/index.ts +0 -22
- package/src/agent-tooling/recipes/types.ts +0 -32
- package/src/agent-tooling/registry.ts +0 -132
- package/src/agent-tooling/route-emit.ts +0 -305
- package/src/agent-tooling/types.ts +0 -390
- package/src/components/artifact-card.tsx +0 -120
- package/src/components/artifact.tsx +0 -914
- package/src/components/attachment-types.ts +0 -66
- package/src/components/attachments.tsx +0 -536
- package/src/components/audio-visualizer/audio-visualizer.voice-fixture.ts +0 -257
- package/src/components/audio-visualizer/aurora.glsl.ts +0 -330
- package/src/components/audio-visualizer/fit-scale.ts +0 -112
- package/src/components/audio-visualizer/index.tsx +0 -528
- package/src/components/audio-visualizer/labs/lab-choreography.ts +0 -187
- package/src/components/audio-visualizer/labs/lab-shaders.ts +0 -363
- package/src/components/audio-visualizer/labs/lab-visualizer.tsx +0 -102
- package/src/components/audio-visualizer/shader-canvas.tsx +0 -876
- package/src/components/audio-visualizer/sizes.ts +0 -54
- package/src/components/audio-visualizer/variant-aurora.tsx +0 -305
- package/src/components/audio-visualizer/variant-bar.tsx +0 -175
- package/src/components/audio-visualizer/variant-custom.tsx +0 -344
- package/src/components/audio-visualizer/variant-grid.tsx +0 -175
- package/src/components/audio-visualizer/variant-radial.tsx +0 -163
- package/src/components/audio-visualizer/variant-wave.tsx +0 -130
- package/src/components/audio-visualizer/wave.glsl.ts +0 -130
- package/src/components/card-fallback.tsx +0 -60
- package/src/components/card-renderer.tsx +0 -220
- package/src/components/card.tsx +0 -212
- package/src/components/chain-of-thought.tsx +0 -348
- package/src/components/chat-container.tsx +0 -89
- package/src/components/chat-scope-picker.tsx +0 -57
- package/src/components/chat-thread.tsx +0 -1014
- package/src/components/checkpoint.tsx +0 -88
- package/src/components/choice-card.tsx +0 -743
- package/src/components/coachmark.tsx +0 -249
- package/src/components/code-block.tsx +0 -181
- package/src/components/composer-dom.ts +0 -159
- package/src/components/composer-highlight.ts +0 -242
- package/src/components/composer-history.ts +0 -82
- package/src/components/composer.tsx +0 -1075
- package/src/components/confirm-card.tsx +0 -402
- package/src/components/context.tsx +0 -377
- package/src/components/conversation-item.tsx +0 -241
- package/src/components/conversation-list.tsx +0 -429
- package/src/components/conversation-panel.tsx +0 -118
- package/src/components/dismissed-stub.tsx +0 -80
- package/src/components/embed.tsx +0 -200
- package/src/components/empty.tsx +0 -177
- package/src/components/feedback-bar.tsx +0 -166
- package/src/components/file-tree.tsx +0 -530
- package/src/components/file-upload.tsx +0 -167
- package/src/components/form-widgets.tsx +0 -525
- package/src/components/form.tsx +0 -1296
- package/src/components/home-panel.tsx +0 -159
- package/src/components/image.tsx +0 -65
- package/src/components/link-preview.tsx +0 -195
- package/src/components/loader.tsx +0 -367
- package/src/components/markdown.tsx +0 -162
- package/src/components/message-skills.tsx +0 -40
- package/src/components/message.tsx +0 -765
- package/src/components/model-switcher.tsx +0 -132
- package/src/components/prompt-input.tsx +0 -188
- package/src/components/prompt-suggestion.tsx +0 -150
- package/src/components/reasoning.tsx +0 -293
- package/src/components/response-compare-types.ts +0 -152
- package/src/components/response-compare.tsx +0 -455
- package/src/components/response-stream.tsx +0 -109
- package/src/components/screen.tsx +0 -181
- package/src/components/scroll-button.tsx +0 -93
- package/src/components/source.tsx +0 -192
- package/src/components/tasks-card.tsx +0 -801
- package/src/components/text-shimmer.tsx +0 -37
- package/src/components/thinking-bar.tsx +0 -50
- package/src/components/thread.tsx +0 -228
- package/src/components/toast.tsx +0 -503
- package/src/components/tool-classify.ts +0 -26
- package/src/components/tool-types.ts +0 -49
- package/src/components/tool.tsx +0 -190
- package/src/components/use-card-resolution.ts +0 -44
- package/src/components/voice-input.tsx +0 -222
- package/src/components/voice-output.tsx +0 -242
- package/src/components/widget-tab-bar.tsx +0 -73
- package/src/components/workspace-shell.tsx +0 -285
- package/src/diagnostics/hook.ts +0 -352
- package/src/diagnostics/index.ts +0 -82
- package/src/diagnostics/report-request.ts +0 -296
- package/src/elements/agent-card.tsx +0 -67
- package/src/elements/artifact.tsx +0 -194
- package/src/elements/attachments.tsx +0 -140
- package/src/elements/audio-visualizer.tsx +0 -227
- package/src/elements/autoloader.ts +0 -89
- package/src/elements/avatar.tsx +0 -33
- package/src/elements/badge.tsx +0 -32
- package/src/elements/button.tsx +0 -149
- package/src/elements/card.tsx +0 -133
- package/src/elements/cards.tsx +0 -266
- package/src/elements/chain-of-thought.tsx +0 -141
- package/src/elements/chat-scope-picker.tsx +0 -65
- package/src/elements/chat-types.ts +0 -102
- package/src/elements/chat-workspace.tsx +0 -188
- package/src/elements/chat.tsx +0 -304
- package/src/elements/checkbox-group.tsx +0 -164
- package/src/elements/checkbox.tsx +0 -134
- package/src/elements/checkpoint.tsx +0 -47
- package/src/elements/choice.tsx +0 -100
- package/src/elements/coachmark.tsx +0 -90
- package/src/elements/code-block.tsx +0 -60
- package/src/elements/command.tsx +0 -197
- package/src/elements/compare.tsx +0 -111
- package/src/elements/compiled.css +0 -2
- package/src/elements/composer.tsx +0 -162
- package/src/elements/confirm-card.tsx +0 -76
- package/src/elements/context-meter.tsx +0 -107
- package/src/elements/conversation-item.tsx +0 -120
- package/src/elements/conversation-list.tsx +0 -203
- package/src/elements/css.ts +0 -5
- package/src/elements/default-input.tsx +0 -392
- package/src/elements/define-entry.ts +0 -12
- package/src/elements/define.tsx +0 -563
- package/src/elements/diagnostic-events.ts +0 -114
- package/src/elements/dialog.tsx +0 -145
- package/src/elements/disclosure.ts +0 -95
- package/src/elements/dock.tsx +0 -215
- package/src/elements/dropdown.tsx +0 -123
- package/src/elements/editable-label.tsx +0 -140
- package/src/elements/element-data-types.ts +0 -152
- package/src/elements/element-diagnostics.ts +0 -392
- package/src/elements/element-manifest.json +0 -354
- package/src/elements/element-nonscalar.json +0 -187
- package/src/elements/element-types.d.ts +0 -4353
- package/src/elements/embed.tsx +0 -35
- package/src/elements/empty.tsx +0 -29
- package/src/elements/feedback-bar.tsx +0 -66
- package/src/elements/file-tree.tsx +0 -62
- package/src/elements/file-upload.tsx +0 -44
- package/src/elements/form.tsx +0 -94
- package/src/elements/hover-card.tsx +0 -80
- package/src/elements/icon.tsx +0 -41
- package/src/elements/image.tsx +0 -32
- package/src/elements/input.tsx +0 -492
- package/src/elements/kbd.tsx +0 -45
- package/src/elements/link-preview.tsx +0 -34
- package/src/elements/loader.tsx +0 -25
- package/src/elements/markdown.tsx +0 -38
- package/src/elements/menu.tsx +0 -241
- package/src/elements/message-skills.tsx +0 -83
- package/src/elements/message.tsx +0 -361
- package/src/elements/model-switcher.tsx +0 -121
- package/src/elements/nav.tsx +0 -87
- package/src/elements/notice.tsx +0 -53
- package/src/elements/pane-grid.tsx +0 -111
- package/src/elements/pane-group.tsx +0 -119
- package/src/elements/pane.tsx +0 -129
- package/src/elements/popover.tsx +0 -81
- package/src/elements/progress-bar.tsx +0 -39
- package/src/elements/prompt-dock.tsx +0 -82
- package/src/elements/prompt-input.tsx +0 -240
- package/src/elements/prompt-suggestions.tsx +0 -113
- package/src/elements/radio-group.tsx +0 -129
- package/src/elements/reasoning.tsx +0 -71
- package/src/elements/register-impl.ts +0 -148
- package/src/elements/register.ts +0 -76
- package/src/elements/remote.tsx +0 -225
- package/src/elements/resizable.globals.d.ts +0 -36
- package/src/elements/resizable.tsx +0 -704
- package/src/elements/response-stream.tsx +0 -40
- package/src/elements/screen.tsx +0 -90
- package/src/elements/scroll-area.tsx +0 -33
- package/src/elements/scroll-button.tsx +0 -179
- package/src/elements/search.tsx +0 -185
- package/src/elements/segmented.tsx +0 -129
- package/src/elements/select.tsx +0 -165
- package/src/elements/separator.tsx +0 -36
- package/src/elements/setting-item.tsx +0 -50
- package/src/elements/settings-group.tsx +0 -37
- package/src/elements/skeleton.tsx +0 -45
- package/src/elements/slider.tsx +0 -171
- package/src/elements/slot-text.ts +0 -73
- package/src/elements/slots.ts +0 -787
- package/src/elements/source.tsx +0 -126
- package/src/elements/status.tsx +0 -42
- package/src/elements/switch.tsx +0 -118
- package/src/elements/tabs.tsx +0 -95
- package/src/elements/tasks.tsx +0 -103
- package/src/elements/text-shimmer.tsx +0 -28
- package/src/elements/thinking-bar.tsx +0 -43
- package/src/elements/thread.tsx +0 -139
- package/src/elements/toast.tsx +0 -106
- package/src/elements/tool.tsx +0 -78
- package/src/elements/tooltip.tsx +0 -85
- package/src/elements/validate-messages.ts +0 -76
- package/src/elements/voice-input.tsx +0 -100
- package/src/elements/voice-output.tsx +0 -82
- package/src/index.ts +0 -430
- package/src/primitives/audio-bands.ts +0 -174
- package/src/primitives/card-component-types.ts +0 -63
- package/src/primitives/card-contract.ts +0 -80
- package/src/primitives/card-data-types.ts +0 -361
- package/src/primitives/card-host.tsx +0 -37
- package/src/primitives/card-recovery.ts +0 -160
- package/src/primitives/card-registry.tsx +0 -78
- package/src/primitives/card-resolution.ts +0 -36
- package/src/primitives/card-routing.ts +0 -85
- package/src/primitives/card-schemas/artifact.schema.json +0 -92
- package/src/primitives/card-schemas/card-envelope.schema.json +0 -14
- package/src/primitives/card-schemas/card-event.schema.json +0 -12
- package/src/primitives/card-schemas/choice.schema.json +0 -75
- package/src/primitives/card-schemas/confirm.schema.json +0 -65
- package/src/primitives/card-schemas/embed.schema.json +0 -63
- package/src/primitives/card-schemas/form.result.schema.json +0 -7
- package/src/primitives/card-schemas/form.schema.json +0 -53
- package/src/primitives/card-schemas/link.schema.json +0 -54
- package/src/primitives/card-schemas/tasks.result.schema.json +0 -16
- package/src/primitives/card-schemas/tasks.schema.json +0 -83
- package/src/primitives/card-tags.ts +0 -61
- package/src/primitives/card-validate-cards.ts +0 -255
- package/src/primitives/card-validate-schemas.ts +0 -58
- package/src/primitives/card-validate.ts +0 -131
- package/src/primitives/chat-config.tsx +0 -103
- package/src/primitives/composer-model.ts +0 -49
- package/src/primitives/composer-triggers.ts +0 -35
- package/src/primitives/controllable.ts +0 -21
- package/src/primitives/conversation-store.ts +0 -248
- package/src/primitives/create-kai-chat.ts +0 -66
- package/src/primitives/create-tween.ts +0 -266
- package/src/primitives/embed-providers.ts +0 -254
- package/src/primitives/field-mask.ts +0 -256
- package/src/primitives/field-semantics.ts +0 -115
- package/src/primitives/highlighter.ts +0 -157
- package/src/primitives/input-mask.ts +0 -853
- package/src/primitives/link-preview.ts +0 -87
- package/src/primitives/message-feedback.ts +0 -124
- package/src/primitives/pdf-preview.ts +0 -121
- package/src/primitives/toast-store.ts +0 -338
- package/src/primitives/url-scheme-policy.ts +0 -70
- package/src/primitives/use-audio-analysis.ts +0 -340
- package/src/primitives/use-auto-resize.ts +0 -31
- package/src/primitives/use-resize-observer.ts +0 -45
- package/src/primitives/use-sequencer.ts +0 -72
- package/src/primitives/use-speech-recognition.ts +0 -146
- package/src/primitives/use-stick-to-bottom.ts +0 -75
- package/src/primitives/use-text-stream.ts +0 -143
- package/src/primitives/use-voice-recorder.ts +0 -62
- package/src/primitives/visualizer-sequences.ts +0 -350
- package/src/remote/host-embed.ts +0 -345
- package/src/remote/index.ts +0 -2
- package/src/remote/origin.ts +0 -30
- package/src/remote/provider-runtime.ts +0 -262
- package/src/remote/provider.ts +0 -2
- package/src/remote/validate.ts +0 -22
- package/src/remote/version.ts +0 -12
- package/src/remote/wire.ts +0 -48
- package/src/schemas/from-tool-call.ts +0 -151
- package/src/schemas/index.ts +0 -341
- package/src/schemas/provider-subsets.ts +0 -538
- package/src/schemas/registry.ts +0 -355
- package/src/schemas/tool-defs.ts +0 -793
- package/src/solid.ts +0 -173
- package/src/state/index.ts +0 -44
- package/src/state/messages.ts +0 -53
- package/src/state/mock.ts +0 -297
- package/src/state/parts.ts +0 -295
- package/src/state/persistence.ts +0 -180
- package/src/state/stream.ts +0 -246
- package/src/state/suggestions.ts +0 -9
- package/src/state/threads.ts +0 -142
- package/src/test-utils/fake-clock.ts +0 -88
- package/src/types.ts +0 -95
- package/src/ui/action-icons.ts +0 -53
- package/src/ui/agent-card.tsx +0 -218
- package/src/ui/avatar.tsx +0 -23
- package/src/ui/badge.tsx +0 -21
- package/src/ui/button.tsx +0 -49
- package/src/ui/card.tsx +0 -245
- package/src/ui/checkbox-group.tsx +0 -153
- package/src/ui/checkbox.tsx +0 -63
- package/src/ui/collapsible.tsx +0 -163
- package/src/ui/command.tsx +0 -103
- package/src/ui/dialog.tsx +0 -223
- package/src/ui/dock.tsx +0 -630
- package/src/ui/dropdown.tsx +0 -636
- package/src/ui/editable-label.tsx +0 -112
- package/src/ui/hover-card.tsx +0 -345
- package/src/ui/icon.tsx +0 -167
- package/src/ui/input.tsx +0 -391
- package/src/ui/kbd.tsx +0 -118
- package/src/ui/nav.tsx +0 -282
- package/src/ui/notice.tsx +0 -84
- package/src/ui/overlay.tsx +0 -277
- package/src/ui/pane-grid.tsx +0 -117
- package/src/ui/pane-group.tsx +0 -291
- package/src/ui/pane.tsx +0 -193
- package/src/ui/popover.tsx +0 -106
- package/src/ui/progress-bar.tsx +0 -83
- package/src/ui/prompt-dock.tsx +0 -145
- package/src/ui/radio.tsx +0 -150
- package/src/ui/resizable.tsx +0 -693
- package/src/ui/scroll-area.tsx +0 -26
- package/src/ui/segmented.tsx +0 -109
- package/src/ui/select.tsx +0 -168
- package/src/ui/separator.tsx +0 -10
- package/src/ui/settings-group.tsx +0 -67
- package/src/ui/skeleton.tsx +0 -73
- package/src/ui/slider.tsx +0 -178
- package/src/ui/status.tsx +0 -48
- package/src/ui/switch.tsx +0 -119
- package/src/ui/tabs.tsx +0 -168
- package/src/ui/textarea.tsx +0 -21
- package/src/ui/tooltip.tsx +0 -118
- package/src/utils/cn.ts +0 -30
- package/src/wire/chunk.ts +0 -248
- package/src/wire/consume.ts +0 -599
- package/src/wire/diagnostics.ts +0 -727
- package/src/wire/encode-probe.ts +0 -214
- package/src/wire/encode.ts +0 -947
- package/src/wire/files.ts +0 -342
- package/src/wire/formats/anthropic.ts +0 -274
- package/src/wire/formats/openai.ts +0 -228
- package/src/wire/index.ts +0 -95
- package/src/wire/media-types.ts +0 -344
- package/src/wire/read.ts +0 -396
- package/src/wire/sink-helpers.ts +0 -50
- package/src/wire/sse.ts +0 -153
package/src/elements/source.tsx
DELETED
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
import { createSignal, For, onCleanup, onMount, Show } from 'solid-js';
|
|
2
|
-
import { defineWebComponent } from './define';
|
|
3
|
-
import { Source, SourceTrigger, SourceContent, SourceList } from '../components/source';
|
|
4
|
-
// Public shape of the `sources` prop; lives in ./element-data-types so the ROOT
|
|
5
|
-
// entry can re-export it (see that file's header).
|
|
6
|
-
import type { KaiSourceItem } from './element-data-types';
|
|
7
|
-
|
|
8
|
-
// --- <kai-source> — a single citation link with hover preview ---
|
|
9
|
-
|
|
10
|
-
interface SourceProps extends Record<string, unknown> {
|
|
11
|
-
/** The URL this citation links to (the domain also seeds the default label/favicon). */
|
|
12
|
-
href?: string;
|
|
13
|
-
/** Trigger label (defaults to the domain). */
|
|
14
|
-
label?: string;
|
|
15
|
-
/** Hover-card headline. Attribute: `headline` (`title` is avoided because it
|
|
16
|
-
* is a global HTML attribute that reflects in a CE constructor and breaks
|
|
17
|
-
* it). */
|
|
18
|
-
headline?: string;
|
|
19
|
-
/** Hover-card body text describing the source. */
|
|
20
|
-
description?: string;
|
|
21
|
-
/** Show the source's favicon next to the trigger label. */
|
|
22
|
-
showFavicon?: boolean;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
defineWebComponent<SourceProps>('kai-source', {
|
|
26
|
-
href: '',
|
|
27
|
-
label: undefined,
|
|
28
|
-
headline: '',
|
|
29
|
-
description: '',
|
|
30
|
-
showFavicon: false,
|
|
31
|
-
}, (props, { flag }) => (
|
|
32
|
-
<>
|
|
33
|
-
{/* The shared element base sets `:host{display:block}` (styles.css). A block host
|
|
34
|
-
makes each citation chip its own line box, so inline `[n]` markers stack and
|
|
35
|
-
push the trailing prose/period to a new line. inline-flex (like kai-button /
|
|
36
|
-
kai-tooltip) drops the line box so the chip flows inline with the answer text. */}
|
|
37
|
-
<style>{':host{display:inline-flex}'}</style>
|
|
38
|
-
<Show when={props.href}>
|
|
39
|
-
<Source href={props.href!}>
|
|
40
|
-
<SourceTrigger label={props.label} showFavicon={flag('showFavicon')} />
|
|
41
|
-
<SourceContent title={props.headline ?? ''} description={props.description ?? ''} />
|
|
42
|
-
</Source>
|
|
43
|
-
</Show>
|
|
44
|
-
</>
|
|
45
|
-
));
|
|
46
|
-
|
|
47
|
-
// --- <kai-sources> — a wrapped list of citation links ---
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
interface SourceListProps extends Record<string, unknown> {
|
|
51
|
-
/** The sources to render. Set as a JS property. Omit to supply them as
|
|
52
|
-
* `<kai-source>` light-DOM children instead; when both are present the
|
|
53
|
-
* property's sources come first. */
|
|
54
|
-
sources?: KaiSourceItem[];
|
|
55
|
-
/** Show favicons on all items (per-item `showFavicon` overrides). */
|
|
56
|
-
showFavicon?: boolean;
|
|
57
|
-
/**
|
|
58
|
-
* When true, each citation chip is labelled with its 1-based index in the
|
|
59
|
-
* merged (prop + declarative-children) list (`[1]`, `[2]`, …) instead of the
|
|
60
|
-
* per-item `label` or domain fallback.
|
|
61
|
-
*
|
|
62
|
-
* HTML attribute: `numbered` (boolean: a bare attribute or
|
|
63
|
-
* `numbered="true"`). JS property: `el.numbered = true`.
|
|
64
|
-
*/
|
|
65
|
-
numbered?: boolean;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/** Parse a single light-DOM `<kai-source>` element into a `KaiSourceItem` descriptor.
|
|
69
|
-
* Attribute mapping:
|
|
70
|
-
* - `href` → KaiSourceItem.href
|
|
71
|
-
* - `label` → KaiSourceItem.label
|
|
72
|
-
* - `headline` → KaiSourceItem.title (matches kai-source's prop name; "title" is a
|
|
73
|
-
* reserved HTMLElement attribute so kai-source uses "headline")
|
|
74
|
-
* - `description` → KaiSourceItem.description
|
|
75
|
-
* - `show-favicon`→ KaiSourceItem.showFavicon (bare boolean attribute)
|
|
76
|
-
*/
|
|
77
|
-
export function parseKaiSourceElement(n: Element): KaiSourceItem {
|
|
78
|
-
return {
|
|
79
|
-
href: n.getAttribute('href') ?? '',
|
|
80
|
-
label: n.getAttribute('label') ?? undefined,
|
|
81
|
-
title: n.getAttribute('headline') ?? undefined,
|
|
82
|
-
description: n.getAttribute('description') ?? undefined,
|
|
83
|
-
showFavicon: n.hasAttribute('show-favicon') && n.getAttribute('show-favicon') !== 'false',
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
defineWebComponent<SourceListProps>('kai-sources', {
|
|
88
|
-
sources: [],
|
|
89
|
-
showFavicon: false,
|
|
90
|
-
numbered: false,
|
|
91
|
-
}, (props, { element, flag }) => {
|
|
92
|
-
// Read declarative <kai-source> children from light DOM.
|
|
93
|
-
// The shadow root has no <slot> for them, so they are invisible — pure data carriers.
|
|
94
|
-
const [slottedSources, setSlottedSources] = createSignal<KaiSourceItem[]>([]);
|
|
95
|
-
onMount(() => {
|
|
96
|
-
const read = () => {
|
|
97
|
-
const nodes = [...element.querySelectorAll('kai-source')];
|
|
98
|
-
setSlottedSources(nodes.map(parseKaiSourceElement));
|
|
99
|
-
};
|
|
100
|
-
read();
|
|
101
|
-
const observer = new MutationObserver(read);
|
|
102
|
-
observer.observe(element, { childList: true, attributes: true, subtree: true });
|
|
103
|
-
onCleanup(() => observer.disconnect());
|
|
104
|
-
});
|
|
105
|
-
|
|
106
|
-
// Prop sources take precedence; slotted children are appended after.
|
|
107
|
-
const allSources = () => [...(props.sources ?? []), ...slottedSources()];
|
|
108
|
-
|
|
109
|
-
const isNumbered = () => flag('numbered');
|
|
110
|
-
|
|
111
|
-
return (
|
|
112
|
-
<SourceList>
|
|
113
|
-
<For each={allSources()}>
|
|
114
|
-
{(s, i) => (
|
|
115
|
-
<Source href={s.href}>
|
|
116
|
-
<SourceTrigger
|
|
117
|
-
label={isNumbered() ? i() + 1 : s.label}
|
|
118
|
-
showFavicon={s.showFavicon ?? flag('showFavicon')}
|
|
119
|
-
/>
|
|
120
|
-
<SourceContent title={s.title ?? ''} description={s.description ?? ''} />
|
|
121
|
-
</Source>
|
|
122
|
-
)}
|
|
123
|
-
</For>
|
|
124
|
-
</SourceList>
|
|
125
|
-
);
|
|
126
|
-
});
|
package/src/elements/status.tsx
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { defineWebComponent } from './define';
|
|
2
|
-
import { Status, type StatusKind } from '../ui/status';
|
|
3
|
-
|
|
4
|
-
interface Props extends Record<string, unknown> {
|
|
5
|
-
/** Presence/notification state → color. `new` (default) maps to the blue hue. */
|
|
6
|
-
status?: StatusKind;
|
|
7
|
-
/** Animated ping ring (off by default; respects prefers-reduced-motion). */
|
|
8
|
-
pulse?: boolean;
|
|
9
|
-
/** Accessible name. Without it the dot is decorative. */
|
|
10
|
-
label?: string;
|
|
11
|
-
/** `sm` (default) or `md`. */
|
|
12
|
-
size?: 'sm' | 'md';
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* `<kai-status>` — a small presence / new dot.
|
|
17
|
-
*
|
|
18
|
-
* ```html
|
|
19
|
-
* <kai-status status="online" label="Online"></kai-status>
|
|
20
|
-
* <kai-status status="new" pulse></kai-status>
|
|
21
|
-
* ```
|
|
22
|
-
* Recolor via `::part(dot)`.
|
|
23
|
-
*/
|
|
24
|
-
defineWebComponent<Props>('kai-status', {
|
|
25
|
-
status: 'new',
|
|
26
|
-
pulse: false,
|
|
27
|
-
label: undefined,
|
|
28
|
-
size: 'sm',
|
|
29
|
-
}, (props, { flag }) => (
|
|
30
|
-
<>
|
|
31
|
-
{/* Base sets `:host{display:block}`; a presence dot sits inline beside an
|
|
32
|
-
avatar/label, so inline-flex like kai-button. */}
|
|
33
|
-
<style>{':host{display:inline-flex}'}</style>
|
|
34
|
-
<Status
|
|
35
|
-
status={(props.status as StatusKind) ?? 'new'}
|
|
36
|
-
size={(props.size as 'sm' | 'md') ?? 'sm'}
|
|
37
|
-
pulse={flag('pulse')}
|
|
38
|
-
label={props.label as string | undefined}
|
|
39
|
-
part="dot"
|
|
40
|
-
/>
|
|
41
|
-
</>
|
|
42
|
-
));
|
package/src/elements/switch.tsx
DELETED
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
import { createEffect, createSignal, untrack } from 'solid-js';
|
|
2
|
-
import { defineWebComponent } from './define';
|
|
3
|
-
import { Switch } from '../ui/switch';
|
|
4
|
-
|
|
5
|
-
interface Props extends Record<string, unknown> {
|
|
6
|
-
/** Controlled checked state. Settable and reflected to the `checked` attribute.
|
|
7
|
-
* `el.checked = true` (or `<kai-switch checked>`) drives it; the toggle UI updates
|
|
8
|
-
* it and fires `kai-change`. Read `el.checked` for live state. */
|
|
9
|
-
checked?: boolean;
|
|
10
|
-
/** Initial checked state on mount (uncontrolled seed). Bare attribute
|
|
11
|
-
* (`<kai-switch default-checked>`) turns it on. */
|
|
12
|
-
defaultChecked?: boolean;
|
|
13
|
-
/** Disable interaction. */
|
|
14
|
-
disabled?: boolean;
|
|
15
|
-
/** Accessible label. */
|
|
16
|
-
label?: string;
|
|
17
|
-
/** Form-control name (paired with `value`). */
|
|
18
|
-
name?: string;
|
|
19
|
-
/** Submitted value when checked (paired with `name`). Defaults to `'on'`. */
|
|
20
|
-
value?: string;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/** Events fired by `<kai-switch>`. */
|
|
24
|
-
interface Events {
|
|
25
|
-
/** The toggle changed. */
|
|
26
|
-
'kai-change': { checked: boolean };
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* `<kai-switch>` — a toggle switch. Drive/read its state with the `checked`
|
|
31
|
-
* property (settable + reflected to the `checked` attribute, so `:host([checked])`
|
|
32
|
-
* and `el.checked` see live state); seed the initial state with `default-checked`
|
|
33
|
-
* and read changes from `kai-change`.
|
|
34
|
-
*
|
|
35
|
-
* ```html
|
|
36
|
-
* <kai-switch default-checked label="Temporary chat"></kai-switch>
|
|
37
|
-
* <script type="module">
|
|
38
|
-
* import '@kitn.ai/ui/elements';
|
|
39
|
-
* const sw = document.querySelector('kai-switch');
|
|
40
|
-
* sw.addEventListener('kai-change', (e) => console.log(e.detail.checked));
|
|
41
|
-
* sw.checked = false; // drive it (no kai-change — the host already knows)
|
|
42
|
-
* sw.toggle(); // flip it (fires kai-change)
|
|
43
|
-
* </script>
|
|
44
|
-
* ```
|
|
45
|
-
*/
|
|
46
|
-
defineWebComponent<Props, Events>('kai-switch', {
|
|
47
|
-
checked: undefined,
|
|
48
|
-
defaultChecked: undefined,
|
|
49
|
-
disabled: undefined,
|
|
50
|
-
label: undefined,
|
|
51
|
-
name: undefined,
|
|
52
|
-
value: undefined,
|
|
53
|
-
}, (props, ctx) => {
|
|
54
|
-
const { element, dispatch, flag, expose } = ctx;
|
|
55
|
-
|
|
56
|
-
// Lift the on/off state into the facade and drive the Switch CONTROLLED so the
|
|
57
|
-
// host can read it (`el.checked` / `:host([checked])`) and set it after mount.
|
|
58
|
-
// Seed from `defaultChecked` (or a bare `checked` attribute present on mount).
|
|
59
|
-
const [checked, setChecked] = createSignal(flag('defaultChecked') || flag('checked'));
|
|
60
|
-
|
|
61
|
-
// Coerce any value coming through the `checked` setter (a JS assignment, or the
|
|
62
|
-
// write-back from `attributeChangedCallback` when the attribute changes) to a
|
|
63
|
-
// boolean — falling back to attribute presence, matching `flag`'s semantics. An
|
|
64
|
-
// `undefined` write-back (which `toggleAttribute` triggers) thus resolves to the
|
|
65
|
-
// attribute we just wrote, so it equals the signal and the equality guard below
|
|
66
|
-
// absorbs it — no attr⇄prop feedback loop (the pattern hover-card uses for `open`).
|
|
67
|
-
const coerce = (v: unknown): boolean =>
|
|
68
|
-
v === true ? true
|
|
69
|
-
: v === false ? false
|
|
70
|
-
: element.hasAttribute('checked') && element.getAttribute('checked') !== 'false';
|
|
71
|
-
|
|
72
|
-
// Apply a new checked state and fire kai-change once (the toggle UI / `toggle()`
|
|
73
|
-
// path). No-op while disabled.
|
|
74
|
-
const apply = (next: boolean) => {
|
|
75
|
-
if (flag('disabled')) return;
|
|
76
|
-
if (untrack(checked) === next) return;
|
|
77
|
-
setChecked(next);
|
|
78
|
-
dispatch('kai-change', { checked: next });
|
|
79
|
-
};
|
|
80
|
-
|
|
81
|
-
// Override the `checked` property so reads return LIVE state (the signal) and
|
|
82
|
-
// host writes (`el.checked = …`) drive it WITHOUT firing kai-change — distinct
|
|
83
|
-
// from the user-toggle path. The equality guard kills the reflect write-back loop.
|
|
84
|
-
Object.defineProperty(element, 'checked', {
|
|
85
|
-
get: () => checked(),
|
|
86
|
-
set: (v: unknown) => { const next = coerce(v); if (untrack(checked) !== next) setChecked(next); },
|
|
87
|
-
configurable: true,
|
|
88
|
-
enumerable: true,
|
|
89
|
-
});
|
|
90
|
-
|
|
91
|
-
// Reflect internal checked → the `[checked]` host attribute (for `:host([checked])`).
|
|
92
|
-
// The equality guard against the live attribute keeps the write-back the toggle
|
|
93
|
-
// triggers (attributeChangedCallback → setter) from looping (mirrors
|
|
94
|
-
// wireDisclosure's reflect structure).
|
|
95
|
-
createEffect(() => {
|
|
96
|
-
const c = checked();
|
|
97
|
-
if (c !== element.hasAttribute('checked')) element.toggleAttribute('checked', c);
|
|
98
|
-
});
|
|
99
|
-
|
|
100
|
-
expose({
|
|
101
|
-
/** Flip the switch and fire `kai-change` (no-op while disabled). */
|
|
102
|
-
toggle: () => apply(!untrack(checked)),
|
|
103
|
-
/** Focus the inner `role="switch"` button (the host element can't reach it). */
|
|
104
|
-
focus: (options?: FocusOptions) =>
|
|
105
|
-
element.shadowRoot?.querySelector<HTMLButtonElement>('button[role="switch"]')?.focus(options),
|
|
106
|
-
});
|
|
107
|
-
|
|
108
|
-
return (
|
|
109
|
-
<Switch
|
|
110
|
-
checked={checked()}
|
|
111
|
-
disabled={flag('disabled')}
|
|
112
|
-
label={props.label as string | undefined}
|
|
113
|
-
name={props.name as string | undefined}
|
|
114
|
-
value={props.value as string | undefined}
|
|
115
|
-
onChange={(next) => apply(next)}
|
|
116
|
-
/>
|
|
117
|
-
);
|
|
118
|
-
});
|
package/src/elements/tabs.tsx
DELETED
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
import { createSignal } from 'solid-js';
|
|
2
|
-
import { defineWebComponent } from './define';
|
|
3
|
-
import { Tabs, type KaiTabItem, type TabsVariant } from '../ui/tabs';
|
|
4
|
-
|
|
5
|
-
interface Props extends Record<string, unknown> {
|
|
6
|
-
/** Tabs to render. Set as a JS property, not an HTML attribute. */
|
|
7
|
-
items?: KaiTabItem[];
|
|
8
|
-
/** Controlled selected id. Set as a JS property (or the `value` attribute);
|
|
9
|
-
* drive it from your app in response to `kai-tab-change`. Omit for uncontrolled. */
|
|
10
|
-
value?: string;
|
|
11
|
-
/** Initial selected id when uncontrolled (use the `default-value` attribute in plain HTML). */
|
|
12
|
-
defaultValue?: string;
|
|
13
|
-
/** `segmented` (default, a pill group) or `underline` (an underlined row). */
|
|
14
|
-
variant?: TabsVariant;
|
|
15
|
-
/** Stretch the strip to full width, each tab sharing the space equally. */
|
|
16
|
-
block?: boolean;
|
|
17
|
-
/** Disable the whole strip. */
|
|
18
|
-
disabled?: boolean;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
interface Events {
|
|
22
|
-
/** A tab was selected (click, Enter/Space, or arrow-key move). `value` is the item's id. */
|
|
23
|
-
'kai-tab-change': { value: string };
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* `<kai-tabs>`, an accessible tab strip. Selection only: it emits the chosen id;
|
|
28
|
-
* you render what each tab shows (this is not a content router).
|
|
29
|
-
*
|
|
30
|
-
* Set the `items` property in JavaScript (array, not attribute):
|
|
31
|
-
*
|
|
32
|
-
* ```html
|
|
33
|
-
* <kai-tabs default-value="chat"></kai-tabs>
|
|
34
|
-
* <script type="module">
|
|
35
|
-
* import '@kitn.ai/ui/elements';
|
|
36
|
-
* const tabs = document.querySelector('kai-tabs');
|
|
37
|
-
* tabs.items = [
|
|
38
|
-
* { id: 'chat', label: 'Chat', icon: 'message-circle' },
|
|
39
|
-
* { id: 'cowork', label: 'Cowork' },
|
|
40
|
-
* { id: 'code', label: 'Code', icon: 'code' },
|
|
41
|
-
* ];
|
|
42
|
-
* tabs.addEventListener('kai-tab-change', (e) => console.log(e.detail.value));
|
|
43
|
-
* </script>
|
|
44
|
-
* ```
|
|
45
|
-
*
|
|
46
|
-
* Each tab carries a stable `id`, so you can wire `aria-controls` on the tab and
|
|
47
|
-
* `aria-labelledby` on your own panel. Style the active tab via `::part(tab)[data-active]`.
|
|
48
|
-
*/
|
|
49
|
-
defineWebComponent<Props, Events>('kai-tabs', {
|
|
50
|
-
items: undefined,
|
|
51
|
-
value: undefined,
|
|
52
|
-
defaultValue: undefined,
|
|
53
|
-
variant: 'segmented',
|
|
54
|
-
block: undefined,
|
|
55
|
-
disabled: undefined,
|
|
56
|
-
}, (props, { dispatch, flag, expose }) => {
|
|
57
|
-
// Controlled/uncontrolled selection: `value` (when set) wins; otherwise the
|
|
58
|
-
// element manages its own, seeded from `defaultValue`. `setValueTo` always
|
|
59
|
-
// writes the internal value (a no-op visually while controlled) and emits
|
|
60
|
-
// `kai-tab-change` so a controlling app can update its own state.
|
|
61
|
-
const [internal, setInternal] = createSignal(props.defaultValue as string | undefined);
|
|
62
|
-
const value = () => (props.value as string | undefined) ?? internal();
|
|
63
|
-
const setValueTo = (next: string) => {
|
|
64
|
-
setInternal(next);
|
|
65
|
-
dispatch('kai-tab-change', { value: next });
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
let listRef: HTMLDivElement | undefined;
|
|
69
|
-
expose({
|
|
70
|
-
/** Select a tab by id (fires `kai-tab-change`). Ignores unknown/disabled ids. */
|
|
71
|
-
select: (id: string) => {
|
|
72
|
-
const item = (props.items as KaiTabItem[] | undefined)?.find((it) => it.id === id);
|
|
73
|
-
if (!item || item.disabled || flag('disabled')) return;
|
|
74
|
-
setValueTo(id);
|
|
75
|
-
},
|
|
76
|
-
/** Focus the active tab (or the first focusable tab). */
|
|
77
|
-
focus: () => {
|
|
78
|
-
listRef
|
|
79
|
-
?.querySelector<HTMLButtonElement>('[role="tab"][tabindex="0"]:not([disabled])')
|
|
80
|
-
?.focus();
|
|
81
|
-
},
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
return (
|
|
85
|
-
<Tabs
|
|
86
|
-
items={props.items as KaiTabItem[] | undefined}
|
|
87
|
-
value={value()}
|
|
88
|
-
variant={(props.variant as TabsVariant) ?? 'segmented'}
|
|
89
|
-
block={flag('block')}
|
|
90
|
-
disabled={flag('disabled')}
|
|
91
|
-
onChange={setValueTo}
|
|
92
|
-
ref={(el) => (listRef = el)}
|
|
93
|
-
/>
|
|
94
|
-
);
|
|
95
|
-
});
|
package/src/elements/tasks.tsx
DELETED
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
import { defineWebComponent } from './define';
|
|
2
|
-
import { TasksCard, type TasksCardController, type TasksCardData } from '../components/tasks-card';
|
|
3
|
-
import type { CardResolution } from '../primitives/card-contract';
|
|
4
|
-
|
|
5
|
-
interface Props extends Record<string, unknown> {
|
|
6
|
-
/** The tasks definition (the CardEnvelope.data). Set as a JS PROPERTY:
|
|
7
|
-
* `el.data = { tasks:[…], selectAll, confirmLabel, … }`. Import
|
|
8
|
-
* `TasksCardData` from `@kitn.ai/ui` for the full shape. */
|
|
9
|
-
data?: TasksCardData;
|
|
10
|
-
/** Stable card id correlating every emitted CardEvent. Attribute: `card-id`. */
|
|
11
|
-
cardId?: string;
|
|
12
|
-
/** Heading rendered in the card chrome (= CardEnvelope.title). Attribute: `heading`. */
|
|
13
|
-
heading?: string;
|
|
14
|
-
/** Set when the user resolved this card; renders the read-only view. Property:
|
|
15
|
-
* `el.resolution = { kind:'submit', data:{ selected:[…] } }`. */
|
|
16
|
-
resolution?: Record<string, unknown>;
|
|
17
|
-
/** Controlled selection (task ids; JS property). When set, it wins over local state. */
|
|
18
|
-
value?: string[];
|
|
19
|
-
/** Uncontrolled initial selection (task ids; JS property), overlaying per-task `checked`. */
|
|
20
|
-
defaultValue?: string[];
|
|
21
|
-
/** Freeze the whole list + Confirm. Attribute: `disabled`. */
|
|
22
|
-
disabled?: boolean;
|
|
23
|
-
/** Display-only: rows can't be toggled and show the default cursor (no pointer,
|
|
24
|
-
* hover, or focus affordances). Keeps the look as-is. Attribute: `readonly`. */
|
|
25
|
-
readonly?: boolean;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/** Events fired by `<kai-tasks>`. (Resolution still flows up the bubbling `kai-card`
|
|
29
|
-
* contract event — `kai-value-change` is the live selection signal, distinct from
|
|
30
|
-
* the terminal submit.) */
|
|
31
|
-
interface Events {
|
|
32
|
-
/** The selection changed on a toggle. Carries the selected ids in input
|
|
33
|
-
* order. */
|
|
34
|
-
'kai-value-change': { value: string[] };
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* `<kai-tasks>` — a **selectable** task/plan list (set via the `data` property):
|
|
39
|
-
* checkbox rows + an optional select-all + a confirm button. Toggling rows is local
|
|
40
|
-
* UI state; only the final confirm emits the Card contract's **`submit`** verb
|
|
41
|
-
* up a bubbling **`kai-card`** CustomEvent (`{ kind:'submit', cardId,
|
|
42
|
-
* data:{ selected } }`) with the checked ids in input order. Also emits `ready` on
|
|
43
|
-
* mount and `error` for a malformed definition (inline error). Routes through a
|
|
44
|
-
* `CardProvider` when present, else the bubbling `kai-card` event. Isolated in
|
|
45
|
-
* Shadow DOM; theme-aware via the shared kit tokens.
|
|
46
|
-
*
|
|
47
|
-
* Two looks, one selection model. Default `mode:'select'` = the approval list above.
|
|
48
|
-
* `mode:'progress'` = the onboarding-checklist look (e.g. "Get started 0 / 2"): a
|
|
49
|
-
* header `done / total` count + circular indicators + per-item title/description,
|
|
50
|
-
* and NO confirm button (checking a row IS the action, so the live
|
|
51
|
-
* `kai-value-change` is the signal). The `max` gate, `toggle`/`select` methods, and
|
|
52
|
-
* events all still apply.
|
|
53
|
-
*/
|
|
54
|
-
defineWebComponent<Props, Events>(
|
|
55
|
-
'kai-tasks',
|
|
56
|
-
{
|
|
57
|
-
data: undefined,
|
|
58
|
-
cardId: undefined,
|
|
59
|
-
heading: undefined,
|
|
60
|
-
resolution: undefined,
|
|
61
|
-
value: undefined,
|
|
62
|
-
defaultValue: undefined,
|
|
63
|
-
disabled: false,
|
|
64
|
-
readonly: false,
|
|
65
|
-
},
|
|
66
|
-
(props, { element, dispatch, flag, expose }) => {
|
|
67
|
-
// Pattern C: the TasksCard component owns the selection set + confirm gating and
|
|
68
|
-
// hands up a controller; the facade captures it and exposes delegating methods.
|
|
69
|
-
let controller: TasksCardController | undefined;
|
|
70
|
-
expose({
|
|
71
|
-
/** Set the checked task ids (local-only, no emit), respecting disabled/max.
|
|
72
|
-
* With no arg, select all toggleable rows. */
|
|
73
|
-
select: (taskIds?: string[]) => controller?.select(taskIds),
|
|
74
|
-
/** Toggle one task by id, honoring the max gate (no `checked` = flip). */
|
|
75
|
-
toggle: (taskId: string, checked?: boolean) => controller?.toggle(taskId, checked),
|
|
76
|
-
/** Confirm the current selection: emits the `submit` CardEvent + resolves
|
|
77
|
-
* (only when the min/max gate passes). Named `send`, not `submit`. */
|
|
78
|
-
send: () => controller?.send(),
|
|
79
|
-
/** Focus the task group (select-all checkbox if shown, else the first row). */
|
|
80
|
-
focus: (options?: FocusOptions) => controller?.focus(options),
|
|
81
|
-
/** Trigger the dismiss path (emit `dismiss` + collapse to the re-openable stub). */
|
|
82
|
-
dismiss: () => controller?.dismiss(),
|
|
83
|
-
/** Re-open a dismissed card from its stub (emit `reopen`). */
|
|
84
|
-
reopen: () => controller?.reopen(),
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
return (
|
|
88
|
-
<TasksCard
|
|
89
|
-
data={props.data}
|
|
90
|
-
cardId={props.cardId ?? (element.id || 'kai-tasks')}
|
|
91
|
-
heading={props.heading}
|
|
92
|
-
resolution={props.resolution as CardResolution | undefined}
|
|
93
|
-
value={props.value as string[] | undefined}
|
|
94
|
-
defaultValue={props.defaultValue as string[] | undefined}
|
|
95
|
-
disabled={flag('disabled')}
|
|
96
|
-
readonly={flag('readonly')}
|
|
97
|
-
onValueChange={(payload) => dispatch('kai-value-change', payload)}
|
|
98
|
-
controllerRef={(c) => (controller = c)}
|
|
99
|
-
hostElement={element}
|
|
100
|
-
/>
|
|
101
|
-
);
|
|
102
|
-
},
|
|
103
|
-
);
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { defineWebComponent } from './define';
|
|
2
|
-
import { TextShimmer } from '../components/text-shimmer';
|
|
3
|
-
|
|
4
|
-
interface Props extends Record<string, unknown> {
|
|
5
|
-
/** The text to shimmer. */
|
|
6
|
-
text?: string;
|
|
7
|
-
/** Element tag to render as (default `span`). */
|
|
8
|
-
as?: string;
|
|
9
|
-
/** Animation duration in seconds. */
|
|
10
|
-
duration?: number;
|
|
11
|
-
/** Gradient spread (5–45). */
|
|
12
|
-
spread?: number;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* `<kai-text-shimmer>` — animated shimmering text. Text via the `text`
|
|
17
|
-
* attribute; `duration`/`spread` tune the effect.
|
|
18
|
-
*/
|
|
19
|
-
defineWebComponent<Props>('kai-text-shimmer', {
|
|
20
|
-
text: '',
|
|
21
|
-
as: 'span',
|
|
22
|
-
duration: 4,
|
|
23
|
-
spread: 20,
|
|
24
|
-
}, (props) => (
|
|
25
|
-
<TextShimmer as={props.as} duration={props.duration} spread={props.spread} class="text-body">
|
|
26
|
-
{props.text}
|
|
27
|
-
</TextShimmer>
|
|
28
|
-
));
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { defineWebComponent } from './define';
|
|
2
|
-
import { ThinkingBar } from '../components/thinking-bar';
|
|
3
|
-
|
|
4
|
-
interface Props extends Record<string, unknown> {
|
|
5
|
-
/** The shimmering label, e.g. "Thinking…". */
|
|
6
|
-
text?: string;
|
|
7
|
-
/** When true, show a "stop" affordance that fires a `stop` event. */
|
|
8
|
-
stoppable?: boolean;
|
|
9
|
-
/** Label for the stop affordance. */
|
|
10
|
-
stopLabel?: string;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
/** Events fired by `<kai-thinking-bar>`. */
|
|
14
|
-
interface Events {
|
|
15
|
-
/** The "stop / answer now" affordance was clicked. */
|
|
16
|
-
'kai-stop': void;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* `<kai-thinking-bar>` — a pure leaf element: an animated "thinking" indicator
|
|
21
|
-
* (one of the primitives the batteries-included `<kai-chat>` does NOT surface).
|
|
22
|
-
* Config via attributes, the only interaction (`stop`) comes back as an event.
|
|
23
|
-
*/
|
|
24
|
-
defineWebComponent<Props, Events>('kai-thinking-bar', {
|
|
25
|
-
text: 'Thinking',
|
|
26
|
-
stoppable: false,
|
|
27
|
-
stopLabel: 'Answer now',
|
|
28
|
-
}, (props, { dispatch, flag, reflectFlag }) => {
|
|
29
|
-
// `stoppable` reflects, following kai-tool's `disabled` (its FIX1). Without it the
|
|
30
|
-
// remove direction is dead: `el.removeAttribute('stoppable')` parses to `undefined`,
|
|
31
|
-
// the prop was already `undefined` after a bare-attribute add, so no prop change
|
|
32
|
-
// fires and `flag()`'s non-reactive hasAttribute fallback is never re-read — the
|
|
33
|
-
// stop affordance stays rendered forever. reflectFlag's coercing read-back resolves
|
|
34
|
-
// every write through the same `flag()` policy, making both directions reactive.
|
|
35
|
-
reflectFlag('stoppable');
|
|
36
|
-
return (
|
|
37
|
-
<ThinkingBar
|
|
38
|
-
text={props.text}
|
|
39
|
-
stopLabel={props.stopLabel}
|
|
40
|
-
onStop={flag('stoppable') ? () => dispatch('kai-stop') : undefined}
|
|
41
|
-
/>
|
|
42
|
-
);
|
|
43
|
-
});
|