@logicplanes/kaeso-ui 0.2.1 → 0.3.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.
Files changed (356) hide show
  1. package/AGENTS.md +2 -0
  2. package/NOTICE.md +1 -1
  3. package/ai/component-guides.md +249 -24
  4. package/ai/component-registry.json +1044 -67
  5. package/ai/component-registry.md +238 -50
  6. package/ai/icons.md +1 -1
  7. package/ai/tokens.md +7 -3
  8. package/dist/blocks/delete-resource.js +1 -1
  9. package/dist/blocks/pages.js +5 -5
  10. package/dist/blocks/resource-list.js +4 -4
  11. package/dist/chunks/app-frame-B9vrgwaE.js +220 -0
  12. package/dist/chunks/app-frame-B9vrgwaE.js.map +1 -0
  13. package/dist/chunks/{avatar-D2nJNbtC.js → avatar-DOzOhYJr.js} +2 -2
  14. package/dist/chunks/{avatar-D2nJNbtC.js.map → avatar-DOzOhYJr.js.map} +1 -1
  15. package/dist/chunks/{badge-Dkyhs0_j.js → badge-wUHlj7m3.js} +2 -2
  16. package/dist/chunks/{badge-Dkyhs0_j.js.map → badge-wUHlj7m3.js.map} +1 -1
  17. package/dist/chunks/{banner-DxGBPQ7p.js → banner-BBlNFHd-.js} +4 -4
  18. package/dist/chunks/{banner-DxGBPQ7p.js.map → banner-BBlNFHd-.js.map} +1 -1
  19. package/dist/chunks/{button-DQvoOxVQ.js → button-CAPyW-v8.js} +8 -8
  20. package/dist/chunks/{button-DQvoOxVQ.js.map → button-CAPyW-v8.js.map} +1 -1
  21. package/dist/chunks/{calendar-CN3YJi2k.js → calendar-CBeptQFq.js} +2 -2
  22. package/dist/chunks/{calendar-CN3YJi2k.js.map → calendar-CBeptQFq.js.map} +1 -1
  23. package/dist/chunks/{checkbox-BgRdbfCE.js → checkbox-C5yvSS7O.js} +3 -3
  24. package/dist/chunks/{checkbox-BgRdbfCE.js.map → checkbox-C5yvSS7O.js.map} +1 -1
  25. package/dist/chunks/{cn-CidVUKMm.js → cn-DUDmdLpZ.js} +3 -1
  26. package/dist/chunks/cn-DUDmdLpZ.js.map +1 -0
  27. package/dist/chunks/{code-BADhvsgC.js → code-C49NzHUQ.js} +2 -2
  28. package/dist/chunks/{code-BADhvsgC.js.map → code-C49NzHUQ.js.map} +1 -1
  29. package/dist/chunks/{code-block-DxtladFW.js → code-block-DREsvJ-g.js} +24 -21
  30. package/dist/chunks/code-block-DREsvJ-g.js.map +1 -0
  31. package/dist/chunks/{collapsible-Cw_1aem5.js → collapsible-CDQq1Y9x.js} +6 -6
  32. package/dist/chunks/collapsible-CDQq1Y9x.js.map +1 -0
  33. package/dist/chunks/combobox-DqtzsAKG.js +314 -0
  34. package/dist/chunks/combobox-DqtzsAKG.js.map +1 -0
  35. package/dist/chunks/command-list-D5k0uvkR.js +417 -0
  36. package/dist/chunks/command-list-D5k0uvkR.js.map +1 -0
  37. package/dist/chunks/{copy-button-DXxn-YYZ.js → copy-button-CNpEnS04.js} +6 -6
  38. package/dist/chunks/{copy-button-DXxn-YYZ.js.map → copy-button-CNpEnS04.js.map} +1 -1
  39. package/dist/chunks/{core-K960A4OT.js → core-CqLWVMDI.js} +36 -36
  40. package/dist/chunks/core-CqLWVMDI.js.map +1 -0
  41. package/dist/chunks/{date-popup-B-6xhb-1.js → date-popup-BgDz6SUj.js} +4 -4
  42. package/dist/chunks/{date-popup-B-6xhb-1.js.map → date-popup-BgDz6SUj.js.map} +1 -1
  43. package/dist/chunks/{de-CTAo4KL7.js → de-CkXZKaBD.js} +37 -5
  44. package/dist/chunks/de-CkXZKaBD.js.map +1 -0
  45. package/dist/chunks/dialog-truWH0qe.js +353 -0
  46. package/dist/chunks/dialog-truWH0qe.js.map +1 -0
  47. package/dist/chunks/{empty-DIbBpytW.js → empty-YXmSkKzR.js} +2 -2
  48. package/dist/chunks/{empty-DIbBpytW.js.map → empty-YXmSkKzR.js.map} +1 -1
  49. package/dist/chunks/{field-d8V94bvZ.js → field-BZriODU7.js} +3 -3
  50. package/dist/chunks/field-BZriODU7.js.map +1 -0
  51. package/dist/chunks/{icon-CeNQtobn.js → icon-BqujXDUc.js} +2 -2
  52. package/dist/chunks/{icon-CeNQtobn.js.map → icon-BqujXDUc.js.map} +1 -1
  53. package/dist/chunks/{icon-button-_x1RUphC.js → icon-button-D4O4puwH.js} +3 -3
  54. package/dist/chunks/{icon-button-_x1RUphC.js.map → icon-button-D4O4puwH.js.map} +1 -1
  55. package/dist/chunks/identity-CsZvAUwu.js +361 -0
  56. package/dist/chunks/identity-CsZvAUwu.js.map +1 -0
  57. package/dist/chunks/{input-CNTfI6YE.js → input-B0wtkcNh.js} +5 -5
  58. package/dist/chunks/{input-CNTfI6YE.js.map → input-B0wtkcNh.js.map} +1 -1
  59. package/dist/chunks/{input-group-CYA1MEoZ.js → input-group-BQLw06B0.js} +33 -27
  60. package/dist/chunks/input-group-BQLw06B0.js.map +1 -0
  61. package/dist/chunks/{inset-BLMdxX4I.js → inset-BnBj8NJV.js} +12 -2
  62. package/dist/chunks/inset-BnBj8NJV.js.map +1 -0
  63. package/dist/chunks/{iso-field-1qmg7TP8.js → iso-field-BUXgY1dB.js} +5 -3
  64. package/dist/chunks/{iso-field-1qmg7TP8.js.map → iso-field-BUXgY1dB.js.map} +1 -1
  65. package/dist/chunks/{json-view-B6KHIWzh.js → json-view-BkG2hTXV.js} +11 -10
  66. package/dist/chunks/{json-view-B6KHIWzh.js.map → json-view-BkG2hTXV.js.map} +1 -1
  67. package/dist/chunks/{kbd-CBcBDvqU.js → kbd-DqWmbr_e.js} +2 -2
  68. package/dist/chunks/{kbd-CBcBDvqU.js.map → kbd-DqWmbr_e.js.map} +1 -1
  69. package/dist/chunks/{link-vz9aV8WX.js → link-YMcxM-BZ.js} +4 -4
  70. package/dist/chunks/{link-vz9aV8WX.js.map → link-YMcxM-BZ.js.map} +1 -1
  71. package/dist/chunks/{link-provider---9JdxTg.js → link-provider-BsUxhZKG.js} +2 -2
  72. package/dist/chunks/{link-provider---9JdxTg.js.map → link-provider-BsUxhZKG.js.map} +1 -1
  73. package/dist/chunks/list-wXZIZo_s.js +492 -0
  74. package/dist/chunks/list-wXZIZo_s.js.map +1 -0
  75. package/dist/chunks/{loader-CUehxvSZ.js → loader-ENBh2Fbt.js} +2 -2
  76. package/dist/chunks/{loader-CUehxvSZ.js.map → loader-ENBh2Fbt.js.map} +1 -1
  77. package/dist/chunks/{markdown-5NyaHHfN.js → markdown-DWyxjsSY.js} +10 -10
  78. package/dist/chunks/{markdown-5NyaHHfN.js.map → markdown-DWyxjsSY.js.map} +1 -1
  79. package/dist/chunks/{menu-DyVPwgfF.js → menu-Bnfi9P3t.js} +7 -7
  80. package/dist/chunks/{menu-DyVPwgfF.js.map → menu-Bnfi9P3t.js.map} +1 -1
  81. package/dist/chunks/{meter-DWhyzFGQ.js → meter-DhTnem4k.js} +2 -2
  82. package/dist/chunks/{meter-DWhyzFGQ.js.map → meter-DhTnem4k.js.map} +1 -1
  83. package/dist/chunks/nav-sheet-QqNRHo-y.js +60 -0
  84. package/dist/chunks/nav-sheet-QqNRHo-y.js.map +1 -0
  85. package/dist/chunks/{nav-wordmark-DLkItdvo.js → nav-wordmark-DmbT1Aiw.js} +2 -2
  86. package/dist/chunks/{nav-wordmark-DLkItdvo.js.map → nav-wordmark-DmbT1Aiw.js.map} +1 -1
  87. package/dist/chunks/option-checkbox-Df7WhGn4.js +25 -0
  88. package/dist/chunks/option-checkbox-Df7WhGn4.js.map +1 -0
  89. package/dist/chunks/over-sheet-B8vzr_zU.js +8 -0
  90. package/dist/chunks/over-sheet-B8vzr_zU.js.map +1 -0
  91. package/dist/chunks/{page-header-CEPZzhRp.js → page-header-Ccnrspbp.js} +5 -5
  92. package/dist/chunks/{page-header-CEPZzhRp.js.map → page-header-Ccnrspbp.js.map} +1 -1
  93. package/dist/chunks/{pagination-CCMxQ5pH.js → pagination-CEmWZNjp.js} +5 -4
  94. package/dist/chunks/{pagination-CCMxQ5pH.js.map → pagination-CEmWZNjp.js.map} +1 -1
  95. package/dist/chunks/picker-popover-C4ElNk7t.js +102 -0
  96. package/dist/chunks/picker-popover-C4ElNk7t.js.map +1 -0
  97. package/dist/chunks/{popover-BE7VO-a4.js → popover-bjxg020P.js} +3 -3
  98. package/dist/chunks/{popover-BE7VO-a4.js.map → popover-bjxg020P.js.map} +1 -1
  99. package/dist/chunks/{radio-CUxbLCvD.js → radio-DwYcXAzv.js} +2 -2
  100. package/dist/chunks/{radio-CUxbLCvD.js.map → radio-DwYcXAzv.js.map} +1 -1
  101. package/dist/chunks/range-popup-CG9Jo5B7.js +128 -0
  102. package/dist/chunks/range-popup-CG9Jo5B7.js.map +1 -0
  103. package/dist/chunks/release-art-Chd8l9Rf.js +555 -0
  104. package/dist/chunks/release-art-Chd8l9Rf.js.map +1 -0
  105. package/dist/chunks/{resize-motion-CMaidkwe.js → resize-motion-BWGMchyP.js} +27 -23
  106. package/dist/chunks/resize-motion-BWGMchyP.js.map +1 -0
  107. package/dist/chunks/{rights-BbiJ0AJB.js → rights-hMoaFasn.js} +12 -12
  108. package/dist/chunks/rights-hMoaFasn.js.map +1 -0
  109. package/dist/chunks/{section-DzOLLN1p.js → section-BsET7Fo-.js} +4 -4
  110. package/dist/chunks/{section-DzOLLN1p.js.map → section-BsET7Fo-.js.map} +1 -1
  111. package/dist/chunks/{segmented-MrinfDL8.js → segmented-DXKVF-nY.js} +4 -4
  112. package/dist/chunks/{segmented-MrinfDL8.js.map → segmented-DXKVF-nY.js.map} +1 -1
  113. package/dist/chunks/{select-Bc4kRiSG.js → select-Bbv2f5F8.js} +63 -80
  114. package/dist/chunks/select-Bbv2f5F8.js.map +1 -0
  115. package/dist/chunks/{separator-D5AzVFTS.js → separator-CpAUELNs.js} +2 -2
  116. package/dist/chunks/{separator-D5AzVFTS.js.map → separator-CpAUELNs.js.map} +1 -1
  117. package/dist/chunks/{sidebar-5IA18LuP.js → sidebar-Dey1ZfGt.js} +54 -51
  118. package/dist/chunks/sidebar-Dey1ZfGt.js.map +1 -0
  119. package/dist/chunks/{sidebar-menu-DRWRxcJ3.js → sidebar-menu-ct8IiL4z.js} +2 -2
  120. package/dist/chunks/{sidebar-menu-DRWRxcJ3.js.map → sidebar-menu-ct8IiL4z.js.map} +1 -1
  121. package/dist/chunks/{skeleton-kfuqdl1a.js → skeleton-BM797MAg.js} +2 -2
  122. package/dist/chunks/{skeleton-kfuqdl1a.js.map → skeleton-BM797MAg.js.map} +1 -1
  123. package/dist/chunks/{slider-DbhjJ3ML.js → slider-Ds-tqY-1.js} +2 -2
  124. package/dist/chunks/{slider-DbhjJ3ML.js.map → slider-Ds-tqY-1.js.map} +1 -1
  125. package/dist/chunks/status-dot-BqVOlShY.js +29 -0
  126. package/dist/chunks/status-dot-BqVOlShY.js.map +1 -0
  127. package/dist/chunks/{styles-Btvg2DCf.js → styles-CVJU9t9v.js} +2 -2
  128. package/dist/chunks/{styles-Btvg2DCf.js.map → styles-CVJU9t9v.js.map} +1 -1
  129. package/dist/chunks/{swap-text-BhPI8DOf.js → swap-text-Cica0pUr.js} +2 -2
  130. package/dist/chunks/{swap-text-BhPI8DOf.js.map → swap-text-Cica0pUr.js.map} +1 -1
  131. package/dist/chunks/{switch-XMY_CQE-.js → switch-CSKMEomo.js} +3 -3
  132. package/dist/chunks/{switch-XMY_CQE-.js.map → switch-CSKMEomo.js.map} +1 -1
  133. package/dist/chunks/{table-DYKa86af.js → table-D-36EM7f.js} +2 -2
  134. package/dist/chunks/{table-DYKa86af.js.map → table-D-36EM7f.js.map} +1 -1
  135. package/dist/chunks/{tag-Dg89uYpV.js → tag-CwDKXVHj.js} +4 -4
  136. package/dist/chunks/{tag-Dg89uYpV.js.map → tag-CwDKXVHj.js.map} +1 -1
  137. package/dist/chunks/{text--5MKh2G4.js → text-Dvvgg5Jt.js} +3 -3
  138. package/dist/chunks/{text--5MKh2G4.js.map → text-Dvvgg5Jt.js.map} +1 -1
  139. package/dist/chunks/{textarea-Cj8iR82R.js → textarea-2d373OyU.js} +35 -31
  140. package/dist/chunks/textarea-2d373OyU.js.map +1 -0
  141. package/dist/chunks/timeseries-LRDAZHV0.js +339 -0
  142. package/dist/chunks/timeseries-LRDAZHV0.js.map +1 -0
  143. package/dist/chunks/{toolbar-Dw3uxpsE.js → toolbar-nVLFWH2i.js} +3 -3
  144. package/dist/chunks/{toolbar-Dw3uxpsE.js.map → toolbar-nVLFWH2i.js.map} +1 -1
  145. package/dist/chunks/{tooltip-DEbCCsru.js → tooltip-S1DmyLVl.js} +4 -4
  146. package/dist/chunks/{tooltip-DEbCCsru.js.map → tooltip-S1DmyLVl.js.map} +1 -1
  147. package/dist/chunks/{tooltip-root-DRd4ciUv.js → tooltip-root-vjylFUqw.js} +4 -4
  148. package/dist/chunks/{tooltip-root-DRd4ciUv.js.map → tooltip-root-vjylFUqw.js.map} +1 -1
  149. package/dist/chunks/{virtual-rows-BZe49bKi.js → virtual-rows-yAMjeAwj.js} +4 -3
  150. package/dist/chunks/virtual-rows-yAMjeAwj.js.map +1 -0
  151. package/dist/chunks/{zh-CN-C7GmVswt.js → zh-CN-CqEA4PCM.js} +37 -5
  152. package/dist/chunks/zh-CN-CqEA4PCM.js.map +1 -0
  153. package/dist/components/app-frame.js +2 -2
  154. package/dist/components/avatar.js +1 -1
  155. package/dist/components/badge.js +1 -1
  156. package/dist/components/banner.js +1 -1
  157. package/dist/components/button-group.js +33 -32
  158. package/dist/components/button-group.js.map +1 -1
  159. package/dist/components/button.js +1 -1
  160. package/dist/components/calendar.js +1 -1
  161. package/dist/components/charts/bar.js +34 -31
  162. package/dist/components/charts/bar.js.map +1 -1
  163. package/dist/components/charts/donut.js +2 -2
  164. package/dist/components/charts/gauge.js +2 -2
  165. package/dist/components/charts/heatmap.js +1 -1
  166. package/dist/components/charts/sankey.js +2 -2
  167. package/dist/components/charts/sparkline.js +1 -1
  168. package/dist/components/charts/timeseries.js +1 -252
  169. package/dist/components/charts.js +3 -3
  170. package/dist/components/checkbox.js +1 -1
  171. package/dist/components/code-block.js +2 -2
  172. package/dist/components/code.js +1 -1
  173. package/dist/components/collapsible.js +1 -1
  174. package/dist/components/combobox.js +1 -1
  175. package/dist/components/command-list.js +4 -0
  176. package/dist/components/command-palette.js +120 -171
  177. package/dist/components/command-palette.js.map +1 -1
  178. package/dist/components/copy-button.js +1 -1
  179. package/dist/components/data-table.js +251 -193
  180. package/dist/components/data-table.js.map +1 -1
  181. package/dist/components/date-picker.js +7 -7
  182. package/dist/components/date-picker.js.map +1 -1
  183. package/dist/components/dialog.js +7 -9
  184. package/dist/components/dialog.js.map +1 -1
  185. package/dist/components/display-options.js +67 -53
  186. package/dist/components/display-options.js.map +1 -1
  187. package/dist/components/empty.js +1 -1
  188. package/dist/components/field.js +1 -1
  189. package/dist/components/filter-chip.js +138 -63
  190. package/dist/components/filter-chip.js.map +1 -1
  191. package/dist/components/filter-row.js +2 -2
  192. package/dist/components/flow.js +2 -2
  193. package/dist/components/heading.js +1 -1
  194. package/dist/components/icon-button.js +1 -1
  195. package/dist/components/icon.js +1 -1
  196. package/dist/components/input.js +56 -54
  197. package/dist/components/input.js.map +1 -1
  198. package/dist/components/kaeso/conversation.js +88 -79
  199. package/dist/components/kaeso/conversation.js.map +1 -1
  200. package/dist/components/kaeso/identity.js +1 -1
  201. package/dist/components/kaeso/moments.js +8 -8
  202. package/dist/components/kaeso/moments.js.map +1 -1
  203. package/dist/components/kaeso/rights.js +1 -1
  204. package/dist/components/kaeso/usage.js +6 -6
  205. package/dist/components/kaeso/usage.js.map +1 -1
  206. package/dist/components/kaeso.js +212 -84
  207. package/dist/components/kaeso.js.map +1 -1
  208. package/dist/components/kbd.js +1 -1
  209. package/dist/components/key-value.js +3 -3
  210. package/dist/components/label.js +1 -1
  211. package/dist/components/layout.js +1 -1
  212. package/dist/components/link.js +1 -1
  213. package/dist/components/list.js +1 -1
  214. package/dist/components/loader.js +2 -2
  215. package/dist/components/logo.js +2 -2
  216. package/dist/components/markdown.js +1 -1
  217. package/dist/components/menu.js +2 -2
  218. package/dist/components/meter.js +1 -1
  219. package/dist/components/page-header.js +1 -1
  220. package/dist/components/pagination.js +1 -1
  221. package/dist/components/playground.js +654 -381
  222. package/dist/components/playground.js.map +1 -1
  223. package/dist/components/popover.js +2 -2
  224. package/dist/components/qr-code.js +1 -1
  225. package/dist/components/radio.js +1 -1
  226. package/dist/components/release-art.js +2 -0
  227. package/dist/components/scroll-area.js +1 -1
  228. package/dist/components/section.js +1 -1
  229. package/dist/components/segmented.js +1 -1
  230. package/dist/components/select.js +1 -1
  231. package/dist/components/separator.js +1 -1
  232. package/dist/components/settings.js +3 -3
  233. package/dist/components/sheet.js +69 -52
  234. package/dist/components/sheet.js.map +1 -1
  235. package/dist/components/sidebar.js +1 -1
  236. package/dist/components/skeleton.js +1 -1
  237. package/dist/components/slider.js +1 -1
  238. package/dist/components/stat.js +88 -74
  239. package/dist/components/stat.js.map +1 -1
  240. package/dist/components/status-dot.js +1 -1
  241. package/dist/components/surface.js +1 -1
  242. package/dist/components/swap-text.js +1 -1
  243. package/dist/components/switch.js +1 -1
  244. package/dist/components/table.js +1 -1
  245. package/dist/components/tabs.js +48 -49
  246. package/dist/components/tabs.js.map +1 -1
  247. package/dist/components/tag.js +1 -1
  248. package/dist/components/text.js +1 -1
  249. package/dist/components/theme-image.js +1 -1
  250. package/dist/components/theme-menu.js +2 -2
  251. package/dist/components/theme-select.js +1 -1
  252. package/dist/components/timeline.js +1 -1
  253. package/dist/components/toast.js +4 -4
  254. package/dist/components/toc.js +1 -1
  255. package/dist/components/toolbar.js +1 -1
  256. package/dist/components/tooltip.js +1 -1
  257. package/dist/components/visually-hidden.js +1 -1
  258. package/dist/format.js +132 -79
  259. package/dist/format.js.map +1 -1
  260. package/dist/i18n-provider.js +1 -1
  261. package/dist/index.js +115 -111
  262. package/dist/kaeso.css +43 -8
  263. package/dist/styles.css +1 -1
  264. package/dist/types/components/charts/bar.d.ts +6 -0
  265. package/dist/types/components/charts/core.d.ts +2 -2
  266. package/dist/types/components/charts/docs.d.ts +7 -0
  267. package/dist/types/components/charts/time-axis.d.ts +5 -0
  268. package/dist/types/components/charts/timeseries.d.ts +9 -0
  269. package/dist/types/components/code-block/highlighter.d.ts +2 -0
  270. package/dist/types/components/combobox/combobox.d.ts +2 -0
  271. package/dist/types/components/combobox/docs.d.ts +2 -4
  272. package/dist/types/components/command-list/command-list.d.ts +84 -0
  273. package/dist/types/components/command-list/docs.d.ts +52 -0
  274. package/dist/types/components/command-list/index.d.ts +3 -0
  275. package/dist/types/components/command-list/match.d.ts +1 -0
  276. package/dist/types/components/command-list/picker-popover.d.ts +44 -0
  277. package/dist/types/components/data-table/data-table.d.ts +3 -2
  278. package/dist/types/components/data-table/docs.d.ts +1 -0
  279. package/dist/types/components/date-picker/docs.d.ts +0 -6
  280. package/dist/types/components/dialog/dialog.d.ts +24 -0
  281. package/dist/types/components/dialog/docs.d.ts +4 -0
  282. package/dist/types/components/display-options/display-options.d.ts +1 -0
  283. package/dist/types/components/filter-chip/docs.d.ts +4 -0
  284. package/dist/types/components/filter-chip/filter-chip.d.ts +7 -0
  285. package/dist/types/components/input/docs.d.ts +2 -12
  286. package/dist/types/components/input/number-input.d.ts +1 -0
  287. package/dist/types/components/input/tag-input.d.ts +1 -0
  288. package/dist/types/components/kaeso/docs.d.ts +34 -0
  289. package/dist/types/components/kaeso/identity.d.ts +10 -1
  290. package/dist/types/components/kaeso/index.d.ts +1 -0
  291. package/dist/types/components/kaeso/provider-marks.d.ts +5 -1
  292. package/dist/types/components/kaeso/provider-picker.d.ts +42 -0
  293. package/dist/types/components/list/docs.d.ts +2 -0
  294. package/dist/types/components/list/list.d.ts +2 -0
  295. package/dist/types/components/menu/styles.d.ts +1 -1
  296. package/dist/types/components/playground/docs.d.ts +32 -0
  297. package/dist/types/components/playground/index.d.ts +1 -0
  298. package/dist/types/components/playground/model-picker.d.ts +39 -4
  299. package/dist/types/components/playground/reasoning.d.ts +29 -0
  300. package/dist/types/components/playground/response-view.d.ts +7 -1
  301. package/dist/types/components/release-art/docs.d.ts +13 -0
  302. package/dist/types/components/release-art/drawing.d.ts +48 -0
  303. package/dist/types/components/release-art/index.d.ts +1 -0
  304. package/dist/types/components/release-art/release-art.d.ts +37 -0
  305. package/dist/types/components/select/docs.d.ts +0 -2
  306. package/dist/types/components/select/option-checkbox.d.ts +1 -0
  307. package/dist/types/components/sidebar/sidebar.d.ts +1 -0
  308. package/dist/types/components/stat/docs.d.ts +1 -0
  309. package/dist/types/components/stat/stat.d.ts +1 -0
  310. package/dist/types/components/status-dot/docs.d.ts +2 -0
  311. package/dist/types/components/status-dot/status-dot.d.ts +2 -0
  312. package/dist/types/format/index.d.ts +8 -0
  313. package/dist/types/index.d.ts +2 -0
  314. package/dist/types/utils/index.d.ts +1 -1
  315. package/dist/types/utils/inset.d.ts +5 -0
  316. package/dist/types/utils/over-sheet.d.ts +1 -0
  317. package/dist/types/utils/restore-focus.d.ts +1 -1
  318. package/dist/utils.js +4 -4
  319. package/foundations/accessibility.md +1 -0
  320. package/foundations/layout.md +45 -0
  321. package/foundations/writing.md +1 -0
  322. package/package.json +2 -2
  323. package/dist/chunks/app-frame-BXh-06HL.js +0 -214
  324. package/dist/chunks/app-frame-BXh-06HL.js.map +0 -1
  325. package/dist/chunks/cn-CidVUKMm.js.map +0 -1
  326. package/dist/chunks/code-block-DxtladFW.js.map +0 -1
  327. package/dist/chunks/collapsible-Cw_1aem5.js.map +0 -1
  328. package/dist/chunks/combobox-D30Wt11R.js +0 -291
  329. package/dist/chunks/combobox-D30Wt11R.js.map +0 -1
  330. package/dist/chunks/core-K960A4OT.js.map +0 -1
  331. package/dist/chunks/de-CTAo4KL7.js.map +0 -1
  332. package/dist/chunks/dialog-LNKgPEsV.js +0 -319
  333. package/dist/chunks/dialog-LNKgPEsV.js.map +0 -1
  334. package/dist/chunks/field-d8V94bvZ.js.map +0 -1
  335. package/dist/chunks/field-press-DwzBFafd.js +0 -10
  336. package/dist/chunks/field-press-DwzBFafd.js.map +0 -1
  337. package/dist/chunks/identity-BtZC_d_Q.js +0 -342
  338. package/dist/chunks/identity-BtZC_d_Q.js.map +0 -1
  339. package/dist/chunks/input-group-CYA1MEoZ.js.map +0 -1
  340. package/dist/chunks/inset-BLMdxX4I.js.map +0 -1
  341. package/dist/chunks/list-CzaiyNja.js +0 -483
  342. package/dist/chunks/list-CzaiyNja.js.map +0 -1
  343. package/dist/chunks/nav-sheet-BIErlV74.js +0 -58
  344. package/dist/chunks/nav-sheet-BIErlV74.js.map +0 -1
  345. package/dist/chunks/range-popup-DGOnGGag.js +0 -111
  346. package/dist/chunks/range-popup-DGOnGGag.js.map +0 -1
  347. package/dist/chunks/resize-motion-CMaidkwe.js.map +0 -1
  348. package/dist/chunks/rights-BbiJ0AJB.js.map +0 -1
  349. package/dist/chunks/select-Bc4kRiSG.js.map +0 -1
  350. package/dist/chunks/sidebar-5IA18LuP.js.map +0 -1
  351. package/dist/chunks/status-dot-CBoQpyL4.js +0 -25
  352. package/dist/chunks/status-dot-CBoQpyL4.js.map +0 -1
  353. package/dist/chunks/textarea-Cj8iR82R.js.map +0 -1
  354. package/dist/chunks/virtual-rows-BZe49bKi.js.map +0 -1
  355. package/dist/chunks/zh-CN-C7GmVswt.js.map +0 -1
  356. package/dist/components/charts/timeseries.js.map +0 -1
