@kitn.ai/ui 0.20.1 → 0.21.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 +44 -45
- package/dist/components/artifact-card.d.ts +51 -0
- package/dist/components/artifact.d.ts +1 -1
- package/dist/components/attachments.d.ts +2 -2
- package/dist/components/audio-visualizer/index.d.ts +3 -3
- package/dist/components/audio-visualizer/labs/lab-choreography.d.ts +59 -0
- package/dist/components/audio-visualizer/labs/lab-shaders.d.ts +22 -0
- package/dist/components/audio-visualizer/labs/lab-visualizer.d.ts +18 -0
- package/dist/components/audio-visualizer/variant-aurora.d.ts +2 -2
- package/dist/components/audio-visualizer/variant-bar.d.ts +2 -2
- package/dist/components/audio-visualizer/variant-custom.d.ts +2 -2
- package/dist/components/audio-visualizer/variant-grid.d.ts +1 -1
- package/dist/components/audio-visualizer/variant-radial.d.ts +1 -1
- package/dist/components/audio-visualizer/variant-wave.d.ts +1 -1
- package/dist/components/card-fallback.d.ts +12 -2
- package/dist/components/card-renderer.d.ts +63 -2
- package/dist/components/chat-container.d.ts +3 -0
- package/dist/components/chat-scope-picker.d.ts +2 -2
- package/dist/components/chat-thread.d.ts +68 -18
- package/dist/components/choice-card.d.ts +3 -28
- package/dist/components/composer-dom.d.ts +1 -1
- package/dist/components/composer-highlight.d.ts +1 -1
- package/dist/components/composer-history.d.ts +1 -1
- package/dist/components/composer.d.ts +1 -1
- package/dist/components/confirm-card.d.ts +3 -18
- package/dist/components/context.d.ts +8 -4
- package/dist/components/conversation-item.d.ts +1 -1
- package/dist/components/conversation-list.d.ts +4 -3
- package/dist/components/embed.d.ts +3 -3
- package/dist/components/file-tree.d.ts +11 -22
- package/dist/components/form-widgets.d.ts +1 -1
- package/dist/components/form.d.ts +3 -44
- package/dist/components/link-preview.d.ts +3 -3
- package/dist/components/loader.d.ts +30 -48
- package/dist/components/message-skills.d.ts +4 -0
- package/dist/components/message.d.ts +84 -21
- package/dist/components/model-switcher.d.ts +2 -2
- package/dist/components/prompt-input.d.ts +2 -2
- package/dist/components/response-compare-types.d.ts +11 -2
- package/dist/components/response-compare.d.ts +3 -3
- package/dist/components/source.d.ts +12 -3
- package/dist/components/tasks-card.d.ts +3 -31
- package/dist/components/thread.d.ts +17 -5
- package/dist/components/toast.d.ts +2 -2
- package/dist/components/tool-classify.d.ts +8 -0
- package/dist/components/tool-types.d.ts +29 -1
- package/dist/components/tool.d.ts +3 -3
- package/dist/components/use-card-resolution.d.ts +1 -1
- package/dist/create-tween-D3Y5qiij.js +338 -0
- package/dist/create-tween-DGKY1FDY.js +341 -0
- package/dist/create-tween-paho5Rh-.js +7 -0
- package/dist/custom-elements.json +1681 -454
- 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-types.d.ts +70 -10
- package/dist/elements/chat-workspace.js +1 -1
- package/dist/elements/chat.js +1 -1
- package/dist/elements/checkpoint.js +1 -1
- package/dist/elements/choice.js +1 -1
- package/dist/elements/chunks/{Icon-Tj58ES_d.js → Icon-C-2LvGDG.js} +1 -1
- package/dist/elements/chunks/{action-icons-ns1Fnedj.js → action-icons-CaYoImEk.js} +1 -1
- package/dist/elements/chunks/arrow-left-Bb46H7w9.js +1 -0
- package/dist/elements/chunks/artifact-BBIscOxJ.js +1 -0
- package/dist/elements/chunks/{attachments-mCB5F1Fq.js → attachments-BB56zoji.js} +1 -1
- package/dist/elements/chunks/audio-visualizer-BxOx4THz.js +1 -0
- package/dist/elements/chunks/{badge-B4Zuajl2.js → badge-SxLSZ19R.js} +1 -1
- package/dist/elements/chunks/{button-ZWNif3--.js → button-CmkUkz6c.js} +1 -1
- package/dist/elements/chunks/card-renderer-Db4ffkWv.js +1 -0
- package/dist/elements/chunks/card-tags-D8lZ-C_U.js +1 -0
- package/dist/elements/chunks/chat-thread-B3Ks-cKr.js +1 -0
- package/dist/elements/chunks/check-C8desc_h.js +1 -0
- package/dist/elements/chunks/chevron-down-DKtc2HNB.js +1 -0
- package/dist/elements/chunks/chevron-right-Dw4GPhwL.js +1 -0
- package/dist/elements/chunks/choice-card-Q9cYYDyM.js +1 -0
- package/dist/elements/chunks/circle-BeokBsvB.js +1 -0
- package/dist/elements/chunks/circle-check-wJSqt859.js +1 -0
- package/dist/elements/chunks/{circle-x-B7faJFlY.js → circle-x-D0MEfxOM.js} +1 -1
- package/dist/elements/chunks/code-block-C8VzAraE.js +1 -0
- package/dist/elements/chunks/{collapsible-DM1Ckd4e.js → collapsible-Cvj61obE.js} +1 -1
- package/dist/elements/chunks/{composer-BguS0QL_.js → composer-D86ztyL0.js} +2 -2
- package/dist/elements/chunks/confirm-card-BdyDAGLw.js +1 -0
- package/dist/elements/chunks/context-WHDl-xSx.js +1 -0
- package/dist/elements/chunks/conversation-list-CdR14_Y4.js +1 -0
- package/dist/elements/chunks/create-tween-C_A_B638.js +7 -0
- package/dist/elements/chunks/{default-input-Cqqilg9t.js → default-input-CSZqUM81.js} +1 -1
- package/dist/elements/chunks/define-BzPnNsXg.js +1 -0
- package/dist/elements/chunks/{disclosure-CIZ5c8nO.js → disclosure-DVKsoc1F.js} +1 -1
- package/dist/elements/chunks/{download-Dsbg3ste.js → download-BjA54IMJ.js} +1 -1
- package/dist/elements/chunks/{dropdown-BDd1-Zgi.js → dropdown-BjVVHWXH.js} +1 -1
- package/dist/elements/chunks/{ellipsis-Dw6qrss-.js → ellipsis-BNedmqfi.js} +1 -1
- package/dist/elements/chunks/embed-DQsl4XEq.js +1 -0
- package/dist/elements/chunks/{external-link-Vt74zAoL.js → external-link-Di-dw2CU.js} +1 -1
- package/dist/elements/chunks/{file-text-CZrZF6_v.js → file-text-B3sAODCV.js} +1 -1
- package/dist/elements/chunks/{file-tree-DF4okKyo.js → file-tree-Dgto-bMn.js} +1 -1
- package/dist/elements/chunks/{folder-glP5rha4.js → folder-D6rMadFV.js} +1 -1
- package/dist/elements/chunks/form-CILxvhQ7.js +1 -0
- package/dist/elements/chunks/hover-card-BtiF4XiU.js +1 -0
- package/dist/elements/chunks/{icon-BLb8beoi.js → icon-DKkmze3y.js} +1 -1
- package/dist/elements/chunks/{info-CIsv92JK.js → info-CWRjZkuy.js} +1 -1
- package/dist/elements/chunks/{input-Dds1kFyt.js → input--QJBK6BA.js} +1 -1
- package/dist/elements/chunks/{kbd-De_xbgi9.js → kbd-C3zuKh8R.js} +1 -1
- package/dist/elements/chunks/{link-i4r_k7z4.js → link-BL5JA7Q0.js} +1 -1
- package/dist/elements/chunks/link-preview-CU37bbXh.js +1 -0
- package/dist/elements/chunks/{loader-BmQH4s3V.js → loader-XmpyxyRH.js} +1 -1
- package/dist/elements/chunks/{markdown-Zi21WhUz.js → markdown-3Gv5UZ_o.js} +1 -1
- package/dist/elements/chunks/message-CnBA2OUt.js +1 -0
- package/dist/elements/chunks/message-X5NZbq-W.js +1 -0
- package/dist/elements/chunks/message-square-CnpAm_P0.js +1 -0
- package/dist/elements/chunks/{minimize-2--ifeCGrl.js → minimize-2-DwyrUTcM.js} +1 -1
- package/dist/elements/chunks/{model-switcher-B94YAKsM.js → model-switcher-CclaJEHt.js} +1 -1
- package/dist/elements/chunks/{overlay-kD8dwRv_.js → overlay-Cepd-KcS.js} +1 -1
- package/dist/elements/chunks/{paperclip-q21dYOSK.js → paperclip-CdwKjrlu.js} +1 -1
- package/dist/elements/chunks/{progress-bar-BrAIIaaJ.js → progress-bar-DMVXBD3b.js} +1 -1
- package/dist/elements/chunks/{prompt-suggestion-Bjn2K-fR.js → prompt-suggestion-Di_WZE_5.js} +1 -1
- package/dist/elements/chunks/reasoning-D0jMch5u.js +1 -0
- package/dist/elements/chunks/{resizable-Dp4JExql.js → resizable-1znbL1Gv.js} +1 -1
- package/dist/elements/chunks/{rotate-cw-CFWWkpj2.js → rotate-cw-DVhhgx8n.js} +1 -1
- package/dist/elements/chunks/{scroll-area-Bb0kHH1j.js → scroll-area-Bs4bFS1P.js} +1 -1
- package/dist/elements/chunks/scroll-button-Bet5NLc4.js +1 -0
- package/dist/elements/chunks/{separator-9kRgr1X9.js → separator-C5Gh8qGC.js} +1 -1
- package/dist/elements/chunks/{settings-B8lmec4D.js → settings-5vmEFg0K.js} +1 -1
- package/dist/elements/chunks/{settings-group-I0hEuXiN.js → settings-group-BWLB38kz.js} +1 -1
- package/dist/elements/chunks/{share-C3lTiYGt.js → share-BZ3G_DaB.js} +1 -1
- package/dist/elements/chunks/skeleton-DafPJQTp.js +1 -0
- package/dist/elements/chunks/slots-CIw9RlAe.js +1 -0
- package/dist/elements/chunks/source-D_qj_6uJ.js +1 -0
- package/dist/elements/chunks/{star-CSJtGxgv.js → star-Cuv7j2IE.js} +1 -1
- package/dist/elements/chunks/{store-CHyW95TP.js → store-C1StPHfW.js} +1 -1
- package/dist/elements/chunks/tasks-card-EyoBZfpA.js +1 -0
- package/dist/elements/chunks/{text-shimmer-Cn9TmNpI.js → text-shimmer-D9gRSh34.js} +1 -1
- package/dist/elements/chunks/textarea-DuhtHfcm.js +1 -0
- package/dist/elements/chunks/{thumbs-up-PNVVThEF.js → thumbs-up-B9hwv43w.js} +1 -1
- package/dist/elements/chunks/{toast-store-DKbQn3Wn.js → toast-store-Bm3DUEDe.js} +1 -1
- package/dist/elements/chunks/{tool-DjTRpIpl.js → tool-CDtW7L0z.js} +1 -1
- package/dist/elements/chunks/tooltip-eB226mGK.js +1 -0
- package/dist/elements/chunks/{triangle-alert-DsHTHCPm.js → triangle-alert-C1SNzTqK.js} +1 -1
- package/dist/elements/chunks/use-card-resolution-YZh2MvI5.js +1 -0
- package/dist/elements/chunks/{variant-aurora-Dc4nQUia.js → variant-aurora-Cj1F7D0l.js} +2 -2
- package/dist/elements/chunks/{variant-custom-y_3kVQhS.js → variant-custom-T9gpt7QE.js} +1 -1
- package/dist/elements/chunks/{variant-wave-D5OR1-9Z.js → variant-wave-CxU9z-TE.js} +2 -2
- package/dist/elements/chunks/{video-B7vmenoC.js → video-CK4R7Rus.js} +1 -1
- package/dist/elements/chunks/x-D1qx0aLd.js +1 -0
- 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-list.js +1 -1
- package/dist/elements/default-input.d.ts +7 -7
- package/dist/elements/define.d.ts +1 -0
- package/dist/elements/dialog.js +1 -1
- package/dist/elements/disclosure.d.ts +1 -1
- package/dist/elements/editable-label.js +1 -1
- package/dist/elements/element-data-types.d.ts +107 -0
- package/dist/elements/embed.js +1 -1
- package/dist/elements/empty.js +1 -1
- package/dist/elements/feedback-bar.js +1 -1
- package/dist/elements/file-tree.js +1 -1
- package/dist/elements/file-upload.js +1 -1
- package/dist/elements/form.js +1 -1
- package/dist/elements/hover-card.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-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/reasoning.js +1 -1
- package/dist/elements/register.d.ts +8 -6
- package/dist/elements/remote.js +1 -1
- package/dist/elements/resizable.js +1 -1
- package/dist/elements/response-stream.js +2 -2
- 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/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/slots.d.ts +16 -0
- 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/validate-messages.d.ts +25 -0
- package/dist/elements/voice-input.js +1 -1
- package/dist/elements/voice-output.js +1 -1
- package/dist/elements.d.ts +2725 -214
- package/dist/index.d.ts +163 -125
- package/dist/index.js +6336 -5802
- package/dist/index.server.d.ts +5 -0
- package/dist/index.server.js +5446 -4937
- package/dist/kai-provider.es.d.ts +5 -0
- package/dist/kai-provider.es.js +79 -77
- package/dist/kai.es.d.ts +5 -0
- package/dist/kai.es.js +1 -1
- package/dist/llms/llms-full.txt +762 -148
- package/dist/llms/llms.txt +57 -5
- package/dist/mcp.es.js +4010 -770
- package/dist/primitives/card-component-types.d.ts +11 -0
- package/dist/primitives/card-data-types.d.ts +196 -0
- package/dist/primitives/card-host.d.ts +1 -1
- package/dist/primitives/card-recovery.d.ts +3 -3
- package/dist/primitives/card-registry.d.ts +4 -14
- package/dist/primitives/card-resolution.d.ts +1 -1
- package/dist/primitives/card-routing.d.ts +1 -1
- package/dist/primitives/card-tags.d.ts +11 -0
- package/dist/primitives/card-validate-cards.d.ts +57 -0
- package/dist/primitives/card-validate-generator.testlib.d.ts +20 -0
- package/dist/primitives/card-validate-schemas.d.ts +17 -0
- package/dist/primitives/card-validate.d.ts +24 -0
- package/dist/primitives/create-kai-chat.d.ts +3 -3
- package/dist/primitives/embed-providers.d.ts +1 -1
- package/dist/primitives/link-preview.d.ts +1 -1
- package/dist/primitives/message-feedback.d.ts +2 -2
- package/dist/primitives/toast-store.d.ts +1 -1
- package/dist/react/index.d.ts +717 -299
- package/dist/react/use-kai-chat.d.ts +8 -4
- package/dist/react.d.ts +5 -0
- package/dist/react.js +417 -316
- package/dist/register-impl-bzrZ44ft.js +145 -0
- package/dist/remote/host-embed.d.ts +1 -1
- package/dist/remote/index.d.ts +2 -2
- package/dist/remote/provider-runtime.d.ts +2 -2
- package/dist/remote/provider.d.ts +2 -2
- package/dist/remote/validate.d.ts +1 -1
- package/dist/remote/wire.d.ts +1 -1
- package/dist/schemas/artifact.schema.json +92 -0
- package/dist/schemas/embed.schema.json +0 -2
- package/dist/schemas/from-tool-call.d.ts +48 -0
- package/dist/schemas/index.d.ts +48 -0
- package/dist/schemas/link.schema.json +0 -2
- package/dist/schemas/provider-subsets.d.ts +136 -0
- package/dist/schemas/registry.d.ts +140 -0
- package/dist/schemas/tool-defs.d.ts +121 -0
- package/dist/schemas.d.ts +5 -0
- package/dist/schemas.js +717 -0
- package/dist/solid-BCJUQqwS.js +22750 -0
- package/dist/solid-BdENBcEq.js +20108 -0
- package/dist/solid.d.ts +66 -0
- package/dist/solid.js +261 -0
- package/dist/solid.server.d.ts +5 -0
- package/dist/solid.server.js +261 -0
- package/dist/state/index.d.ts +14 -4
- package/dist/state/messages.d.ts +8 -3
- package/dist/state/mock.d.ts +46 -0
- package/dist/state/parts.d.ts +85 -0
- package/dist/state/stream.d.ts +15 -9
- package/dist/state.d.ts +5 -0
- package/dist/state.js +253 -84
- package/dist/ui/action-icons.d.ts +1 -1
- package/dist/ui/collapsible.d.ts +11 -6
- package/dist/ui/dropdown.d.ts +47 -42
- package/dist/ui/pane-group.d.ts +1 -1
- package/dist/variant-aurora-1wMcXRUS.js +381 -0
- package/dist/variant-aurora-BKHHiOgL.js +391 -0
- package/dist/{variant-aurora-DVtGqVH6.js → variant-aurora-DOb_o4pC.js} +1 -1
- package/dist/{variant-custom-Dif-IV4u.js → variant-custom-CJGB0Kbw.js} +1 -1
- package/dist/variant-custom-Co0CkXJF.js +200 -0
- package/dist/variant-custom-DWSSgmd2.js +170 -0
- package/dist/variant-wave-C3-45cL6.js +218 -0
- package/dist/{variant-wave-DbfNdvSi.js → variant-wave-CEODq-9q.js} +1 -1
- package/dist/variant-wave-jdXBnCUZ.js +208 -0
- package/dist/wire/chunk.d.ts +171 -0
- package/dist/wire/consume.d.ts +26 -0
- package/dist/wire/encode.d.ts +148 -0
- package/dist/wire/formats/anthropic.d.ts +2 -0
- package/dist/wire/formats/openai.d.ts +5 -0
- package/dist/wire/index.d.ts +14 -0
- package/dist/wire/read.d.ts +26 -0
- package/dist/wire/sink-helpers.d.ts +21 -0
- package/dist/wire/sse.d.ts +33 -0
- package/dist/wire.d.ts +5 -53
- package/dist/wire.js +898 -0
- package/frameworks/react/index.tsx +183 -154
- package/frameworks/react/runtime.tsx +21 -1
- package/frameworks/react/use-kai-chat.tsx +11 -1
- package/llms-full.txt +762 -148
- package/llms.txt +57 -5
- package/package.json +61 -8
- package/src/agent-tooling/archetypes.ts +96 -0
- package/src/agent-tooling/integrations/anthropic.ts +412 -0
- package/src/agent-tooling/integrations/cloudflare.ts +136 -52
- package/src/agent-tooling/integrations/langgraph.ts +67 -13
- package/src/agent-tooling/integrations/mastra.ts +120 -12
- package/src/agent-tooling/integrations/mock.ts +43 -8
- package/src/agent-tooling/integrations/ollama.ts +61 -24
- package/src/agent-tooling/integrations/openai.ts +87 -0
- package/src/agent-tooling/integrations/openrouter.ts +56 -8
- package/src/agent-tooling/integrations/pi.ts +79 -23
- package/src/agent-tooling/integrations/pydantic-ai.ts +24 -2
- package/src/agent-tooling/integrations/vercel-ai-sdk.ts +84 -13
- package/src/agent-tooling/mcp/manifest.ts +206 -25
- package/src/agent-tooling/mcp/tools/debug.ts +13 -7
- package/src/agent-tooling/mcp/tools/reference.ts +285 -6
- package/src/agent-tooling/mcp/tools/scaffold.ts +3345 -675
- package/src/agent-tooling/registry.ts +17 -0
- package/src/agent-tooling/types.ts +229 -1
- package/src/components/artifact-card.tsx +120 -0
- package/src/components/audio-visualizer/index.tsx +9 -0
- package/src/components/audio-visualizer/labs/lab-choreography.ts +187 -0
- package/src/components/audio-visualizer/labs/lab-shaders.ts +363 -0
- package/src/components/audio-visualizer/labs/lab-visualizer.tsx +102 -0
- package/src/components/audio-visualizer/shader-canvas.tsx +31 -1
- package/src/components/card-fallback.tsx +42 -10
- package/src/components/card-renderer.tsx +146 -9
- package/src/components/chat-container.tsx +4 -0
- package/src/components/chat-thread.tsx +118 -51
- package/src/components/choice-card.tsx +17 -29
- package/src/components/composer.tsx +12 -2
- package/src/components/confirm-card.tsx +24 -20
- package/src/components/context.tsx +12 -4
- package/src/components/conversation-list.tsx +18 -2
- package/src/components/file-tree.tsx +11 -22
- package/src/components/file-upload.tsx +14 -8
- package/src/components/form.tsx +14 -47
- package/src/components/loader.tsx +39 -12
- package/src/components/message-skills.tsx +4 -0
- package/src/components/message.tsx +294 -46
- package/src/components/reasoning.tsx +92 -5
- package/src/components/response-compare-types.ts +25 -0
- package/src/components/response-compare.tsx +4 -9
- package/src/components/source.tsx +50 -24
- package/src/components/tasks-card.tsx +10 -33
- package/src/components/thread.tsx +84 -42
- package/src/components/toast.tsx +11 -5
- package/src/components/tool-classify.ts +26 -0
- package/src/components/tool-types.ts +31 -1
- package/src/elements/agent-card.tsx +11 -11
- package/src/elements/artifact.tsx +15 -7
- package/src/elements/attachments.tsx +6 -4
- package/src/elements/avatar.tsx +1 -1
- package/src/elements/button.tsx +3 -3
- package/src/elements/card.tsx +2 -2
- package/src/elements/cards.tsx +109 -14
- package/src/elements/chain-of-thought.tsx +14 -10
- package/src/elements/chat-scope-picker.tsx +9 -7
- package/src/elements/chat-types.ts +59 -6
- package/src/elements/chat-workspace.tsx +50 -9
- package/src/elements/chat.tsx +64 -3
- package/src/elements/choice.tsx +8 -8
- package/src/elements/coachmark.tsx +1 -1
- package/src/elements/command.tsx +8 -23
- package/src/elements/compare.tsx +7 -6
- package/src/elements/compiled.css +1 -1
- package/src/elements/composer.tsx +8 -8
- package/src/elements/confirm-card.tsx +9 -9
- package/src/elements/context-meter.tsx +4 -18
- package/src/elements/conversation-list.tsx +14 -9
- package/src/elements/default-input.tsx +3 -3
- package/src/elements/define.tsx +178 -43
- package/src/elements/editable-label.tsx +17 -2
- package/src/elements/element-data-types.ts +112 -0
- package/src/elements/element-meta.json +1596 -304
- package/src/elements/element-types.d.ts +2636 -211
- package/src/elements/feedback-bar.tsx +1 -1
- package/src/elements/file-tree.tsx +1 -1
- package/src/elements/file-upload.tsx +1 -1
- package/src/elements/form.tsx +14 -6
- package/src/elements/input.tsx +1 -1
- package/src/elements/kbd.tsx +1 -1
- package/src/elements/menu.tsx +10 -29
- package/src/elements/message-skills.tsx +7 -9
- package/src/elements/message.tsx +200 -32
- package/src/elements/model-switcher.tsx +5 -3
- package/src/elements/pane.tsx +1 -1
- package/src/elements/prompt-dock.tsx +8 -8
- package/src/elements/prompt-input.tsx +10 -10
- package/src/elements/prompt-suggestions.tsx +7 -4
- package/src/elements/reasoning.tsx +1 -1
- package/src/elements/register.ts +9 -0
- package/src/elements/resizable.globals.d.ts +36 -0
- package/src/elements/resizable.tsx +24 -13
- package/src/elements/response-stream.tsx +1 -1
- package/src/elements/scroll-button.tsx +1 -1
- package/src/elements/search.tsx +6 -1
- package/src/elements/segmented.tsx +5 -11
- package/src/elements/separator.tsx +1 -1
- package/src/elements/slots.ts +57 -24
- package/src/elements/source.tsx +21 -22
- package/src/elements/switch.tsx +3 -3
- package/src/elements/tasks.tsx +5 -4
- package/src/elements/thread.tsx +36 -4
- package/src/elements/toast.tsx +3 -2
- package/src/elements/tool.tsx +1 -1
- package/src/elements/validate-messages.ts +76 -0
- package/src/elements/voice-input.tsx +7 -7
- package/src/elements/voice-output.tsx +4 -4
- package/src/index.ts +141 -6
- package/src/primitives/card-component-types.ts +63 -0
- package/src/primitives/card-data-types.ts +312 -0
- package/src/primitives/card-recovery.ts +13 -2
- package/src/primitives/card-registry.tsx +34 -23
- package/src/primitives/card-schemas/artifact.schema.json +92 -0
- package/src/primitives/card-schemas/embed.schema.json +0 -2
- package/src/primitives/card-schemas/link.schema.json +0 -2
- package/src/primitives/card-tags.ts +61 -0
- package/src/primitives/card-validate-cards.ts +255 -0
- package/src/primitives/card-validate-generator.testlib.ts +38 -0
- package/src/primitives/card-validate-schemas.ts +58 -0
- package/src/primitives/card-validate.ts +48 -20
- package/src/primitives/create-tween.ts +54 -2
- package/src/primitives/message-feedback.ts +3 -2
- package/src/primitives/use-audio-analysis.ts +20 -1
- package/src/primitives/use-sequencer.ts +20 -1
- package/src/schemas/from-tool-call.ts +151 -0
- package/src/schemas/index.ts +340 -0
- package/src/schemas/provider-subsets.ts +538 -0
- package/src/schemas/registry.ts +355 -0
- package/src/schemas/tool-defs.ts +492 -0
- package/src/solid.ts +150 -0
- package/src/state/index.ts +27 -1
- package/src/state/messages.ts +21 -4
- package/src/state/mock.ts +211 -0
- package/src/state/parts.ts +295 -0
- package/src/state/stream.ts +56 -58
- package/src/ui/collapsible.tsx +17 -5
- package/src/ui/dropdown.tsx +46 -12
- package/src/ui/overlay.tsx +10 -4
- package/src/wire/chunk.ts +201 -0
- package/src/wire/consume.ts +440 -0
- package/src/wire/encode.ts +474 -0
- package/src/wire/formats/anthropic.ts +267 -0
- package/src/wire/formats/openai.ts +187 -0
- package/src/wire/index.ts +52 -0
- package/src/wire/read.ts +152 -0
- package/src/wire/sink-helpers.ts +50 -0
- package/src/wire/sse.ts +140 -0
- package/dist/create-tween-hvpmSuwW.js +0 -7
- package/dist/elements/chunks/arrow-left-DQocUFvy.js +0 -1
- package/dist/elements/chunks/audio-visualizer-BqNy7dfm.js +0 -1
- package/dist/elements/chunks/card-BkHbp4BA.js +0 -1
- package/dist/elements/chunks/chat-thread-CkRN6pZ7.js +0 -1
- package/dist/elements/chunks/check-B9-gn6SS.js +0 -1
- package/dist/elements/chunks/chevron-down-BNsxc2hk.js +0 -1
- package/dist/elements/chunks/chevron-right-Hv00StBO.js +0 -1
- package/dist/elements/chunks/circle-0e3KJTDr.js +0 -1
- package/dist/elements/chunks/circle-check-BNAS0JEy.js +0 -1
- package/dist/elements/chunks/code-block-BFUHn6Va.js +0 -1
- package/dist/elements/chunks/context-Cb7k4F-v.js +0 -1
- package/dist/elements/chunks/conversation-list-CvoAkWhN.js +0 -1
- package/dist/elements/chunks/create-tween-oVvAIG8r.js +0 -7
- package/dist/elements/chunks/define-D1din7Ld.js +0 -1
- package/dist/elements/chunks/hover-card-Cmm6Q53m.js +0 -1
- package/dist/elements/chunks/message-BqyXDN3-.js +0 -1
- package/dist/elements/chunks/message-feedback-Djr3z6Yb.js +0 -1
- package/dist/elements/chunks/message-square-vFAgbDaX.js +0 -1
- package/dist/elements/chunks/reasoning-DTpCGtnY.js +0 -1
- package/dist/elements/chunks/scroll-button-B0cH5fXf.js +0 -1
- package/dist/elements/chunks/skeleton-DSXW5Yya.js +0 -1
- package/dist/elements/chunks/slots--V19HwUb.js +0 -1
- package/dist/elements/chunks/textarea-CUwqAX0G.js +0 -1
- package/dist/elements/chunks/tooltip-CgBZCVKp.js +0 -1
- package/dist/elements/chunks/use-card-resolution-BSu_XHjH.js +0 -1
- package/dist/elements/chunks/x-GRUeeQFT.js +0 -1
- package/dist/host-embed.d.ts +0 -33
- package/dist/kai-provider.d.ts +0 -2
- package/dist/origin.d.ts +0 -5
- package/dist/provider-runtime.d.ts +0 -27
- package/dist/register-impl-DQyejdfb.js +0 -145
- package/dist/validate.d.ts +0 -4
- package/dist/version.d.ts +0 -4
- package/src/components/component-meta.json +0 -4550
- package/src/elements/card-media.jpg +0 -0
- package/src/elements/resizable.d.ts +0 -27
- package/src/elements/video-poster.jpg +0 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { ChatMessage } from './chat-types';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Boundary validation for the untyped `message` / `messages` properties.
|
|
5
|
+
*
|
|
6
|
+
* A web component's properties are an untyped boundary: nothing stops a consumer
|
|
7
|
+
* from assigning the pre-0.20.0 `{ id, role, content }` shape, and TypeScript is
|
|
8
|
+
* not there at runtime to catch it. `parts` is REQUIRED internally, so a message
|
|
9
|
+
* without one throws inside a Solid render pass (`groupMessageParts` iterating
|
|
10
|
+
* `undefined`), and an uncaught exception there blanks the WHOLE element, not
|
|
11
|
+
* just the offending message. Validating here turns that into a skipped message
|
|
12
|
+
* plus one clear console error naming the element and the expected shape.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
/** True when `m` carries the required `parts` array. */
|
|
16
|
+
export function hasParts(m: unknown): m is ChatMessage {
|
|
17
|
+
return !!m && typeof m === 'object' && Array.isArray((m as { parts?: unknown }).parts);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/** Shared tail of every diagnostic, so all facades say the same thing. */
|
|
21
|
+
const EXPECTED =
|
|
22
|
+
"each entry needs a 'parts' array (e.g. parts: [{ type: 'text', text: 'Hi' }]). " +
|
|
23
|
+
"The 'content' string field was removed in 0.20.0.";
|
|
24
|
+
|
|
25
|
+
const EMPTY: ChatMessage[] = [];
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Creates a per-element-instance validator for a `messages` array. Returns the
|
|
29
|
+
* INPUT array unchanged when every entry is valid (no allocation, so streaming
|
|
30
|
+
* identity checks upstream still hold), a filtered copy when some are not, and
|
|
31
|
+
* `[]` when the property itself is not an array.
|
|
32
|
+
*
|
|
33
|
+
* Logs at most one `console.error` per validation pass, and never re-logs for a
|
|
34
|
+
* message object it has already reported, so an unrelated re-render during
|
|
35
|
+
* streaming does not spam the console.
|
|
36
|
+
*/
|
|
37
|
+
export function createMessagesGuard(tag: string): (messages: unknown) => ChatMessage[] {
|
|
38
|
+
const warned = new WeakSet<object>();
|
|
39
|
+
// WeakSet only holds objects, so primitive entries (a stray string/null in the
|
|
40
|
+
// array) get one shared latch instead.
|
|
41
|
+
let warnedPrimitive = false;
|
|
42
|
+
let warnedNonArray = false;
|
|
43
|
+
|
|
44
|
+
return (messages: unknown): ChatMessage[] => {
|
|
45
|
+
if (!Array.isArray(messages)) {
|
|
46
|
+
if (messages != null && !warnedNonArray) {
|
|
47
|
+
warnedNonArray = true;
|
|
48
|
+
console.error(`<${tag}>: 'messages' must be an array. Ignoring it.`);
|
|
49
|
+
}
|
|
50
|
+
return EMPTY;
|
|
51
|
+
}
|
|
52
|
+
// Fast path: nothing to report, hand back the same reference.
|
|
53
|
+
if (messages.every(hasParts)) return messages as ChatMessage[];
|
|
54
|
+
|
|
55
|
+
let invalid = 0;
|
|
56
|
+
let unreported = 0;
|
|
57
|
+
for (const m of messages) {
|
|
58
|
+
if (hasParts(m)) continue;
|
|
59
|
+
invalid++;
|
|
60
|
+
if (m !== null && typeof m === 'object') {
|
|
61
|
+
if (warned.has(m as object)) continue;
|
|
62
|
+
warned.add(m as object);
|
|
63
|
+
} else {
|
|
64
|
+
if (warnedPrimitive) continue;
|
|
65
|
+
warnedPrimitive = true;
|
|
66
|
+
}
|
|
67
|
+
unreported++;
|
|
68
|
+
}
|
|
69
|
+
if (unreported > 0) {
|
|
70
|
+
console.error(
|
|
71
|
+
`<${tag}>: skipped ${invalid} of ${messages.length} messages: ${EXPECTED}`,
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
return messages.filter(hasParts);
|
|
75
|
+
};
|
|
76
|
+
}
|
|
@@ -3,7 +3,7 @@ import { VoiceInput, type VoiceInputController } from '../components/voice-input
|
|
|
3
3
|
|
|
4
4
|
interface Props extends Record<string, unknown> {
|
|
5
5
|
/**
|
|
6
|
-
* Transcriber the host supplies
|
|
6
|
+
* Transcriber the host supplies: records audio, returns the text. This is a
|
|
7
7
|
* **function-valued property** (`el.transcribe = async blob => '...'`) because
|
|
8
8
|
* a value-returning callback can't be modelled as a fire-and-forget event.
|
|
9
9
|
*/
|
|
@@ -24,18 +24,18 @@ interface Props extends Record<string, unknown> {
|
|
|
24
24
|
|
|
25
25
|
/** Events fired by `<kai-voice-input>`. */
|
|
26
26
|
interface Events {
|
|
27
|
-
/** Raw audio captured (before transcription)
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
27
|
+
/** Raw audio captured (before transcription), for hosts that prefer to handle
|
|
28
|
+
* transcription themselves instead of via the `transcribe` property. Also the
|
|
29
|
+
* unsupported-fallback signal: no `transcribe`, no SpeechRecognition, so only
|
|
30
|
+
* the blob is produced (no text). */
|
|
31
31
|
'kai-audio-captured': { blob: Blob };
|
|
32
|
-
/** Final transcript
|
|
32
|
+
/** Final transcript: the `transcribe` property resolved, OR native
|
|
33
33
|
* `SpeechRecognition` produced final text (no `transcribe` set). */
|
|
34
34
|
'kai-transcription': { text: string };
|
|
35
35
|
/** Live partial transcript during native recognition (only when `interim` is
|
|
36
36
|
* set). Fires repeatedly before the final `kai-transcription`. */
|
|
37
37
|
'kai-transcript-interim': { text: string };
|
|
38
|
-
/** Recording started or stopped
|
|
38
|
+
/** Recording started or stopped. Lets the host drive its own UI (waveform,
|
|
39
39
|
* push-to-talk indicator) in sync with the mic. Fires on real transitions
|
|
40
40
|
* only (manual click and programmatic start()/stop()), never on mount. */
|
|
41
41
|
'kai-recording-change': { recording: boolean };
|
|
@@ -7,7 +7,7 @@ interface Props extends Record<string, unknown> {
|
|
|
7
7
|
/** Speak automatically when `text` is set/changed. */
|
|
8
8
|
autoplay?: boolean;
|
|
9
9
|
/**
|
|
10
|
-
* TTS model seam the host supplies
|
|
10
|
+
* TTS model seam the host supplies: given text, returns an audio `Blob` to
|
|
11
11
|
* play. This is a **function-valued property** (`el.synthesize = async text =>
|
|
12
12
|
* blob`); when set, the native `speechSynthesis` path is bypassed. Mirrors
|
|
13
13
|
* `<kai-voice-input>`'s `transcribe`. A value-returning callback can't be
|
|
@@ -20,10 +20,10 @@ interface Props extends Record<string, unknown> {
|
|
|
20
20
|
|
|
21
21
|
/** Events fired by `<kai-voice-output>`. */
|
|
22
22
|
interface Events {
|
|
23
|
-
/** Playback started or stopped
|
|
24
|
-
*
|
|
23
|
+
/** Playback started or stopped. Drive your own UI in sync. Fires on real transitions
|
|
24
|
+
* only (manual click and programmatic speak()/stop()), never on mount. */
|
|
25
25
|
'kai-speaking-change': { speaking: boolean };
|
|
26
|
-
/** The model path (`synthesize`) resolved audio
|
|
26
|
+
/** The model path (`synthesize`) resolved audio: the raw `Blob` before playback. */
|
|
27
27
|
'kai-synthesized': { blob: Blob };
|
|
28
28
|
}
|
|
29
29
|
|
package/src/index.ts
CHANGED
|
@@ -1,3 +1,22 @@
|
|
|
1
|
+
// The package root entry (".").
|
|
2
|
+
//
|
|
3
|
+
// SCOPE — read before adding an export here.
|
|
4
|
+
// -----------------------------------------
|
|
5
|
+
// Every consumer of `@kitn.ai/ui` pays for this barrel, INCLUDING React/Vue/
|
|
6
|
+
// Svelte consumers who never render a Solid component. It is therefore frozen at
|
|
7
|
+
// the surface that shipped: adding a Solid component here taxes four frameworks
|
|
8
|
+
// to serve one. Closing the 79/79 element coverage gaps on this file grew it
|
|
9
|
+
// 591,359 -> 705,031 bytes (+19.2%), which is what motivated the split.
|
|
10
|
+
//
|
|
11
|
+
// The COMPLETE SolidJS surface — all 79 elements' components plus a `<Name>Props`
|
|
12
|
+
// type for every public component — lives on `@kitn.ai/ui/solid` (src/solid.ts),
|
|
13
|
+
// which is its own build target so only Solid consumers pay for it. `./solid`
|
|
14
|
+
// re-exports this file, so it is a strict superset: anything here is reachable
|
|
15
|
+
// there too, and a Solid consumer only ever needs the one import.
|
|
16
|
+
//
|
|
17
|
+
// Rule of thumb: a NEW Solid component export belongs in src/solid.ts.
|
|
18
|
+
// Type-only exports are free (fully erased by the build) and may live in either.
|
|
19
|
+
|
|
1
20
|
// Shared types (folded in from @tab-zen/shared)
|
|
2
21
|
export type { ModelOption, SearchFilters, ConversationScope, ConversationSummary, ConversationGroup } from './types';
|
|
3
22
|
|
|
@@ -27,7 +46,7 @@ export type {
|
|
|
27
46
|
} from './primitives/toast-store';
|
|
28
47
|
export { Toast, ToastRegion } from './components/toast';
|
|
29
48
|
export type {
|
|
30
|
-
ToastRegionProps, ToastDismissReason, ToastPosition,
|
|
49
|
+
ToastProps, ToastRegionProps, ToastDismissReason, ToastPosition,
|
|
31
50
|
} from './components/toast';
|
|
32
51
|
|
|
33
52
|
// Card Contract (generative-UI foundation)
|
|
@@ -160,32 +179,64 @@ export type { ButtonProps } from './ui/button';
|
|
|
160
179
|
export { Avatar } from './ui/avatar';
|
|
161
180
|
export type { AvatarProps } from './ui/avatar';
|
|
162
181
|
export { Tooltip } from './ui/tooltip';
|
|
182
|
+
export type { TooltipProps, TooltipController } from './ui/tooltip';
|
|
163
183
|
export { HoverCard } from './ui/hover-card';
|
|
184
|
+
export type { HoverCardProps, HoverCardController } from './ui/hover-card';
|
|
164
185
|
export { Collapsible, CollapsibleTrigger, CollapsibleContent } from './ui/collapsible';
|
|
186
|
+
export type {
|
|
187
|
+
CollapsibleProps, CollapsibleTriggerProps, CollapsibleContentProps, CollapsibleController,
|
|
188
|
+
} from './ui/collapsible';
|
|
165
189
|
export { ScrollArea } from './ui/scroll-area';
|
|
190
|
+
export type { ScrollAreaProps, ScrollOrientation } from './ui/scroll-area';
|
|
166
191
|
export { Dropdown, DropdownTrigger, DropdownContent, DropdownItem } from './ui/dropdown';
|
|
192
|
+
export type {
|
|
193
|
+
DropdownProps, DropdownTriggerProps, DropdownContentProps, DropdownItemProps, DropdownController,
|
|
194
|
+
} from './ui/dropdown';
|
|
167
195
|
export { Textarea } from './ui/textarea';
|
|
168
196
|
export type { TextareaProps } from './ui/textarea';
|
|
169
197
|
export { Badge } from './ui/badge';
|
|
170
198
|
export type { BadgeProps } from './ui/badge';
|
|
171
199
|
export { Separator } from './ui/separator';
|
|
200
|
+
export type { SeparatorProps } from './ui/separator';
|
|
172
201
|
export { ResizablePanelGroup, ResizablePanel, ResizableHandle, Resizable, normalizeSize, resolveToPx } from './ui/resizable';
|
|
173
202
|
export type { ResizablePanelGroupProps, ResizablePanelProps, ResizableHandleProps, ResizableProps, SizeValue } from './ui/resizable';
|
|
174
203
|
export { Skeleton } from './ui/skeleton';
|
|
204
|
+
export type { SkeletonProps, SkeletonVariant } from './ui/skeleton';
|
|
175
205
|
export { FileTree, buildFileTree } from './components/file-tree';
|
|
176
206
|
export type {
|
|
177
207
|
FileTreeProps, FileTreeFile, FileTreeNode, FileTreeFolderNode, FileTreeFileNode,
|
|
178
208
|
} from './components/file-tree';
|
|
179
209
|
export { Artifact } from './components/artifact';
|
|
180
210
|
export type { ArtifactProps, ArtifactFile, ArtifactTab } from './components/artifact';
|
|
211
|
+
export { ArtifactCard, DEFAULT_ARTIFACT_CARD_HEIGHT } from './components/artifact-card';
|
|
212
|
+
// `ArtifactCardFile` is the SAME declaration `FileTreeFile` and `ArtifactFile`
|
|
213
|
+
// alias, authored in primitives/card-data-types.ts because `ArtifactCardData.files`
|
|
214
|
+
// reaches it and that module has to stay resolvable from a Node/no-DOM project.
|
|
215
|
+
// It is exported here under its authored name because that is the name the
|
|
216
|
+
// generated element metadata records for `kai-artifact.files` / `kai-file-tree.files`,
|
|
217
|
+
// and tests/elements/prop-types-exported.ts requires every named prop type to be
|
|
218
|
+
// importable from this entry. The two aliases stay exported above, unchanged.
|
|
219
|
+
export type {
|
|
220
|
+
ArtifactCardProps,
|
|
221
|
+
ArtifactCardData,
|
|
222
|
+
ArtifactCardEnvelope,
|
|
223
|
+
ArtifactCardFile,
|
|
224
|
+
ArtifactCardTab,
|
|
225
|
+
} from './components/artifact-card';
|
|
181
226
|
|
|
182
227
|
// Layer 3: AI/Feature Components
|
|
183
228
|
export {
|
|
184
229
|
ChatContainer, ChatContainerRoot, ChatContainerContent, ChatContainerScrollAnchor,
|
|
185
230
|
useChatContainer,
|
|
186
231
|
} from './components/chat-container';
|
|
187
|
-
export {
|
|
188
|
-
|
|
232
|
+
export type {
|
|
233
|
+
ChatContainerProps, ChatContainerRootProps, ChatContainerContentProps, ChatContainerScrollAnchorProps,
|
|
234
|
+
} from './components/chat-container';
|
|
235
|
+
export { Message, MessageAvatar, MessageContent, MessageActions, MessageAction, MessageCopyButton, MessageBody } from './components/message';
|
|
236
|
+
export type {
|
|
237
|
+
MessageProps, MessageAvatarProps, MessageContentProps, MessageActionsProps,
|
|
238
|
+
MessageActionProps, MessageCopyButtonProps, MessageBodyProps,
|
|
239
|
+
} from './components/message';
|
|
189
240
|
export { ResponseCompare, useResolved } from './components/response-compare';
|
|
190
241
|
export type { ResponseCompareProps, CompareLayout, ResolvedController } from './components/response-compare';
|
|
191
242
|
export {
|
|
@@ -201,14 +252,20 @@ export type {
|
|
|
201
252
|
CompareSelection,
|
|
202
253
|
} from './components/response-compare';
|
|
203
254
|
export { MessageSkills } from './components/message-skills';
|
|
204
|
-
export type { Skill as MessageSkill } from './components/message-skills';
|
|
255
|
+
export type { MessageSkillsProps, Skill as MessageSkill } from './components/message-skills';
|
|
205
256
|
export {
|
|
206
257
|
PromptInput, PromptInputTextarea, PromptInputActions, PromptInputAction,
|
|
207
258
|
usePromptInput,
|
|
208
259
|
} from './components/prompt-input';
|
|
260
|
+
export type {
|
|
261
|
+
PromptInputProps, PromptInputTextareaProps, PromptInputActionsProps, PromptInputActionProps,
|
|
262
|
+
} from './components/prompt-input';
|
|
209
263
|
export { ResponseStream } from './components/response-stream';
|
|
264
|
+
export type { ResponseStreamProps } from './components/response-stream';
|
|
210
265
|
export { Markdown } from './components/markdown';
|
|
266
|
+
export type { MarkdownProps } from './components/markdown';
|
|
211
267
|
export { CodeBlock, CodeBlockCode, CodeBlockGroup } from './components/code-block';
|
|
268
|
+
export type { CodeBlockProps, CodeBlockCodeProps, CodeBlockGroupProps } from './components/code-block';
|
|
212
269
|
export { Loader } from './components/loader';
|
|
213
270
|
export type { LoaderVariant, LoaderSize, LoaderProps } from './components/loader';
|
|
214
271
|
export {
|
|
@@ -216,13 +273,26 @@ export {
|
|
|
216
273
|
DotsLoader, TypingLoader, WaveLoader, BarsLoader,
|
|
217
274
|
TerminalLoader, TextBlinkLoader, TextShimmerLoader, TextDotsLoader,
|
|
218
275
|
} from './components/loader';
|
|
219
|
-
export
|
|
276
|
+
export type {
|
|
277
|
+
LoaderShapeProps, LoaderTextProps,
|
|
278
|
+
CircularLoaderProps, ClassicLoaderProps, PulseLoaderProps, PulseDotLoaderProps,
|
|
279
|
+
DotsLoaderProps, TypingLoaderProps, WaveLoaderProps, BarsLoaderProps,
|
|
280
|
+
TerminalLoaderProps, TextBlinkLoaderProps, TextShimmerLoaderProps, TextDotsLoaderProps,
|
|
281
|
+
} from './components/loader';
|
|
282
|
+
export { FeedbackBar, type FeedbackValue, type FeedbackDetail, type FeedbackBarProps } from './components/feedback-bar';
|
|
220
283
|
export {
|
|
221
284
|
ChainOfThought, ChainOfThoughtStep, ChainOfThoughtTrigger,
|
|
222
285
|
ChainOfThoughtContent, ChainOfThoughtItem,
|
|
223
286
|
} from './components/chain-of-thought';
|
|
287
|
+
export type {
|
|
288
|
+
ChainOfThoughtProps, ChainOfThoughtStepProps, ChainOfThoughtTriggerProps,
|
|
289
|
+
ChainOfThoughtContentProps, ChainOfThoughtItemProps,
|
|
290
|
+
ChainOfThoughtType, ChainOfThoughtStepData, ChainOfThoughtController,
|
|
291
|
+
} from './components/chain-of-thought';
|
|
224
292
|
export { Source, SourceTrigger, SourceContent, SourceList } from './components/source';
|
|
293
|
+
export type { SourceProps, SourceTriggerProps, SourceContentProps, SourceListProps } from './components/source';
|
|
225
294
|
export { PromptSuggestion } from './components/prompt-suggestion';
|
|
295
|
+
export type { PromptSuggestionProps } from './components/prompt-suggestion';
|
|
226
296
|
export {
|
|
227
297
|
Empty, EmptyHeader, EmptyMedia, EmptyTitle, EmptyDescription, EmptyContent, emptyMediaVariants,
|
|
228
298
|
} from './components/empty';
|
|
@@ -230,7 +300,9 @@ export type {
|
|
|
230
300
|
EmptyProps, EmptyHeaderProps, EmptyMediaProps, EmptyTitleProps, EmptyDescriptionProps, EmptyContentProps,
|
|
231
301
|
} from './components/empty';
|
|
232
302
|
export { ScrollButton } from './components/scroll-button';
|
|
303
|
+
export type { ScrollButtonProps } from './components/scroll-button';
|
|
233
304
|
export { TextShimmer } from './components/text-shimmer';
|
|
305
|
+
export type { TextShimmerProps } from './components/text-shimmer';
|
|
234
306
|
export { Checkpoint, CheckpointIcon, CheckpointTrigger } from './components/checkpoint';
|
|
235
307
|
export type { CheckpointProps, CheckpointIconProps, CheckpointTriggerProps } from './components/checkpoint';
|
|
236
308
|
export {
|
|
@@ -253,14 +325,29 @@ export type {
|
|
|
253
325
|
ContextContentBodyProps,
|
|
254
326
|
ContextContentFooterProps,
|
|
255
327
|
ContextUsageRowProps,
|
|
328
|
+
ContextInputUsageProps,
|
|
329
|
+
ContextOutputUsageProps,
|
|
330
|
+
ContextReasoningUsageProps,
|
|
331
|
+
ContextCacheUsageProps,
|
|
256
332
|
} from './components/context';
|
|
257
333
|
export { VoiceInput } from './components/voice-input';
|
|
334
|
+
export type { VoiceInputProps, VoiceInputController } from './components/voice-input';
|
|
258
335
|
export { ConversationList } from './components/conversation-list';
|
|
336
|
+
export type { ConversationListProps, ConversationListController } from './components/conversation-list';
|
|
259
337
|
export { ConversationItem } from './components/conversation-item';
|
|
338
|
+
export type { ConversationItemProps } from './components/conversation-item';
|
|
260
339
|
export { ModelSwitcher } from './components/model-switcher';
|
|
340
|
+
export type { ModelSwitcherProps } from './components/model-switcher';
|
|
261
341
|
export { ChatScopePicker } from './components/chat-scope-picker';
|
|
342
|
+
export type { ChatScopePickerProps } from './components/chat-scope-picker';
|
|
262
343
|
export { Tool } from './components/tool';
|
|
263
344
|
export type { ToolPart, ToolProps } from './components/tool';
|
|
345
|
+
// ToolPart.kind's doc comment says "Derive with `classifyTool(type)`", so the
|
|
346
|
+
// function has to be reachable from every entry that surfaces ToolPart. It is
|
|
347
|
+
// total, deterministic and terminates in 'generic', so it is safe public API and
|
|
348
|
+
// genuinely useful to anyone rendering tool calls themselves.
|
|
349
|
+
export { classifyTool } from './components/tool-classify';
|
|
350
|
+
export type { ToolKind } from './components/tool-classify';
|
|
264
351
|
export { ThinkingBar } from './components/thinking-bar';
|
|
265
352
|
export type { ThinkingBarProps } from './components/thinking-bar';
|
|
266
353
|
export { Reasoning, ReasoningTrigger, ReasoningContent } from './components/reasoning';
|
|
@@ -283,4 +370,52 @@ export type {
|
|
|
283
370
|
} from './components/attachments';
|
|
284
371
|
|
|
285
372
|
// Chat message types — public API for consumers who need to type their own message arrays.
|
|
286
|
-
|
|
373
|
+
// NOTE: chat-types.ts also exports an unrelated `Source` interface (a citation), and
|
|
374
|
+
// `Source` is already a public component export (./components/source, a citation
|
|
375
|
+
// chip/trigger), so re-exporting both under that name is a duplicate-identifier error.
|
|
376
|
+
// The citation type therefore ships under its alias `MessageSource`, which is also the
|
|
377
|
+
// argument type of the public `AssistantStream.addSource(source)`.
|
|
378
|
+
export type {
|
|
379
|
+
ChatMessage, ChatMessageAction, CustomAction, AvatarData, FeedbackVote, MessagePart,
|
|
380
|
+
MessageSource, RawOrigin,
|
|
381
|
+
} from './elements/chat-types';
|
|
382
|
+
|
|
383
|
+
// Composer document model. This belongs on "." rather than "./solid" because it
|
|
384
|
+
// is part of the ELEMENT contract, not the Solid-only surface: `ComposerDoc` is
|
|
385
|
+
// the non-string half of `kai-prompt-input` / `kai-composer` / `kai-default-input`'s
|
|
386
|
+
// `value` property, and `doc` + `entities` on their `kai-submit` /
|
|
387
|
+
// `kai-value-change` details. The shipped prop docs name `ComposerDoc` by name,
|
|
388
|
+
// so a React or Vue consumer reading them has to be able to import it. Type-only,
|
|
389
|
+
// so it is erased by the build and costs the root barrel nothing.
|
|
390
|
+
export type { ComposerDoc, Segment, EntityRef } from './primitives/composer-model';
|
|
391
|
+
|
|
392
|
+
// ---------------------------------------------------------------------------
|
|
393
|
+
// Named types for the remaining kai-* array/object PROPERTIES.
|
|
394
|
+
//
|
|
395
|
+
// Same rationale as `ComposerDoc` above, applied to the whole class instead of
|
|
396
|
+
// one instance: the generated `./elements` declarations and React wrappers expand
|
|
397
|
+
// every prop type structurally (deliberately — see the `IMPORTS = {}` note in
|
|
398
|
+
// scripts/gen-element-api.mjs), so a consumer who wants to NAME the shape had to
|
|
399
|
+
// write `NonNullable<KaiPromptInputElementProps['triggers']>`. Every element-prop
|
|
400
|
+
// type that has a name in source is now reachable from "." — the entry a React /
|
|
401
|
+
// Vue / Svelte / vanilla consumer imports — not only from "./solid".
|
|
402
|
+
//
|
|
403
|
+
// Type-only, so the root barrel pays nothing at runtime.
|
|
404
|
+
// Guarded by tests/elements/prop-types-exported.test.ts, which re-derives the
|
|
405
|
+
// list from the facades with the TS checker and fails on a new unexported one.
|
|
406
|
+
// ---------------------------------------------------------------------------
|
|
407
|
+
export type { TriggerDef, TriggerItem } from './components/composer';
|
|
408
|
+
export type { ChatThreadContextUsage } from './components/chat-thread';
|
|
409
|
+
export type { Skill } from './components/message-skills';
|
|
410
|
+
export type { AgentStatus } from './ui/agent-card';
|
|
411
|
+
export type { KaiNavItem } from './ui/nav';
|
|
412
|
+
export type { KaiTabItem } from './ui/tabs';
|
|
413
|
+
export type { PaneStatus } from './ui/pane';
|
|
414
|
+
export type { PaneTab } from './ui/pane-group';
|
|
415
|
+
export type {
|
|
416
|
+
KaiCommandItem, KaiContextUsage, KaiMenuItem, KaiSegmentedOption, KaiSourceItem,
|
|
417
|
+
} from './elements/element-data-types';
|
|
418
|
+
// `kai-audio-visualizer.shader` takes a ShaderSpec. The element arrived from main
|
|
419
|
+
// after this block was written, and prop-types-exported.test.ts caught it, which
|
|
420
|
+
// is the point of deriving that list from the facades rather than maintaining it.
|
|
421
|
+
export type { ShaderSpec } from './components/audio-visualizer';
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
// src/primitives/card-component-types.ts
|
|
2
|
+
// `CardEnvelope.type` -> the Solid component that renders it, as a TYPE.
|
|
3
|
+
//
|
|
4
|
+
// TYPES ONLY, AND THAT IS THE WHOLE FILE. `BUILTIN_CARD_COMPONENTS` and
|
|
5
|
+
// `mergeCardComponents` stay in card-registry.tsx and cannot follow them here: they
|
|
6
|
+
// ARE JSX. So this is not the same split card-tags.ts made — that one moved data and
|
|
7
|
+
// its type; this one moves only the type, because the value half has nowhere else to
|
|
8
|
+
// go. Do not try to "finish" the symmetry by dragging the component map over.
|
|
9
|
+
//
|
|
10
|
+
// WHY THE TYPES ARE ALONE IN A `.ts`
|
|
11
|
+
// ----------------------------------
|
|
12
|
+
// The same reason, one layer along, that card-tags.ts exists — read that file's header
|
|
13
|
+
// first; this is the second instance of its problem, not a new one.
|
|
14
|
+
//
|
|
15
|
+
// `@kitn.ai/ui/schemas` is the server-safe entry, and src/schemas/registry.ts declares
|
|
16
|
+
// `CustomCardSpec.component` and `CardRegistry.components` in terms of
|
|
17
|
+
// `CardComponentMap`. That is a TYPE import and erases at runtime, but a type import
|
|
18
|
+
// still has to RESOLVE, and while these two types lived in card-registry.tsx it
|
|
19
|
+
// resolved to a `.tsx`. tsconfig.mcp.json has no `jsx` on purpose, so the `kai` MCP's
|
|
20
|
+
// typecheck pass reported, on any tree that had not been built:
|
|
21
|
+
//
|
|
22
|
+
// src/schemas/registry.ts(61,51): error TS6142: Module '../primitives/card-registry'
|
|
23
|
+
// was resolved to '.../card-registry.tsx', but '--jsx' is not set.
|
|
24
|
+
//
|
|
25
|
+
// Exactly one error, and the last one standing on an unbuilt tree. Moving the two type
|
|
26
|
+
// aliases into this file takes that pass to 0. Measured on this tree, both directions.
|
|
27
|
+
//
|
|
28
|
+
// Relaxing tsconfig.mcp.json instead is not an option, and that is measured too, not
|
|
29
|
+
// recalled: giving that project `jsx: "preserve"` + `jsxImportSource: "solid-js"` —
|
|
30
|
+
// the settings the main tsconfig.json actually uses — takes it from 1 error to 130,
|
|
31
|
+
// almost all `TS2304: Cannot find name 'HTMLDivElement' / 'window'`, because a `jsx`
|
|
32
|
+
// setting drags the whole Solid component tree into a Node-only, `lib: ["ESNext"]`
|
|
33
|
+
// pass. (`jsx: "preserve"` with no import source is worse still: 838.) card-tags.ts
|
|
34
|
+
// records 1364 for the broader case. The figures differ because the reachable set
|
|
35
|
+
// differs; the conclusion does not. The Node/no-DOM boundary is load-bearing.
|
|
36
|
+
//
|
|
37
|
+
// `import type { Component } from 'solid-js'` below does NOT reintroduce the problem
|
|
38
|
+
// it just solved. Type-importing from solid-js resolves to a `.d.ts`, and a
|
|
39
|
+
// declaration file needs no `jsx` to be read; `skipLibCheck` covers what is inside it.
|
|
40
|
+
// It is resolving a `.tsx` SOURCE file that TS6142 objects to, and this file resolves
|
|
41
|
+
// none.
|
|
42
|
+
//
|
|
43
|
+
// WHAT THIS SPLIT DOES NOT DO
|
|
44
|
+
// ---------------------------
|
|
45
|
+
// It changes nothing at runtime, and must not be sold as if it did. This module is
|
|
46
|
+
// types only, so it compiles to nothing and there is no emitted module to compare:
|
|
47
|
+
// `verify:ssr` and `verify:schemas` read the BUILT entry and cannot tell the two
|
|
48
|
+
// arrangements apart even in principle. card-tags.ts records the same finding for its
|
|
49
|
+
// own case from the harder direction, where there WAS a bundle to diff and it came out
|
|
50
|
+
// byte-identical. The boundary this file defends is a compile-time one. The
|
|
51
|
+
// discriminating check is `tsc --noEmit -p tsconfig.mcp.json` on an UNBUILT tree, and
|
|
52
|
+
// nothing else is evidence for it.
|
|
53
|
+
|
|
54
|
+
import type { Component } from 'solid-js';
|
|
55
|
+
import type { CardEnvelope, CardHost } from './card-contract';
|
|
56
|
+
|
|
57
|
+
/** Solid renderer for one envelope. `host` is the resolved CardHost so each wrapper
|
|
58
|
+
* can bridge its card's emit convention (form/confirm/tasks take `host`;
|
|
59
|
+
* link/embed take `onEmit`). */
|
|
60
|
+
export type CardComponent = Component<{ envelope: CardEnvelope; host?: CardHost }>;
|
|
61
|
+
|
|
62
|
+
/** Solid layer: envelope type → the component that draws it. */
|
|
63
|
+
export type CardComponentMap = Record<string, CardComponent>;
|