@logicplanes/kaeso-ui 0.2.2 → 0.3.1

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 (349) hide show
  1. package/AGENTS.md +2 -0
  2. package/NOTICE.md +1 -1
  3. package/ai/component-guides.md +223 -24
  4. package/ai/component-registry.json +985 -91
  5. package/ai/component-registry.md +219 -52
  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-DEc9HNa6.js → release-art-Ogl-L1Vh.js} +189 -183
  104. package/dist/chunks/release-art-Ogl-L1Vh.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-BzMlYuMe.js → status-dot-BqVOlShY.js} +3 -3
  126. package/dist/chunks/{status-dot-BzMlYuMe.js.map → status-dot-BqVOlShY.js.map} +1 -1
  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 -255
  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 +6 -6
  182. package/dist/components/dialog.js +7 -9
  183. package/dist/components/dialog.js.map +1 -1
  184. package/dist/components/display-options.js +67 -53
  185. package/dist/components/display-options.js.map +1 -1
  186. package/dist/components/empty.js +1 -1
  187. package/dist/components/field.js +1 -1
  188. package/dist/components/filter-chip.js +138 -63
  189. package/dist/components/filter-chip.js.map +1 -1
  190. package/dist/components/filter-row.js +2 -2
  191. package/dist/components/flow.js +2 -2
  192. package/dist/components/heading.js +1 -1
  193. package/dist/components/icon-button.js +1 -1
  194. package/dist/components/icon.js +1 -1
  195. package/dist/components/input.js +56 -54
  196. package/dist/components/input.js.map +1 -1
  197. package/dist/components/kaeso/conversation.js +88 -79
  198. package/dist/components/kaeso/conversation.js.map +1 -1
  199. package/dist/components/kaeso/identity.js +1 -1
  200. package/dist/components/kaeso/moments.js +8 -8
  201. package/dist/components/kaeso/moments.js.map +1 -1
  202. package/dist/components/kaeso/rights.js +1 -1
  203. package/dist/components/kaeso/usage.js +6 -6
  204. package/dist/components/kaeso/usage.js.map +1 -1
  205. package/dist/components/kaeso.js +212 -84
  206. package/dist/components/kaeso.js.map +1 -1
  207. package/dist/components/kbd.js +1 -1
  208. package/dist/components/key-value.js +3 -3
  209. package/dist/components/label.js +1 -1
  210. package/dist/components/layout.js +1 -1
  211. package/dist/components/link.js +1 -1
  212. package/dist/components/list.js +1 -1
  213. package/dist/components/loader.js +2 -2
  214. package/dist/components/logo.js +2 -2
  215. package/dist/components/markdown.js +1 -1
  216. package/dist/components/menu.js +2 -2
  217. package/dist/components/meter.js +1 -1
  218. package/dist/components/page-header.js +1 -1
  219. package/dist/components/pagination.js +1 -1
  220. package/dist/components/playground.js +654 -381
  221. package/dist/components/playground.js.map +1 -1
  222. package/dist/components/popover.js +2 -2
  223. package/dist/components/qr-code.js +1 -1
  224. package/dist/components/radio.js +1 -1
  225. package/dist/components/release-art.js +1 -1
  226. package/dist/components/scroll-area.js +1 -1
  227. package/dist/components/section.js +1 -1
  228. package/dist/components/segmented.js +1 -1
  229. package/dist/components/select.js +1 -1
  230. package/dist/components/separator.js +1 -1
  231. package/dist/components/settings.js +3 -3
  232. package/dist/components/sheet.js +69 -52
  233. package/dist/components/sheet.js.map +1 -1
  234. package/dist/components/sidebar.js +1 -1
  235. package/dist/components/skeleton.js +1 -1
  236. package/dist/components/slider.js +1 -1
  237. package/dist/components/stat.js +88 -74
  238. package/dist/components/stat.js.map +1 -1
  239. package/dist/components/status-dot.js +1 -1
  240. package/dist/components/surface.js +1 -1
  241. package/dist/components/swap-text.js +1 -1
  242. package/dist/components/switch.js +1 -1
  243. package/dist/components/table.js +1 -1
  244. package/dist/components/tabs.js +48 -49
  245. package/dist/components/tabs.js.map +1 -1
  246. package/dist/components/tag.js +1 -1
  247. package/dist/components/text.js +1 -1
  248. package/dist/components/theme-image.js +1 -1
  249. package/dist/components/theme-menu.js +2 -2
  250. package/dist/components/theme-select.js +1 -1
  251. package/dist/components/timeline.js +1 -1
  252. package/dist/components/toast.js +4 -4
  253. package/dist/components/toc.js +1 -1
  254. package/dist/components/toolbar.js +1 -1
  255. package/dist/components/tooltip.js +1 -1
  256. package/dist/components/visually-hidden.js +1 -1
  257. package/dist/format.js +87 -50
  258. package/dist/format.js.map +1 -1
  259. package/dist/i18n-provider.js +1 -1
  260. package/dist/index.js +115 -112
  261. package/dist/kaeso.css +20 -7
  262. package/dist/styles.css +1 -1
  263. package/dist/types/components/charts/bar.d.ts +6 -0
  264. package/dist/types/components/charts/core.d.ts +2 -2
  265. package/dist/types/components/charts/docs.d.ts +7 -0
  266. package/dist/types/components/charts/time-axis.d.ts +5 -0
  267. package/dist/types/components/charts/timeseries.d.ts +9 -0
  268. package/dist/types/components/code-block/highlighter.d.ts +2 -0
  269. package/dist/types/components/combobox/combobox.d.ts +2 -0
  270. package/dist/types/components/combobox/docs.d.ts +2 -4
  271. package/dist/types/components/command-list/command-list.d.ts +84 -0
  272. package/dist/types/components/command-list/docs.d.ts +52 -0
  273. package/dist/types/components/command-list/index.d.ts +3 -0
  274. package/dist/types/components/command-list/match.d.ts +1 -0
  275. package/dist/types/components/command-list/picker-popover.d.ts +44 -0
  276. package/dist/types/components/data-table/data-table.d.ts +3 -2
  277. package/dist/types/components/data-table/docs.d.ts +1 -0
  278. package/dist/types/components/date-picker/docs.d.ts +0 -6
  279. package/dist/types/components/dialog/dialog.d.ts +24 -0
  280. package/dist/types/components/dialog/docs.d.ts +4 -0
  281. package/dist/types/components/display-options/display-options.d.ts +1 -0
  282. package/dist/types/components/filter-chip/docs.d.ts +4 -0
  283. package/dist/types/components/filter-chip/filter-chip.d.ts +7 -0
  284. package/dist/types/components/input/docs.d.ts +2 -12
  285. package/dist/types/components/input/number-input.d.ts +1 -0
  286. package/dist/types/components/input/tag-input.d.ts +1 -0
  287. package/dist/types/components/kaeso/docs.d.ts +34 -0
  288. package/dist/types/components/kaeso/identity.d.ts +10 -1
  289. package/dist/types/components/kaeso/index.d.ts +1 -0
  290. package/dist/types/components/kaeso/provider-marks.d.ts +5 -1
  291. package/dist/types/components/kaeso/provider-picker.d.ts +42 -0
  292. package/dist/types/components/list/docs.d.ts +2 -0
  293. package/dist/types/components/list/list.d.ts +2 -0
  294. package/dist/types/components/menu/styles.d.ts +1 -1
  295. package/dist/types/components/playground/docs.d.ts +32 -0
  296. package/dist/types/components/playground/index.d.ts +1 -0
  297. package/dist/types/components/playground/model-picker.d.ts +39 -4
  298. package/dist/types/components/playground/reasoning.d.ts +29 -0
  299. package/dist/types/components/playground/response-view.d.ts +7 -1
  300. package/dist/types/components/release-art/docs.d.ts +1 -0
  301. package/dist/types/components/release-art/release-art.d.ts +1 -0
  302. package/dist/types/components/select/docs.d.ts +0 -2
  303. package/dist/types/components/select/option-checkbox.d.ts +1 -0
  304. package/dist/types/components/sidebar/sidebar.d.ts +1 -0
  305. package/dist/types/components/stat/docs.d.ts +1 -0
  306. package/dist/types/components/stat/stat.d.ts +1 -0
  307. package/dist/types/format/index.d.ts +6 -0
  308. package/dist/types/index.d.ts +1 -0
  309. package/dist/types/utils/index.d.ts +1 -1
  310. package/dist/types/utils/inset.d.ts +5 -0
  311. package/dist/types/utils/over-sheet.d.ts +1 -0
  312. package/dist/types/utils/restore-focus.d.ts +1 -1
  313. package/dist/utils.js +4 -4
  314. package/foundations/layout.md +45 -0
  315. package/foundations/writing.md +1 -0
  316. package/package.json +2 -2
  317. package/dist/chunks/app-frame-BXh-06HL.js +0 -214
  318. package/dist/chunks/app-frame-BXh-06HL.js.map +0 -1
  319. package/dist/chunks/cn-CidVUKMm.js.map +0 -1
  320. package/dist/chunks/code-block-DxtladFW.js.map +0 -1
  321. package/dist/chunks/collapsible-Cw_1aem5.js.map +0 -1
  322. package/dist/chunks/combobox-D30Wt11R.js +0 -291
  323. package/dist/chunks/combobox-D30Wt11R.js.map +0 -1
  324. package/dist/chunks/core-K960A4OT.js.map +0 -1
  325. package/dist/chunks/de-CTAo4KL7.js.map +0 -1
  326. package/dist/chunks/dialog-LNKgPEsV.js +0 -319
  327. package/dist/chunks/dialog-LNKgPEsV.js.map +0 -1
  328. package/dist/chunks/field-d8V94bvZ.js.map +0 -1
  329. package/dist/chunks/field-press-DwzBFafd.js +0 -10
  330. package/dist/chunks/field-press-DwzBFafd.js.map +0 -1
  331. package/dist/chunks/identity-BtZC_d_Q.js +0 -342
  332. package/dist/chunks/identity-BtZC_d_Q.js.map +0 -1
  333. package/dist/chunks/input-group-CYA1MEoZ.js.map +0 -1
  334. package/dist/chunks/inset-BLMdxX4I.js.map +0 -1
  335. package/dist/chunks/list-CzaiyNja.js +0 -483
  336. package/dist/chunks/list-CzaiyNja.js.map +0 -1
  337. package/dist/chunks/nav-sheet-BIErlV74.js +0 -58
  338. package/dist/chunks/nav-sheet-BIErlV74.js.map +0 -1
  339. package/dist/chunks/range-popup-DGOnGGag.js +0 -111
  340. package/dist/chunks/range-popup-DGOnGGag.js.map +0 -1
  341. package/dist/chunks/release-art-DEc9HNa6.js.map +0 -1
  342. package/dist/chunks/resize-motion-CMaidkwe.js.map +0 -1
  343. package/dist/chunks/rights-BbiJ0AJB.js.map +0 -1
  344. package/dist/chunks/select-Bc4kRiSG.js.map +0 -1
  345. package/dist/chunks/sidebar-5IA18LuP.js.map +0 -1
  346. package/dist/chunks/textarea-Cj8iR82R.js.map +0 -1
  347. package/dist/chunks/virtual-rows-BZe49bKi.js.map +0 -1
  348. package/dist/chunks/zh-CN-C7GmVswt.js.map +0 -1
  349. package/dist/components/charts/timeseries.js.map +0 -1