package/AGENTS.md CHANGED
@@ -29,6 +29,7 @@ The design system behind the components, in `node_modules/@logicplanes/kaeso-ui/
29
29
  | `foundations/typography.md` | Setting text, numbers, ids or code |
30
30
  | `foundations/shape.md` | Choosing a radius, nesting surfaces |
31
31
  | `foundations/elevation.md` | Drawing a line, a ring or a raised surface |
32
+ | `foundations/layout.md` | Placing anything on a page: one gutter, one edge |
32
33
  | `foundations/motion.md` | Animating anything, showing loading |
33
34
  | `foundations/icons.md` | Placing an icon |
34
35
  | `foundations/writing.md` | Writing any label, message, empty state or error |
@@ -83,6 +84,7 @@ export function Providers({ children }: { children: React.ReactNode }) {
83
84
  9. **Use the icon vocabulary**: `icons.key`, `icons.model`, never an icon picked by look.
84
85
  10. **Copy follows the voice**: sentence case, a verb first on buttons, no exclamation points or emoji, errors that say what to do next.
85
86
  11. **Leave room.** Let the panel breathe: the components bring their own spacing, so don't pack screens with extra wrappers, borders or headings. Fewer elements, each one clear.
87
+ 12. **One edge per page.** Every box, from a button to a row's hover fill, starts on the 24px gutter, and the text inside a box 12px further in. Never pull a component into the gutter with a negative margin.
86
88
 
87
89
  ## Which component for which job
88
90
 
package/NOTICE.md CHANGED
@@ -1,5 +1,5 @@
1
1
  # Notices
2
2
 
3
- Fonts: Inter (SIL Open Font License 1.1) and Geist Mono (SIL Open Font License 1.1), self-hosted as unmodified subsets of their Fontsource builds and shipped in `dist/fonts/` with `LICENSE-Inter.txt` and `LICENSE-GeistMono.txt`. Icons: Hugeicons free, Stroke Rounded (MIT).
3
+ Fonts: Inter (SIL Open Font License 1.1) and Geist Mono (SIL Open Font License 1.1), self-hosted as unmodified subsets of their Fontsource builds and shipped in `dist/fonts/` with `LICENSE-Inter.txt` and `LICENSE-GeistMono.txt`. Icons: Hugeicons free, Stroke Rounded (MIT). Provider marks: the trademarks of the providers they name, shown only to identify each provider, from each provider's own vector in one colour. The repository's `NOTICE.md` lists the source of each.
4
4
 
5
5
  The runtime dependencies are listed in `package.json`; each is MIT, ISC, BSD-2-Clause, BSD-3-Clause, Apache-2.0 or 0BSD licensed.
@@ -1,6 +1,6 @@
1
1
  # @logicplanes/kaeso-ui component guides
2
2
 
3
- Version 0.2.1. Generated from the showcase's demo modules (apps/showcase/src/demos); do not edit. For each component: what it is for, its import, keyboard, accessibility, do and don't, and every example's code. Props and variants: `component-registry.md`.
3
+ Version 0.3.0. Generated from the showcase's demo modules (apps/showcase/src/demos); do not edit. For each component: what it is for, its import, keyboard, accessibility, do and don't, and every example's code. Props and variants: `component-registry.md`.
4
4
 
5
5
  ## AlertDialog
6
6
 
@@ -795,6 +795,89 @@ function Create() {
795
795
  }
796
796
  ```
