@kitn.ai/ui 0.27.0 → 0.29.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 +10 -2
- package/dist/{Icon-BnFKqqtY.js → Icon-DObhsRtm.js} +1 -1
- package/dist/{action-icons-CBskfBMz.js → action-icons-CcgNN2oT.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-CjRU3JgV.js +1 -0
- package/dist/arrow-left-Bnpb1UEW.js +1 -0
- package/dist/{artifact-CvXEm1lS.js → artifact-Bwt7OgcR.js} +1 -1
- package/dist/{attachments-C43ZegEq.js → attachments-Qr4kg-2b.js} +1 -1
- package/dist/{audio-visualizer-B-79y1Tj.js → audio-visualizer-DToYdfSc.js} +1 -1
- package/dist/{badge-BpUbq8c0.js → badge-CdEu_jn2.js} +1 -1
- package/dist/{bell-sn17Ip9v.js → bell-DQAAOpDz.js} +1 -1
- package/dist/{button-BH6rN0U-.js → button-DkuOnGLy.js} +1 -1
- package/dist/{card-renderer-Cb1gQmth.js → card-renderer-Jx70m6_l.js} +1 -1
- package/dist/{card-routing-DifQgS7n.js → card-routing-0YidER_3.js} +1 -1
- package/dist/check-njkVdZu2.js +1 -0
- package/dist/{checkbox-Dc9Yov_B.js → checkbox-D7iRB3nL.js} +1 -1
- package/dist/{checkbox-group-B1kDLLYk.js → checkbox-group-B2_rpoPM.js} +1 -1
- package/dist/chevron-down-B72s6PXR.js +1 -0
- package/dist/chevron-right-BatuHzUm.js +1 -0
- package/dist/{choice-card-BT3c1S8g.js → choice-card-m0BYqqOK.js} +1 -1
- package/dist/circle-check-B62pODB3.js +1 -0
- package/dist/{circle-x-wobWkoSx.js → circle-x-BPG0iPst.js} +1 -1
- package/dist/circle-zx0ByzY9.js +1 -0
- package/dist/code-block-ClMLKb7C.js +1 -0
- package/dist/{collapsible-CPJbf6FM.js → collapsible-B4DlWicL.js} +1 -1
- package/dist/components/chat-thread.d.ts +89 -1
- package/dist/components/conversation-item.d.ts +16 -0
- package/dist/components/conversation-panel.d.ts +29 -0
- package/dist/components/home-panel.d.ts +34 -0
- package/dist/components/widget-tab-bar.d.ts +16 -0
- package/dist/{composer-CjngLzal.js → composer-sQ0HcvyG.js} +3 -3
- package/dist/{confirm-card-DCx_A4bU.js → confirm-card-rQWDQsnC.js} +1 -1
- package/dist/construct-cli.es.js +185 -17
- package/dist/construct.d.ts +5 -0
- package/dist/construct.js +327 -0
- package/dist/{context-BY8V-Nlp.js → context-0kg4ZX1J.js} +1 -1
- package/dist/controllable-CnGpMF6r.js +1 -0
- package/dist/conversation-item-BxwQLaFJ.js +1 -0
- package/dist/conversation-list-BCfGN1JU.js +1 -0
- package/dist/{copy-B6DO4PqB.js → copy-n9u9rqpi.js} +1 -1
- package/dist/core-C8fzo39E.js +1 -12
- package/dist/{create-tween-CnMHviKB.js → create-tween-C-q-JCM-.js} +1 -1
- package/dist/{create-tween-D1aiGZZh.js → create-tween-CRrJXxBd.js} +1 -1
- package/dist/{create-tween-BPzaefTp.js → create-tween-DZ3RRDHD.js} +1 -1
- package/dist/{create-tween-DUSQUKpr.js → create-tween-uPkArjIG.js} +1 -1
- package/dist/custom-elements.json +51 -2
- package/dist/{default-input-CucQEOqH.js → default-input-CaMrJkgH.js} +1 -1
- package/dist/define-By-uL588.js +1 -0
- package/dist/define.js +2 -2
- package/dist/define.server.js +2 -2
- package/dist/{disclosure-CbLtajUQ.js → disclosure-WUImBbDv.js} +1 -1
- package/dist/{dropdown-BwhViJFd.js → dropdown-wZVeJOMd.js} +1 -1
- package/dist/elements/agent-card.js +1 -1
- package/dist/elements/artifact.js +1 -1
- package/dist/elements/attachments.js +1 -1
- package/dist/elements/audio-visualizer.js +1 -1
- package/dist/elements/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 +3 -3
- 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/elements.d.ts +20 -4
- package/dist/{ellipsis-DFr4Vqr3.js → ellipsis-CbOpJnU3.js} +1 -1
- package/dist/{embed-5s_vU4J0.js → embed-CrfjkbUG.js} +1 -1
- package/dist/engine-javascript-C1x7zo1_.js +1 -141
- package/dist/{external-link-u9d85ORQ.js → external-link-ByXAwBBQ.js} +1 -1
- package/dist/{file-text-CX7_x42o.js → file-text-DMib2qwt.js} +1 -1
- package/dist/{file-tree-D3kBjXI5.js → file-tree-CJqM2aP7.js} +1 -1
- package/dist/{folder-V-YdIL8f.js → folder-_BAb929C.js} +1 -1
- package/dist/{form-BRNUMCN2.js → form-DSZgZQZk.js} +1 -1
- package/dist/{hover-card-DaeiYrTA.js → hover-card-BQbul9eq.js} +1 -1
- package/dist/{icon-BpixdZNq.js → icon-CdcfRhYI.js} +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +2842 -2703
- package/dist/index.server.js +2820 -2681
- package/dist/{info-8mFsIjS3.js → info-DsFjGuI_.js} +1 -1
- package/dist/{input-d1Yuu-hz.js → input-DKbmkMos.js} +1 -1
- package/dist/kai.es.js +1 -1
- package/dist/{kbd-961zMPFB.js → kbd-PvdGhX4s.js} +1 -1
- package/dist/{link-preview-DIIbV2Sd.js → link-preview-DbM1866N.js} +1 -1
- package/dist/{link-DlZZBGaR.js → link-zF8PzWfF.js} +1 -1
- package/dist/{loader-YQszHFaW.js → loader-BM4CEz4G.js} +1 -1
- package/dist/{markdown-CVk1MPsj.js → markdown-LMvmAyBk.js} +7 -7
- package/dist/mcp.es.js +79 -5
- package/dist/{message-CwKVEdZg.js → message-BSsgvHvf.js} +1 -1
- package/dist/{message-DS8lzHc1.js → message-BYZECyek.js} +1 -1
- package/dist/message-circle-DruwObfX.js +1 -0
- package/dist/message-square-BG6q6mlm.js +1 -0
- package/dist/{minimize-2-UEZmP2QT.js → minimize-2-BQRoBV1V.js} +1 -1
- package/dist/{model-switcher-Kk1jEQ5t.js → model-switcher-CMpCOYcB.js} +1 -1
- package/dist/{overlay-C1od6LOz.js → overlay-Cb-MkyDa.js} +1 -1
- package/dist/{panel-right-ryET0yyn.js → panel-right-i8warFxT.js} +1 -1
- package/dist/{paperclip-BDNoZFJP.js → paperclip-ByY3UVO6.js} +1 -1
- package/dist/play-BvKKq3fX.js +1 -0
- package/dist/primitives/conversation-store.d.ts +54 -0
- package/dist/{progress-bar-BvYX0aoy.js → progress-bar-jVAHvMUf.js} +1 -1
- package/dist/{prompt-suggestion-BRFu2lcu.js → prompt-suggestion-CD-qtNgC.js} +1 -1
- package/dist/{radio-DcL23cNJ.js → radio-BsoBMhkF.js} +1 -1
- package/dist/react/index.d.ts +393 -0
- package/dist/react.js +20 -20
- package/dist/{reasoning-Cackq4Rh.js → reasoning-4kBPtlTx.js} +1 -1
- package/dist/register-impl-B1hLkrI8.js +424 -0
- package/dist/{resizable-Cp9HUYih.js → resizable-uPmY9VY-.js} +1 -1
- package/dist/{rotate-ccw-0DLRDHH5.js → rotate-ccw-B2xn93py.js} +1 -1
- package/dist/{rotate-cw-DOB9IGcU.js → rotate-cw-CMVLoCyH.js} +1 -1
- package/dist/{scroll-area-emVmWP4K.js → scroll-area-BqLUo8ZZ.js} +1 -1
- package/dist/{scroll-button-CeP_gv1x.js → scroll-button-DslXiJyL.js} +1 -1
- package/dist/{select-CWmu00tS.js → select-2cLRtPGT.js} +1 -1
- package/dist/{separator-CE6vly6z.js → separator-BWQtNJcM.js} +1 -1
- package/dist/{settings-CE-78SvZ.js → settings-BBR63jLg.js} +1 -1
- package/dist/{settings-group-ZFWNxFQR.js → settings-group-B2ciy-Iw.js} +1 -1
- package/dist/{skeleton-BebdP4mf.js → skeleton-CkHI-HgC.js} +1 -1
- package/dist/{slider-BAKRYUlz.js → slider-DDR9U-i0.js} +1 -1
- package/dist/{solid-BE5ui6sy.js → solid-BzCFdL25.js} +7720 -7058
- package/dist/{solid-DFhsce3O.js → solid-DruVOXnf.js} +5864 -5283
- package/dist/solid.d.ts +6 -2
- package/dist/solid.js +217 -210
- package/dist/solid.server.js +217 -210
- package/dist/{source-B0FlguSx.js → source-GEnFF528.js} +1 -1
- package/dist/{star-CBMZvLuN.js → star-CilHq8GP.js} +1 -1
- package/dist/store-Ciyk6eZG.js +1 -0
- package/dist/{switch-CViARZCy.js → switch-KkeQIbuH.js} +1 -1
- package/dist/{tasks-card-MjCcOhR_.js → tasks-card-BrN4bggJ.js} +1 -1
- package/dist/{text-shimmer-DKlwRF2G.js → text-shimmer-Dcj1MHuq.js} +1 -1
- package/dist/{textarea-3ay2Me2-.js → textarea-Dpvbngbg.js} +1 -1
- package/dist/theme.tokens.css +28 -0
- package/dist/{thumbs-up-DQcu2HMO.js → thumbs-up-CsT9Wzb9.js} +1 -1
- package/dist/{toast-store-C6yKOhbk.js → toast-store-tgK6MuMv.js} +1 -1
- package/dist/{tool-BCYNlfKy.js → tool-DzUjIBT8.js} +1 -1
- package/dist/{tooltip-05zI4hjs.js → tooltip-Bkkg_4t0.js} +1 -1
- package/dist/{trash-2-BR1RxGky.js → trash-2-jBKxjGGQ.js} +1 -1
- package/dist/{triangle-alert-DHohDOCy.js → triangle-alert-DlQ68ppf.js} +1 -1
- package/dist/types.d.ts +48 -3
- package/dist/ui/dock.d.ts +29 -0
- package/dist/{upload-BbGW6A_u.js → upload-TcAHXv9W.js} +1 -1
- package/dist/{url-scheme-policy-DHpoTJwB.js → url-scheme-policy-DR5DgvkM.js} +1 -1
- package/dist/{use-card-resolution-CJW4grFa.js → use-card-resolution-DaZqAdWf.js} +1 -1
- package/dist/{variant-aurora-xiMPty8f.js → variant-aurora-BhLuYxJR.js} +1 -1
- package/dist/{variant-aurora-BUOVgPOB.js → variant-aurora-CNmfHhcx.js} +2 -2
- package/dist/{variant-aurora-CUsUJvFI.js → variant-aurora-D6GsdTPA.js} +2 -2
- package/dist/{variant-aurora-CW2i4bfr.js → variant-aurora-DbW_OWL2.js} +1 -1
- package/dist/{variant-custom-D91HjAKz.js → variant-custom-BRvaNHSi.js} +1 -1
- package/dist/{variant-custom-BQtOnmeO.js → variant-custom-BvYHR62b.js} +1 -1
- package/dist/{variant-custom-CAnzzppW.js → variant-custom-DMTrEO5w.js} +2 -2
- package/dist/{variant-custom-CAm9L-E5.js → variant-custom-DV2x254s.js} +2 -2
- package/dist/{variant-wave-Ca1Ls4_y.js → variant-wave-BNMGrDfj.js} +2 -2
- package/dist/{variant-wave-uY5crU_K.js → variant-wave-BpDd8t3Z.js} +1 -1
- package/dist/{variant-wave-CxX39DKd.js → variant-wave-CyBueXj9.js} +2 -2
- package/dist/{variant-wave-DYyzIIZv.js → variant-wave-sp-qwsdI.js} +1 -1
- package/dist/x-Z5UntkIJ.js +1 -0
- package/frameworks/react/index.tsx +14 -4
- package/llms-full.txt +7 -2
- package/package.json +16 -16
- package/src/elements/element-meta.json +49 -6
- package/theme.css +28 -0
- package/bin/route.test.js +0 -58
- package/dist/arrow-down-Br0qtpsz.js +0 -1
- package/dist/arrow-left-Dj7xgE12.js +0 -1
- package/dist/check-DPeeMUYx.js +0 -1
- package/dist/chevron-down-CHSWk7ZT.js +0 -1
- package/dist/chevron-right-B7l_fMgx.js +0 -1
- package/dist/circle-Bb0yOpqM.js +0 -1
- package/dist/circle-check-BGZpCiz7.js +0 -1
- package/dist/code-block-CUQ5mtv0.js +0 -1
- package/dist/controllable-D43BKmtX.js +0 -1
- package/dist/conversation-list-D4lLU_yS.js +0 -1
- package/dist/define-CGGX-7Vg.js +0 -1
- package/dist/message-circle-Xf8Q-vZp.js +0 -1
- package/dist/message-square-Cxnwgkns.js +0 -1
- package/dist/play-OFIvYXUQ.js +0 -1
- package/dist/register-impl-C7rENvPK.js +0 -424
- package/dist/store-7eoadydQ.js +0 -1
- package/dist/x-C5m1JFgi.js +0 -1
- 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 -131
- package/src/agent-tooling/construct/codegen.ts +0 -1353
- package/src/agent-tooling/construct/construct.v1.schema.json +0 -250
- 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 -23
- package/src/agent-tooling/construct/schema.ts +0 -371
- 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 -518
- 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 -218
- package/src/components/conversation-list.tsx +0 -429
- 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/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/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 -212
- 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 -185
- package/src/elements/element-types.d.ts +0 -4337
- 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/styles.css +0 -328
- 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 -428
- 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/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 -165
- 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 -53
- 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 -584
- 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/menu.tsx
DELETED
|
@@ -1,241 +0,0 @@
|
|
|
1
|
-
import { For, Show } from 'solid-js';
|
|
2
|
-
import { MoreHorizontal } from 'lucide-solid';
|
|
3
|
-
import {
|
|
4
|
-
Dropdown, DropdownTrigger, DropdownContent, DropdownItem,
|
|
5
|
-
DropdownSeparator, DropdownLabel, DropdownCheckboxItem, DropdownRadioItem,
|
|
6
|
-
DropdownSub, DropdownSubTrigger, DropdownSubContent,
|
|
7
|
-
type DropdownController,
|
|
8
|
-
} from '../ui/dropdown';
|
|
9
|
-
import { renderIcon } from '../ui/icon';
|
|
10
|
-
import { Kbd } from '../ui/kbd';
|
|
11
|
-
import { cn } from '../utils/cn';
|
|
12
|
-
import { defineWebComponent } from './define';
|
|
13
|
-
import { wireDisclosure } from './disclosure';
|
|
14
|
-
import type { KaiMenuItem } from './element-data-types';
|
|
15
|
-
|
|
16
|
-
// The item shape lives in ./element-data-types so the ROOT entry can re-export it
|
|
17
|
-
// (a per-element module's shipped .d.ts is `export {};`). Re-exported here so
|
|
18
|
-
// `import type { KaiMenuItem } from './menu'` keeps working.
|
|
19
|
-
export type { KaiMenuItem } from './element-data-types';
|
|
20
|
-
|
|
21
|
-
interface Props extends Record<string, unknown> {
|
|
22
|
-
/** Tree of menu items. Set as a JS property, not an HTML attribute. */
|
|
23
|
-
items?: KaiMenuItem[];
|
|
24
|
-
/** Optional placement hint (unused by the underlying Dropdown which always
|
|
25
|
-
* positions bottom-start, kept for future extension). */
|
|
26
|
-
placement?: string;
|
|
27
|
-
/** Built-in trigger: leading icon (a named icon like `"plus"`, an image
|
|
28
|
-
* URL/data-URI, or text). Use this instead of slotting `slot="trigger"` for
|
|
29
|
-
* the common case; a slotted trigger overrides it. */
|
|
30
|
-
triggerIcon?: string;
|
|
31
|
-
/** Built-in trigger: a text label (e.g. `"High"`). This is the trigger's
|
|
32
|
-
* VISIBLE text, so it is also its accessible name, and `label` does not
|
|
33
|
-
* override it: an accessible name that does not contain the visible text is
|
|
34
|
-
* unreachable by speech input, which is what WCAG 2.5.3 (Label in Name)
|
|
35
|
-
* exists for. A slotted `slot="trigger"` replaces this built-in trigger
|
|
36
|
-
* entirely and is named differently; see `label`. */
|
|
37
|
-
triggerLabel?: string;
|
|
38
|
-
/** Built-in trigger: a trailing icon (e.g. `"chevron-down"` for a select look). */
|
|
39
|
-
triggerIconTrailing?: string;
|
|
40
|
-
/** Accessible name for a trigger with no visible label. Ignored when
|
|
41
|
-
* `triggerLabel` is set, which is already the visible name.
|
|
42
|
-
*
|
|
43
|
-
* It DOES name a slotted `slot="trigger"`, and that is a difference in what
|
|
44
|
-
* the two slots MEAN, not a limitation. `<kai-button>`'s slot IS the button's
|
|
45
|
-
* label, so text slotted there is the name and `label` steps aside. This slot
|
|
46
|
-
* is VISUAL content, a `+` or an `<svg>`, with the name supplied separately:
|
|
47
|
-
* decoration beside a name, never a second name competing with one. So
|
|
48
|
-
* `label` names the trigger here by design.
|
|
49
|
-
*
|
|
50
|
-
* Slotting a real WORD rather than a glyph makes that word a visible label,
|
|
51
|
-
* and an accessible name has to contain the visible text. Then either drop
|
|
52
|
-
* `label` or make it contain the word you slotted. */
|
|
53
|
-
label?: string;
|
|
54
|
-
/** Stretch the trigger to the full width of the menu's container (a block
|
|
55
|
-
* row), e.g. a sidebar-footer account row. Same affordance as
|
|
56
|
-
* `<kai-button full>`. Attribute: `full`. */
|
|
57
|
-
full?: boolean;
|
|
58
|
-
/** Drive/observe open state (Shoelace-style: settable + reflected to the `open`
|
|
59
|
-
* attribute, the menu still self-manages on click/keyboard). Set `el.open = true`,
|
|
60
|
-
* or `<kai-menu open>`; listen for `kai-open-change`. */
|
|
61
|
-
open?: boolean;
|
|
62
|
-
/** Initial open state on mount (uncontrolled seed). */
|
|
63
|
-
defaultOpen?: boolean;
|
|
64
|
-
/** Disable the trigger: click/keyboard and `show()` no longer open the menu. */
|
|
65
|
-
disabled?: boolean;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
interface Events {
|
|
69
|
-
/**
|
|
70
|
-
* Fired when the user selects a leaf item.
|
|
71
|
-
* - Plain items: `{ id }`.
|
|
72
|
-
* - Checkbox items: `{ id, checked }` where `checked` is the NEW state.
|
|
73
|
-
* - Radio items: `{ id, radioGroup }`, where the consumer marks `id` as the
|
|
74
|
-
* selected one in `radioGroup` and clears the others.
|
|
75
|
-
*/
|
|
76
|
-
'kai-select': { id: string; checked?: boolean; radioGroup?: string };
|
|
77
|
-
/** The menu opened or closed (by click, keyboard, Escape, outside-click, or a method). */
|
|
78
|
-
'kai-open-change': { open: boolean };
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* `<kai-menu>` — a cascading action menu driven by a JSON items-tree.
|
|
83
|
-
*
|
|
84
|
-
* Set the `items` property in JavaScript (array, not attribute). The menu
|
|
85
|
-
* provides its own trigger button (accessible + keyboard-wired); slot only the
|
|
86
|
-
* VISUAL content into `slot="trigger"` (an icon, text, an `<svg>`) — never your
|
|
87
|
-
* own `<button>`/`<a>`, which would nest interactive elements. Set the
|
|
88
|
-
* accessible name with the `label` attribute (for an icon-only trigger):
|
|
89
|
-
*
|
|
90
|
-
* ```html
|
|
91
|
-
* <kai-menu label="Open menu">
|
|
92
|
-
* <span slot="trigger">+</span>
|
|
93
|
-
* </kai-menu>
|
|
94
|
-
* <script type="module">
|
|
95
|
-
* import '@kitn.ai/ui/elements';
|
|
96
|
-
* const menu = document.querySelector('kai-menu');
|
|
97
|
-
* menu.items = [
|
|
98
|
-
* { heading: true, label: 'Actions' },
|
|
99
|
-
* { id: 'attach', label: 'Add files', icon: 'paperclip', shortcut: 'Mod+U' },
|
|
100
|
-
* ];
|
|
101
|
-
* menu.addEventListener('kai-select', (e) => console.log(e.detail));
|
|
102
|
-
* </script>
|
|
103
|
-
* ```
|
|
104
|
-
*/
|
|
105
|
-
defineWebComponent<Props, Events>('kai-menu', {
|
|
106
|
-
items: undefined,
|
|
107
|
-
placement: undefined,
|
|
108
|
-
triggerIcon: undefined,
|
|
109
|
-
triggerLabel: undefined,
|
|
110
|
-
triggerIconTrailing: undefined,
|
|
111
|
-
label: undefined,
|
|
112
|
-
full: false,
|
|
113
|
-
open: undefined,
|
|
114
|
-
defaultOpen: undefined,
|
|
115
|
-
disabled: undefined,
|
|
116
|
-
}, (props, ctx) => {
|
|
117
|
-
const { dispatch, flag } = ctx;
|
|
118
|
-
let api: DropdownController | undefined;
|
|
119
|
-
|
|
120
|
-
// The standard overlay surface: settable+reflecting `open`, kai-open-change,
|
|
121
|
-
// show/hide/toggle, disabled-gating. See ./disclosure.
|
|
122
|
-
wireDisclosure(ctx, () => api, () => props.open);
|
|
123
|
-
|
|
124
|
-
function renderItems(items: KaiMenuItem[]) {
|
|
125
|
-
return (
|
|
126
|
-
<For each={items}>
|
|
127
|
-
{(item) => {
|
|
128
|
-
if (item.separator) {
|
|
129
|
-
return <DropdownSeparator />;
|
|
130
|
-
}
|
|
131
|
-
if (item.heading) {
|
|
132
|
-
return <DropdownLabel>{item.label}</DropdownLabel>;
|
|
133
|
-
}
|
|
134
|
-
if (item.items && item.items.length > 0) {
|
|
135
|
-
return (
|
|
136
|
-
<DropdownSub>
|
|
137
|
-
<DropdownSubTrigger>
|
|
138
|
-
<Show when={item.icon}>{renderIcon(item.icon, { imgClass: 'mr-2 size-4 shrink-0', spanClass: 'mr-2 flex h-4 w-4 shrink-0 items-center justify-center text-sm' })}</Show>
|
|
139
|
-
{item.label}
|
|
140
|
-
</DropdownSubTrigger>
|
|
141
|
-
<DropdownSubContent>
|
|
142
|
-
{renderItems(item.items)}
|
|
143
|
-
</DropdownSubContent>
|
|
144
|
-
</DropdownSub>
|
|
145
|
-
);
|
|
146
|
-
}
|
|
147
|
-
if (item.radioGroup !== undefined) {
|
|
148
|
-
return (
|
|
149
|
-
<DropdownRadioItem
|
|
150
|
-
checked={item.checked}
|
|
151
|
-
disabled={item.disabled}
|
|
152
|
-
onSelect={() => {
|
|
153
|
-
if (item.id) dispatch('kai-select', { id: item.id, radioGroup: item.radioGroup });
|
|
154
|
-
}}
|
|
155
|
-
>
|
|
156
|
-
<Show when={item.icon}>{renderIcon(item.icon, { imgClass: 'mr-2 size-4 shrink-0', spanClass: 'mr-2 flex h-4 w-4 shrink-0 items-center justify-center text-sm' })}</Show>
|
|
157
|
-
{item.label}
|
|
158
|
-
</DropdownRadioItem>
|
|
159
|
-
);
|
|
160
|
-
}
|
|
161
|
-
if (item.checked !== undefined) {
|
|
162
|
-
return (
|
|
163
|
-
<DropdownCheckboxItem
|
|
164
|
-
checked={item.checked}
|
|
165
|
-
disabled={item.disabled}
|
|
166
|
-
onSelect={() => {
|
|
167
|
-
if (item.id) dispatch('kai-select', { id: item.id, checked: !item.checked });
|
|
168
|
-
}}
|
|
169
|
-
>
|
|
170
|
-
<Show when={item.icon}>{renderIcon(item.icon, { imgClass: 'mr-2 size-4 shrink-0', spanClass: 'mr-2 flex h-4 w-4 shrink-0 items-center justify-center text-sm' })}</Show>
|
|
171
|
-
{item.label}
|
|
172
|
-
</DropdownCheckboxItem>
|
|
173
|
-
);
|
|
174
|
-
}
|
|
175
|
-
return (
|
|
176
|
-
<DropdownItem
|
|
177
|
-
disabled={item.disabled}
|
|
178
|
-
onSelect={() => { if (item.id) dispatch('kai-select', { id: item.id }); }}
|
|
179
|
-
>
|
|
180
|
-
<Show when={item.icon}>{renderIcon(item.icon, { imgClass: 'mr-2 size-4 shrink-0', spanClass: 'mr-2 flex h-4 w-4 shrink-0 items-center justify-center text-sm' })}</Show>
|
|
181
|
-
{item.label}
|
|
182
|
-
<Show when={item.shortcut}>
|
|
183
|
-
<span part="shortcut" class="ml-auto pl-4 text-muted-foreground">
|
|
184
|
-
<Kbd keys={item.shortcut!} platform="auto" size="sm" />
|
|
185
|
-
</span>
|
|
186
|
-
</Show>
|
|
187
|
-
</DropdownItem>
|
|
188
|
-
);
|
|
189
|
-
}}
|
|
190
|
-
</For>
|
|
191
|
-
);
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
return (
|
|
195
|
-
<>
|
|
196
|
-
{/* The host shrinks to the trigger by default (UA inline); `full` makes it
|
|
197
|
-
a block whose trigger button fills the width — the kai-button pattern
|
|
198
|
-
(`:host([full])`), for sidebar-footer account rows and other stretched
|
|
199
|
-
placements. */}
|
|
200
|
-
<style>{':host([full]){display:block}'}</style>
|
|
201
|
-
<Dropdown
|
|
202
|
-
defaultOpen={flag('defaultOpen')}
|
|
203
|
-
disabled={flag('disabled')}
|
|
204
|
-
controllerRef={(a) => (api = a)}
|
|
205
|
-
>
|
|
206
|
-
<DropdownTrigger
|
|
207
|
-
class={cn(
|
|
208
|
-
'inline-flex items-center rounded-md transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',
|
|
209
|
-
props.triggerLabel
|
|
210
|
-
? 'gap-1.5 px-2 py-1.5 text-sm font-medium text-muted-foreground hover:bg-accent hover:text-foreground'
|
|
211
|
-
: 'justify-center p-1.5 text-foreground hover:bg-muted',
|
|
212
|
-
flag('full') && 'w-full',
|
|
213
|
-
)}
|
|
214
|
-
// A visible `triggerLabel` IS the name (name-from-contents reaches the
|
|
215
|
-
// slotted/shadow text), so `label` must not be layered over it: aria-label
|
|
216
|
-
// REPLACES the computed name, and a trigger reading "High" that answers to
|
|
217
|
-
// "Reasoning effort" locks speech-input users out (WCAG 2.5.3). Same rule
|
|
218
|
-
// kai-checkpoint and kai-button follow.
|
|
219
|
-
//
|
|
220
|
-
// A SLOTTED trigger keeps `label`, and that is the contract rather than a
|
|
221
|
-
// gap: kai-button's slot IS the label, so text there is the name; this
|
|
222
|
-
// slot is visual content with the name supplied separately. Two slots,
|
|
223
|
-
// two meanings, so the same rule should not apply to both. See `label`.
|
|
224
|
-
aria-label={props.triggerLabel ? undefined : (props.label ?? 'Open menu')}
|
|
225
|
-
>
|
|
226
|
-
{/* Slotted trigger wins; otherwise build one from the trigger* props;
|
|
227
|
-
otherwise fall back to a "more" glyph. */}
|
|
228
|
-
<slot name="trigger">
|
|
229
|
-
<Show when={props.triggerIcon}>{renderIcon(props.triggerIcon, { class: 'size-4 shrink-0' })}</Show>
|
|
230
|
-
<Show when={props.triggerLabel}>{props.triggerLabel}</Show>
|
|
231
|
-
<Show when={props.triggerIconTrailing}>{renderIcon(props.triggerIconTrailing, { class: 'size-3.5 shrink-0 opacity-60' })}</Show>
|
|
232
|
-
<Show when={!props.triggerIcon && !props.triggerLabel}><MoreHorizontal class="size-4" /></Show>
|
|
233
|
-
</slot>
|
|
234
|
-
</DropdownTrigger>
|
|
235
|
-
<DropdownContent class="min-w-[15rem]">
|
|
236
|
-
{renderItems((props.items as KaiMenuItem[] | undefined) ?? [])}
|
|
237
|
-
</DropdownContent>
|
|
238
|
-
</Dropdown>
|
|
239
|
-
</>
|
|
240
|
-
);
|
|
241
|
-
});
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import { createSignal, onCleanup, onMount } from 'solid-js';
|
|
2
|
-
import { defineWebComponent } from './define';
|
|
3
|
-
// The badge shape is the Solid component's own `Skill` — one declaration, so the
|
|
4
|
-
// element and `<MessageSkills>` cannot drift, and the ROOT entry re-exports it.
|
|
5
|
-
import { MessageSkills, type Skill } from '../components/message-skills';
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
interface Props extends Record<string, unknown> {
|
|
9
|
-
/** The active skills to badge. Set as a JS property. Omit to supply them as
|
|
10
|
-
* `<kai-skill>` light-DOM children instead; when both are present the
|
|
11
|
-
* property's skills come first. Nothing renders when there are none. */
|
|
12
|
-
skills?: Skill[];
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Parse a single light-DOM `<kai-skill>` element into a `Skill` descriptor.
|
|
17
|
-
*
|
|
18
|
-
* Attribute / content mapping:
|
|
19
|
-
* - `id` → Skill.id (falls back to `name` when absent)
|
|
20
|
-
* - `textContent` → Skill.name (the human-readable badge label)
|
|
21
|
-
*
|
|
22
|
-
* Example: `<kai-skill id="web-search">Web Search</kai-skill>`
|
|
23
|
-
*/
|
|
24
|
-
export function parseKaiSkillElement(n: Element): Skill {
|
|
25
|
-
const name = n.textContent?.trim() ?? '';
|
|
26
|
-
const id = n.getAttribute('id') ?? name;
|
|
27
|
-
return { id, name };
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* `<kai-skills>` — badges showing which skills were active for a
|
|
32
|
-
* message. Data via the `skills` property **or** declarative `<kai-skill>`
|
|
33
|
-
* children.
|
|
34
|
-
*
|
|
35
|
-
* **Property API** — set a JS array on the element:
|
|
36
|
-
* ```html
|
|
37
|
-
* <kai-skills id="skills"></kai-skills>
|
|
38
|
-
* <script type="module">
|
|
39
|
-
* import '@kitn.ai/ui/elements';
|
|
40
|
-
* document.getElementById('skills').skills = [
|
|
41
|
-
* { id: 'web-search', name: 'Web Search' },
|
|
42
|
-
* { id: 'code', name: 'Code' },
|
|
43
|
-
* ];
|
|
44
|
-
* </script>
|
|
45
|
-
* ```
|
|
46
|
-
*
|
|
47
|
-
* **Declarative API** — compose `<kai-skill>` children (light-DOM data
|
|
48
|
-
* carriers hidden by Shadow DOM — no visible output of their own):
|
|
49
|
-
* ```html
|
|
50
|
-
* <kai-skills>
|
|
51
|
-
* <kai-skill id="web-search">Web Search</kai-skill>
|
|
52
|
-
* <kai-skill id="code">Code</kai-skill>
|
|
53
|
-
* </kai-skills>
|
|
54
|
-
* <script type="module">
|
|
55
|
-
* import '@kitn.ai/ui/elements';
|
|
56
|
-
* </script>
|
|
57
|
-
* ```
|
|
58
|
-
*
|
|
59
|
-
* When both are provided, `skills` prop items render first and declarative
|
|
60
|
-
* children are appended after.
|
|
61
|
-
*/
|
|
62
|
-
defineWebComponent<Props>('kai-skills', {
|
|
63
|
-
skills: [],
|
|
64
|
-
}, (props, { element }) => {
|
|
65
|
-
// Read declarative <kai-skill> children from light DOM.
|
|
66
|
-
// The shadow root has no <slot>, so they are invisible — pure data carriers.
|
|
67
|
-
const [slottedSkills, setSlottedSkills] = createSignal<Skill[]>([]);
|
|
68
|
-
onMount(() => {
|
|
69
|
-
const read = () => {
|
|
70
|
-
const nodes = [...element.querySelectorAll('kai-skill')];
|
|
71
|
-
setSlottedSkills(nodes.map(parseKaiSkillElement));
|
|
72
|
-
};
|
|
73
|
-
read();
|
|
74
|
-
const observer = new MutationObserver(read);
|
|
75
|
-
observer.observe(element, { childList: true, attributes: true, subtree: true });
|
|
76
|
-
onCleanup(() => observer.disconnect());
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
// Prop skills (first) merged with declarative children (after).
|
|
80
|
-
const allSkills = () => [...(props.skills ?? []), ...slottedSkills()];
|
|
81
|
-
|
|
82
|
-
return <MessageSkills skills={allSkills()} />;
|
|
83
|
-
});
|