@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
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
import { type JSX, For, Show, splitProps } from 'solid-js';
|
|
2
|
-
import { cn } from '../utils/cn';
|
|
3
|
-
import { Checkbox } from './checkbox';
|
|
4
|
-
|
|
5
|
-
/** One choice in a {@link CheckboxGroup}. */
|
|
6
|
-
export interface CheckboxOption<T = string> {
|
|
7
|
-
/** The value this row selects. Compared to the group's `value` by identity. */
|
|
8
|
-
value: T;
|
|
9
|
-
/** The row's visible label. */
|
|
10
|
-
label: JSX.Element;
|
|
11
|
-
/** Optional second line under the label. */
|
|
12
|
-
description?: JSX.Element;
|
|
13
|
-
/** Disable this row alone (the group's `disabled` disables all of them). */
|
|
14
|
-
disabled?: boolean;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export interface CheckboxGroupProps<T = string>
|
|
18
|
-
extends Omit<JSX.HTMLAttributes<HTMLDivElement>, 'onChange' | 'children'> {
|
|
19
|
-
/**
|
|
20
|
-
* The choices, in display order. Rendered in full: the kit never truncates,
|
|
21
|
-
* re-orders or de-duplicates a consumer's option list.
|
|
22
|
-
*/
|
|
23
|
-
options: readonly CheckboxOption<T>[];
|
|
24
|
-
/** The selected values. Each option is checked when its `value` is in here (by identity). */
|
|
25
|
-
value?: readonly T[];
|
|
26
|
-
/**
|
|
27
|
-
* The shared form-control name every box in the group carries, so a native form
|
|
28
|
-
* submits the whole selection under one key and `FormData.getAll(name)` reads it back.
|
|
29
|
-
*
|
|
30
|
-
* UNLIKE {@link RadioGroup}, this has no default. A radio group needs a shared `name`
|
|
31
|
-
* for the browser to make the set exclusive and arrow-navigable, so one is generated
|
|
32
|
-
* when none is given; checkboxes are independent controls and need nothing to behave
|
|
33
|
-
* correctly. Generating a name here would submit the selection under a random key,
|
|
34
|
-
* which is worse than submitting nothing.
|
|
35
|
-
*/
|
|
36
|
-
name?: string;
|
|
37
|
-
/** Disable every row. */
|
|
38
|
-
disabled?: boolean;
|
|
39
|
-
/** Accessible name for the group. Rendered as `aria-label` on the `group`. */
|
|
40
|
-
label?: string;
|
|
41
|
-
/**
|
|
42
|
-
* Fires on every toggle with the NEXT selection, plus the option that moved and
|
|
43
|
-
* which way it went. The next selection is a fresh array — the group holds no state
|
|
44
|
-
* of its own, so `value` is yours to own.
|
|
45
|
-
*/
|
|
46
|
-
onChange?: (value: T[], option: CheckboxOption<T>, checked: boolean) => void;
|
|
47
|
-
/** Fires when a box loses focus — the commit point for a form field. */
|
|
48
|
-
onOptionBlur?: () => void;
|
|
49
|
-
/** Extra classes for each row. */
|
|
50
|
-
itemClass?: string;
|
|
51
|
-
/**
|
|
52
|
-
* Presentation slot. Replaces the default label/description column with whatever
|
|
53
|
-
* you return, so a row can carry media, a badge or a price without a second
|
|
54
|
-
* checkbox component existing. The control, the row chrome and the group semantics
|
|
55
|
-
* stay ours.
|
|
56
|
-
*/
|
|
57
|
-
children?: (option: CheckboxOption<T>, state: { checked: boolean; disabled: boolean }) => JSX.Element;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* A vertical set of checkbox rows in a bordered, divided list — the kit's standard
|
|
62
|
-
* "pick any number" control, and {@link RadioGroup}'s sibling: same options shape,
|
|
63
|
-
* same row chrome, same presentation slot, multi-value instead of single.
|
|
64
|
-
*
|
|
65
|
-
* Every row is a real `<input type="checkbox">` inside a `<label>`, so clicking
|
|
66
|
-
* anywhere on the row toggles it and the keyboard behaviour (a tab stop per box,
|
|
67
|
-
* Space to toggle) is the browser's rather than a reimplementation. The wrapper is
|
|
68
|
-
* `role="group"`, not `role="listbox"`: the boxes are independent controls and
|
|
69
|
-
* nothing here overrides what they already announce.
|
|
70
|
-
*
|
|
71
|
-
* Everything not listed in `CheckboxGroupProps` is forwarded to the group element, so
|
|
72
|
-
* `id`, `aria-labelledby`, any other `aria-*` and any `data-*` hook land where a form
|
|
73
|
-
* expects them. No validation is applied — "at least one" is your application's rule,
|
|
74
|
-
* not the kit's.
|
|
75
|
-
*
|
|
76
|
-
* ```tsx
|
|
77
|
-
* <CheckboxGroup
|
|
78
|
-
* label="Environments"
|
|
79
|
-
* name="env"
|
|
80
|
-
* options={[{ value: 'prod', label: 'Production' }, { value: 'staging', label: 'Staging' }]}
|
|
81
|
-
* value={envs()}
|
|
82
|
-
* onChange={setEnvs}
|
|
83
|
-
* />
|
|
84
|
-
* ```
|
|
85
|
-
*/
|
|
86
|
-
export function CheckboxGroup<T = string>(props: CheckboxGroupProps<T>): JSX.Element {
|
|
87
|
-
const [local, rest] = splitProps(props, [
|
|
88
|
-
'options', 'value', 'name', 'disabled', 'label', 'onChange', 'onOptionBlur', 'itemClass', 'children', 'class',
|
|
89
|
-
]);
|
|
90
|
-
const selected = (): readonly T[] => local.value ?? [];
|
|
91
|
-
return (
|
|
92
|
-
<div
|
|
93
|
-
{...rest}
|
|
94
|
-
role="group"
|
|
95
|
-
aria-label={local.label}
|
|
96
|
-
class={cn('divide-y divide-border overflow-hidden rounded-lg border border-border', local.class)}
|
|
97
|
-
>
|
|
98
|
-
<For each={local.options}>
|
|
99
|
-
{(opt) => {
|
|
100
|
-
const checked = () => selected().includes(opt.value);
|
|
101
|
-
const rowDisabled = () => !!(local.disabled || opt.disabled);
|
|
102
|
-
return (
|
|
103
|
-
<label
|
|
104
|
-
class={cn(
|
|
105
|
-
'flex cursor-pointer items-center gap-3 px-3 py-2.5 text-sm transition-colors',
|
|
106
|
-
opt.description !== undefined && 'items-start',
|
|
107
|
-
checked()
|
|
108
|
-
? 'bg-accent font-medium text-accent-foreground'
|
|
109
|
-
: 'text-foreground hover:bg-muted/50',
|
|
110
|
-
local.itemClass,
|
|
111
|
-
)}
|
|
112
|
-
>
|
|
113
|
-
<Checkbox
|
|
114
|
-
name={local.name}
|
|
115
|
-
value={String(opt.value)}
|
|
116
|
-
checked={checked()}
|
|
117
|
-
disabled={rowDisabled()}
|
|
118
|
-
class={opt.description === undefined ? undefined : 'mt-0.5'}
|
|
119
|
-
onChange={(e) => {
|
|
120
|
-
const on = e.currentTarget.checked;
|
|
121
|
-
const now = selected();
|
|
122
|
-
// Filter-or-append rather than a toggle on the previous array, so the
|
|
123
|
-
// emitted selection follows the CONTROL's state. They diverge when the
|
|
124
|
-
// caller re-renders mid-interaction, and following the box is what a
|
|
125
|
-
// native form would report.
|
|
126
|
-
const next = on ? [...now.filter((v) => v !== opt.value), opt.value] : now.filter((v) => v !== opt.value);
|
|
127
|
-
local.onChange?.(next, opt, on);
|
|
128
|
-
}}
|
|
129
|
-
onBlur={() => local.onOptionBlur?.()}
|
|
130
|
-
/>
|
|
131
|
-
<Show
|
|
132
|
-
when={local.children}
|
|
133
|
-
fallback={
|
|
134
|
-
// No description, a bare <span> — byte for byte what the form's
|
|
135
|
-
// hand-rolled checkbox list rendered before this component existed.
|
|
136
|
-
// The two-line column only appears when there is a second line.
|
|
137
|
-
<Show when={opt.description !== undefined} fallback={<span>{opt.label}</span>}>
|
|
138
|
-
<span class="flex flex-col gap-0.5">
|
|
139
|
-
<span>{opt.label}</span>
|
|
140
|
-
<span class="text-xs font-normal text-muted-foreground">{opt.description}</span>
|
|
141
|
-
</span>
|
|
142
|
-
</Show>
|
|
143
|
-
}
|
|
144
|
-
>
|
|
145
|
-
{(render) => render()(opt, { checked: checked(), disabled: rowDisabled() })}
|
|
146
|
-
</Show>
|
|
147
|
-
</label>
|
|
148
|
-
);
|
|
149
|
-
}}
|
|
150
|
-
</For>
|
|
151
|
-
</div>
|
|
152
|
-
);
|
|
153
|
-
}
|
package/src/ui/checkbox.tsx
DELETED
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import { type JSX, splitProps, createEffect } from 'solid-js';
|
|
2
|
-
import { cn } from '../utils/cn';
|
|
3
|
-
|
|
4
|
-
export interface CheckboxProps extends Omit<JSX.InputHTMLAttributes<HTMLInputElement>, 'type' | 'children'> {
|
|
5
|
-
/**
|
|
6
|
-
* The mixed / partially-checked state ("some of the things below are ticked").
|
|
7
|
-
*
|
|
8
|
-
* `indeterminate` is a DOM PROPERTY with no HTML attribute, so it cannot be set
|
|
9
|
-
* from markup — every caller that wanted it used to reach for a `ref` plus a
|
|
10
|
-
* `createEffect`. That effect now lives in here, once, and callers pass a prop.
|
|
11
|
-
*
|
|
12
|
-
* Note that the property is purely visual plus an accessibility hint: a checkbox
|
|
13
|
-
* whose `indeterminate` is true still reports `checked === false` and submits
|
|
14
|
-
* accordingly. A native indeterminate checkbox already announces as "mixed", so
|
|
15
|
-
* this component does not stamp `aria-checked="mixed"` on top of it — pass one
|
|
16
|
-
* yourself if you also want the attribute in the DOM.
|
|
17
|
-
*/
|
|
18
|
-
indeterminate?: boolean;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* A checkbox. A REAL `<input type="checkbox">` behind `appearance: none`, styled by
|
|
23
|
-
* the kit's `.kai-checkbox` rule, never a `<div>` wearing `role="checkbox"`.
|
|
24
|
-
*
|
|
25
|
-
* That is the whole design: the native control brings keyboard operation (Space),
|
|
26
|
-
* the `:focus-visible` ring, form participation via `name` / `value`, and correct
|
|
27
|
-
* screen-reader announcement — all of it for free and all of it correct. Every
|
|
28
|
-
* accessibility defect this kit's control audit found was in a control that had
|
|
29
|
-
* replaced the native element with something hand-rolled.
|
|
30
|
-
*
|
|
31
|
-
* Everything not listed in `CheckboxProps` is forwarded to the input, so `id`,
|
|
32
|
-
* `name`, `value`, `required`, `disabled`, `aria-*` and any `data-*` hook behave
|
|
33
|
-
* exactly as they do on a plain `<input>`.
|
|
34
|
-
*
|
|
35
|
-
* Validation is deliberately absent. `required` is passed through to the native
|
|
36
|
-
* attribute and nothing else — whether an unchecked box is an error is the
|
|
37
|
-
* consuming application's call, not the kit's.
|
|
38
|
-
*
|
|
39
|
-
* ```tsx
|
|
40
|
-
* <Checkbox name="notify" checked={on()} onChange={(e) => setOn(e.currentTarget.checked)} />
|
|
41
|
-
* ```
|
|
42
|
-
*/
|
|
43
|
-
export function Checkbox(props: CheckboxProps): JSX.Element {
|
|
44
|
-
const [local, rest] = splitProps(props, ['class', 'indeterminate', 'ref']);
|
|
45
|
-
return (
|
|
46
|
-
<input
|
|
47
|
-
{...rest}
|
|
48
|
-
type="checkbox"
|
|
49
|
-
class={cn('kai-checkbox', local.class)}
|
|
50
|
-
ref={(el) => {
|
|
51
|
-
// `ref` is split out and re-applied by hand because this component needs the
|
|
52
|
-
// element for `indeterminate` as well. Solid always hands a component a ref
|
|
53
|
-
// FUNCTION (a variable ref compiles into one), so the typeof guard is for the
|
|
54
|
-
// hand-written object case only.
|
|
55
|
-
const forward = local.ref;
|
|
56
|
-
if (typeof forward === 'function') (forward as (el: HTMLInputElement) => void)(el);
|
|
57
|
-
createEffect(() => {
|
|
58
|
-
el.indeterminate = !!local.indeterminate;
|
|
59
|
-
});
|
|
60
|
-
}}
|
|
61
|
-
/>
|
|
62
|
-
);
|
|
63
|
-
}
|
package/src/ui/collapsible.tsx
DELETED
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
createContext,
|
|
3
|
-
useContext,
|
|
4
|
-
createSignal,
|
|
5
|
-
createUniqueId,
|
|
6
|
-
splitProps,
|
|
7
|
-
type JSX,
|
|
8
|
-
type Accessor,
|
|
9
|
-
} from 'solid-js';
|
|
10
|
-
import { cn } from '../utils/cn';
|
|
11
|
-
|
|
12
|
-
// Extend SolidJS JSX to allow `bool:inert` (forces setAttribute so jsdom reflects it as an attribute).
|
|
13
|
-
declare module 'solid-js' {
|
|
14
|
-
namespace JSX {
|
|
15
|
-
interface ExplicitBoolAttributes {
|
|
16
|
-
inert: boolean;
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
interface CollapsibleCtx {
|
|
22
|
-
open: Accessor<boolean>;
|
|
23
|
-
toggle: () => void;
|
|
24
|
-
contentId: string;
|
|
25
|
-
disabled: Accessor<boolean>;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
const Ctx = createContext<CollapsibleCtx>();
|
|
29
|
-
|
|
30
|
-
const useCollapsible = () => {
|
|
31
|
-
const c = useContext(Ctx);
|
|
32
|
-
if (!c) throw new Error('Collapsible parts must be used within <Collapsible>');
|
|
33
|
-
return c;
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
/** Imperative open controller, handed to a parent (e.g. the kai-tool facade)
|
|
37
|
-
* via `controllerRef` so it can drive/observe open state — mirrors
|
|
38
|
-
* HoverCardController. Only available when the Collapsible is UNCONTROLLED
|
|
39
|
-
* (no `open` prop); in controlled mode the parent already owns the state. */
|
|
40
|
-
export interface CollapsibleController { open: Accessor<boolean>; setOpen: (v: boolean) => void; }
|
|
41
|
-
|
|
42
|
-
export interface CollapsibleProps {
|
|
43
|
-
open?: boolean;
|
|
44
|
-
defaultOpen?: boolean;
|
|
45
|
-
onOpenChange?: (open: boolean) => void;
|
|
46
|
-
/** When true, the trigger no longer toggles (programmatic show/hide still work
|
|
47
|
-
* via the controller; this only gates the user-facing trigger). */
|
|
48
|
-
disabled?: boolean;
|
|
49
|
-
/** Receive the open controller (open accessor + setOpen) once mounted.
|
|
50
|
-
* Only meaningful in uncontrolled mode (no `open` prop). */
|
|
51
|
-
controllerRef?: (api: CollapsibleController) => void;
|
|
52
|
-
children: JSX.Element;
|
|
53
|
-
class?: string;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
export function Collapsible(props: CollapsibleProps) {
|
|
57
|
-
const [local, rest] = splitProps(props, ['open', 'defaultOpen', 'onOpenChange', 'disabled', 'controllerRef', 'children', 'class']);
|
|
58
|
-
const [uncontrolled, setUncontrolled] = createSignal(local.defaultOpen ?? false);
|
|
59
|
-
const isControlled = () => local.open !== undefined;
|
|
60
|
-
const open = () => (isControlled() ? !!local.open : uncontrolled());
|
|
61
|
-
const disabled = () => !!local.disabled;
|
|
62
|
-
// setOpen drives the open state and notifies onOpenChange — the single mutate
|
|
63
|
-
// path shared by the trigger and the imperative controller.
|
|
64
|
-
const setOpen = (next: boolean) => {
|
|
65
|
-
if (open() === next) return;
|
|
66
|
-
if (!isControlled()) setUncontrolled(next);
|
|
67
|
-
local.onOpenChange?.(next);
|
|
68
|
-
};
|
|
69
|
-
const toggle = () => {
|
|
70
|
-
if (disabled()) return;
|
|
71
|
-
setOpen(!open());
|
|
72
|
-
};
|
|
73
|
-
// Hand the controller up once. setOpen is NOT gated by disabled — disabled only
|
|
74
|
-
// suppresses the user trigger; programmatic show/hide remain available (the
|
|
75
|
-
// facade's wireDisclosure applies its own disabled-gating on show/toggle).
|
|
76
|
-
local.controllerRef?.({ open, setOpen });
|
|
77
|
-
const contentId = createUniqueId();
|
|
78
|
-
return (
|
|
79
|
-
<Ctx.Provider value={{ open, toggle, contentId, disabled }}>
|
|
80
|
-
<div
|
|
81
|
-
class={local.class}
|
|
82
|
-
{...rest}
|
|
83
|
-
data-expanded={open() ? '' : undefined}
|
|
84
|
-
data-closed={open() ? undefined : ''}
|
|
85
|
-
data-state={open() ? 'open' : 'closed'}
|
|
86
|
-
>
|
|
87
|
-
{local.children}
|
|
88
|
-
</div>
|
|
89
|
-
</Ctx.Provider>
|
|
90
|
-
);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
export interface CollapsibleTriggerProps {
|
|
94
|
-
children?: JSX.Element;
|
|
95
|
-
class?: string;
|
|
96
|
-
as?: (props: Record<string, any>) => JSX.Element;
|
|
97
|
-
onClick?: JSX.EventHandlerUnion<HTMLButtonElement, MouseEvent>;
|
|
98
|
-
/** Remaining attributes are spread onto the rendered trigger. */
|
|
99
|
-
[k: string]: any;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
export function CollapsibleTrigger(props: CollapsibleTriggerProps) {
|
|
103
|
-
const ctx = useCollapsible();
|
|
104
|
-
const [local, rest] = splitProps(props, ['children', 'class', 'as', 'onClick']);
|
|
105
|
-
|
|
106
|
-
const triggerProps = () => ({
|
|
107
|
-
type: 'button' as const,
|
|
108
|
-
'aria-expanded': ctx.open(),
|
|
109
|
-
'aria-controls': ctx.contentId,
|
|
110
|
-
disabled: ctx.disabled() || undefined,
|
|
111
|
-
'data-expanded': ctx.open() ? '' : undefined,
|
|
112
|
-
'data-closed': ctx.open() ? undefined : '',
|
|
113
|
-
'data-state': ctx.open() ? 'open' : 'closed',
|
|
114
|
-
onClick: (e: MouseEvent) => {
|
|
115
|
-
if (ctx.disabled()) return;
|
|
116
|
-
if (typeof local.onClick === 'function') {
|
|
117
|
-
(local.onClick as (e: MouseEvent) => void)(e);
|
|
118
|
-
}
|
|
119
|
-
ctx.toggle();
|
|
120
|
-
},
|
|
121
|
-
class: local.class,
|
|
122
|
-
...rest,
|
|
123
|
-
});
|
|
124
|
-
|
|
125
|
-
return (
|
|
126
|
-
<>
|
|
127
|
-
{local.as
|
|
128
|
-
? local.as(triggerProps() as any)
|
|
129
|
-
: (
|
|
130
|
-
<button {...triggerProps()}>
|
|
131
|
-
{local.children}
|
|
132
|
-
</button>
|
|
133
|
-
)}
|
|
134
|
-
</>
|
|
135
|
-
);
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
export interface CollapsibleContentProps {
|
|
139
|
-
children?: JSX.Element;
|
|
140
|
-
class?: string;
|
|
141
|
-
/** Remaining attributes are spread onto the rendered panel. */
|
|
142
|
-
[k: string]: any;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
export function CollapsibleContent(props: CollapsibleContentProps) {
|
|
146
|
-
const ctx = useCollapsible();
|
|
147
|
-
const [local, rest] = splitProps(props, ['children', 'class']);
|
|
148
|
-
return (
|
|
149
|
-
<div
|
|
150
|
-
{...rest}
|
|
151
|
-
id={ctx.contentId}
|
|
152
|
-
data-expanded={ctx.open() ? '' : undefined}
|
|
153
|
-
data-closed={ctx.open() ? undefined : ''}
|
|
154
|
-
class={cn(
|
|
155
|
-
'grid transition-[grid-template-rows] duration-200 ease-out',
|
|
156
|
-
ctx.open() ? 'grid-rows-[1fr]' : 'grid-rows-[0fr]',
|
|
157
|
-
)}
|
|
158
|
-
bool:inert={!ctx.open()}
|
|
159
|
-
>
|
|
160
|
-
<div class={cn('overflow-hidden', local.class)}>{local.children}</div>
|
|
161
|
-
</div>
|
|
162
|
-
);
|
|
163
|
-
}
|
package/src/ui/command.tsx
DELETED
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
import { For, Show, type JSX } from 'solid-js';
|
|
2
|
-
import { cn } from '../utils/cn';
|
|
3
|
-
import { renderIcon } from './icon';
|
|
4
|
-
import { Kbd } from './kbd';
|
|
5
|
-
|
|
6
|
-
export interface CommandRow {
|
|
7
|
-
id: string;
|
|
8
|
-
label: string;
|
|
9
|
-
icon?: string;
|
|
10
|
-
description?: string;
|
|
11
|
-
/** Optional keyboard shortcut shown as right-aligned key caps; uses the
|
|
12
|
-
* kai-kbd `keys` syntax (e.g. "Mod+K", "Alt+1"). */
|
|
13
|
-
shortcut?: string;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export interface CommandGroup {
|
|
17
|
-
group?: string;
|
|
18
|
-
items: CommandRow[];
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export interface CommandListProps {
|
|
22
|
-
groups: CommandGroup[];
|
|
23
|
-
activeId?: string;
|
|
24
|
-
onSelect: (id: string) => void;
|
|
25
|
-
emptyLabel?: string;
|
|
26
|
-
/** Accessible label for the listbox container. Defaults to 'Command palette'. */
|
|
27
|
-
ariaLabel?: string;
|
|
28
|
-
/** id applied to the listbox container, for aria-controls wiring. */
|
|
29
|
-
id?: string;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* `CommandList` — a presentational grouped listbox for command/mention palettes.
|
|
34
|
-
*
|
|
35
|
-
* Renders a `role="listbox"` container. Groups with a `group` name get a muted
|
|
36
|
-
* section header. Each row is a `role="option"` button with icon, label, and
|
|
37
|
-
* optional description. Clicking a row calls `onSelect(id)`. When there are no
|
|
38
|
-
* groups/items it renders `emptyLabel` (default "No results").
|
|
39
|
-
*/
|
|
40
|
-
export function CommandList(props: CommandListProps): JSX.Element {
|
|
41
|
-
const hasItems = () => props.groups.some((g) => g.items.length > 0);
|
|
42
|
-
|
|
43
|
-
return (
|
|
44
|
-
<div
|
|
45
|
-
role={hasItems() ? 'listbox' : undefined}
|
|
46
|
-
aria-label={hasItems() ? (props.ariaLabel ?? 'Command palette') : undefined}
|
|
47
|
-
id={props.id}
|
|
48
|
-
>
|
|
49
|
-
<Show
|
|
50
|
-
when={hasItems()}
|
|
51
|
-
fallback={
|
|
52
|
-
<div class="px-3 py-4 text-center text-sm text-muted-foreground select-none">
|
|
53
|
-
{props.emptyLabel ?? 'No results'}
|
|
54
|
-
</div>
|
|
55
|
-
}
|
|
56
|
-
>
|
|
57
|
-
<For each={props.groups}>
|
|
58
|
-
{(group) => (
|
|
59
|
-
<Show when={group.items.length > 0}>
|
|
60
|
-
<>
|
|
61
|
-
<Show when={group.group}>
|
|
62
|
-
<div class="px-3 pt-2 pb-1 text-xs font-medium text-muted-foreground select-none">
|
|
63
|
-
{group.group}
|
|
64
|
-
</div>
|
|
65
|
-
</Show>
|
|
66
|
-
<For each={group.items}>
|
|
67
|
-
{(row) => (
|
|
68
|
-
<button
|
|
69
|
-
role="option"
|
|
70
|
-
aria-selected={row.id === props.activeId}
|
|
71
|
-
class={cn(
|
|
72
|
-
'flex w-full items-center gap-2 px-3 py-1.5 text-left text-sm transition-colors',
|
|
73
|
-
row.id === props.activeId
|
|
74
|
-
? 'bg-muted text-foreground'
|
|
75
|
-
: 'text-foreground hover:bg-muted',
|
|
76
|
-
)}
|
|
77
|
-
// Prevent blur on the search input so keyboard nav keeps working.
|
|
78
|
-
onMouseDown={(e) => e.preventDefault()}
|
|
79
|
-
onClick={() => props.onSelect(row.id)}
|
|
80
|
-
>
|
|
81
|
-
<Show when={row.icon}>{(icon) => renderIcon(icon(), { imgClass: 'size-4 shrink-0 rounded object-cover', spanClass: 'flex size-4 shrink-0 items-center justify-center text-sm', ariaHidden: true })}</Show>
|
|
82
|
-
<span class="font-medium whitespace-nowrap shrink-0">{row.label}</span>
|
|
83
|
-
<Show when={row.description}>
|
|
84
|
-
<span class="min-w-0 truncate text-muted-foreground">{row.description}</span>
|
|
85
|
-
</Show>
|
|
86
|
-
<Show when={row.shortcut}>
|
|
87
|
-
{(sc) => (
|
|
88
|
-
<span part="shortcut" class="ml-auto shrink-0 pl-3">
|
|
89
|
-
<Kbd keys={sc()} platform="auto" size="sm" />
|
|
90
|
-
</span>
|
|
91
|
-
)}
|
|
92
|
-
</Show>
|
|
93
|
-
</button>
|
|
94
|
-
)}
|
|
95
|
-
</For>
|
|
96
|
-
</>
|
|
97
|
-
</Show>
|
|
98
|
-
)}
|
|
99
|
-
</For>
|
|
100
|
-
</Show>
|
|
101
|
-
</div>
|
|
102
|
-
);
|
|
103
|
-
}
|