797
797
 
798
+ ## CommandList
799
+
800
+ A search field over a long list that stays fast with thousands of rows, grouped under sticky captions.
801
+
802
+ `import { CommandList } from "@logicplanes/kaeso-ui";`
803
+
804
+ ### Keyboard
805
+
806
+ | Key | Action |
807
+ |---|---|
808
+ | Up Down | Moves through rows, skipping disabled ones |
809
+ | Home End | Goes to the first or last row |
810
+ | PageUp PageDown | Moves a page at a time |
811
+ | Enter | Chooses the active row |
812
+ | Escape | Clears the search, then closes |
813
+
814
+ ### Accessibility
815
+
816
+ - The search field is a combobox that points at the active row; the list is a listbox with one group per caption.
817
+ - Each row says its position in the whole list, so a screen reader counts every row, not just those drawn.
818
+
819
+ ### Examples
820
+
821
+ #### In a dialog step
822
+
823
+ ```tsx
824
+ function Inline() {
825
+ const [value, setValue] = useState("gpt-5");
826
+ return (
827
+ <div className="w-400 max-w-full">
828
+ <CommandList height="inline" aria-label="Models" groups={groups} value={value} onSelect={setValue} placeholder="Search models" />
829
+ </div>
830
+ );
831
+ }
832
+ ```
833
+
834
+ #### In a picker
835
+
836
+ ```tsx
837
+ function Picker() {
838
+ const [open, setOpen] = useState(false);
839
+ const [value, setValue] = useState<string | null>(null);
840
+ const chosen = models.find((m) => m.model === value);
841
+ return (
842
+ <PickerPopover
843
+ title="Model"
844
+ open={open}
845
+ onOpenChange={setOpen}
846
+ trigger={
847
+ <PickerTrigger aria-label="Model" placeholder="Choose a model">
848
+ {chosen?.name}
849
+ </PickerTrigger>
850
+ }
851
+ >
852
+ <CommandList
853
+ aria-label="Models"
854
+ groups={groups}
855
+ value={value}
856
+ autoFocus
857
+ placeholder="Search models"
858
+ onSelect={(v) => {
859
+ setValue(v);
860
+ setOpen(false);
861
+ }}
862
+ />
863
+ </PickerPopover>
864
+ );
865
+ }
866
+ ```
867
+
868
+ #### Ten thousand rows
869
+
870
+ ```tsx
871
+ function Thousands() {
872
+ const [value, setValue] = useState<string | null>(null);
873
+ return (
874
+ <div className="w-400 max-w-full">
875
+ <CommandList height="inline" aria-label="Models" groups={thousands} value={value} onSelect={setValue} placeholder="Search 10,000 models" />
876
+ </div>
877
+ );
878
+ }
879
+ ```
880
+
798
881
  ## CommandPalette