@@ -0,0 +1,42 @@
1
+ import { type ReactNode } from "react";
2
+ import { type CommandListGroup } from "../command-list/command-list.js";
3
+ import { type FieldWrapProps } from "../field/field.js";
4
+ export declare const KAESO_PROVIDER_PICKER_VARIANTS: {
5
+ readonly appearance: {
6
+ readonly list: {
7
+ readonly classes: "";
8
+ readonly description: "A search field over every provider, always open: a dialog step (default)";
9
+ };
10
+ readonly select: {
11
+ readonly classes: "";
12
+ readonly description: "A pill that opens the searchable list: forms and toolbars";
13
+ };
14
+ };
15
+ };
16
+ export declare const KAESO_PROVIDER_PICKER_DEFAULT_VARIANTS: {
17
+ readonly appearance: "list";
18
+ };
19
+ export interface ProviderPickerOption {
20
+ id: string;
21
+ name?: string | undefined;
22
+ connected?: boolean | undefined;
23
+ hint?: ReactNode | undefined;
24
+ keywords?: readonly string[] | undefined;
25
+ disabled?: boolean | undefined;
26
+ }
27
+ export interface ProviderPickerProps extends FieldWrapProps {
28
+ providers: ProviderPickerOption[];
29
+ value?: string | null | undefined;
30
+ onValueChange?: ((id: string | null) => void) | undefined;
31
+ appearance?: keyof typeof KAESO_PROVIDER_PICKER_VARIANTS.appearance | undefined;
32
+ allLabel?: string | undefined;
33
+ placeholder?: string | undefined;
34
+ size?: "sm" | "md" | undefined;
35
+ disabled?: boolean | undefined;
36
+ autoFocus?: boolean | undefined;
37
+ "aria-label"?: string | undefined;
38
+ className?: string | undefined;
39
+ "data-force"?: string | undefined;
40
+ }
41
+ export declare function useProviderGroups(providers: ProviderPickerOption[], allLabel?: string | undefined): CommandListGroup[];
42
+ export declare const ProviderPicker: import("react").ForwardRefExoticComponent<ProviderPickerProps & import("react").RefAttributes<HTMLElement>>;
@@ -33,6 +33,7 @@ export declare const docs: {
33
33
  selected: string;
34
34
  selectionActions: string;
35
35
  selectionBar: string;
36
+ wrapSubtitle: string;
36
37
  virtualizeAbove: string;
37
38
  };
