@kitn.ai/ui 0.18.2 → 0.20.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/LICENSE +6 -0
- package/NOTICE +54 -0
- package/dist/components/audio-visualizer/audio-visualizer.voice-fixture.d.ts +59 -0
- package/dist/components/audio-visualizer/aurora.glsl.d.ts +114 -0
- package/dist/components/audio-visualizer/index.d.ts +155 -0
- package/dist/components/audio-visualizer/shader-canvas.d.ts +130 -0
- package/dist/components/audio-visualizer/sizes.d.ts +25 -0
- package/dist/components/audio-visualizer/variant-aurora.d.ts +89 -0
- package/dist/components/audio-visualizer/variant-bar.d.ts +46 -0
- package/dist/components/audio-visualizer/variant-custom.d.ts +73 -0
- package/dist/components/audio-visualizer/variant-grid.d.ts +22 -0
- package/dist/components/audio-visualizer/variant-radial.d.ts +13 -0
- package/dist/components/audio-visualizer/variant-wave.d.ts +11 -0
- package/dist/components/audio-visualizer/wave.glsl.d.ts +16 -0
- package/dist/components/thread.d.ts +54 -0
- package/dist/create-tween-hvpmSuwW.js +7 -0
- package/dist/custom-elements.json +477 -0
- 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.d.ts +1 -0
- package/dist/elements/audio-visualizer.js +1 -0
- package/dist/elements/autoloader.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/checkpoint.js +1 -1
- package/dist/elements/choice.js +1 -1
- package/dist/elements/chunks/{Icon-C2LTALdM.js → Icon-Tj58ES_d.js} +1 -1
- package/dist/elements/chunks/action-icons-ns1Fnedj.js +1 -0
- package/dist/elements/chunks/arrow-left-DQocUFvy.js +1 -0
- package/dist/elements/chunks/{attachments-DLJcWCDV.js → attachments-mCB5F1Fq.js} +1 -1
- package/dist/elements/chunks/audio-visualizer-BqNy7dfm.js +1 -0
- package/dist/elements/chunks/{badge-BTNZTODL.js → badge-B4Zuajl2.js} +1 -1
- package/dist/elements/chunks/{button-DBDZebGr.js → button-ZWNif3--.js} +1 -1
- package/dist/elements/chunks/{card-YfCyI4fH.js → card-BkHbp4BA.js} +1 -1
- package/dist/elements/chunks/chat-thread-CkRN6pZ7.js +1 -0
- package/dist/elements/chunks/check-B9-gn6SS.js +1 -0
- package/dist/elements/chunks/chevron-down-BNsxc2hk.js +1 -0
- package/dist/elements/chunks/chevron-right-Hv00StBO.js +1 -0
- package/dist/elements/chunks/circle-0e3KJTDr.js +1 -0
- package/dist/elements/chunks/circle-check-BNAS0JEy.js +1 -0
- package/dist/elements/chunks/{circle-x-pDtzlghQ.js → circle-x-B7faJFlY.js} +1 -1
- package/dist/elements/chunks/{code-block-DZ6mz6vs.js → code-block-BFUHn6Va.js} +1 -1
- package/dist/elements/chunks/collapsible-DM1Ckd4e.js +1 -0
- package/dist/elements/chunks/{composer-BZyPU6gD.js → composer-BguS0QL_.js} +7 -3
- package/dist/elements/chunks/{context-Cx6eQA_G.js → context-Cb7k4F-v.js} +1 -1
- package/dist/elements/chunks/{conversation-list-C4xTQSpT.js → conversation-list-CvoAkWhN.js} +1 -1
- package/dist/elements/chunks/create-tween-oVvAIG8r.js +7 -0
- package/dist/elements/chunks/{default-input-BZcwyKcP.js → default-input-Cqqilg9t.js} +1 -1
- package/dist/elements/chunks/define-D1din7Ld.js +1 -0
- package/dist/elements/chunks/{disclosure-BcBs--Jf.js → disclosure-CIZ5c8nO.js} +1 -1
- package/dist/elements/chunks/{download-BDQwcFav.js → download-Dsbg3ste.js} +1 -1
- package/dist/elements/chunks/{dropdown-wgs8xCJZ.js → dropdown-BDd1-Zgi.js} +1 -1
- package/dist/elements/chunks/{ellipsis-CUiEJ6R1.js → ellipsis-Dw6qrss-.js} +1 -1
- package/dist/elements/chunks/{external-link-DJUmC7g2.js → external-link-Vt74zAoL.js} +1 -1
- package/dist/elements/chunks/{file-text-DOYfYvrh.js → file-text-CZrZF6_v.js} +1 -1
- package/dist/elements/chunks/{file-tree-DQzNQrbr.js → file-tree-DF4okKyo.js} +1 -1
- package/dist/elements/chunks/{folder-DBDUBANz.js → folder-glP5rha4.js} +1 -1
- package/dist/elements/chunks/hover-card-Cmm6Q53m.js +1 -0
- package/dist/elements/chunks/icon-BLb8beoi.js +1 -0
- package/dist/elements/chunks/{info-DBQl-m6e.js → info-CIsv92JK.js} +1 -1
- package/dist/elements/chunks/{input-DZD67EvW.js → input-Dds1kFyt.js} +1 -1
- package/dist/elements/chunks/{kbd-DbyVrlnU.js → kbd-De_xbgi9.js} +1 -1
- package/dist/elements/chunks/{link-vko7AttA.js → link-i4r_k7z4.js} +1 -1
- package/dist/elements/chunks/{loader-Cg6rO8tQ.js → loader-BmQH4s3V.js} +1 -1
- package/dist/elements/chunks/{markdown-n3Xbj3PR.js → markdown-Zi21WhUz.js} +7 -7
- package/dist/elements/chunks/{message-CgKytiSB.js → message-BqyXDN3-.js} +1 -1
- package/dist/elements/chunks/{message-feedback-Ds3-US0e.js → message-feedback-Djr3z6Yb.js} +1 -1
- package/dist/elements/chunks/message-square-vFAgbDaX.js +1 -0
- package/dist/elements/chunks/{minimize-2-3kCdE0q3.js → minimize-2--ifeCGrl.js} +1 -1
- package/dist/elements/chunks/{model-switcher-BMtXGwLU.js → model-switcher-B94YAKsM.js} +1 -1
- package/dist/elements/chunks/{overlay-B1-MBI6h.js → overlay-kD8dwRv_.js} +1 -1
- package/dist/elements/chunks/{paperclip-DDEfmkHc.js → paperclip-q21dYOSK.js} +1 -1
- package/dist/elements/chunks/{progress-bar-Dwbiyv3s.js → progress-bar-BrAIIaaJ.js} +1 -1
- package/dist/elements/chunks/{prompt-suggestion-9lvgFcEa.js → prompt-suggestion-Bjn2K-fR.js} +1 -1
- package/dist/elements/chunks/{reasoning-DzHWsdAJ.js → reasoning-DTpCGtnY.js} +1 -1
- package/dist/elements/chunks/resizable-Dp4JExql.js +1 -0
- package/dist/elements/chunks/{rotate-cw-jpisOdOV.js → rotate-cw-CFWWkpj2.js} +1 -1
- package/dist/elements/chunks/{scroll-area-g5Ze3K6f.js → scroll-area-Bb0kHH1j.js} +1 -1
- package/dist/elements/chunks/scroll-button-B0cH5fXf.js +1 -0
- package/dist/elements/chunks/{separator-Bmjc5XyX.js → separator-9kRgr1X9.js} +1 -1
- package/dist/elements/chunks/{settings-Cz1bMJP9.js → settings-B8lmec4D.js} +1 -1
- package/dist/elements/chunks/{settings-group-9imY3kRA.js → settings-group-I0hEuXiN.js} +1 -1
- package/dist/elements/chunks/{share-BdenF0wQ.js → share-C3lTiYGt.js} +1 -1
- package/dist/elements/chunks/skeleton-DSXW5Yya.js +1 -0
- package/dist/elements/chunks/{slots-DkZ-Cmha.js → slots--V19HwUb.js} +1 -1
- package/dist/elements/chunks/{star-DY6z1UUH.js → star-CSJtGxgv.js} +1 -1
- package/dist/elements/chunks/{store-th4VyJXM.js → store-CHyW95TP.js} +1 -1
- package/dist/elements/chunks/{text-shimmer-CEi-tlXr.js → text-shimmer-Cn9TmNpI.js} +1 -1
- package/dist/elements/chunks/textarea-CUwqAX0G.js +1 -0
- package/dist/elements/chunks/{thumbs-up-BR33KLfA.js → thumbs-up-PNVVThEF.js} +1 -1
- package/dist/elements/chunks/{toast-store-BEMda0fv.js → toast-store-DKbQn3Wn.js} +1 -1
- package/dist/elements/chunks/{tool-TMued3WO.js → tool-DjTRpIpl.js} +1 -1
- package/dist/elements/chunks/tooltip-CgBZCVKp.js +1 -0
- package/dist/elements/chunks/{triangle-alert-B07fX3Q8.js → triangle-alert-DsHTHCPm.js} +1 -1
- package/dist/elements/chunks/use-card-resolution-BSu_XHjH.js +1 -0
- package/dist/elements/chunks/variant-aurora-Dc4nQUia.js +218 -0
- package/dist/elements/chunks/variant-custom-y_3kVQhS.js +1 -0
- package/dist/elements/chunks/variant-wave-D5OR1-9Z.js +116 -0
- package/dist/elements/chunks/{video-MKp3LmNT.js → video-B7vmenoC.js} +1 -1
- package/dist/elements/chunks/x-GRUeeQFT.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/define.d.ts +11 -0
- package/dist/elements/dialog.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-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/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/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 +15 -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.d.ts +1 -0
- package/dist/elements/thread.js +1 -0
- 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 +62 -0
- package/dist/index.js +3411 -3328
- package/dist/kai.es.js +1 -1
- package/dist/llms/llms-full.txt +70 -4
- package/dist/llms/llms.txt +3 -3
- package/dist/primitives/audio-bands.d.ts +106 -0
- package/dist/primitives/create-tween.d.ts +33 -0
- package/dist/primitives/use-audio-analysis.d.ts +149 -0
- package/dist/primitives/use-sequencer.d.ts +13 -0
- package/dist/primitives/use-voice-recorder.d.ts +1 -0
- package/dist/primitives/visualizer-sequences.d.ts +39 -0
- package/dist/react/index.d.ts +105 -0
- package/dist/react/use-voice-input.d.ts +15 -0
- package/dist/react.js +269 -240
- package/dist/register-impl-DQyejdfb.js +145 -0
- package/dist/test-utils/fake-clock.d.ts +45 -0
- package/dist/ui/resizable.d.ts +9 -3
- package/dist/variant-aurora-DVtGqVH6.js +218 -0
- package/dist/variant-custom-Dif-IV4u.js +1 -0
- package/dist/variant-wave-DbfNdvSi.js +116 -0
- package/frameworks/react/index.tsx +74 -1
- package/frameworks/react/use-voice-input.tsx +59 -0
- package/llms-full.txt +70 -4
- package/llms.txt +3 -3
- package/package.json +32 -7
- package/src/components/audio-visualizer/audio-visualizer.voice-fixture.ts +257 -0
- package/src/components/audio-visualizer/aurora.glsl.ts +330 -0
- package/src/components/audio-visualizer/index.tsx +442 -0
- package/src/components/audio-visualizer/shader-canvas.tsx +846 -0
- package/src/components/audio-visualizer/sizes.ts +54 -0
- package/src/components/audio-visualizer/variant-aurora.tsx +299 -0
- package/src/components/audio-visualizer/variant-bar.tsx +143 -0
- package/src/components/audio-visualizer/variant-custom.tsx +338 -0
- package/src/components/audio-visualizer/variant-grid.tsx +170 -0
- package/src/components/audio-visualizer/variant-radial.tsx +158 -0
- package/src/components/audio-visualizer/variant-wave.tsx +125 -0
- package/src/components/audio-visualizer/wave.glsl.ts +130 -0
- package/src/components/component-meta.json +34 -32
- package/src/components/composer.tsx +5 -0
- package/src/components/thread.tsx +177 -0
- package/src/elements/audio-visualizer.tsx +183 -0
- package/src/elements/chat-workspace.tsx +1 -1
- package/src/elements/compiled.css +1 -1
- package/src/elements/define.tsx +12 -1
- package/src/elements/element-manifest.json +8 -0
- package/src/elements/element-meta.json +287 -0
- package/src/elements/element-types.d.ts +62 -0
- package/src/elements/icon-names.json +2 -0
- package/src/elements/menu.tsx +7 -4
- package/src/elements/register-impl.ts +3 -0
- package/src/elements/resizable.tsx +78 -2
- package/src/elements/slots.ts +42 -0
- package/src/elements/thread.tsx +105 -0
- package/src/primitives/audio-bands.ts +174 -0
- package/src/primitives/create-tween.ts +214 -0
- package/src/primitives/use-audio-analysis.ts +321 -0
- package/src/primitives/use-sequencer.ts +53 -0
- package/src/primitives/use-voice-recorder.ts +16 -4
- package/src/primitives/visualizer-sequences.ts +350 -0
- package/src/test-utils/fake-clock.ts +88 -0
- package/src/ui/action-icons.ts +2 -1
- package/src/ui/icon.tsx +4 -0
- package/src/ui/overlay.tsx +8 -1
- package/src/ui/resizable.tsx +47 -9
- package/dist/elements/chunks/action-icons-Dtl8Ox5D.js +0 -1
- package/dist/elements/chunks/arrow-left-GbBceGBE.js +0 -1
- package/dist/elements/chunks/chat-thread-Dz2qbzvI.js +0 -1
- package/dist/elements/chunks/check-fhmRksq_.js +0 -1
- package/dist/elements/chunks/chevron-down-DcRg1aRU.js +0 -1
- package/dist/elements/chunks/chevron-right-ChzBcNJ-.js +0 -1
- package/dist/elements/chunks/circle-B4fTe9v6.js +0 -1
- package/dist/elements/chunks/circle-check-CJV-3Rem.js +0 -1
- package/dist/elements/chunks/collapsible-CWUAShMC.js +0 -1
- package/dist/elements/chunks/define-CNSKFZCd.js +0 -1
- package/dist/elements/chunks/hover-card-BQGdGAQ3.js +0 -1
- package/dist/elements/chunks/icon-CAyRqVrg.js +0 -1
- package/dist/elements/chunks/message-square-MmRkvc-M.js +0 -1
- package/dist/elements/chunks/resizable-Bq_eHxUm.js +0 -1
- package/dist/elements/chunks/skeleton-Pjc5jiaY.js +0 -1
- package/dist/elements/chunks/textarea-CboigarR.js +0 -1
- package/dist/elements/chunks/tooltip-Cft_Rxiw.js +0 -1
- package/dist/elements/chunks/use-card-resolution-M36zVciB.js +0 -1
- package/dist/elements/chunks/x-Ckwicf6g.js +0 -1
- package/dist/register-impl-DcjZDELj.js +0 -141
package/llms-full.txt
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
# @kitn.ai/ui
|
|
5
5
|
|
|
6
|
-
> Framework-agnostic, Shadow-DOM web components for building AI chat interfaces — works in React, Vue, Angular, Svelte, or plain HTML.
|
|
6
|
+
> Framework-agnostic, Shadow-DOM web components for building AI chat interfaces — works in React, Vue, Angular, Svelte, or plain HTML. 80 custom elements, every one prefixed `kai-` (e.g. `<kai-chat>`, `<kai-artifact>`): streaming responses, markdown + code rendering, reasoning/tool panels, attachments, conversation sidebar, voice input. Zero framework dependency for consumers; the SolidJS runtime it is authored in is bundled in, so the host needs nothing.
|
|
7
7
|
|
|
8
8
|
## Install
|
|
9
9
|
|
|
@@ -37,7 +37,7 @@ Drop an element into any framework (React, Vue, plain HTML). Data in via JS prop
|
|
|
37
37
|
- `<kai-prompt-input>` — standalone composer with send button.
|
|
38
38
|
|
|
39
39
|
**Layer 2 — composable primitives** (`import { … } from '@kitn.ai/ui'`):
|
|
40
|
-
All
|
|
40
|
+
All 80 elements are also exported individually. Use them for custom layouts or features `<kai-chat>` does not expose (ChainOfThought, FeedbackBar, ThinkingBar, VoiceInput, …). Your bundler tree-shakes the rest.
|
|
41
41
|
|
|
42
42
|
## Key rules for the web components
|
|
43
43
|
|
|
@@ -99,7 +99,7 @@ For Tailwind builds: `@import "@kitn.ai/ui/theme.css"` in your CSS.
|
|
|
99
99
|
|
|
100
100
|
## Docs
|
|
101
101
|
|
|
102
|
-
- Full element reference (all
|
|
102
|
+
- Full element reference (all 80 elements, every prop/event): ./llms-full.txt — https://kitn.dev/llms-full.txt
|
|
103
103
|
- Machine-readable Custom Elements Manifest: https://unpkg.com/@kitn.ai/ui/dist/custom-elements.json
|
|
104
104
|
- Working examples: https://github.com/kitn-ai/ui/tree/main/examples
|
|
105
105
|
- Storybook: https://storybook.kitn.dev
|
|
@@ -173,7 +173,7 @@ The same rule applies to every array/object property (`models`, `context`, `sugg
|
|
|
173
173
|
|
|
174
174
|
---
|
|
175
175
|
|
|
176
|
-
## Element reference (
|
|
176
|
+
## Element reference (80 elements, generated from custom-elements.json)
|
|
177
177
|
|
|
178
178
|
Every element also accepts the `theme` attribute. Array/object properties are marked with a `—` attribute: they must be set as JS properties.
|
|
179
179
|
|
|
@@ -267,6 +267,42 @@ Every element also accepts the `theme` attribute. Array/object properties are ma
|
|
|
267
267
|
|
|
268
268
|
---
|
|
269
269
|
|
|
270
|
+
### `kai-audio-visualizer` / `AudioVisualizer`
|
|
271
|
+
|
|
272
|
+
**Properties** (every element also accepts `theme="light|dark|auto"`; only scalar props work as HTML attributes):
|
|
273
|
+
|
|
274
|
+
| Property | Attribute | Type | Description |
|
|
275
|
+
|---|---|---|---|
|
|
276
|
+
| `variant` | `variant` | `undefined \| string` | Look to render: `bar` (default), `grid`, `radial`, `wave`, `aurora`, `custom`. `aura` is accepted as a LiveKit-markup alias for `aurora`. Attribute: `variant`. |
|
|
277
|
+
| `state` | `state` | `undefined \| string` | `idle` (default), `connecting`, `listening`, `thinking`, `speaking`, `disconnected` (connection down: the dead, flat look). LiveKit's room-lifecycle state names are accepted as aliases. Attribute: `state`. |
|
|
278
|
+
| `size` | `size` | `undefined \| string` | `icon` \| `sm` \| `md` (default) \| `lg` \| `xl`. Attribute: `size`. |
|
|
279
|
+
| `barCount` | `bar-count` | `undefined \| number` | Bars to draw. Bar and radial only. Attribute: `bar-count`. |
|
|
280
|
+
| `count` | `count` | `undefined \| number` | Grid only: rows and columns of the (always square) grid. Attribute: `count`. |
|
|
281
|
+
| `radius` | `radius` | `undefined \| number` | Radial only: ring distance from center, in px. Attribute: `radius`. |
|
|
282
|
+
| `spread` | `spread` | `undefined \| number` | Grid only: ring distance for the connecting animation, in cells. Attribute: `spread`. |
|
|
283
|
+
| `interval` | `interval` | `undefined \| number` | Grid only: ms between scripted frames. Attribute: `interval`. |
|
|
284
|
+
| `color` | `color` | `undefined \| string` | CSS color for the geometry, overriding the inherited `currentColor`. Attribute: `color`. |
|
|
285
|
+
| `complexity` | `complexity` | `undefined \| number` | Shader variants only: pattern density, 0..1. Attribute: `complexity`. |
|
|
286
|
+
| `label` | `label` | `undefined \| string` | Setting this makes the element an announced image (`role="img"`) instead of decorative (`aria-hidden`). Attribute: `label`. |
|
|
287
|
+
| `stream` | — | `undefined \| MediaStream` | Live microphone or WebRTC audio to analyze. JS property only. |
|
|
288
|
+
| `audioElement` | — | `undefined \| HTMLMediaElement` | An `<audio>` or `<video>` element to tap for its audio. JS property only. |
|
|
289
|
+
| `bands` | — | `undefined \| number[]` | Pre-computed levels, 0..1. Set this and no AudioContext is ever built, which is what keeps headless/SSR rendering and browser-speech-synthesis playback (which exposes no audio node) free of Web Audio entirely. JS property only. A new array reference is required for each update; mutating the existing array in place will not re-render. |
|
|
290
|
+
| `shader` | — | `undefined \| { fragment: string; uniforms?: undefined \| Record<string, { type: "1f" \| "1i" \| "1fv" \| "2f" \| "3f" \| "3fv" \| "4f" \| "4fv" \| "Matrix2fv" \| "Matrix3fv" \| "Matrix4fv"; value: number \| number[] }> }` | Custom fragment shader for `variant="custom"`. JS property only. |
|
|
291
|
+
| `animateWhenNotVisible` | `animate-when-not-visible` | `undefined \| false \| true` | Shader variants only: keep animating while scrolled off screen. Off by default, which stops drawing and releases the WebGL context until the element comes back (browsers ration contexts to roughly 16 a page). Does not override `prefers-reduced-motion`. Attribute: `animate-when-not-visible`. |
|
|
292
|
+
|
|
293
|
+
_No events._
|
|
294
|
+
|
|
295
|
+
**Styleable parts** (restyle from outside via `kai-audio-visualizer::part(name)`):
|
|
296
|
+
|
|
297
|
+
| Part | Description |
|
|
298
|
+
|---|---|
|
|
299
|
+
| `::part(bar)` | A single bar in the `bar` variant, or a single spoke in the `radial` variant. Also carries `data-kai-index` and `data-kai-highlighted` ("true"/"false") for use inside the shadow root; to style the lit state from OUTSIDE, combine with the `highlighted` part below rather than an attribute selector. — `kai-audio-visualizer::part(bar) { border-radius: 2px } kai-audio-visualizer::part(bar highlighted) { background: var(--brand) }` |
|
|
300
|
+
| `::part(cell)` | A single dot in the `grid` variant. Also carries `data-kai-index` and `data-kai-highlighted` ("true"/"false") for use inside the shadow root; to style the lit state from OUTSIDE, combine with the `highlighted` part below rather than an attribute selector. — `kai-audio-visualizer::part(cell) { border-radius: 9999px } kai-audio-visualizer::part(cell highlighted) { background: var(--brand) }` |
|
|
301
|
+
| `::part(highlighted)` | A second part TOKEN present on a `bar` or `cell` exactly when the sequencer or live audio has it lit, not a standalone styleable element. Combine it in the same `::part()` argument: `::part(bar highlighted)` or `::part(cell highlighted)`. This is the external equivalent of the internal `data-kai-highlighted="true"` attribute, which a `::part()` selector cannot reach (an attribute selector cannot follow a pseudo-element). — `kai-audio-visualizer::part(bar highlighted) { background: var(--brand) } kai-audio-visualizer::part(cell highlighted) { background: var(--brand) }` |
|
|
302
|
+
| `::part(canvas)` | The WebGL canvas backing the `wave` and `aurora` variants. Restyle its size or radius, or layer a mask/filter, from outside. — `kai-audio-visualizer::part(canvas) { border-radius: 0.75rem }` |
|
|
303
|
+
|
|
304
|
+
---
|
|
305
|
+
|
|
270
306
|
### `kai-avatar` / `Avatar`
|
|
271
307
|
|
|
272
308
|
**Properties** (every element also accepts `theme="light|dark|auto"`; only scalar props work as HTML attributes):
|
|
@@ -1487,6 +1523,7 @@ _No events._
|
|
|
1487
1523
|
|---|---|---|---|
|
|
1488
1524
|
| `orientation` | `orientation` | `undefined \| "vertical" \| "horizontal"` | Layout axis: `horizontal` (row, default) or `vertical` (column). |
|
|
1489
1525
|
| `maximizedIndex` | — | `undefined \| null \| number` | Which item index is maximized (null = none). Declarative source of truth. |
|
|
1526
|
+
| `handle` | `handle` | `undefined \| "none" \| "line" \| "grip"` | Divider affordance drawn inside each draggable handle's 8px grab zone: - `line` (default) — a 1px hairline, transparent at rest, tinting on hover/drag. - `grip` — a dotted grip handle. - `none` — no visible divider, just the invisible hit-area. The full grab zone and keyboard/ARIA behavior are identical for all three. |
|
|
1490
1527
|
|
|
1491
1528
|
**Events** (non-bubbling `CustomEvent`s — listen directly on the element):
|
|
1492
1529
|
|
|
@@ -1963,6 +2000,35 @@ _No events._
|
|
|
1963
2000
|
|
|
1964
2001
|
---
|
|
1965
2002
|
|
|
2003
|
+
### `kai-thread` / `Thread`
|
|
2004
|
+
|
|
2005
|
+
**Properties** (every element also accepts `theme="light|dark|auto"`; only scalar props work as HTML attributes):
|
|
2006
|
+
|
|
2007
|
+
| Property | Attribute | Type | Description |
|
|
2008
|
+
|---|---|---|---|
|
|
2009
|
+
| `messages` | — | `undefined \| { id: string; role: "user" \| "assistant"; content: string; reasoning?: undefined \| { text: string; label?: undefined \| string }; tools?: undefined \| { type: string; state: "input-streaming" \| "input-available" \| "output-available" \| "output-error"; input?: undefined \| Record<string, unknown>; output?: undefined \| Record<string, unknown>; toolCallId?: undefined \| string; errorText?: undefined \| string }[]; attachments?: undefined \| { id: string; type: "file" \| "source-document"; filename?: undefined \| string; mediaType?: undefined \| string; url?: undefined \| string; title?: undefined \| string }[]; actions?: undefined \| ("copy" \| "like" \| "dislike" \| "regenerate" \| "edit" \| { id: string; label: string; icon?: undefined \| string; tooltip?: undefined \| string })[]; avatar?: undefined \| { src?: undefined \| string; fallback?: undefined \| string; alt?: undefined \| string }; feedback?: undefined \| "like" \| "dislike" }[]` | The full message thread to render, newest last. Each entry carries its role, content, and optional reasoning/tools/attachments/actions/avatar. Set as a JS property (`el.messages = [...]`); a NEW array reference per streaming chunk re-renders (mutating in place does not). |
|
|
2010
|
+
| `loading` | `loading` | `undefined \| false \| true` | Show a typing indicator on the pending assistant turn — set while awaiting the assistant's reply. |
|
|
2011
|
+
| `proseSize` | `prose-size` | `undefined \| "sm" \| "lg" \| "xs" \| "base"` | Body/prose font scale for rendered markdown (`'xs' \| 'sm' \| 'base' \| 'lg'`). Defaults to `'sm'`. |
|
|
2012
|
+
| `codeTheme` | `code-theme` | `undefined \| string` | Shiki theme name for syntax-highlighted code blocks (e.g. `'github-dark-dimmed'`). |
|
|
2013
|
+
| `codeHighlight` | `code-highlight` | `undefined \| false \| true` | Enable Shiki syntax highlighting in code blocks. Turn off to render plain `<pre>` blocks (lighter, no highlighter load). Default true. |
|
|
2014
|
+
| `actionsReveal` | `actions-reveal` | `undefined \| "always" \| "hover"` | Whether each message's action bar is always visible (`'always'`, default) or only revealed on hover of that message row (`'hover'`). |
|
|
2015
|
+
| `scrollButton` | `scroll-button` | `undefined \| false \| true` | Show the scroll-to-bottom button inside the scroll area. Default true. |
|
|
2016
|
+
| `class` | `class` | `undefined \| string` | Extra classes applied to the thread's inner root. |
|
|
2017
|
+
|
|
2018
|
+
**Events** (non-bubbling `CustomEvent`s — listen directly on the element):
|
|
2019
|
+
|
|
2020
|
+
| Event | `detail` type | Description |
|
|
2021
|
+
|---|---|---|
|
|
2022
|
+
| `kai-message-action` | `CustomEvent<{ messageId: string; action: string; state?: undefined \| "on" \| "off" }>` | A message's action button was clicked. `action` is the built-in name (`copy` / `like` / `dislike` / `regenerate` / `edit`) or a custom id. `state` is present only for the toggleable feedback votes: `'on'` when a like/dislike is set, `'off'` when re-tapped to clear. |
|
|
2023
|
+
|
|
2024
|
+
**Slots** (project your own markup via `slot="name"` on a light-DOM child):
|
|
2025
|
+
|
|
2026
|
+
| Slot | Mode | Description |
|
|
2027
|
+
|---|---|---|
|
|
2028
|
+
| `empty` | replace | Custom zero-state rendered in the message area while the thread is empty; replaces the built-in default. |
|
|
2029
|
+
|
|
2030
|
+
---
|
|
2031
|
+
|
|
1966
2032
|
### `kai-toast-region` / `ToastRegion`
|
|
1967
2033
|
|
|
1968
2034
|
**Properties** (every element also accepts `theme="light|dark|auto"`; only scalar props work as HTML attributes):
|
package/llms.txt
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<!-- AUTO-GENERATED by scripts/gen-llms.mjs — do not edit by hand. Run `npm run build`. -->
|
|
2
2
|
# @kitn.ai/ui
|
|
3
3
|
|
|
4
|
-
> Framework-agnostic, Shadow-DOM web components for building AI chat interfaces — works in React, Vue, Angular, Svelte, or plain HTML.
|
|
4
|
+
> Framework-agnostic, Shadow-DOM web components for building AI chat interfaces — works in React, Vue, Angular, Svelte, or plain HTML. 80 custom elements, every one prefixed `kai-` (e.g. `<kai-chat>`, `<kai-artifact>`): streaming responses, markdown + code rendering, reasoning/tool panels, attachments, conversation sidebar, voice input. Zero framework dependency for consumers; the SolidJS runtime it is authored in is bundled in, so the host needs nothing.
|
|
5
5
|
|
|
6
6
|
## Install
|
|
7
7
|
|
|
@@ -35,7 +35,7 @@ Drop an element into any framework (React, Vue, plain HTML). Data in via JS prop
|
|
|
35
35
|
- `<kai-prompt-input>` — standalone composer with send button.
|
|
36
36
|
|
|
37
37
|
**Layer 2 — composable primitives** (`import { … } from '@kitn.ai/ui'`):
|
|
38
|
-
All
|
|
38
|
+
All 80 elements are also exported individually. Use them for custom layouts or features `<kai-chat>` does not expose (ChainOfThought, FeedbackBar, ThinkingBar, VoiceInput, …). Your bundler tree-shakes the rest.
|
|
39
39
|
|
|
40
40
|
## Key rules for the web components
|
|
41
41
|
|
|
@@ -97,7 +97,7 @@ For Tailwind builds: `@import "@kitn.ai/ui/theme.css"` in your CSS.
|
|
|
97
97
|
|
|
98
98
|
## Docs
|
|
99
99
|
|
|
100
|
-
- Full element reference (all
|
|
100
|
+
- Full element reference (all 80 elements, every prop/event): ./llms-full.txt — https://kitn.dev/llms-full.txt
|
|
101
101
|
- Machine-readable Custom Elements Manifest: https://unpkg.com/@kitn.ai/ui/dist/custom-elements.json
|
|
102
102
|
- Working examples: https://github.com/kitn-ai/ui/tree/main/examples
|
|
103
103
|
- Storybook: https://storybook.kitn.dev
|
package/package.json
CHANGED
|
@@ -1,13 +1,36 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kitn.ai/ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.20.0",
|
|
4
4
|
"nx": {
|
|
5
|
-
"name": "ui"
|
|
5
|
+
"name": "ui",
|
|
6
|
+
"targets": {
|
|
7
|
+
"build-storybook": {
|
|
8
|
+
"dependsOn": [
|
|
9
|
+
"build"
|
|
10
|
+
]
|
|
11
|
+
},
|
|
12
|
+
"dev": {
|
|
13
|
+
"dependsOn": [
|
|
14
|
+
"build"
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
"test:storybook": {
|
|
18
|
+
"dependsOn": [
|
|
19
|
+
"build"
|
|
20
|
+
]
|
|
21
|
+
},
|
|
22
|
+
"test:storybook:ci": {
|
|
23
|
+
"dependsOn": [
|
|
24
|
+
"build"
|
|
25
|
+
]
|
|
26
|
+
}
|
|
27
|
+
}
|
|
6
28
|
},
|
|
7
29
|
"type": "module",
|
|
8
30
|
"sideEffects": [
|
|
9
31
|
"**/*.css",
|
|
10
32
|
"./dist/kai.es.js",
|
|
33
|
+
"./dist/register-impl-*.js",
|
|
11
34
|
"./dist/elements/*.js"
|
|
12
35
|
],
|
|
13
36
|
"description": "Framework-agnostic, Shadow-DOM web components for building AI chat interfaces — works in React, Vue, Angular, Svelte, or plain HTML. Authored in SolidJS.",
|
|
@@ -95,31 +118,33 @@
|
|
|
95
118
|
"frameworks",
|
|
96
119
|
"theme.css",
|
|
97
120
|
"llms.txt",
|
|
98
|
-
"llms-full.txt"
|
|
121
|
+
"llms-full.txt",
|
|
122
|
+
"NOTICE"
|
|
99
123
|
],
|
|
100
124
|
"scripts": {
|
|
101
125
|
"prepublishOnly": "npm run build",
|
|
102
126
|
"prebuild": "npm run build:css",
|
|
103
|
-
"build": "vite build --config vite.config.ts && vite build --config vite.config.provider.ts && vite build --config vite.config.react.ts && vite build --config vite.config.barrel.ts && vite build --config vite.config.state.ts && vite build --config vite.config.mcp.ts && npm run build:elements && node scripts/verify-elements-bundle.mjs && node scripts/verify-react-wrappers.mjs",
|
|
127
|
+
"build": "vite build --config vite.config.ts && vite build --config vite.config.provider.ts && vite build --config vite.config.react.ts && vite build --config vite.config.barrel.ts && vite build --config vite.config.state.ts && vite build --config vite.config.mcp.ts && npm run build:elements && node scripts/verify-elements-bundle.mjs && node scripts/verify-react-wrappers.mjs && node scripts/verify-shader-lazy.mjs",
|
|
104
128
|
"build:elements": "node scripts/gen-elements-manifest.mjs && vite build --config vite.config.elements.ts && node scripts/gen-element-dts.mjs",
|
|
105
129
|
"postbuild": "npm run build:theme && npm run build:api && npm run build:schemas",
|
|
106
130
|
"build:theme": "node scripts/build-theme-tokens.mjs",
|
|
107
131
|
"build:api": "node scripts/gen-element-api.mjs",
|
|
108
132
|
"build:schemas": "node scripts/copy-card-schemas.mjs",
|
|
133
|
+
"verify:consumer": "node scripts/verify-consumer-sideeffects.mjs",
|
|
109
134
|
"test": "vitest run",
|
|
110
135
|
"test:react": "vitest run --config vitest.react.config.ts",
|
|
111
136
|
"test:storybook": "vitest run --project=storybook",
|
|
112
137
|
"test:storybook:ci": "node scripts/run-storybook-tests.mjs",
|
|
113
138
|
"test:watch": "vitest",
|
|
114
139
|
"typecheck": "tsc --noEmit && tsc --noEmit -p tsconfig.react.json && tsc --noEmit -p tsconfig.react.test.json && tsc --noEmit -p tsconfig.mcp.json",
|
|
115
|
-
"examples": "echo 'Serving repo root on http://localhost:8000 — open http://localhost:8000/examples/composable/index.html' && python3 -m http.server 8000",
|
|
140
|
+
"examples": "echo 'Serving repo root on http://localhost:8000 — open http://localhost:8000/examples/demos/composable/index.html' && python3 -m http.server 8000",
|
|
116
141
|
"dev": "npm run build:css && storybook dev -p 6006",
|
|
117
142
|
"storybook": "npm run build:css && storybook dev -p 6006",
|
|
118
143
|
"build-storybook": "npm run build:css && storybook build",
|
|
119
144
|
"build:css": "tailwindcss -i src/elements/styles.css -o src/elements/compiled.css --minify",
|
|
120
145
|
"build:css:watch": "tailwindcss -i src/elements/styles.css -o src/elements/compiled.css --watch",
|
|
121
|
-
"dev:provider": "vite ../../examples/remote-provider --port 6007 --strictPort",
|
|
122
|
-
"dev:host": "vite ../../examples/remote-host --port 6006 --strictPort",
|
|
146
|
+
"dev:provider": "vite ../../examples/internal/remote-provider --port 6007 --strictPort",
|
|
147
|
+
"dev:host": "vite ../../examples/internal/remote-host --port 6006 --strictPort",
|
|
123
148
|
"test:e2e": "playwright test",
|
|
124
149
|
"test:composer-ivp": "playwright test --config playwright.composer.config.ts",
|
|
125
150
|
"test:slots-ivp": "playwright test --config playwright.slots.config.ts",
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A real recorded voice, baked into a short seamless loop for the
|
|
3
|
+
* `speaking` tiles in the stories -- the genuine article, not a generator.
|
|
4
|
+
*
|
|
5
|
+
* Real voice, recorded by the project owner: "This is a test, testing one
|
|
6
|
+
* two three, hello world." Captured mono at 44.1kHz, then extracted through
|
|
7
|
+
* the component's ALIGNED analysis chain -- the same values upstream
|
|
8
|
+
* LiveKit's components run: AnalyserNode fftSize 2048 / smoothing 0.8,
|
|
9
|
+
* window bins 100-200 (the components' own loPass/hiPass; see DEFAULTS in
|
|
10
|
+
* primitives/use-audio-analysis.ts), `reduceToBands`' linear-proportional
|
|
11
|
+
* split as it exists in THIS tree, ~32ms cadence. Third bake of this
|
|
12
|
+
* fixture: the first was 5 linear bands over a wide raw-mic window
|
|
13
|
+
* (bins 4-120), the second 3 geometric bands over the same wide window;
|
|
14
|
+
* both predate the pipeline realignment that reverted window and split to
|
|
15
|
+
* upstream's.
|
|
16
|
+
*
|
|
17
|
+
* GAIN: the raw take is boosted 8x (+18dB) through a GainNode before the
|
|
18
|
+
* analysers -- an honest approximation of capture-side AGC, which every
|
|
19
|
+
* real input to the aligned window gets (LiveKit captures local mics with
|
|
20
|
+
* autoGainControl on; the mic stories request the same) but this recording,
|
|
21
|
+
* made raw, never had. Un-gained, quiet natural-volume speech sits at or
|
|
22
|
+
* under the -100dB floor across bins 100-200 and the loop's time-averaged
|
|
23
|
+
* band profile comes out flat-to-inverted (edges louder than centre);
|
|
24
|
+
* measured at +18dB the bake hits the live-AGC targets: speech-active
|
|
25
|
+
* volume through the aligned byte path (minDecibels -100 / maxDecibels
|
|
26
|
+
* -80) averages 0.73, no speech frame reads all-zero bands, and the
|
|
27
|
+
* time-averaged mirrored md profile is centre-strictly-max --
|
|
28
|
+
* [0.41, 0.42, 0.44, 0.42, 0.41]. The trade, recorded honestly: +18dB also
|
|
29
|
+
* lifts part of the room tone over the floor, so rest frames idle near
|
|
30
|
+
* [0.2, 0.04, 0] instead of the exact zeros an un-gained bake would show
|
|
31
|
+
* -- which is also what a real AGC mic does between words.
|
|
32
|
+
*
|
|
33
|
+
* 3 bands per frame is HALF width on purpose: `Math.ceil(count / 2)`, the
|
|
34
|
+
* exact band count the component itself requests at `md` before mirroring
|
|
35
|
+
* (see `bandCount()` in index.tsx). The `bands` prop is a raw passthrough
|
|
36
|
+
* by contract, so the stories mirror these half bands out to the full
|
|
37
|
+
* element count themselves through `mirrorBandsCenterOut` /
|
|
38
|
+
* `mirrorBandsAroundRing` -- the same primitives the live-audio path runs.
|
|
39
|
+
* See `useVoiceBands` in the stories file.
|
|
40
|
+
*
|
|
41
|
+
* Trimmed to the same 196-frame window (~6.4s) as the previous bake:
|
|
42
|
+
* about half a second of rest before the first word, just under a second
|
|
43
|
+
* after the last, and BOTH natural pauses in the middle -- one short gap
|
|
44
|
+
* around "test," / "testing", the longer one after "three," before
|
|
45
|
+
* "hello" -- since those are what prove the visualizer falls back to rest
|
|
46
|
+
* and recovers. Loops by wrapping frame 195 back to frame 0. Re-verified
|
|
47
|
+
* at the aligned values: the endpoints differ by 0.034 pre-quantization
|
|
48
|
+
* ([0.22,0.05,0] vs [0.2,0.03,0] after it), which sits between the median
|
|
49
|
+
* (0.025) and p90 (0.053) of ADJACENT quiet frames' natural motion at this
|
|
50
|
+
* gain -- the wrap step is indistinguishable from ordinary idle flicker.
|
|
51
|
+
* (The previous bake's endpoints quantized identical, but only because its
|
|
52
|
+
* un-gained rest frames were all zeros -- trivial, not preserved here.)
|
|
53
|
+
*
|
|
54
|
+
* Quantized to 2 decimals. Playback treats the cadence as a flat
|
|
55
|
+
* `VOICE_FRAME_MS`; the capture's real ticks land at 32-33ms (setTimeout
|
|
56
|
+
* jitter), a ~2% difference nobody can see. Body is ~3.8KB.
|
|
57
|
+
*/
|
|
58
|
+
export const VOICE_FRAME_MS = 32;
|
|
59
|
+
|
|
60
|
+
export const VOICE_BANDS: readonly (readonly number[])[] = [
|
|
61
|
+
[0.22,0.05,0],
|
|
62
|
+
[0.21,0.04,0],
|
|
63
|
+
[0.2,0.04,0],
|
|
64
|
+
[0.22,0.03,0],
|
|
65
|
+
[0.23,0.03,0],
|
|
66
|
+
[0.22,0.02,0],
|
|
67
|
+
[0.21,0.02,0],
|
|
68
|
+
[0.22,0.02,0],
|
|
69
|
+
[0.22,0.11,0.01],
|
|
70
|
+
[0.22,0.14,0.02],
|
|
71
|
+
[0.23,0.13,0.01],
|
|
72
|
+
[0.45,0.45,0.57],
|
|
73
|
+
[0.52,0.52,0.61],
|
|
74
|
+
[0.62,0.61,0.64],
|
|
75
|
+
[0.64,0.62,0.65],
|
|
76
|
+
[0.64,0.63,0.65],
|
|
77
|
+
[0.63,0.63,0.66],
|
|
78
|
+
[0.62,0.62,0.65],
|
|
79
|
+
[0.61,0.61,0.65],
|
|
80
|
+
[0.61,0.61,0.65],
|
|
81
|
+
[0.65,0.63,0.67],
|
|
82
|
+
[0.67,0.63,0.67],
|
|
83
|
+
[0.66,0.62,0.66],
|
|
84
|
+
[0.65,0.61,0.65],
|
|
85
|
+
[0.64,0.59,0.64],
|
|
86
|
+
[0.63,0.58,0.62],
|
|
87
|
+
[0.62,0.59,0.61],
|
|
88
|
+
[0.61,0.61,0.6],
|
|
89
|
+
[0.62,0.62,0.59],
|
|
90
|
+
[0.61,0.62,0.59],
|
|
91
|
+
[0.59,0.61,0.57],
|
|
92
|
+
[0.59,0.61,0.59],
|
|
93
|
+
[0.59,0.62,0.64],
|
|
94
|
+
[0.59,0.62,0.66],
|
|
95
|
+
[0.61,0.62,0.66],
|
|
96
|
+
[0.61,0.61,0.65],
|
|
97
|
+
[0.61,0.6,0.64],
|
|
98
|
+
[0.6,0.59,0.63],
|
|
99
|
+
[0.59,0.57,0.62],
|
|
100
|
+
[0.58,0.56,0.6],
|
|
101
|
+
[0.61,0.59,0.6],
|
|
102
|
+
[0.62,0.59,0.6],
|
|
103
|
+
[0.61,0.58,0.58],
|
|
104
|
+
[0.59,0.57,0.57],
|
|
105
|
+
[0.58,0.56,0.55],
|
|
106
|
+
[0.6,0.57,0.56],
|
|
107
|
+
[0.62,0.58,0.56],
|
|
108
|
+
[0.63,0.58,0.57],
|
|
109
|
+
[0.64,0.58,0.56],
|
|
110
|
+
[0.64,0.58,0.55],
|
|
111
|
+
[0.63,0.57,0.54],
|
|
112
|
+
[0.63,0.56,0.54],
|
|
113
|
+
[0.62,0.54,0.52],
|
|
114
|
+
[0.61,0.53,0.51],
|
|
115
|
+
[0.59,0.51,0.49],
|
|
116
|
+
[0.58,0.49,0.47],
|
|
117
|
+
[0.56,0.47,0.45],
|
|
118
|
+
[0.54,0.46,0.43],
|
|
119
|
+
[0.53,0.48,0.42],
|
|
120
|
+
[0.52,0.47,0.4],
|
|
121
|
+
[0.5,0.45,0.37],
|
|
122
|
+
[0.48,0.43,0.35],
|
|
123
|
+
[0.46,0.41,0.32],
|
|
124
|
+
[0.45,0.39,0.3],
|
|
125
|
+
[0.43,0.37,0.26],
|
|
126
|
+
[0.41,0.35,0.23],
|
|
127
|
+
[0.4,0.34,0.22],
|
|
128
|
+
[0.38,0.33,0.18],
|
|
129
|
+
[0.37,0.31,0.16],
|
|
130
|
+
[0.38,0.32,0.21],
|
|
131
|
+
[0.37,0.31,0.19],
|
|
132
|
+
[0.36,0.28,0.16],
|
|
133
|
+
[0.46,0.41,0.37],
|
|
134
|
+
[0.5,0.49,0.52],
|
|
135
|
+
[0.51,0.53,0.58],
|
|
136
|
+
[0.51,0.54,0.6],
|
|
137
|
+
[0.51,0.55,0.62],
|
|
138
|
+
[0.52,0.56,0.63],
|
|
139
|
+
[0.51,0.56,0.63],
|
|
140
|
+
[0.51,0.56,0.63],
|
|
141
|
+
[0.5,0.56,0.64],
|
|
142
|
+
[0.51,0.56,0.64],
|
|
143
|
+
[0.53,0.59,0.64],
|
|
144
|
+
[0.55,0.6,0.64],
|
|
145
|
+
[0.55,0.6,0.63],
|
|
146
|
+
[0.53,0.58,0.61],
|
|
147
|
+
[0.54,0.59,0.62],
|
|
148
|
+
[0.56,0.59,0.65],
|
|
149
|
+
[0.61,0.63,0.68],
|
|
150
|
+
[0.63,0.64,0.69],
|
|
151
|
+
[0.63,0.65,0.68],
|
|
152
|
+
[0.63,0.64,0.67],
|
|
153
|
+
[0.62,0.63,0.66],
|
|
154
|
+
[0.61,0.61,0.65],
|
|
155
|
+
[0.6,0.61,0.65],
|
|
156
|
+
[0.59,0.6,0.65],
|
|
157
|
+
[0.58,0.59,0.66],
|
|
158
|
+
[0.56,0.58,0.65],
|
|
159
|
+
[0.55,0.57,0.64],
|
|
160
|
+
[0.54,0.58,0.65],
|
|
161
|
+
[0.54,0.57,0.65],
|
|
162
|
+
[0.53,0.56,0.64],
|
|
163
|
+
[0.52,0.54,0.62],
|
|
164
|
+
[0.5,0.52,0.61],
|
|
165
|
+
[0.48,0.51,0.59],
|
|
166
|
+
[0.47,0.49,0.58],
|
|
167
|
+
[0.46,0.47,0.56],
|
|
168
|
+
[0.44,0.46,0.55],
|
|
169
|
+
[0.42,0.44,0.53],
|
|
170
|
+
[0.4,0.41,0.51],
|
|
171
|
+
[0.39,0.39,0.49],
|
|
172
|
+
[0.37,0.37,0.47],
|
|
173
|
+
[0.36,0.35,0.45],
|
|
174
|
+
[0.34,0.34,0.43],
|
|
175
|
+
[0.36,0.37,0.42],
|
|
176
|
+
[0.35,0.37,0.4],
|
|
177
|
+
[0.33,0.35,0.38],
|
|
178
|
+
[0.32,0.33,0.36],
|
|
179
|
+
[0.3,0.3,0.33],
|
|
180
|
+
[0.29,0.28,0.31],
|
|
181
|
+
[0.27,0.26,0.28],
|
|
182
|
+
[0.26,0.24,0.26],
|
|
183
|
+
[0.25,0.21,0.22],
|
|
184
|
+
[0.24,0.19,0.19],
|
|
185
|
+
[0.25,0.23,0.21],
|
|
186
|
+
[0.35,0.38,0.36],
|
|
187
|
+
[0.39,0.5,0.46],
|
|
188
|
+
[0.39,0.52,0.48],
|
|
189
|
+
[0.4,0.53,0.49],
|
|
190
|
+
[0.47,0.6,0.55],
|
|
191
|
+
[0.52,0.62,0.58],
|
|
192
|
+
[0.55,0.63,0.58],
|
|
193
|
+
[0.56,0.63,0.58],
|
|
194
|
+
[0.54,0.62,0.57],
|
|
195
|
+
[0.53,0.6,0.55],
|
|
196
|
+
[0.52,0.59,0.54],
|
|
197
|
+
[0.5,0.57,0.52],
|
|
198
|
+
[0.49,0.56,0.5],
|
|
199
|
+
[0.47,0.55,0.49],
|
|
200
|
+
[0.46,0.53,0.47],
|
|
201
|
+
[0.44,0.52,0.45],
|
|
202
|
+
[0.43,0.51,0.46],
|
|
203
|
+
[0.51,0.54,0.54],
|
|
204
|
+
[0.54,0.55,0.55],
|
|
205
|
+
[0.53,0.56,0.54],
|
|
206
|
+
[0.52,0.57,0.54],
|
|
207
|
+
[0.51,0.57,0.53],
|
|
208
|
+
[0.53,0.59,0.56],
|
|
209
|
+
[0.52,0.58,0.56],
|
|
210
|
+
[0.51,0.57,0.55],
|
|
211
|
+
[0.49,0.55,0.54],
|
|
212
|
+
[0.48,0.54,0.52],
|
|
213
|
+
[0.46,0.52,0.51],
|
|
214
|
+
[0.44,0.5,0.49],
|
|
215
|
+
[0.43,0.49,0.47],
|
|
216
|
+
[0.41,0.47,0.45],
|
|
217
|
+
[0.39,0.46,0.43],
|
|
218
|
+
[0.37,0.44,0.41],
|
|
219
|
+
[0.36,0.42,0.39],
|
|
220
|
+
[0.34,0.4,0.36],
|
|
221
|
+
[0.32,0.37,0.34],
|
|
222
|
+
[0.31,0.35,0.32],
|
|
223
|
+
[0.3,0.33,0.29],
|
|
224
|
+
[0.28,0.31,0.26],
|
|
225
|
+
[0.27,0.29,0.23],
|
|
226
|
+
[0.27,0.27,0.22],
|
|
227
|
+
[0.26,0.25,0.18],
|
|
228
|
+
[0.25,0.23,0.15],
|
|
229
|
+
[0.24,0.2,0.13],
|
|
230
|
+
[0.23,0.18,0.09],
|
|
231
|
+
[0.23,0.16,0.07],
|
|
232
|
+
[0.23,0.14,0.04],
|
|
233
|
+
[0.22,0.11,0.03],
|
|
234
|
+
[0.22,0.09,0.02],
|
|
235
|
+
[0.2,0.07,0.01],
|
|
236
|
+
[0.2,0.04,0.01],
|
|
237
|
+
[0.18,0.03,0.01],
|
|
238
|
+
[0.18,0.02,0.01],
|
|
239
|
+
[0.19,0.02,0],
|
|
240
|
+
[0.19,0.01,0],
|
|
241
|
+
[0.19,0.01,0],
|
|
242
|
+
[0.17,0.01,0],
|
|
243
|
+
[0.19,0.01,0],
|
|
244
|
+
[0.18,0.07,0],
|
|
245
|
+
[0.21,0.06,0],
|
|
246
|
+
[0.21,0.06,0],
|
|
247
|
+
[0.22,0.05,0],
|
|
248
|
+
[0.2,0.03,0],
|
|
249
|
+
[0.2,0.02,0],
|
|
250
|
+
[0.19,0.01,0],
|
|
251
|
+
[0.19,0.01,0],
|
|
252
|
+
[0.2,0.01,0],
|
|
253
|
+
[0.2,0,0],
|
|
254
|
+
[0.19,0,0],
|
|
255
|
+
[0.18,0,0],
|
|
256
|
+
[0.2,0.03,0],
|
|
257
|
+
];
|