799
882
 
800
883
  ⌘K: every page and action, grouped; nested pages; async groups with a quiet progress line.
@@ -1012,15 +1095,20 @@ The console's table: a 36px header, 40px rows without lines, numbers right, sort
1012
1095
 
1013
1096
  | Key | Action |
1014
1097
  |---|---|
1015
- | Tab | Moves to the next row |
1098
+ | Tab | Moves into the table, to the row last in focus, and out again |
1099
+ | Up Down | Move between rows |
1100
+ | Home End | First and last row |
1101
+ | Page Up Page Down | A screen of rows up or down |
1016
1102
  | Enter | Opens the row |
1103
+ | Space | Selects the row, in a selectable table |
1104
+ | Left Right | Resize a column, on its handle |
1017
1105
  | shift F10 | Opens the row menu |
1018
1106
 
1019
1107
  ### Accessibility
1020
1108
 
1021
1109
  - role=table with column headers; sorted columns carry aria-sort.
1022
1110
  - Columns declare a priority; low-priority columns hide first when space is short. A growing column then shrinks to its readable minimum (minWidth, 136px by default) and truncates. On a screen narrower still, the other priority 1 columns give way from the row's end backwards, keeping its last column (the actions) and the selection boxes; only a row with nothing left to give way scrolls sideways, its last column pinned at the end.