38
39
  };
@@ -53,6 +54,7 @@ export declare const docs: {
53
54
  selectable: string;
54
55
  selected: string;
55
56
  selecting: string;
57
+ wrapSubtitle: string;
56
58
  };
57
59
  };
58
60
  SelectionAction: {
@@ -49,6 +49,7 @@ export interface ListProps {
49
49
  onSelectedChange?: ((selected: Set<string>) => void) | undefined;
50
50
  idWidth?: 48 | 64 | 80 | 96 | 120 | undefined;
51
51
  density?: keyof typeof KAESO_LIST_VARIANTS.density | undefined;
52
+ wrapSubtitle?: boolean | undefined;
52
53
  virtualizeAbove?: number | undefined;
53
54
  selectionActions?: ReactNode | undefined;
54
55
  selectionBar?: boolean | undefined;
@@ -73,6 +74,7 @@ export interface ListRowProps {
73
74
  lastChild?: boolean | undefined;
74
75
  idWidth?: keyof typeof ID_W | undefined;
75
76
  density?: keyof typeof KAESO_LIST_VARIANTS.density | undefined;
77
+ wrapSubtitle?: boolean | undefined;
76
78
  narrow?: boolean | undefined;
77
79
  active?: boolean | undefined;
78
80
  selected?: boolean | undefined;
@@ -4,4 +4,4 @@ export declare const MENU_ICON = "text-fg-secondary group-data-highlighted/item:
4
4
  export declare const MENU_DANGER = "text-danger-text highlighted:bg-danger-tint";
5
5
  export declare const MENU_LABEL = "flex h-28 items-center px-10 text-caption font-medium text-fg-secondary";
6
6
  export declare const MENU_SEPARATOR = "mx-10 my-4 h-1 shrink-0 bg-line-subtle";
7
- export declare const MENU_HINT = "ml-auto flex shrink-0 items-center gap-4 pl-16 text-caption font-medium text-fg-tertiary tabular";
7
+ export declare const MENU_HINT = "ml-auto flex shrink-0 items-center gap-4 pl-16 text-caption font-medium text-fg-tertiary tabular group-data-highlighted/item:text-fg-secondary";
@@ -39,17 +39,33 @@ export declare const docs: {
39
39
  ModelPicker: {
40
40
  description: string;
41
41
  props: {
42
+ description: string;
43
+ label: string;
44
+ layout: string;
45
+ optional: string;
46
+ required: string;
47
+ allLabel: string;
42
48
  appearance: string;
43
49
  "aria-label": string;
44
50
  defaultValue: string;
45
51
  disabled: string;
52
+ fullWidth: string;
46
53
  groupByProvider: string;
54
+ invalid: string;
55
+ multiple: string;
56
+ onOpenChange: string;
47
57
  onValueChange: string;
58
+ open: string;
48
59
  options: string;
49
60
  placeholder: string;
61
+ providers: string;
62
+ recent: string;
50
63
  size: string;
51
64
  value: string;
52
65
  };
66
+ deprecated: {
67
+ error: string;
68
+ };
53
69
  };
54
70
  ParameterPanel: {
55
71
  description: string;
@@ -94,6 +110,20 @@ export declare const docs: {
94
110
  suggestions: string;
95
111
  };
96
112
  };
113
+ Reasoning: {
114
+ description: string;
115
+ props: {
116
+ children: string;
117
+ defaultOpen: string;
118
+ duration: string;
119
+ hint: string;
120
+ live: string;
121
+ onOpenChange: string;
122
+ open: string;
123
+ text: string;
124
+ title: string;
125
+ };
126
+ };
97
127
  ResponseMetrics: {
98
128
  description: string;
99
129
  props: {
@@ -114,7 +144,9 @@ export declare const docs: {
114
144
  props: {
115
145
  "aria-label": string;
116
146
  defaultReasoningOpen: string;
147
+ error: string;
117
148
  footer: string;
149
+ incompleteReason: string;
118
150
  onReasoningOpenChange: string;
119
151
  onRetry: string;
120
152
  reasoning: string;
@@ -1,6 +1,7 @@
1
1
  export * from "./composer.js";
2
2
  export * from "./compare-grid.js";
3
3
  export * from "./response-view.js";
4
+ export * from "./reasoning.js";
4
5
  export * from "./response-metrics.js";
5
6
  export * from "./parameter-panel.js";
6
7
  export * from "./model-picker.js";
@@ -1,3 +1,6 @@
1
+ import { type CommandListGroup } from "../command-list/command-list.js";
2
+ import { type FieldWrapProps } from "../field/field.js";
3
+ import { type Capability } from "../kaeso/identity.js";
1
4
  export declare const KAESO_MODEL_PICKER_VARIANTS: {
2
5
  readonly appearance: {
3
6
  readonly ghost: {
@@ -18,20 +21,52 @@ export interface ModelPickerOption {
18
21
  provider: string;
19
22
  model?: string | undefined;
20
23
  name?: string | undefined;
24
+ capabilities?: Capability[] | undefined;
25
+ context?: number | undefined;
26
+ price?: string | undefined;
27
+ note?: string | undefined;
28
+ deprecated?: boolean | undefined;
21
29
  disabled?: boolean | undefined;
22
30
  }
23
- export interface ModelPickerProps {
31
+ export interface ModelPickerProvider {
32
+ id: string;
33
+ name?: string | undefined;
34
+ connected?: boolean | undefined;
35
+ }
36
+ interface BaseProps extends FieldWrapProps {
24
37
  options: ModelPickerOption[];
25
- value?: string | null | undefined;
26
- defaultValue?: string | null | undefined;
27
- onValueChange?: ((value: string) => void) | undefined;
38
+ providers?: ModelPickerProvider[] | undefined;
39
+ recent?: readonly string[] | undefined;
28
40
  groupByProvider?: boolean | undefined;
29
41
  placeholder?: string | undefined;
30
42
  "aria-label"?: string | undefined;
31
43
  appearance?: keyof typeof KAESO_MODEL_PICKER_VARIANTS.appearance | undefined;
32
44
  size?: "sm" | "md" | undefined;
45
+ fullWidth?: boolean | undefined;
33
46
  disabled?: boolean | undefined;
47
+ invalid?: boolean | undefined;
48
+ open?: boolean | undefined;
49
+ onOpenChange?: ((open: boolean) => void) | undefined;
34
50
  "data-force"?: string | undefined;
35
51
  className?: string | undefined;
36
52
  }
53
+ export interface SingleModelPickerProps extends BaseProps {
54
+ multiple?: false | undefined;
55
+ allLabel?: string | undefined;
56
+ value?: string | null | undefined;
57
+ defaultValue?: string | null | undefined;
58
+ onValueChange?: ((value: string) => void) | undefined;
59
+ }
60
+ export interface MultiModelPickerProps extends BaseProps {
61
+ multiple: true;
62
+ value?: string[] | undefined;
63
+ defaultValue?: string[] | undefined;
64
+ onValueChange?: ((value: string[]) => void) | undefined;
65
+ }
66
+ export type ModelPickerProps = SingleModelPickerProps | MultiModelPickerProps;
67
+ export declare function useModelGroups(options: ModelPickerOption[], { providers, groupByProvider }?: {
68
+ providers?: ModelPickerProvider[] | undefined;
69
+ groupByProvider?: boolean | undefined;
70
+ }): CommandListGroup[];
37
71
  export declare const ModelPicker: import("react").ForwardRefExoticComponent<ModelPickerProps & import("react").RefAttributes<HTMLButtonElement>>;
72
+ export {};
@@ -0,0 +1,29 @@
1
+ import { type ReactNode } from "react";
2
+ export declare const KAESO_REASONING_VARIANTS: {
3
+ readonly state: {
4
+ readonly done: {
5
+ readonly classes: "";
6
+ readonly description: "Finished: “Thought for 4.2 s”, closed until opened (default)";
7
+ };
8
+ readonly live: {
9
+ readonly classes: "";
10
+ readonly description: "Still reasoning: “Thinking” pulses quietly and the latest line shows beside it";
11
+ };
12
+ };
13
+ };
14
+ export declare const KAESO_REASONING_DEFAULT_VARIANTS: {
15
+ readonly state: "done";
16
+ };
17
+ export interface ReasoningProps {
18
+ text?: string | undefined;
19
+ live?: boolean | undefined;
20
+ duration?: number | undefined;
21
+ title?: ReactNode | undefined;
22
+ hint?: ReactNode | undefined;
23
+ open?: boolean | undefined;
24
+ defaultOpen?: boolean | undefined;
25
+ onOpenChange?: ((open: boolean) => void) | undefined;
26
+ children?: ReactNode | undefined;
27
+ className?: string | undefined;
28
+ }
29
+ export declare const Reasoning: import("react").ForwardRefExoticComponent<ReasoningProps & import("react").RefAttributes<HTMLDivElement>>;
@@ -17,9 +17,13 @@ export declare const KAESO_RESPONSE_VIEW_VARIANTS: {
17
17
  readonly classes: "";
18
18
  readonly description: "Stopped by the person: the text so far and “Stopped”";
19
19
  };
20
+ readonly incomplete: {
21
+ readonly classes: "";
22
+ readonly description: "Cut off by the model: the text so far and why, such as “Stopped at the output limit”";
23
+ };
20
24
  readonly error: {
21
25
  readonly classes: "";
22
- readonly description: "Failed: “No response” and Retry. The error itself is a toast";
26
+ readonly description: "Failed: the error in place of the response, and Retry";
23
27
  };
24
28
  };
25
29
  };
@@ -35,6 +39,8 @@ export interface ResponseViewProps {
35
39
  reasoningOpen?: boolean | undefined;
36
40
  defaultReasoningOpen?: boolean | undefined;
37
41
  onReasoningOpenChange?: ((open: boolean) => void) | undefined;
42
+ incompleteReason?: string | undefined;
43
+ error?: string | undefined;
38
44
  onRetry?: (() => void) | undefined;
39
45
  footer?: ReactNode | undefined;
40
46
  "aria-label"?: string | undefined;
@@ -4,6 +4,7 @@ export declare const docs: {
4
4
  props: {
5
5
  seed: string;
6
6
  art: string;
7
+ src: string;
7
8
  label: string;
8
9
  title: string;
9
10
  eyebrow: string;
@@ -20,6 +20,7 @@ export interface ReleaseArtProps {
20
20
  seed: string;
21
21
  label: string;
22
22
  art?: ReleaseArtSpec | undefined;
23
+ src?: string | undefined;
23
24
  title?: ReactNode | undefined;
24
25
  eyebrow?: ReactNode | undefined;
25
26
  shape?: keyof typeof KAESO_RELEASE_ART_VARIANTS.shape | undefined;
@@ -24,8 +24,6 @@ export declare const docs: {
24
24
  required: string;
25
25
  size: string;
26
26
  value: string;
27
- };
28
- deprecated: {
29
27
  error: string;
30
28
  };
31
29
  };
@@ -0,0 +1 @@
1
+ export declare function OptionCheckbox(): import("react/jsx-runtime").JSX.Element;
@@ -47,6 +47,7 @@ interface SidebarCtx {
47
47
  setPeeking: (v: boolean) => void;
48
48
  width: number;
49
49
  setWidth: (v: number) => void;
50
+ previewWidth: (v: number | null) => void;
50
51
  storageKey: string | undefined;
51
52
  }
52
53
  export declare const useSidebar: () => SidebarCtx;
@@ -27,6 +27,7 @@ export declare const docs: {
27
27
  change: string;
28
28
  detail: string;
29
29
  label: string;
30
+ loading: string;
30
31
  trend: string;
31
32
  trendColor: string;
32
33
  value: string;
@@ -39,6 +39,7 @@ export interface StatTileProps {
39
39
  detail?: ReactNode | undefined;
40
40
  trend?: number[] | undefined;
41
41
  trendColor?: string | undefined;
42
+ loading?: boolean | undefined;
42
43
  className?: string | undefined;
43
44
  }
44
45
  export declare const STAT_VALUE_STEPS: readonly [{
@@ -4,16 +4,22 @@ export declare function setFormatTimeZone(timeZone: string | undefined): void;
4
4
  export declare function formatTimeZone(): string | undefined;
5
5
  export declare function formatNumber(value: number, options?: Intl.NumberFormatOptions): string;
6
6
  export declare function formatTokens(value: number): string;
7
+ /** A model's context or output limit as models are named: a multiple of 1,024 in binary thousands ("128K" for 131,072, "1M" for 1,048,576), anything else in decimal ones ("128K" for 128,000, "200K"). */
8
+ export declare function formatContext(tokens: number): string;
7
9
  export declare function formatBytes(bytes: number): string;
8
10
  export declare function formatPercent(ratio: number, digits?: number): string;
9
11
  export declare function formatUSD(amount: string, options?: {
10
12
  significant?: number;
11
13
  decimals?: number;
12
14
  }): string;
15
+ /** A price per million tokens, exactly as set: at least two decimals and up to six ("$0.075", "$4.00", "$1.25"). */
16
+ export declare function formatPrice(amount: string): string;
13
17
  export declare function formatDuration(ms: number, options?: {
14
18
  precise?: boolean | undefined;
15
19
  }): string;
16
20
  type DateInput = Date | string | number;
21
+ /** A cached date formatter in the format locale. English writes the day first with three-letter months ("20 Sep 2026", "Mon 21 Sep"), the console's English everywhere. */
22
+ export declare function dateFormatter(options: Intl.DateTimeFormatOptions, locale?: string): (value: DateInput) => string;
17
23
  export declare function formatDate(value: DateInput, options?: {
18
24
  time?: boolean;
19
25
  utc?: boolean;
@@ -50,6 +50,7 @@ export * from "./components/display-options/index.js";
50
50
  export * from "./components/dialog/index.js";
51
51
  export * from "./components/sheet/index.js";
52
52
  export * from "./components/command-palette/index.js";
53
+ export * from "./components/command-list/index.js";
53
54
  export * from "./components/toast/index.js";
54
55
  export * from "./components/pagination/index.js";
55
56
  export * from "./components/toc/index.js";
@@ -4,5 +4,5 @@ export { devWarn, warnStylingClassName, warnMissingName, warnControlled } from "
4
4
  export { LinkProvider, useLinkComponent, isExternalHref, type LinkComponent, type LinkComponentProps } from "./link-provider.js";
5
5
  export { useControllable } from "./use-controllable.js";
6
6
  export { PortalContainer, usePortalContainer, pageBoundary } from "./portal-context.js";
7
- export { InsetContent, useInset } from "./inset.js";
7
+ export { GutterContent, InsetContent, useGutterPadded, useInset } from "./inset.js";
8
8
  export type { StatusTone } from "./tone.js";
@@ -4,3 +4,8 @@ export declare function InsetContent({ children, inset }: {
4
4
  inset?: boolean | undefined;
5
5
  }): import("react/jsx-runtime").JSX.Element;
6
6
  export declare function useInset(): boolean;
7
+ export declare function GutterContent({ children, padded }: {
8
+ children: ReactNode;
9
+ padded?: boolean | undefined;
10
+ }): import("react/jsx-runtime").JSX.Element;
11
+ export declare function useGutterPadded(): boolean;
@@ -0,0 +1 @@
1
+ export declare const OverNonModalSheet: import("react").Context<boolean>;
@@ -1,4 +1,4 @@
1
1
  export declare function useRestoreFocus(open: boolean | undefined, first?: () => HTMLElement | boolean): {
2
2
  initialFocus: () => boolean | HTMLElement;
3
- finalFocus: () => true | HTMLElement;
3
+ finalFocus: () => boolean | HTMLElement;
4
4
  };
package/dist/utils.js CHANGED
@@ -1,9 +1,9 @@
1
1
  "use client";
2
- import { t as e } from "./chunks/cn-CidVUKMm.js";
2
+ import { t as e } from "./chunks/cn-DUDmdLpZ.js";
3
3
  import { t } from "./chunks/utils-CdH72WEp.js";
4
4
  import { i as n, n as r, r as i, t as a } from "./chunks/dev-CR1p7gCm.js";
5
- import { n as o, r as s, t as c } from "./chunks/link-provider---9JdxTg.js";
5
+ import { n as o, r as s, t as c } from "./chunks/link-provider-BsUxhZKG.js";
6
6
  import { t as l } from "./chunks/use-controllable-B5Fd12Bx.js";
7
7
  import { n as u, r as d, t as f } from "./chunks/portal-context-BBbzDKmY.js";
8
- import { n as p, t as m } from "./chunks/inset-BLMdxX4I.js";
9
- export { m as InsetContent, c as LinkProvider, f as PortalContainer, e as cn, a as devWarn, o as isExternalHref, u as pageBoundary, t as resolveVariant, l as useControllable, p as useInset, s as useLinkComponent, d as usePortalContainer, r as warnControlled, i as warnMissingName, n as warnStylingClassName };
8
+ import { i as p, n as m, r as h, t as g } from "./chunks/inset-BnBj8NJV.js";
9
+ export { g as GutterContent, m as InsetContent, c as LinkProvider, f as PortalContainer, e as cn, a as devWarn, o as isExternalHref, u as pageBoundary, t as resolveVariant, l as useControllable, h as useGutterPadded, p as useInset, s as useLinkComponent, d as usePortalContainer, r as warnControlled, i as warnMissingName, n as warnStylingClassName };
@@ -0,0 +1,45 @@
1
+ # Layout
2
+
3
+ One edge per page. The components bring their own insets, so a page composed of them lines up without a margin of its own. Values: `../ai/tokens.md`.
4
+
5
+ ## The gutter
6
+
7
+ | Where | Gutter |
8
+ | --------------------------------------------- | ---------------------------------------------------------------------------------------- |
9
+ | The content panel, at every width | 24px: page header, toolbar, page body, lists, tables, dialogs, sheets and the phone bar |
10
+ | The sidebar | 16px; its items pad their content 12px, so icons and the wordmark sit 28px in |
11
+ | Settings groups, inset lists and inset tables | 20px inside the group |
12
+ | Menus, selects and the command palette | Their own inset (6px), with rows padded 10px; a popup is a surface, not part of the page |
13
+
14
+ ## Boxes sit on the gutter
15
+
16
+ Every box starts and ends on the gutter. A box is anything whose edge you can see, at rest or under the pointer: a button, an input, a chip, a segmented track, a pill tab (the selected one is filled), the hover and selected fill of a list row or a table row, the hover fill of a group header or a disclosure, a settings group. Nothing bleeds into the gutter: it stays empty at every width, no fill touches the panel's edge, and no focus ring is cut off by a scroller.
17
+
18
+ Text inside a box is padded by the box: 12px in list rows, table cells, pill tabs, chips, group headers and disclosures. A page so has two vertical lines and no others:
19
+
20
+ - **The gutter**, where every box and every piece of plain text starts: the page title, headings, labels, descriptions, chart axes.
21
+ - **The gutter plus 12px**, where the text inside boxes starts: a row's title, a tab's label, a column's values.
22
+
23
+ A surface that already pads its content by the gutter, such as a dialog, a sheet, a content page (`AppFrame.Body padding="page"`) or a settings column, is the gutter: a list or a table inside it puts its rows on that padding instead of adding 24px of its own.
24
+
25
+ The same holds at the right edge: the last box ends on the gutter, the last column's text 12px inside it.
26
+
27
+ ## Exceptions
28
+
29
+ - **Text in running text.** A link or an inline copyable value inside a sentence keeps its 2 to 4px of hit padding around the text. It is part of the line, not a box.
30
+ - **Controls inside a box on the gutter.** Inside a box that already sits on the gutter, such as a table's header cell, a settings group's header or a banner, a control may use that box's own padding and keep its label on the box's text line: a column's sort button keeps its label on the column's edge.
31
+ - **Pane dividers.** Hairlines that split the panel into panes, such as the playground's columns, run from edge to edge; each pane keeps the 24px gutter inside it.
32
+ - **The wordmark** sits 28px in and 28px down in the sidebar and on sign-in screens, on the sidebar's content line. On the phone bar it sits on the page's 24px gutter, and on a sign-in screen narrower than 640px on the form's 16px gutter, like everything under it.
33
+
34
+ ## Vertical rhythm
35
+
36
+ - The page header is 52px and the toolbar under it 48px; neither draws a line.
37
+ - A list or table starts 8px under the toolbar (`AppFrame.Body padding="list"`); a content page 16px under the header (`padding="page"`).
38
+ - List rows are 44px (36px compact, 56px with a second line); table rows 40px; group headers 36px, with 16px above every one after the first.
39
+ - A row's height never depends on its content: badges, pills and avatars fit inside it.
40
+
41
+ ## Numbers and truncation
42
+
43
+ - Numeric columns are right-aligned and use tabular figures, so digits line up from row to row.
44
+ - A column is wide enough for its header in every language, and for the values people compare: a provider's name, a status, a cost. Truncate only what is long by nature (ids, messages, user agents), and show the whole value on hover.
45
+ - On a phone, drop columns before truncating the ones that stay.
@@ -9,6 +9,7 @@ Clear enough to act on, exact enough to trust, and calm enough to stay out of th
9
9
  - **No exclamation points, no emoji**, no jokes, no congratulations.
10
10
  - **Errors say what did not happen and what to do next**: "Couldn't reach the provider. Check the provider key, then try again."
11
11
  - **Name the object**: "Key copied", not "Copied to clipboard".
12
+ - **Toasts are one sentence.** A confirmation, a warning or progress reads as a phrase without a final period: "Key revoked", "Password changed; sign in with the new one". An error ends with a period, like the gateway's messages: "The email or password is wrong."
12
13
  - **Use Kaeso's terms**: key, provider key, project, organization, model, alias, limit, budget, request log.
13
14
  - **Realistic data in examples**, never lorem ipsum.
14
15
  - **Straight apostrophes** in English: "Couldn't load these rows", "the key's name", never `’`.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@logicplanes/kaeso-ui",
3
- "version": "0.2.2",
3
+ "version": "0.3.1",
4
4
  "description": "Kaeso's UI library: React components on Base UI, Tailwind CSS v4 and the Kaeso tokens.",
5
5
  "license": "MIT",
6
6
  "author": "Devin Oldenburg",
@@ -102,7 +102,7 @@
102
102
  "shiki": "4.4.3",
103
103
  "tailwind-merge": "3.7.0",
104
104
  "uqr": "0.1.3",
105
- "@logicplanes/kaeso-tokens": "0.2.2"
105
+ "@logicplanes/kaeso-tokens": "0.3.1"
106
106
  },
107
107
  "devDependencies": {
108
108
  "@hugeicons/core-free-icons": "4.3.5",