1023
- - Over 100 rows render virtually; the row count is in aria-rowcount.
1111
+ - Over 100 rows render virtually; the row count is in aria-rowcount and each row's place in aria-rowindex.
1024
1112
 
1025
1113
  ### Examples
1026
1114
 
@@ -1132,6 +1220,7 @@ A pill showing the date; a calendar with circles, today ringed, and a typed ISO
1132
1220
  | Arrows | Move between days |
1133
1221
  | Page Up Page Down | Previous and next month |
1134
1222
  | Enter | Chooses the day |
1223
+ | Up Down | Move between the range's presets |
1135
1224
 
1136
1225
  ### Accessibility
1137
1226
 
@@ -1184,7 +1273,7 @@ The destructive flow: the object and the consequence, typed confirmation, a dang
1184
1273
 
1185
1274
  ## Dialog
1186
1275
 
1187
- A modal dialog: 440, 560 or 720 wide, radius 20; title, description, body, actions. ⌘Enter submits. Longer forms use StepDialog: one question per step.
1276
+ A modal dialog: 440, 560 or 720 wide, radius 20; title, description, body, actions. Enter in a field and ⌘Enter submit. Longer forms use StepDialog: one question per step.
1188
1277
 
1189
1278
  `import { Dialog } from "@logicplanes/kaeso-ui";`
1190
1279
 
@@ -1194,7 +1283,8 @@ A modal dialog: 440, 560 or 720 wide, radius 20; title, description, body, actio
1194
1283
  |---|---|
1195
1284
  | Escape | Closes and returns focus to the trigger |
1196
1285
  | Tab | Moves within the dialog |
1197
- | mod Enter | Submits |
1286
+ | Enter | Submits from a single-line field |
1287
+ | mod Enter | Submits from anywhere in the dialog |
1198
1288
 
1199
1289
  ### Accessibility
1200
1290
 
@@ -1600,14 +1690,14 @@ What is absent and the next step: an icon circle, a title, one sentence, one or
1600
1690
 
1601
1691
  ## Field
1602
1692
 
1603
- A label, a control and its help, wired together; errors are toasts, never text under the field.
1693
+ A label, a control and its help, wired together; an error shows under the control.
1604
1694
 
1605
1695
  `import { Field, Fieldset } from "@logicplanes/kaeso-ui";`
1606
1696
 
1607
1697
  ### Accessibility
1608
1698
 
1609
1699
  - The label points at the control; help is in aria-describedby.
1610
- - invalid sets aria-invalid and the danger ring; say what is wrong in a toast. A deprecated error stays the control's description for a screen reader but isn't drawn.
1700
+ - invalid sets aria-invalid and the danger ring; error shows what is wrong under the control and is its description for a screen reader.
1611
1701
  - Optional fields are marked, not required ones.
1612
1702
 
1613
1703
  ### Examples
@@ -1988,7 +2078,7 @@ A pill text field with the secondary material and a soft focus halo.
1988
2078
 
1989
2079
  ### Accessibility
1990
2080
 
1991
- - Pass label and description and the input wraps itself in Field, wiring aria-describedby; invalid sets aria-invalid. Errors are toasts, never text under the field.
2081
+ - Pass label and description and the input wraps itself in Field, wiring aria-describedby; invalid sets aria-invalid, and an error shows under the input.
1992
2082
  - Placeholders are hints, never labels.
1993
2083
  - Read-only fields stay selectable and focusable.
1994
2084
 
@@ -2138,7 +2228,7 @@ Kaeso's identities: a redacted key with its state, a model with its provider and
2138
2228
 
2139
2229
  ### Accessibility
2140
2230
 
2141
- - Providers show their mark in the text color, so it follows the theme; others a letter. The name is always next to it or its accessible label.
2231
+ - Providers show their mark in its owner's one-colour version for the theme; others a letter. The name is always next to it or its accessible label.
2142
2232
  - Capability icons have tooltips and are summarized in an accessible label.
2143
2233
  - Status codes carry their phrase for screen readers.
2144
2234
 
@@ -2160,11 +2250,11 @@ Kaeso's identities: a redacted key with its state, a model with its provider and
2160
2250
  ```tsx
2161
2251
  <div className="flex flex-col gap-12">
2162
2252
  {models.map((m) => (
2163
- <ModelLabel key={m.id} provider={m.provider} model={m.model} name={m.name} capabilities={m.capabilities} />
2253
+ <ModelLabel key={m.id} provider={m.provider} providerName={providerNames[m.provider]} model={m.model} name={m.name} capabilities={m.capabilities} />
2164
2254
  ))}
2165
2255
  <div className="flex gap-12">
2166
- <ProviderBadge provider="openai" withName />
2167
- <ProviderBadge provider="anthropic" withName />
2256
+ <ProviderBadge provider="openai" name="OpenAI" withName />
2257
+ <ProviderBadge provider="anthropic" name="Anthropic" withName />
2168
2258
  </div>
2169
2259
  </div>
2170
2260
  ```
@@ -2188,6 +2278,7 @@ Kaeso's identities: a redacted key with its state, a model with its provider and
2188
2278
  <div className="grid w-full grid-cols-1 gap-16 md:grid-cols-2">
2189
2279
  <ProviderCard
2190
2280
  provider="openai"
2281
+ name="OpenAI"
2191
2282
  connected
2192
2283
  status="The organization's key"
2193
2284
  keyLabel="Production …4f2a"
@@ -2196,6 +2287,7 @@ Kaeso's identities: a redacted key with its state, a model with its provider and
2196
2287
  />
2197
2288
  <ProviderCard
2198
2289
  provider="anthropic"
2290
+ name="Anthropic"
2199
2291
  connected={false}
2200
2292
  status="No key yet: requests to Anthropic fail"
2201
2293
  actions={
@@ -2323,7 +2415,11 @@ function Wizard() {
2323
2415
  <List
2324
2416
  aria-label="Models on models.dev"
2325
2417
  density="compact"
2326
- items={models.map((x) => ({ id: x.model, textValue: x.model, title: <ModelLabel provider={x.provider} model={x.model} name={x.name} /> }))}
2418
+ items={models.map((x) => ({
2419
+ id: x.model,
2420
+ textValue: x.model,
2421
+ title: <ModelLabel provider={x.provider} providerName={providerNames[x.provider]} model={x.model} name={x.name} />,
2422
+ }))}
2327
2423
  onOpen={(item) => {
2328
2424
  setModel(item.id);
2329
2425
  setView("review");
@@ -2344,7 +2440,7 @@ function Wizard() {
2344
2440
  description: "Prices come from models.dev; you can override them.",
2345
2441
  content: m && (
2346
2442
  <div className="flex flex-col gap-16">
2347
- <ModelLabel provider={m.provider} model={m.model} name={m.name} capabilities={m.capabilities} />
2443
+ <ModelLabel provider={m.provider} providerName={providerNames[m.provider]} model={m.model} name={m.name} capabilities={m.capabilities} />
2348
2444
  <KeyValue
2349
2445
  items={[
2350
2446
  { label: "Input", value: `$${m.input} / M` },
@@ -2867,7 +2963,7 @@ A limit or quota: label and value, a 6px pill track, threshold ticks and a capti
2867
2963
 
2868
2964
  ## ModelPicker
2869
2965
 
2870
- A model from the project's catalogue: provider mark, name and id, grouped by provider. The start of a comparison column's header.
2966
+ A model from a catalogue of any size: searchable, grouped by provider, recent models on top. The start of a comparison column's header.
2871
2967
 
2872
2968
  `import { ModelPicker } from "@logicplanes/kaeso-ui/playground";`
2873
2969
 
@@ -2875,13 +2971,17 @@ A model from the project's catalogue: provider mark, name and id, grouped by pro
2875
2971
 
2876
2972
  | Key | Action |
2877
2973
  |---|---|
2878
- | Enter Space | Opens the list |
2974
+ | Enter Space | Opens the list with its search focused |
2975
+ | A–Z | Searches by name, id or provider |
2879
2976
  | Up Down | Moves through models |
2880
- | A–Z | Jumps to a model by name |
2977
+ | Enter | Chooses the active model |
2978
+ | Escape | Clears the search, then closes |
2881
2979
 
2882
2980
  ### Accessibility
2883
2981
 
2884
- - A select named “Model” by default; each option reads the model's name.
2982
+ - A button named “Model” by default opens a search field over a listbox, one group per provider.
2983
+ - Above the list, a Provider select narrows it to one provider; it offers only the providers whose models match the search.
2984
+ - On phones the list opens as a full-screen sheet with the search on top.
2885
2985
 
2886
2986
  ### Examples
2887
2987
 
@@ -2892,7 +2992,7 @@ function Basic() {
2892
2992
  const [model, setModel] = useState("claude-sonnet-4-5");
2893
2993
  return (
2894
2994
  <div className="flex h-52 w-full max-w-360 items-center pl-8 hairline-b">
2895
- <ModelPicker value={model} onValueChange={setModel} options={playgroundModels} />
2995
+ <ModelPicker value={model} onValueChange={setModel} options={playgroundModels} providers={providers} />
2896
2996
  </div>
2897
2997
  );
2898
2998
  }
@@ -2901,7 +3001,26 @@ function Basic() {
2901
3001
  #### Raised
2902
3002
 
2903
3003
  ```tsx
2904
- <ModelPicker appearance="default" size="md" defaultValue="gpt-5" options={playgroundModels} />
3004
+ <ModelPicker appearance="default" size="md" defaultValue="gpt-5" options={playgroundModels} providers={providers} />
3005
+ ```
3006
+
3007
+ #### With details and recent models
3008
+
3009
+ ```tsx
3010
+ function Catalogue() {
3011
+ const [model, setModel] = useState<string | null>(null);
3012
+ return (
3013
+ <ModelPicker
3014
+ appearance="default"
3015
+ size="md"
3016
+ options={catalogue}
3017
+ providers={providers.map((p) => ({ ...p, connected: p.id === "anthropic" }))}
3018
+ recent={["claude-sonnet-4-5"]}
3019
+ value={model}
3020
+ onValueChange={setModel}
3021
+ />
3022
+ );
3023
+ }
2905
3024
  ```
2906
3025
 
2907
3026
  ## NumberInput
@@ -3213,7 +3332,7 @@ A floating panel next to its trigger; HoverCard previews on hover, never as the
3213
3332
  </HoverCard.Trigger>
3214
3333
  <HoverCard.Content>
3215
3334
  <div className="flex flex-col gap-12">
3216
- <ModelLabel provider="anthropic" model="claude-sonnet-4-5" capabilities={["tools", "reasoning", "vision", "pdf"]} />
3335
+ <ModelLabel provider="anthropic" providerName="Anthropic" model="claude-sonnet-4-5" capabilities={["tools", "reasoning", "vision", "pdf"]} />
3217
3336
  <KeyValue
3218
3337
  items={[
3219
3338
  { label: "Input", value: "$3.00 / M" },
@@ -3252,6 +3371,58 @@ function Basic() {
3252
3371
  }
3253
3372
  ```
3254
3373
 
3374
+ ## ProviderPicker
3375
+
3376
+ Choosing a provider from any number of them: connected ones first with their key counts, then the rest.
3377
+
3378
+ `import { ProviderPicker } from "@logicplanes/kaeso-ui";`
3379
+
3380
+ ### Keyboard
3381
+
3382
+ | Key | Action |
3383
+ |---|---|
3384
+ | A–Z | Searches by name or id |
3385
+ | Up Down | Moves through providers |
3386
+ | Enter | Chooses the active provider |
3387
+
3388
+ ### Accessibility
3389
+
3390
+ - A search field over a listbox, with Connected and Other providers as groups; each option reads the provider's name and hint.
3391
+
3392
+ ### Examples
3393
+
3394
+ #### In a dialog step
3395
+
3396
+ ```tsx
3397
+ function List() {
3398
+ const [provider, setProvider] = useState<string | null>("openai");
3399
+ return (
3400
+ <div className="w-400 max-w-full">
3401
+ <ProviderPicker aria-label="Provider" providers={providers} value={provider} onValueChange={setProvider} />
3402
+ </div>
3403
+ );
3404
+ }
3405
+ ```
3406
+
3407
+ #### In a toolbar
3408
+
3409
+ ```tsx
3410
+ function Select() {
3411
+ const [provider, setProvider] = useState<string | null>(null);
3412
+ return (
3413
+ <ProviderPicker
3414
+ appearance="select"
3415
+ size="sm"
3416
+ aria-label="Provider"
3417
+ allLabel="All providers"
3418
+ providers={providers}
3419
+ value={provider}
3420
+ onValueChange={setProvider}
3421
+ />
3422
+ );
3423
+ }
3424
+ ```
3425
+
3255
3426
  ## QRCode
3256
3427
 
3257
3428
  A scannable code drawn as one SVG path: dark modules on white in both themes, with a quiet zone.
@@ -3310,6 +3481,60 @@ One of a few choices: an ink donut around a panel center; RadioCards for choices
3310
3481
  </div>
3311
3482
  ```
3312
3483
 
3484
+ ## Reasoning
3485
+
3486
+ A model's reasoning behind a quiet disclosure: “Thought for 4.2 s” when it is done, “Thinking” with its latest line while it streams.
3487
+
3488
+ `import { Reasoning } from "@logicplanes/kaeso-ui/playground";`
3489
+
3490
+ ### Accessibility
3491
+
3492
+ - A disclosure button: Enter or Space opens and closes it, and the reasoning follows it in reading order.
3493
+
3494
+ ### Examples
3495
+
3496
+ #### Finished reasoning
3497
+
3498
+ ```tsx
3499
+ <Reasoning text={REASONING} duration={4200} />
3500
+ ```
3501
+
3502
+ #### In a request log
3503
+
3504
+ ```tsx
3505
+ <Reasoning title="Reasoning" hint="Redacted by the provider">
3506
+ <Text variant="small" tone="secondary">
3507
+ The provider redacted this reasoning; only its encrypted form was returned.
3508
+ </Text>
3509
+ </Reasoning>
3510
+ ```
3511
+
3512
+ ## ReleaseArt
3513
+
3514
+ Flat geometric artwork for a release, from a stored spec or a seed: the same picture every time, a new one for every release.
3515
+
3516
+ `import { ReleaseArt } from "@logicplanes/kaeso-ui";`
3517
+
3518
+ ### Accessibility
3519
+
3520
+ - The artwork is an image with a label; the title drawn on it is part of the picture, so say it in the label too.
3521
+
3522
+ ### Examples
3523
+
3524
+ #### What's new
3525
+
3526
+ ```tsx
3527
+ <div className="w-full max-w-640">
3528
+ <ReleaseArt
3529
+ seed="0.3.0"
3530
+ art={{ version: 1, seed: 2886621037, style: "stripes", palette: 6 }}
3531
+ label="Kaeso 0.3.0"
3532
+ eyebrow="What's new in Kaeso"
3533
+ title="0.3.0"
3534
+ />
3535
+ </div>
3536
+ ```
3537
+
3313
3538
  ## ResourceList
3314
3539
 
3315
3540
  A searchable list with group headers, row actions and a selection bar.
@@ -3357,7 +3582,7 @@ A response's numbers on one line: time to first token, total time, tokens in and
3357
3582
 
3358
3583
  ## ResponseView
3359
3584
 
3360
- A model's response as it arrives: Markdown with a quiet caret, reasoning in a Thinking disclosure, and calm stopped and failed states.
3585
+ A model's response as it arrives: Markdown with a quiet caret, reasoning in a Thinking disclosure, and calm stopped, cut-off and failed states.
3361
3586
 
3362
3587
  `import { ResponseView, UserMessage, Thread } from "@logicplanes/kaeso-ui/playground";`
3363
3588
 
@@ -3371,7 +3596,7 @@ A model's response as it arrives: Markdown with a quiet caret, reasoning in a Th
3371
3596
 
3372
3597
  - Each response is an article named by aria-label (“GPT-5 response” in a comparison) and is aria-busy while it streams, so its words aren't read out one by one.
3373
3598
  - Thinking is a disclosure button; closed, its row shows the latest line of the summary, hidden from screen readers, which read the summary when opened.
3374
- - A failure says only “No response” in place: the error itself is a toast.
3599
+ - A failure is an alert in place of the response: “No response”, then the error.
3375
3600
 
3376
3601
  ### Examples
3377
3602
 
@@ -4562,7 +4787,7 @@ Removable tags in a field: Enter, comma and paste split them; Backspace removes
4562
4787
  ### Accessibility
4563
4788
 
4564
4789
  - Each tag's remove circle is named “Remove …”.
4565
- - Invalid tags stay, marked with the danger ring; each says what is wrong in its tooltip, and the first problem is the field's description for a screen reader. Nothing is drawn under the field.
4790
+ - Invalid tags stay, marked with the danger ring; each says what is wrong in its tooltip, and the first problem shows under the field.
4566
4791
 
4567
4792
  ### Examples
4568
4793