@logicplanes/kaeso-ui 0.4.2 → 0.4.3

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 (272) hide show
  1. package/NOTICE.md +1 -1
  2. package/ai/component-guides.md +283 -21
  3. package/ai/component-registry.json +528 -25
  4. package/ai/component-registry.md +135 -25
  5. package/ai/icons.md +3 -3
  6. package/ai/tokens.md +1 -1
  7. package/dist/blocks/delete-resource.js +15 -14
  8. package/dist/blocks/delete-resource.js.map +1 -1
  9. package/dist/blocks/pages.js +2 -2
  10. package/dist/blocks/resource-list.js +41 -40
  11. package/dist/blocks/resource-list.js.map +1 -1
  12. package/dist/chunks/agent-avatar-0pdBTWkR.js +171 -0
  13. package/dist/chunks/agent-avatar-0pdBTWkR.js.map +1 -0
  14. package/dist/chunks/{app-frame-C8csevkL.js → app-frame-DogGRmsu.js} +22 -21
  15. package/dist/chunks/app-frame-DogGRmsu.js.map +1 -0
  16. package/dist/chunks/{banner-Cb8OWnqJ.js → banner-BA2ALw9M.js} +2 -2
  17. package/dist/chunks/{banner-Cb8OWnqJ.js.map → banner-BA2ALw9M.js.map} +1 -1
  18. package/dist/chunks/{button-Dzu7_csE.js → button-CzuxqawA.js} +3 -3
  19. package/dist/chunks/{button-Dzu7_csE.js.map → button-CzuxqawA.js.map} +1 -1
  20. package/dist/chunks/{calendar--YemJsv4.js → calendar-BWaf2MXc.js} +57 -41
  21. package/dist/chunks/calendar-BWaf2MXc.js.map +1 -0
  22. package/dist/chunks/{checkbox-CDfC6E-M.js → checkbox-CQjwCPkc.js} +11 -9
  23. package/dist/chunks/checkbox-CQjwCPkc.js.map +1 -0
  24. package/dist/chunks/{code-block-U5fCqwgC.js → code-block-D5A-CGXG.js} +2 -2
  25. package/dist/chunks/{code-block-U5fCqwgC.js.map → code-block-D5A-CGXG.js.map} +1 -1
  26. package/dist/chunks/combobox-DjDI7SUC.js +319 -0
  27. package/dist/chunks/combobox-DjDI7SUC.js.map +1 -0
  28. package/dist/chunks/{command-list-0RR4DpUe.js → command-list-C2Y7V_lt.js} +2 -2
  29. package/dist/chunks/{command-list-0RR4DpUe.js.map → command-list-C2Y7V_lt.js.map} +1 -1
  30. package/dist/chunks/{copy-button-7-irieJw.js → copy-button-FJvPJn72.js} +3 -3
  31. package/dist/chunks/{copy-button-7-irieJw.js.map → copy-button-FJvPJn72.js.map} +1 -1
  32. package/dist/chunks/{core-Bl9NrBLS.js → core-BYns5ytV.js} +145 -139
  33. package/dist/chunks/core-BYns5ytV.js.map +1 -0
  34. package/dist/chunks/{date-popup-RQkqhko4.js → date-popup-CPA_zt6o.js} +4 -4
  35. package/dist/chunks/{date-popup-RQkqhko4.js.map → date-popup-CPA_zt6o.js.map} +1 -1
  36. package/dist/chunks/{de-BnNQtBSV.js → de-CPXJh9cq.js} +3 -1
  37. package/dist/chunks/de-CPXJh9cq.js.map +1 -0
  38. package/dist/chunks/dialog-Cg9A_6SF.js +383 -0
  39. package/dist/chunks/dialog-Cg9A_6SF.js.map +1 -0
  40. package/dist/chunks/icon-DVooQfk4.js +94 -0
  41. package/dist/chunks/icon-DVooQfk4.js.map +1 -0
  42. package/dist/chunks/{icon-button-CPYR21Sz.js → icon-button-CrdF_eMG.js} +3 -3
  43. package/dist/chunks/{icon-button-CPYR21Sz.js.map → icon-button-CrdF_eMG.js.map} +1 -1
  44. package/dist/chunks/{identity-DPuTkMsa.js → identity-BmhQ6BQ-.js} +15 -15
  45. package/dist/chunks/identity-BmhQ6BQ-.js.map +1 -0
  46. package/dist/chunks/{input-TyLIaQ5k.js → input-2VJuj_M4.js} +10 -5
  47. package/dist/chunks/input-2VJuj_M4.js.map +1 -0
  48. package/dist/chunks/{input-group-CUSNsQjQ.js → input-group-DQ_4DoXg.js} +2 -2
  49. package/dist/chunks/{input-group-CUSNsQjQ.js.map → input-group-DQ_4DoXg.js.map} +1 -1
  50. package/dist/chunks/{inset-BnBj8NJV.js → inset-BUzyXLK4.js} +14 -4
  51. package/dist/chunks/inset-BUzyXLK4.js.map +1 -0
  52. package/dist/chunks/{iso-field-CWbxlll-.js → iso-field-B2rTwiBo.js} +2 -2
  53. package/dist/chunks/{iso-field-CWbxlll-.js.map → iso-field-B2rTwiBo.js.map} +1 -1
  54. package/dist/chunks/{link-B2I55xg9.js → link-KWI7PevW.js} +2 -2
  55. package/dist/chunks/{link-B2I55xg9.js.map → link-KWI7PevW.js.map} +1 -1
  56. package/dist/chunks/link-provider-cvl8lSTT.js +29 -0
  57. package/dist/chunks/link-provider-cvl8lSTT.js.map +1 -0
  58. package/dist/chunks/{list-CkOozrVY.js → list-M1csq-d4.js} +18 -16
  59. package/dist/chunks/{list-CkOozrVY.js.map → list-M1csq-d4.js.map} +1 -1
  60. package/dist/chunks/{markdown-BEgwZFlu.js → markdown-DULktoTK.js} +5 -5
  61. package/dist/chunks/{markdown-BEgwZFlu.js.map → markdown-DULktoTK.js.map} +1 -1
  62. package/dist/chunks/{menu-fl_QQb38.js → menu-DEmBfdPm.js} +29 -26
  63. package/dist/chunks/menu-DEmBfdPm.js.map +1 -0
  64. package/dist/chunks/nav-sheet-CzgIwgAm.js +60 -0
  65. package/dist/chunks/nav-sheet-CzgIwgAm.js.map +1 -0
  66. package/dist/chunks/{page-header-DjUMDG69.js → page-header-DL2y2iZp.js} +2 -2
  67. package/dist/chunks/{page-header-DjUMDG69.js.map → page-header-DL2y2iZp.js.map} +1 -1
  68. package/dist/chunks/{pagination-BaY8jdli.js → pagination-Cn_qF4cg.js} +3 -3
  69. package/dist/chunks/{pagination-BaY8jdli.js.map → pagination-Cn_qF4cg.js.map} +1 -1
  70. package/dist/chunks/{picker-popover-DShea4b8.js → picker-popover-BxyU1U9F.js} +14 -13
  71. package/dist/chunks/{picker-popover-DShea4b8.js.map → picker-popover-BxyU1U9F.js.map} +1 -1
  72. package/dist/chunks/{popover-CFMwaeIP.js → popover-DNN4S47w.js} +2 -2
  73. package/dist/chunks/{popover-CFMwaeIP.js.map → popover-DNN4S47w.js.map} +1 -1
  74. package/dist/chunks/portal-context-BBbzDKmY.js.map +1 -1
  75. package/dist/chunks/{radio-Yl0nO-Sj.js → radio-CDDFpdtL.js} +4 -4
  76. package/dist/chunks/{radio-Yl0nO-Sj.js.map → radio-CDDFpdtL.js.map} +1 -1
  77. package/dist/chunks/{range-popup-CkhsK3wI.js → range-popup-CRyWYUB1.js} +5 -5
  78. package/dist/chunks/{range-popup-CkhsK3wI.js.map → range-popup-CRyWYUB1.js.map} +1 -1
  79. package/dist/chunks/{rights-BlQx9C_j.js → rights-Cyp0Pzp-.js} +5 -5
  80. package/dist/chunks/{rights-BlQx9C_j.js.map → rights-Cyp0Pzp-.js.map} +1 -1
  81. package/dist/chunks/{segmented-C97zvDR1.js → segmented-CErcoxwi.js} +2 -2
  82. package/dist/chunks/{segmented-C97zvDR1.js.map → segmented-CErcoxwi.js.map} +1 -1
  83. package/dist/chunks/{sidebar-DtFlejU7.js → sidebar-3r1ZRXlN.js} +253 -235
  84. package/dist/chunks/sidebar-3r1ZRXlN.js.map +1 -0
  85. package/dist/chunks/{sidebar-menu-CxQbGwyj.js → sidebar-menu-BN3jkTlK.js} +2 -2
  86. package/dist/chunks/{sidebar-menu-CxQbGwyj.js.map → sidebar-menu-BN3jkTlK.js.map} +1 -1
  87. package/dist/chunks/{switch-b-VkStWj.js → switch-BNMq_kGt.js} +2 -2
  88. package/dist/chunks/{switch-b-VkStWj.js.map → switch-BNMq_kGt.js.map} +1 -1
  89. package/dist/chunks/{tag-DNdX1XRR.js → tag-D_M1s2qS.js} +2 -2
  90. package/dist/chunks/{tag-DNdX1XRR.js.map → tag-D_M1s2qS.js.map} +1 -1
  91. package/dist/chunks/{text-DCGGNqTM.js → text-CIXH8rmT.js} +2 -2
  92. package/dist/chunks/{text-DCGGNqTM.js.map → text-CIXH8rmT.js.map} +1 -1
  93. package/dist/chunks/{textarea-CT2S2JVM.js → textarea--4FRL3Pb.js} +3 -3
  94. package/dist/chunks/{textarea-CT2S2JVM.js.map → textarea--4FRL3Pb.js.map} +1 -1
  95. package/dist/chunks/theme-provider-DJhORMlc.js.map +1 -1
  96. package/dist/chunks/{timeseries-B-8OfeZm.js → timeseries-D1xjRXfk.js} +2 -2
  97. package/dist/chunks/{timeseries-B-8OfeZm.js.map → timeseries-D1xjRXfk.js.map} +1 -1
  98. package/dist/chunks/{toolbar-DL6zVrzU.js → toolbar-WA_oZgu-.js} +5 -4
  99. package/dist/chunks/{toolbar-DL6zVrzU.js.map → toolbar-WA_oZgu-.js.map} +1 -1
  100. package/dist/chunks/tooltip-OcwO0VUT.js +154 -0
  101. package/dist/chunks/tooltip-OcwO0VUT.js.map +1 -0
  102. package/dist/chunks/{tooltip-root-BeAMXzxU.js → tooltip-root-DzahJDVj.js} +2 -2
  103. package/dist/chunks/{tooltip-root-BeAMXzxU.js.map → tooltip-root-DzahJDVj.js.map} +1 -1
  104. package/dist/chunks/{use-scroll-margin-DfdTc_5D.js → use-scroll-margin-atRtf0v_.js} +14 -10
  105. package/dist/chunks/use-scroll-margin-atRtf0v_.js.map +1 -0
  106. package/dist/chunks/{virtual-rows-yAMjeAwj.js → virtual-rows-CC_kc2PR.js} +2 -2
  107. package/dist/chunks/{virtual-rows-yAMjeAwj.js.map → virtual-rows-CC_kc2PR.js.map} +1 -1
  108. package/dist/chunks/{zh-CN-CKffAT7j.js → zh-CN-29X4CDLE.js} +3 -1
  109. package/dist/chunks/zh-CN-29X4CDLE.js.map +1 -0
  110. package/dist/components/agent-avatar.js +2 -0
  111. package/dist/components/app-frame.js +2 -2
  112. package/dist/components/banner.js +1 -1
  113. package/dist/components/button-group.js +2 -2
  114. package/dist/components/button.js +1 -1
  115. package/dist/components/calendar.js +1 -1
  116. package/dist/components/charts/bar.js +1 -1
  117. package/dist/components/charts/donut.js +1 -1
  118. package/dist/components/charts/gauge.js +1 -1
  119. package/dist/components/charts/sankey.js +1 -1
  120. package/dist/components/charts/timeseries.js +1 -1
  121. package/dist/components/charts.js +2 -2
  122. package/dist/components/checkbox.js +1 -1
  123. package/dist/components/code-block.js +1 -1
  124. package/dist/components/combobox.js +1 -1
  125. package/dist/components/command-list.js +2 -2
  126. package/dist/components/command-palette.js +85 -81
  127. package/dist/components/command-palette.js.map +1 -1
  128. package/dist/components/copy-button.js +1 -1
  129. package/dist/components/data-table.js +191 -187
  130. package/dist/components/data-table.js.map +1 -1
  131. package/dist/components/date-picker.js +6 -4
  132. package/dist/components/date-picker.js.map +1 -1
  133. package/dist/components/dialog.js +125 -91
  134. package/dist/components/dialog.js.map +1 -1
  135. package/dist/components/display-options.js +49 -46
  136. package/dist/components/display-options.js.map +1 -1
  137. package/dist/components/filter-chip.js +3 -3
  138. package/dist/components/filter-chip.js.map +1 -1
  139. package/dist/components/filter-row.js +1 -1
  140. package/dist/components/icon-button.js +1 -1
  141. package/dist/components/icon.js +1 -1
  142. package/dist/components/input.js +49 -49
  143. package/dist/components/input.js.map +1 -1
  144. package/dist/components/kaeso/conversation.js +3 -3
  145. package/dist/components/kaeso/identity.js +1 -1
  146. package/dist/components/kaeso/moments.js +3 -3
  147. package/dist/components/kaeso/rights.js +1 -1
  148. package/dist/components/kaeso/usage.js +8 -8
  149. package/dist/components/kaeso/usage.js.map +1 -1
  150. package/dist/components/kaeso.js +263 -95
  151. package/dist/components/kaeso.js.map +1 -1
  152. package/dist/components/key-value.js +2 -2
  153. package/dist/components/link.js +1 -1
  154. package/dist/components/list.js +1 -1
  155. package/dist/components/markdown.js +1 -1
  156. package/dist/components/menu.js +2 -2
  157. package/dist/components/page-header.js +1 -1
  158. package/dist/components/pagination.js +1 -1
  159. package/dist/components/playground.js +27 -26
  160. package/dist/components/playground.js.map +1 -1
  161. package/dist/components/popover.js +12 -11
  162. package/dist/components/popover.js.map +1 -1
  163. package/dist/components/radio.js +1 -1
  164. package/dist/components/segmented.js +1 -1
  165. package/dist/components/settings.js +8 -8
  166. package/dist/components/settings.js.map +1 -1
  167. package/dist/components/sheet.js +2 -2
  168. package/dist/components/sidebar.js +1 -1
  169. package/dist/components/switch.js +1 -1
  170. package/dist/components/tabs.js +22 -22
  171. package/dist/components/tabs.js.map +1 -1
  172. package/dist/components/tag.js +1 -1
  173. package/dist/components/text.js +1 -1
  174. package/dist/components/theme-menu.js +33 -30
  175. package/dist/components/theme-menu.js.map +1 -1
  176. package/dist/components/thumbnail.js +41 -0
  177. package/dist/components/thumbnail.js.map +1 -0
  178. package/dist/components/toast.js +96 -87
  179. package/dist/components/toast.js.map +1 -1
  180. package/dist/components/toolbar.js +1 -1
  181. package/dist/components/tooltip.js +1 -1
  182. package/dist/format.js.map +1 -1
  183. package/dist/i18n-provider.js +1 -1
  184. package/dist/index.js +89 -87
  185. package/dist/kaeso.css +3 -0
  186. package/dist/styles.css +1 -1
  187. package/dist/types/blocks/delete-resource/delete-resource.d.ts +2 -5
  188. package/dist/types/blocks/resource-list/resource-list.d.ts +1 -4
  189. package/dist/types/component-docs.d.ts +1 -1
  190. package/dist/types/components/agent-avatar/agent-avatar.d.ts +94 -0
  191. package/dist/types/components/agent-avatar/docs.d.ts +19 -0
  192. package/dist/types/components/agent-avatar/index.d.ts +3 -0
  193. package/dist/types/components/agent-avatar/model-name.d.ts +9 -0
  194. package/dist/types/components/agent-avatar/models.d.ts +4 -0
  195. package/dist/types/components/app-frame/app-frame.d.ts +3 -8
  196. package/dist/types/components/app-frame/nav-sheet.d.ts +2 -4
  197. package/dist/types/components/calendar/calendar.d.ts +1 -4
  198. package/dist/types/components/charts/core.d.ts +11 -18
  199. package/dist/types/components/checkbox/checkbox.d.ts +2 -0
  200. package/dist/types/components/combobox/combobox.d.ts +26 -2
  201. package/dist/types/components/command-list/picker-popover.d.ts +1 -4
  202. package/dist/types/components/command-palette/command-palette.d.ts +1 -4
  203. package/dist/types/components/data-table/data-table.d.ts +2 -1
  204. package/dist/types/components/data-table/docs.d.ts +1 -0
  205. package/dist/types/components/dialog/dialog.d.ts +7 -9
  206. package/dist/types/components/dialog/docs.d.ts +2 -0
  207. package/dist/types/components/dialog/scope.d.ts +2 -0
  208. package/dist/types/components/dialog/step-dialog.d.ts +38 -5
  209. package/dist/types/components/display-options/display-options.d.ts +2 -5
  210. package/dist/types/components/input/input.d.ts +23 -0
  211. package/dist/types/components/kaeso/client-button.d.ts +17 -0
  212. package/dist/types/components/kaeso/docs.d.ts +18 -0
  213. package/dist/types/components/kaeso/grant-summary.d.ts +12 -0
  214. package/dist/types/components/kaeso/identity.d.ts +2 -0
  215. package/dist/types/components/kaeso/index.d.ts +2 -0
  216. package/dist/types/components/kaeso/provider-picker.d.ts +5 -0
  217. package/dist/types/components/kaeso/usage.d.ts +2 -0
  218. package/dist/types/components/list/list.d.ts +4 -8
  219. package/dist/types/components/menu/docs.d.ts +8 -1
  220. package/dist/types/components/menu/menu.d.ts +19 -31
  221. package/dist/types/components/playground/parameter-panel.d.ts +1 -4
  222. package/dist/types/components/popover/hover-card.d.ts +2 -0
  223. package/dist/types/components/radio/docs.d.ts +15 -0
  224. package/dist/types/components/radio/radio.d.ts +2 -4
  225. package/dist/types/components/settings/settings.d.ts +2 -0
  226. package/dist/types/components/sidebar/sidebar.d.ts +13 -35
  227. package/dist/types/components/tabs/tabs.d.ts +15 -0
  228. package/dist/types/components/theme-menu/docs.d.ts +2 -0
  229. package/dist/types/components/theme-menu/theme-menu.d.ts +6 -5
  230. package/dist/types/components/thumbnail/docs.d.ts +10 -0
  231. package/dist/types/components/thumbnail/index.d.ts +1 -0
  232. package/dist/types/components/thumbnail/thumbnail.d.ts +26 -0
  233. package/dist/types/components/toast/toast.d.ts +5 -12
  234. package/dist/types/components/toolbar/toolbar.d.ts +1 -6
  235. package/dist/types/components/tooltip/tooltip.d.ts +2 -4
  236. package/dist/types/components/tooltip/trigger-props.d.ts +0 -1
  237. package/dist/types/format/index.d.ts +5 -5
  238. package/dist/types/hooks/use-scroll-margin.d.ts +1 -1
  239. package/dist/types/icons/groups.d.ts +2 -2
  240. package/dist/types/icons/vocabulary.d.ts +15 -0
  241. package/dist/types/index.d.ts +2 -0
  242. package/dist/types/utils/inset.d.ts +4 -0
  243. package/dist/types/utils/link-provider.d.ts +1 -1
  244. package/dist/types/utils/merge-refs.d.ts +3 -0
  245. package/dist/types/utils/portal-context.d.ts +1 -1
  246. package/dist/utils.js +3 -3
  247. package/foundations/shape.md +1 -1
  248. package/package.json +2 -2
  249. package/dist/chunks/app-frame-C8csevkL.js.map +0 -1
  250. package/dist/chunks/calendar--YemJsv4.js.map +0 -1
  251. package/dist/chunks/checkbox-CDfC6E-M.js.map +0 -1
  252. package/dist/chunks/combobox-BARyrpXH.js +0 -314
  253. package/dist/chunks/combobox-BARyrpXH.js.map +0 -1
  254. package/dist/chunks/core-Bl9NrBLS.js.map +0 -1
  255. package/dist/chunks/de-BnNQtBSV.js.map +0 -1
  256. package/dist/chunks/dialog-DQ9vZ7vr.js +0 -353
  257. package/dist/chunks/dialog-DQ9vZ7vr.js.map +0 -1
  258. package/dist/chunks/icon-CBzvyEqC.js +0 -91
  259. package/dist/chunks/icon-CBzvyEqC.js.map +0 -1
  260. package/dist/chunks/identity-DPuTkMsa.js.map +0 -1
  261. package/dist/chunks/input-TyLIaQ5k.js.map +0 -1
  262. package/dist/chunks/inset-BnBj8NJV.js.map +0 -1
  263. package/dist/chunks/link-provider-BsUxhZKG.js +0 -27
  264. package/dist/chunks/link-provider-BsUxhZKG.js.map +0 -1
  265. package/dist/chunks/menu-fl_QQb38.js.map +0 -1
  266. package/dist/chunks/nav-sheet-B2rNb8GB.js +0 -60
  267. package/dist/chunks/nav-sheet-B2rNb8GB.js.map +0 -1
  268. package/dist/chunks/sidebar-DtFlejU7.js.map +0 -1
  269. package/dist/chunks/tooltip-BMQ9BtPp.js +0 -151
  270. package/dist/chunks/tooltip-BMQ9BtPp.js.map +0 -1
  271. package/dist/chunks/use-scroll-margin-DfdTc_5D.js.map +0 -1
  272. package/dist/chunks/zh-CN-CKffAT7j.js.map +0 -1
@@ -1,6 +1,36 @@
1
1
  # @logicplanes/kaeso-ui component registry
2
2
 
3
- Version 0.4.2. Generated from the component types, their descriptions and variants; do not edit.
3
+ Version 0.4.3. Generated from the component types, their descriptions and variants; do not edit.
4
+
5
+ ## agent-avatar
6
+
7
+ `import { AgentAttribution, AgentAvatar } from "@logicplanes/kaeso-ui/agent-avatar";`
8
+
9
+ - **size** (agent_attribution): `20` — 20px person, 10px agent badge; `24` (default) — 24px person, 12px agent badge (default); `28` — 28px person, 14px agent badge; `32` — 32px person, 16px agent badge; `40` — 40px person, 20px agent badge
10
+ - **size** (agent_avatar): `20` — 20px; `24` (default) — 24px: rows and lists (default); `28` — 28px; `32` — 32px; `40` — 40px: an agent's own page, menus
11
+
12
+ ### AgentAttribution
13
+
14
+ A person's avatar with the agent that acted for them as a small badge on its corner, for audit rows and activity; it reads as one picture named after both. The badge stays inside the avatar's square, so a table cell never cuts it off.
15
+
16
+ | Prop | Type | Default | Description |
17
+ |---|---|---|---|
18
+ | `agent` * | `{ name: string; model: string; }` | | The agent that acted, with its name and model family id from the API; the family is named in the accessible name only. |
19
+ | `name` * | `string` | | The name of the person the agent acted for; it starts the accessible name, such as `Ada Okafor via Release helper (Claude)`. |
20
+ | `className` | `string` | | Classes for the layout of the outer element: margin, width and placement, never its look. |
21
+ | `size` | `24 \| 20 \| 28 \| 32 \| 40` | `24` | The diameter of the person's avatar in pixels; the agent badge is half of it. |
22
+ | `src` | `string` | | The person's picture; without one, or when it fails to load, their initials show. |
23
+
24
+ ### AgentAvatar
25
+
26
+ An agent acting for a person: one bot face on an ink square, the same for every agent; write its model family beside it with useModelName where it matters.
27
+
28
+ | Prop | Type | Default | Description |
29
+ |---|---|---|---|
30
+ | `name` * | `string` | | The agent's name, such as `Release helper`; it is the accessible name. |
31
+ | `className` | `string` | | Classes for the layout of the outer element: margin, width and placement, never its look. |
32
+ | `decorative` | `boolean` | | Hides it from assistive technology when the agent's name is already written next to it. |
33
+ | `size` | `24 \| 20 \| 28 \| 32 \| 40` | `24` | The side of the square in pixels, on the same scale as `Avatar`. |
4
34
 
5
35
  ## app-frame
6
36
 
@@ -176,7 +206,7 @@ The calendar: 36px day circles, today ringed, ranges as a continuous strip with
176
206
  | `onMonthChange` | `((month: Date) => void)` | | Called when the month shown changes. |
177
207
  | `onSelect` | `((value: Date \| DateRange) => void)` | | Called with the new day or range. |
178
208
  | `selected` | `Date \| DateRange` | | The selected day or range. |
179
- | `weekStartsOn` | `0 \| 4 \| 1 \| 2 \| 3 \| 5 \| 6` | `1` | 0 = Sunday, 1 = Monday (default). |
209
+ | `weekStartsOn` | `0 \| 2 \| 3 \| 4 \| 1 \| 5 \| 6` | `1` | 0 = Sunday, 1 = Monday (default). |
180
210
 
181
211
  ## charts
182
212
 
@@ -592,6 +622,7 @@ A disclosure row: a chevron that rotates in 180ms, a measured height animation.
592
622
 
593
623
  `import { Autocomplete, Combobox, Highlight } from "@logicplanes/kaeso-ui/combobox";`
594
624
 
625
+ - **size** (autocomplete): `sm` — 32px; `md` (default) — 36px (default); `lg` — 40px; `xl` — 48px
595
626
  - **size** (combobox): `sm` — 32px; `md` (default) — 36px (default); `lg` — 40px; `xl` — 48px
596
627
 
597
628
  ### Autocomplete
@@ -817,6 +848,7 @@ A table for many rows: sorting, selection, loading and empty states, more rows o
817
848
  | `columns` * | `ColumnDef<T, any>[]` | | The columns, as TanStack Table column definitions. |
818
849
  | `data` * | `T[]` | | The rows. |
819
850
  | `activeRowId` | `string` | | The id of a row to show as active (open in a sheet). |
851
+ | `canSelectRow` | `((row: T) => boolean)` | | Whether a row can be selected; a row that can't keeps a disabled checkbox, and select all skips it. |
820
852
  | `className` | `string` | | Classes for the layout of the outer element: margin, width and placement, never its look. |
821
853
  | `density` | `"default" \| "compact" \| "comfortable"` | | How much room each row gets. |
822
854
  | `empty` | `ReactNode` | | What to show when there are no rows, usually an `Empty`. |
@@ -872,7 +904,7 @@ A pill showing the date; a popover with the calendar and a typed ISO field.
872
904
  | `required` | `boolean` | | Marks it as required in a form. |
873
905
  | `size` | `"md" \| "sm" \| "lg"` | | The height of the field. |
874
906
  | `value` | `Date \| null` | | The chosen day, when you control it. |
875
- | `weekStartsOn` | `0 \| 4 \| 1 \| 2 \| 3 \| 5 \| 6` | | The first day of the week, from 0 (Sunday) to 6 (Saturday); the language decides by default. |
907
+ | `weekStartsOn` | `0 \| 2 \| 3 \| 4 \| 1 \| 5 \| 6` | | The first day of the week, from 0 (Sunday) to 6 (Saturday); the language decides by default. |
876
908
 
877
909
  ### DateRangePicker
878
910
 
@@ -900,7 +932,7 @@ A pill showing the range ("Oct 1 – Oct 12") or its preset ("Last 30 days"); pr
900
932
  | `required` | `boolean` | | Marks it as required in a form. |
901
933
  | `size` | `"md" \| "sm" \| "lg"` | | The height of the field. |
902
934
  | `value` | `DateRange \| null` | | The chosen range, when you control it. |
903
- | `weekStartsOn` | `0 \| 4 \| 1 \| 2 \| 3 \| 5 \| 6` | | The first day of the week, from 0 (Sunday) to 6 (Saturday); the language decides by default. |
935
+ | `weekStartsOn` | `0 \| 2 \| 3 \| 4 \| 1 \| 5 \| 6` | | The first day of the week, from 0 (Sunday) to 6 (Saturday); the language decides by default. |
904
936
 
905
937
  ### TimeInput
906
938
 
@@ -957,6 +989,8 @@ Confirms deleting a resource: names the object and the consequence, asks for its
957
989
  - **anchor** (dialog): `center` (default) — Centered on the screen (default); `top` — A fixed top edge, for content that changes height, such as the steps of a StepDialog
958
990
  - **size** (layer_dialog): `sm` — 440px: confirmations, short forms; `md` (default) — 560px: forms (default); `lg` — 720px: two columns, previews
959
991
  - **anchor** (layer_dialog): `center` (default) — Centered on the screen (default); `top` — A fixed top edge, for content that changes height, such as the steps of a StepDialog
992
+ - **size** (step_dialog): `sm` (default) — 440px: most tasks in a few steps (default); `md` — 560px: steps with longer forms; `lg` — 720px: steps with two columns or previews
993
+ - **tone** (step_dialog): `default` (default) — The last step's button is primary (default); `danger` — The last step's button is a danger button, for a task that ends in deletion
960
994
 
961
995
  ### AlertDialog
962
996
 
@@ -992,6 +1026,7 @@ A modal dialog: 440 / 560 / 720, radius 20, title, description, body, actions. E
992
1026
  | `defaultOpen` | `boolean` | | Whether it starts open, when the component keeps its own state. |
993
1027
  | `description` | `ReactNode` | | One sentence under the title. |
994
1028
  | `footer` | `ReactNode` | | Right-aligned actions: Cancel (secondary) then the primary. |
1029
+ | `footerStart` | `ReactNode` | | A quiet action at the footer's start, such as a link to another way of doing the task. |
995
1030
  | `headerStart` | `ReactNode` | | A top bar above the title, with this at its start and the close circle at its end (LayerDialog's back button). The title, description and content keep one left edge; `null` keeps the bar with an empty start. |
996
1031
  | `hideClose` | `boolean` | | Hide the close circle (rare). |
997
1032
  | `inline` | `boolean` | | Render without a portal and backdrop, for documentation and state matrices. |
@@ -1000,6 +1035,7 @@ A modal dialog: 440 / 560 / 720, radius 20, title, description, body, actions. E
1000
1035
  | `open` | `boolean` | | Whether it is open, when you control it. |
1001
1036
  | `persistent` | `boolean` | | A press outside doesn't close it, for forms that would lose what was typed; Escape and the close circle still do. Every StepDialog is persistent. |
1002
1037
  | `size` | `"md" \| "sm" \| "lg"` | | The dialog's width. |
1038
+ | `toolbar` | `ReactNode` | | Controls that stay under the title while the body scrolls, such as a search over the list below; a hairline shows once the body is scrolled. |
1003
1039
  | `trigger` | `ReactElement<unknown, string \| JSXElementConstructor<any>>` | | The trigger, a single element. |
1004
1040
 
1005
1041
  ### DialogScope
@@ -1017,7 +1053,7 @@ A stacked dialog: a second layer slides over the first (add model → review val
1017
1053
 
1018
1054
  | Prop | Type | Default | Description |
1019
1055
  |---|---|---|---|
1020
- | `layers` * | `DialogLayer[]` | | The layers, each with its title, content and footer; one shows at a time, and the ones below it stay mounted and hidden. |
1056
+ | `layers` * | `DialogLayer[]` | | The layers, each with its title, content and footer, and optionally a toolbar and a footer start; one shows at a time, and the ones below it stay mounted and hidden. |
1021
1057
  | `anchor` | `"center" \| "top"` | | Where it sits: centered, or with a fixed top edge for layers of different heights. |
1022
1058
  | `busy` | `boolean` | | Keeps the dialog open while work it started is underway: Escape, a press outside, the close circle, Dialog.Close, Enter and ⌘Enter do nothing, so a request is never abandoned or sent twice. |
1023
1059
  | `className` | `string` | | Classes for the layout of the outer element: margin, width and placement, never its look. |
@@ -1035,12 +1071,12 @@ A stacked dialog: a second layer slides over the first (add model → review val
1035
1071
 
1036
1072
  ### StepDialog
1037
1073
 
1038
- A form split into steps, one question at a time, like sign-in: the step's title and fields, Back and Continue, the action on the last step. Enter in a single-line field and ⌘/Ctrl+Enter continue. The dialog takes each step's own height and keeps its top edge where it opened: it grows or shrinks 200ms downward from the size it has as the step changes, so the title never jumps, and the new step drifts in from the side it comes from. With `result`, what the last step made (a key shown once) takes the steps' place in the same dialog, at its own size. Continue and Back move the focus into the step they show (its first field; without one, the primary action, or Back when the last step destroys), and a screen reader hears which step it is.
1074
+ A form split into steps, one question at a time, like sign-in: the step's title and fields, Back and Continue, the action on the last step. Enter in a single-line field and ⌘/Ctrl+Enter continue. The dialog takes each step's own height and keeps its top edge where it opened: it grows or shrinks 200ms downward from the size it has as the step changes, so the title never jumps, and the new step drifts in from the side it comes from. With `result`, what the last step made (a key shown once) takes the steps' place in the same dialog, at its own size. Continue and Back move the focus into the step they show (its first field; without one, the primary action, or Back when the last step destroys), and a screen reader hears which step it is. Inside a step, `useStepDialog()?.advance()` continues as Continue would, once the step is no longer blocked: a choice that answers the step, like a provider tile, moves on in one press.
1039
1075
 
1040
1076
  | Prop | Type | Default | Description |
1041
1077
  |---|---|---|---|
1042
1078
  | `onSubmit` * | `() => void` | | Called when the last step is submitted. |
1043
- | `steps` * | `DialogStep[]` | | The steps, each with its title, content and whether it can be continued. |
1079
+ | `steps` * | `DialogStep[]` | | The steps, each with its title, content and whether it can be continued; `onContinue` checks a step before the next opens, such as asking a server, and `continueLabel` names that check: "Detect settings". |
1044
1080
  | `submitLabel` * | `string` | | The last step's button: "Create key". |
1045
1081
  | `title` * | `ReactNode` | | What the whole dialog does: "Create key". |
1046
1082
  | `defaultStep` | `number` | `0` | Start on this step (state matrices). |
@@ -1218,7 +1254,7 @@ Heading levels map to the title tokens (4.3).
1218
1254
  | Prop | Type | Default | Description |
1219
1255
  |---|---|---|---|
1220
1256
  | `balance` | `boolean` | `true` | Balances the lines of a heading that wraps. |
1221
- | `level` | `4 \| 1 \| 2 \| 3 \| 5 \| 6` | | The heading level in the document, independent of its size. |
1257
+ | `level` | `2 \| 3 \| 4 \| 1 \| 5 \| 6` | | The heading level in the document, independent of its size. |
1222
1258
  | `size` | `"title" \| "display" \| "title-sm" \| "title-lg"` | `title-sm` | The type style, from `title-sm` to `display`. |
1223
1259
 
1224
1260
  ## icon
@@ -1270,6 +1306,7 @@ A circle with an icon, a required name, and a tooltip that says it.
1270
1306
  - **size** (input_group): `sm` — 32px: toolbars and compact forms; `md` (default) — 36px: the default; `lg` — 40px; `xl` — 48px: sign-in and setup forms
1271
1307
  - **align** (number_input): `end` (default) — Right-aligned tabular digits (default); `start` — Left-aligned
1272
1308
  - **size** (otp_input): `md` (default) — 48px cells (default); `sm` — 40px cells
1309
+ - **size** (search_input): `sm` (default) — 32px: toolbars (default); `md` — 36px: a search at the top of a page or dialog; `lg` — 40px; `xl` — 48px
1273
1310
  - **kind** (sensitive_input): `secret` (default) — Provider keys and tokens: never autocompleted (default); `password` — Passwords: browser password managers allowed, Caps Lock hint
1274
1311
  - **size** (tag_input): `md` (default) — 36px at one row; grows as tags wrap (default)
1275
1312
  - **resize** (textarea): `auto` (default) — Grows with its content to 8 lines, then scrolls (default); `vertical` — People can drag it taller
@@ -1442,13 +1479,13 @@ A multi-line field: radius 14 (multi-line text cannot be a pill), the same mater
1442
1479
 
1443
1480
  ## kaeso
1444
1481
 
1445
- `import { CapabilityIcons, ConversationView, EffectiveAccess, EnvironmentSnippet, KeyDisplay, LimitMeter, ModelLabel, ProviderBadge, ProviderCard, ProviderPicker, RequestTimeline, RightsMatrix, RolePicker, SecretReveal, StatusCode, UsageBreakdown } from "@logicplanes/kaeso-ui/kaeso";`
1482
+ `import { CapabilityIcons, ClientButton, ConversationView, EffectiveAccess, EnvironmentSnippet, GrantSummary, KeyDisplay, LimitMeter, ModelLabel, ProviderBadge, ProviderCard, ProviderPicker, RequestTimeline, RightsMatrix, RolePicker, SecretReveal, StatusCode, UsageBreakdown } from "@logicplanes/kaeso-ui/kaeso";`
1446
1483
 
1447
1484
  - **density** (conversation): `default` (default) — 24px between turns (default); `compact` — 16px, inside sheets
1448
1485
  - **layout** (effective_access): `rows` (default) — A row per group: its name, what is granted in words, and how many (default)
1449
1486
  - **provider** (identity): `sm` — 16px, inside table cells; `md` (default) — 20px (default); `lg` — 28px; `xl` — 40px: a provider's own page or card
1450
1487
  - **secret** (moments): `md` (default) — The one-time secret on a well
1451
- - **appearance** (provider_picker): `list` (default) — A search field over every provider, always open: a dialog step (default); `select` — A pill that opens the searchable list: forms and toolbars
1488
+ - **appearance** (provider_picker): `list` (default) — A search field over every provider, always open: a dialog step (default); `select` — A pill that opens the searchable list: forms and toolbars; `grid` — Tiles with each provider's mark, connected ones first: the first step of a dialog
1452
1489
  - **origin** (rights_matrix): `preset` — Comes from the role; `added` — Added on top of the role; `removed` — Removed from the role; `none` (default) — Not granted
1453
1490
  - **mode** (rights_matrix): `edit` (default) — Checkboxes, group toggles and requirement hints (default); `readOnly` — A mark per right and, under it, the roles that grant it
1454
1491
  - **appearance** (role_picker): `list` (default) — Every role as a row with its description, built-in then custom (default): invites and role changes; `select` — A pill that opens the roles: filters, table rows and tight forms
@@ -1463,6 +1500,17 @@ A model's capabilities as small icons, each named in a tooltip and read as one l
1463
1500
  | `capabilities` | `Capability[]` | `[]` | The capabilities: tools, reasoning, vision, pdf, structuredOutput. |
1464
1501
  | `className` | `string` | | Classes for the layout of the outer element: margin, width and placement, never its look. |
1465
1502
 
1503
+ ### ClientButton
1504
+
1505
+ An agent client's mark, such as Claude, Cursor or GitHub Copilot, on a raised tile, as a button that opens how to connect it.
1506
+
1507
+ | Prop | Type | Default | Description |
1508
+ |---|---|---|---|
1509
+ | `aria-label` * | `string` | | The client's name; also the tooltip. |
1510
+ | `client` * | `"cursor" \| "claude" \| "github-copilot"` | | Which client's mark it shows. |
1511
+ | `className` | `string` | | Classes for the layout of the outer element: margin, width and placement, never its look. |
1512
+ | `onClick` | `(() => void)` | | Opens how to connect the client. |
1513
+
1466
1514
  ### ConversationView
1467
1515
 
1468
1516
  A model conversation from a request log: role captions, prose, tool calls and results, reasoning, images, refusals. Inline images show; remote ones are links, so viewing a log never fetches them.
@@ -1498,6 +1546,18 @@ The gateway's base URL and a key placeholder to copy, with snippets per SDK.
1498
1546
  | `className` | `string` | | Classes for the layout of the outer element: margin, width and placement, never its look. |
1499
1547
  | `model` | `string` | | A model id for the snippet. |
1500
1548
 
1549
+ ### GrantSummary
1550
+
1551
+ What an agent or a key may do, one short line each after a check mark, on a group surface.
1552
+
1553
+ | Prop | Type | Default | Description |
1554
+ |---|---|---|---|
1555
+ | `aria-label` * | `string` | | The list's accessible name ("What it can do"). |
1556
+ | `items` * | `readonly ReactNode[]` | | The lines, short and without a final period. |
1557
+ | `action` | `ReactNode` | | A small button after the note, such as Customize. |
1558
+ | `className` | `string` | | Classes for the layout of the outer element: margin, width and placement, never its look. |
1559
+ | `footer` | `ReactNode` | | A quiet note under the lines, such as how long it lasts. |
1560
+
1501
1561
  ### KeyDisplay
1502
1562
 
1503
1563
  A redacted key: mono 13 with its state dot, copy of the redacted form, and its access.
@@ -1577,7 +1637,7 @@ Choosing a provider from any number of them: a search field over every provider,
1577
1637
  |---|---|---|---|
1578
1638
  | `providers` * | `ProviderPickerOption[]` | | The providers: id, name, whether the organization has connected it, and a short hint such as its key count. |
1579
1639
  | `allLabel` | `string` | | Select only: a first option for no provider in particular, such as "All providers"; choosing it reports `null`. |
1580
- | `appearance` | `"list" \| "select"` | | An always-open list for a dialog step, or a pill that opens it. |
1640
+ | `appearance` | `"list" \| "grid" \| "select"` | | An always-open list for a dialog step, tiles with each provider's mark for a dialog's first step, or a pill that opens the list. |
1581
1641
  | `aria-label` | `string` | | What the picker is for, when there is no visible label: it names the list, and the pill, named by the provider it shows, reads it as its description. |
1582
1642
  | `autoFocus` | `boolean` | | List only: focuses the search field when it appears. |
1583
1643
  | `className` | `string` | | Classes for the layout of the outer element: margin, width and placement, never its look. |
@@ -1587,6 +1647,7 @@ Choosing a provider from any number of them: a search field over every provider,
1587
1647
  | `error` | `ReactNode` | | Deprecated. Errors are toasts, never text under a field: `error` marks the control invalid and stays its description for screen readers, but isn't drawn. Pass `invalid` and toast the message. |
1588
1648
  | `label` | `ReactNode` | | The visible label. |
1589
1649
  | `layout` | `"horizontal" \| "vertical"` | | The label above the control (`vertical`) or beside it (`horizontal`). |
1650
+ | `onChoose` | `((id: string) => void)` | | With `grid`: called when a tile is pressed or clicked, not when the arrow keys move the choice, so a dialog step can continue at once. |
1590
1651
  | `onValueChange` | `((id: string \| null) => void)` | | Called with the chosen provider's id, or `null` for `allLabel`. |
1591
1652
  | `optional` | `boolean` | | Adds “Optional” to the label, for forms where most fields are required. |
1592
1653
  | `placeholder` | `string` | | The search field's placeholder; in a pill without `allLabel`, also the text shown while nothing is chosen. |
@@ -1711,7 +1772,7 @@ Label and value pairs (13 secondary label, 14 value), copyable values. Side by s
1711
1772
  |---|---|---|---|
1712
1773
  | `items` * | `KeyValueItem[]` | | The pairs to show. |
1713
1774
  | `className` | `string` | | Classes for the layout of the outer element: margin, width and placement, never its look. |
1714
- | `columns` | `4 \| 2 \| 3` | `2` | The grid layout's items to a row, from 480px of its container's width. |
1775
+ | `columns` | `2 \| 3 \| 4` | `2` | The grid layout's items to a row, from 480px of its container's width. |
1715
1776
  | `layout` | `"grid" \| "stacked" \| "columns"` | `columns` | Keys beside values in columns, in a grid, or stacked above them. |
1716
1777
 
1717
1778
  ## label
@@ -1746,8 +1807,8 @@ A responsive grid.
1746
1807
  |---|---|---|---|
1747
1808
  | `align` | `"start" \| "end" \| "center" \| "baseline" \| "stretch"` | `center` | How items line up within their cells. |
1748
1809
  | `as` | `ElementType` | | The element or component to render as, such as `section` or `ul`. |
1749
- | `columns` | `4 \| 1 \| 2 \| 3 \| 6` | `2` | The number of columns. |
1750
- | `gap` | `0 \| 24 \| 20 \| 32 \| 40 \| 4 \| 2 \| 6 \| 8 \| 12 \| 16 \| 48 \| 64` | `16` | The space between items, in pixels on the spacing scale. |
1810
+ | `columns` | `2 \| 3 \| 4 \| 1 \| 6` | `2` | The number of columns. |
1811
+ | `gap` | `0 \| 2 \| 24 \| 20 \| 32 \| 40 \| 4 \| 6 \| 8 \| 12 \| 16 \| 48 \| 64` | `16` | The space between items, in pixels on the spacing scale. |
1751
1812
 
1752
1813
  ### Inline
1753
1814
 
@@ -1757,7 +1818,7 @@ A horizontal row that wraps.
1757
1818
  |---|---|---|---|
1758
1819
  | `align` | `"start" \| "end" \| "center" \| "baseline" \| "stretch"` | `center` | How items line up across the row. |
1759
1820
  | `as` | `ElementType` | | The element or component to render as, such as `section` or `ul`. |
1760
- | `gap` | `0 \| 24 \| 20 \| 32 \| 40 \| 4 \| 2 \| 6 \| 8 \| 12 \| 16 \| 48 \| 64` | `16` | The space between items, in pixels on the spacing scale. |
1821
+ | `gap` | `0 \| 2 \| 24 \| 20 \| 32 \| 40 \| 4 \| 6 \| 8 \| 12 \| 16 \| 48 \| 64` | `16` | The space between items, in pixels on the spacing scale. |
1761
1822
  | `justify` | `"start" \| "end" \| "center" \| "between"` | | How items are spread along the main axis. |
1762
1823
  | `wrap` | `boolean` | `true` | Lets items wrap onto the next line. |
1763
1824
 
@@ -1769,7 +1830,7 @@ A vertical stack.
1769
1830
  |---|---|---|---|
1770
1831
  | `align` | `"start" \| "end" \| "center" \| "baseline" \| "stretch"` | `center` | How items line up across the column. |
1771
1832
  | `as` | `ElementType` | | The element or component to render as, such as `section` or `ul`. |
1772
- | `gap` | `0 \| 24 \| 20 \| 32 \| 40 \| 4 \| 2 \| 6 \| 8 \| 12 \| 16 \| 48 \| 64` | `16` | The space between items, in pixels on the spacing scale. |
1833
+ | `gap` | `0 \| 2 \| 24 \| 20 \| 32 \| 40 \| 4 \| 6 \| 8 \| 12 \| 16 \| 48 \| 64` | `16` | The space between items, in pixels on the spacing scale. |
1773
1834
  | `justify` | `"start" \| "end" \| "center" \| "between"` | | How items are spread along the main axis. |
1774
1835
 
1775
1836
  ## link
@@ -1946,7 +2007,7 @@ Markdown, safely: headings, paragraphs, lists, tasks, code fences (CodeBlock), i
1946
2007
  | `text` * | `string` | | The Markdown source. Raw HTML in it stays text. |
1947
2008
  | `className` | `string` | | Classes for the layout of the outer element: margin, width and placement, never its look. |
1948
2009
  | `collapseAfter` | `number` | `24000` | Texts longer than this many characters show their start and "Show all" (24,000 by default; 0 never collapses). |
1949
- | `headingLevel` | `4 \| 1 \| 2 \| 3 \| 5 \| 6` | `3` | The heading level `#` becomes (3 by default: below a page's and a section's own headings). |
2010
+ | `headingLevel` | `2 \| 3 \| 4 \| 1 \| 5 \| 6` | `3` | The heading level `#` becomes (3 by default: below a page's and a section's own headings). |
1950
2011
  | `size` | `"lg" \| "body" \| "small"` | `body` | The text size: `small`, `body` or `lg`. |
1951
2012
  | `streaming` | `boolean` | `false` | The text is still arriving: nothing collapses, and the tokens aren't cached. |
1952
2013
  | `tone` | `"secondary" \| "default"` | `default` | Primary text (`default`) or secondary text (`secondary`). |
@@ -1955,7 +2016,7 @@ Markdown, safely: headings, paragraphs, lists, tasks, code fences (CodeBlock), i
1955
2016
 
1956
2017
  ## menu
1957
2018
 
1958
- `import { ContextMenu, Menubar } from "@logicplanes/kaeso-ui/menu";`
2019
+ `import { ContextMenu, Menu, Menubar } from "@logicplanes/kaeso-ui/menu";`
1959
2020
 
1960
2021
  - **item** (menu): `default` (default) — An action; `danger` — A destructive action: red text, a red tint on highlight
1961
2022
  - **width** (menu): `auto` (default) — 220–360px, from its content (default); `trigger` — As wide as its trigger
@@ -1963,11 +2024,20 @@ Markdown, safely: headings, paragraphs, lists, tasks, code fences (CodeBlock), i
1963
2024
 
1964
2025
  ### ContextMenu
1965
2026
 
1966
- A dropdown menu: 16px radius, 34px rows, typeahead, Home/End, loops.
2027
+ The same menu, opened by a right click, a long press or the context-menu key on the area it wraps.
1967
2028
 
1968
2029
  | Prop | Type | Default | Description |
1969
2030
  |---|---|---|---|
1970
2031
  | `children` * | `ReactNode` | | The area that opens the menu on a right click or long press. |
2032
+ | `onOpenChange` | `((open: boolean) => void)` | | Called when it opens or closes. |
2033
+
2034
+ ### Menu
2035
+
2036
+ A dropdown menu: 16px radius, 34px rows, typeahead, Home/End, loops.
2037
+
2038
+ | Prop | Type | Default | Description |
2039
+ |---|---|---|---|
2040
+ | `children` * | `ReactNode` | | The trigger and the menu's content. |
1971
2041
  | `defaultOpen` | `boolean` | | Whether it starts open, when the component keeps its own state. |
1972
2042
  | `modal` | `boolean` | | Blocks the rest of the page while the menu is open. |
1973
2043
  | `onOpenChange` | `((open: boolean) => void)` | | Called when it opens or closes. |
@@ -1980,7 +2050,8 @@ A row of menus, as in a desktop app's title bar.
1980
2050
  | Prop | Type | Default | Description |
1981
2051
  |---|---|---|---|
1982
2052
  | `children` * | `ReactNode` | | The menus. |
1983
- | `onOpenChange` | `((o: boolean) => void)` | | Called when a menu opens or closes. |
2053
+ | `aria-label` | `string` | | The accessible name, for when there is no visible label. |
2054
+ | `className` | `string` | | Classes for the layout of the outer element: margin, width and placement, never its look. |
1984
2055
 
1985
2056
  ## meter
1986
2057
 
@@ -2329,7 +2400,7 @@ A person's turn: their prompt as quiet text that opens the turn, no bubble. A lo
2329
2400
  | `children` * | `ReactNode` | | The prompt as it was written: plain text, line breaks kept. |
2330
2401
  | `aria-label` | `string` | | The message's accessible name. Defaults to "Prompt" in the provider's language. |
2331
2402
  | `className` | `string` | | Classes for the layout of the outer element: margin, width and placement, never its look. |
2332
- | `maxLines` | `0 \| 4 \| 2 \| 3 \| 6` | `4` | Lines shown before "Show all" (4 by default; 0 shows everything). |
2403
+ | `maxLines` | `0 \| 2 \| 3 \| 4 \| 6` | `4` | Lines shown before "Show all" (4 by default; 0 shows everything). |
2333
2404
 
2334
2405
  ## popover
2335
2406
 
@@ -2392,7 +2463,7 @@ A QR code drawn as one SVG path: dark modules on white in both themes, with a qu
2392
2463
 
2393
2464
  ## radio
2394
2465
 
2395
- `import { Radio, RadioCards } from "@logicplanes/kaeso-ui/radio";`
2466
+ `import { Radio, RadioCards, RadioGroup } from "@logicplanes/kaeso-ui/radio";`
2396
2467
 
2397
2468
  - **variant** (radio): `default` (default) — A list of radios with labels (default); `cards` — Rows inside a settings group with the radio at the end, for choices with descriptions
2398
2469
 
@@ -2447,6 +2518,24 @@ Choices with descriptions as rows in a settings group.
2447
2518
  | `orientation` | `"horizontal" \| "vertical"` | `vertical` | Lays the items out in a row (`horizontal`) or a column (`vertical`). |
2448
2519
  | `value` | `string` | | The chosen option, when you control it. |
2449
2520
 
2521
+ ### RadioGroup
2522
+
2523
+ The group a set of radios belongs to: one of them is chosen, and the arrow keys move between them.
2524
+
2525
+ | Prop | Type | Default | Description |
2526
+ |---|---|---|---|
2527
+ | `children` * | `ReactNode` | | The radios, one per option. |
2528
+ | `aria-label` | `string` | | The accessible name, for when there is no visible label. |
2529
+ | `aria-labelledby` | `string` | | The id of the element that names it, when its label is elsewhere on the page. |
2530
+ | `className` | `string` | | Classes for the layout of the outer element: margin, width and placement, never its look. |
2531
+ | `defaultValue` | `string` | | The chosen option on first render. |
2532
+ | `disabled` | `boolean` | | Turns off every radio. |
2533
+ | `name` | `string` | | The field name the value is sent under in a form. |
2534
+ | `onValueChange` | `((value: string) => void)` | | Called with the chosen option. |
2535
+ | `orientation` | `"horizontal" \| "vertical"` | `vertical` | Lays the items out in a row (`horizontal`) or a column (`vertical`). |
2536
+ | `value` | `string` | | The chosen option, when you control it. |
2537
+ | `variant` | `"default" \| "cards"` | `default` | A plain list of radios, or rows inside a settings group with the radio at the end (`cards`). |
2538
+
2450
2539
  ## release-art
2451
2540
 
2452
2541
  `import { ReleaseArt } from "@logicplanes/kaeso-ui/release-art";`
@@ -2940,6 +3029,7 @@ A plain table for small amounts of data; use `DataTable` for sorting, selection
2940
3029
 
2941
3030
  `import { PillTabs, Tabs } from "@logicplanes/kaeso-ui/tabs";`
2942
3031
 
3032
+ - **variant** (pill_tabs): `underline` — Underline tabs for detail pages: 40px, a 2px ink indicator that slides; `pill` (default) — Header tabs: separate 32px pills, the active one filled
2943
3033
  - **variant** (tabs): `underline` (default) — Underline tabs for detail pages: 40px, a 2px ink indicator that slides; `pill` — Header tabs: separate 32px pills, the active one filled
2944
3034
 
2945
3035
  ### PillTabs
@@ -3064,6 +3154,9 @@ System, light or dark, stored as `kaeso:theme`.
3064
3154
 
3065
3155
  | Prop | Type | Default | Description |
3066
3156
  |---|---|---|---|
3157
+ | `align` | `"start" \| "end"` | `end` | Which edge of the button the menu lines up with: its end (`end`) or its start (`start`), for a button at the left edge. |
3158
+ | `data-force` | `string` | | Forces an interaction state for state matrices: `hover`, `pressed`, `focus`, `open`. |
3159
+ | `side` | `"top" \| "bottom"` | `bottom` | Where the menu opens: below the button (`bottom`), or above it (`top`) when the button sits at the foot of a sidebar. |
3067
3160
  | `size` | `"md" \| "sm"` | `sm` | The button's height. |
3068
3161
  | `variant` | `"secondary" \| "ghost"` | `ghost` | A filled button (`secondary`) or a quiet one (`ghost`). |
3069
3162
 
@@ -3086,6 +3179,23 @@ A select for system, light or dark, stored as `kaeso:theme`, with its label in t
3086
3179
  | `fullWidth` | `boolean` | | Width of the trigger follows its content (default) or fills the container, as in a sidebar's footer. |
3087
3180
  | `size` | `"md" \| "sm"` | `sm` | The height of the field. |
3088
3181
 
3182
+ ## thumbnail
3183
+
3184
+ `import { Thumbnail } from "@logicplanes/kaeso-ui/thumbnail";`
3185
+
3186
+ - **size** (thumbnail): `sm` — 64px: a row or a compact list; `md` (default) — 120px: an image inside a message (default); `lg` — 160px: an image a page is about
3187
+
3188
+ ### Thumbnail
3189
+
3190
+ A square image someone sent, such as a photo in a conversation: cropped to fill, on a well with radius 14; when it can't load, its text alternative shows instead.
3191
+
3192
+ | Prop | Type | Default | Description |
3193
+ |---|---|---|---|
3194
+ | `alt` * | `string` | | What the image shows, read by screen readers and shown in its place when it can't load. |
3195
+ | `src` * | `string` | | The image's address, including a data: URL. |
3196
+ | `className` | `string` | | Classes for the layout of the outer element: margin, width and placement, never its look. |
3197
+ | `size` | `"md" \| "sm" \| "lg"` | `md` | The width and height: 64, 120 or 160 pixels. |
3198
+
3089
3199
  ## timeline
3090
3200
 
3091
3201
  `import { Timeline } from "@logicplanes/kaeso-ui/timeline";`
@@ -3113,8 +3223,8 @@ Events down a 1px line (the audit log): each event marks the line with a short 3
3113
3223
 
3114
3224
  | Prop | Type | Default | Description |
3115
3225
  |---|---|---|---|
3116
- | `limit` | `number` | | How many toasts show at once. |
3117
- | `timeout` | `number` | | How long a toast stays, in milliseconds. |
3226
+ | `limit` | `number` | `3` | How many toasts show at once. |
3227
+ | `timeout` | `number` | `5000` | How long a toast stays, in milliseconds. |
3118
3228
 
3119
3229
  ### ToastCapsule
3120
3230
 
@@ -3190,7 +3300,7 @@ A short label for a control, shown on hover and focus. Never on disabled element
3190
3300
  | `disabled` | `boolean` | | Never shows the tooltip. |
3191
3301
  | `onOpenChange` | `((open: boolean) => void)` | | Called when it opens or closes. |
3192
3302
  | `open` | `boolean` | | Whether it is open, when you control it. |
3193
- | `shape` | `"pill" \| "multiline"` | | A pill for a short label, or a box for several lines. |
3303
+ | `shape` | `"pill" \| "multiline"` | `pill` | A pill for a short label, or a box for several lines. |
3194
3304
  | `shortcut` | `string[] \| string[][]` | | A shortcut shown after the text: `["mod", "k"]` or `[["g"], ["m"]]`. |
3195
3305
  | `side` | `"top" \| "bottom" \| "left" \| "right"` | | The side it opens on. |
3196
3306
  | `sideOffset` | `number` | | Distance from the trigger in px. |
package/ai/icons.md CHANGED
@@ -1,10 +1,10 @@
1
1
  # Icon vocabulary
2
2
 
3
- Version 0.4.2. Generated from `src/icons/vocabulary.ts`; do not edit. Use the name, never an icon picked by look: `icons.key` always means a key. Hugeicons, Stroke Rounded. Rules: `foundations/icons.md`.
3
+ Version 0.4.3. Generated from `src/icons/vocabulary.ts`; do not edit. Use the name, never an icon picked by look: `icons.key` always means a key. Hugeicons, Stroke Rounded. Rules: `foundations/icons.md`.
4
4
 
5
5
  ## Kaeso objects
6
6
 
7
- `key`, `providerKey`, `project`, `organization`, `model`, `playground`, `alias`, `limit`, `budget`, `requestLog`, `usage`, `member`, `members`, `serviceAccount`, `settings`, `audit`, `instance`, `provider`, `route`, `gateway`, `database`, `update`, `security`, `session`, `overview`, `chart`, `home`
7
+ `key`, `providerKey`, `project`, `organization`, `model`, `playground`, `alias`, `limit`, `budget`, `requestLog`, `usage`, `member`, `members`, `serviceAccount`, `agent`, `settings`, `audit`, `instance`, `provider`, `route`, `gateway`, `database`, `update`, `security`, `session`, `overview`, `chart`, `home`
8
8
 
9
9
  ## Capabilities
10
10
 
@@ -24,5 +24,5 @@ Version 0.4.2. Generated from `src/icons/vocabulary.ts`; do not edit. Use the na
24
24
 
25
25
  ## Misc
26
26
 
27
- `calendar`, `time`, `code`, `mail`, `keyboard`, `help`, `github`, `themeLight`, `themeDark`, `themeSystem`
27
+ `calendar`, `time`, `code`, `mail`, `keyboard`, `help`, `github`, `themeLight`, `themeDark`, `themeSystem`, `language`, `legal`
28
28
 
package/ai/tokens.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @logicplanes/kaeso-ui tokens
2
2
 
3
- Version 0.4.2. Generated from `@logicplanes/kaeso-tokens`; do not edit. Components use these through role names (`bg-panel`, `text-fg-secondary`, `h-36`, `rounded-pill`); a raw value never appears in a component. How to use them: `foundations/*.md`.
3
+ Version 0.4.3. Generated from `@logicplanes/kaeso-tokens`; do not edit. Components use these through role names (`bg-panel`, `text-fg-secondary`, `h-36`, `rounded-pill`); a raw value never appears in a component. How to use them: `foundations/*.md`.
4
4
 
5
5
  ## Neutrals
6
6
 
@@ -1,23 +1,24 @@
1
1
  "use client";
2
2
  import { i as e } from "../chunks/context-BELWW79w.js";
3
- import { t } from "../chunks/dialog-DQ9vZ7vr.js";
4
- import { jsx as n } from "react/jsx-runtime";
3
+ import { t } from "../chunks/dialog-Cg9A_6SF.js";
4
+ import { forwardRef as n } from "react";
5
+ import { jsx as r } from "react/jsx-runtime";
5
6
  //#region src/blocks/delete-resource/delete-resource.tsx
6
- var r = { confirm: {
7
+ var i = { confirm: {
7
8
  typed: { classes: "" },
8
9
  simple: { classes: "" }
9
- } }, i = { confirm: "typed" };
10
- function a({ kind: r, name: i, consequence: a, verb: o, confirm: s = "typed", onConfirm: c, trigger: l, open: u, onOpenChange: d, inline: f }) {
11
- let p = e();
12
- return /* @__PURE__ */ n(t, {
13
- title: o === void 0 ? p("deleteResource.deleteTitle", "Delete this {kind}?", { kind: r }) : p("deleteResource.title", "{verb} this {kind}?", {
10
+ } }, a = { confirm: "typed" }, o = /* @__PURE__ */ n(function({ kind: n, name: i, consequence: a, verb: o, confirm: s = "typed", onConfirm: c, trigger: l, open: u, onOpenChange: d, inline: f }, p) {
11
+ let m = e();
12
+ return /* @__PURE__ */ r(t, {
13
+ ref: p,
14
+ title: o === void 0 ? m("deleteResource.deleteTitle", "Delete this {kind}?", { kind: n }) : m("deleteResource.title", "{verb} this {kind}?", {
14
15
  verb: o,
15
- kind: r
16
+ kind: n
16
17
  }),
17
18
  description: a,
18
- confirmLabel: o === void 0 ? p("deleteResource.deleteConfirm", "Delete {kind}", { kind: r }) : p("deleteResource.confirm", "{verb} {kind}", {
19
+ confirmLabel: o === void 0 ? m("deleteResource.deleteConfirm", "Delete {kind}", { kind: n }) : m("deleteResource.confirm", "{verb} {kind}", {
19
20
  verb: o,
20
- kind: r
21
+ kind: n
21
22
  }),
22
23
  onConfirm: c,
23
24
  tone: "danger",
@@ -27,9 +28,9 @@ function a({ kind: r, name: i, consequence: a, verb: o, confirm: s = "typed", on
27
28
  ...d ? { onOpenChange: d } : {},
28
29
  ...f ? { inline: f } : {}
29
30
  });
30
- }
31
- process.env.NODE_ENV !== "production" && (a.displayName = "DeleteResource");
31
+ });
32
+ process.env.NODE_ENV !== "production" && (o.displayName = "DeleteResource");
32
33
  //#endregion
33
- export { a as DeleteResource, i as KAESO_DELETE_RESOURCE_DEFAULT_VARIANTS, r as KAESO_DELETE_RESOURCE_VARIANTS };
34
+ export { o as DeleteResource, a as KAESO_DELETE_RESOURCE_DEFAULT_VARIANTS, i as KAESO_DELETE_RESOURCE_VARIANTS };
34
35
 
35
36
  //# sourceMappingURL=delete-resource.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"delete-resource.js","names":["useUiText","KAESO_DELETE_RESOURCE_VARIANTS","KAESO_DELETE_RESOURCE_DEFAULT_VARIANTS","DeleteResource","t","AlertDialog","verb","consequence","confirm","name","trigger","open","onOpenChange","inline"],"sources":["../../src/blocks/delete-resource/delete-resource.tsx"],"sourcesContent":["import type { ReactElement, ReactNode } from \"react\";\nimport { AlertDialog } from \"../../components/dialog/dialog.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_DELETE_RESOURCE_VARIANTS = {\n confirm: {\n typed: { classes: \"\" },\n simple: { classes: \"\" },\n },\n} as const;\nexport const KAESO_DELETE_RESOURCE_DEFAULT_VARIANTS = { confirm: \"typed\" } as const;\n\nexport interface DeleteResourceProps {\n kind: string;\n name: string;\n consequence: ReactNode;\n verb?: string | undefined;\n confirm?: keyof typeof KAESO_DELETE_RESOURCE_VARIANTS.confirm | undefined;\n onConfirm: () => void | Promise<void>;\n trigger?: ReactElement | undefined;\n open?: boolean | undefined;\n onOpenChange?: ((open: boolean) => void) | undefined;\n inline?: boolean | undefined;\n}\n\nexport function DeleteResource({ kind, name, consequence, verb, confirm = \"typed\", onConfirm, trigger, open, onOpenChange, inline }: DeleteResourceProps) {\n const t = useUiText();\n return (\n <AlertDialog\n title={\n verb === undefined ? t(\"deleteResource.deleteTitle\", \"Delete this {kind}?\", { kind }) : t(\"deleteResource.title\", \"{verb} this {kind}?\", { verb, kind })\n }\n description={consequence}\n confirmLabel={\n verb === undefined ? t(\"deleteResource.deleteConfirm\", \"Delete {kind}\", { kind }) : t(\"deleteResource.confirm\", \"{verb} {kind}\", { verb, kind })\n }\n onConfirm={onConfirm}\n tone=\"danger\"\n {...(confirm === \"typed\" ? { confirmText: name } : {})}\n {...(trigger ? { trigger } : {})}\n {...(open !== undefined ? { open } : {})}\n {...(onOpenChange ? { onOpenChange } : {})}\n {...(inline ? { inline } : {})}\n />\n );\n}\nif (process.env.NODE_ENV !== \"production\") DeleteResource.displayName = \"DeleteResource\";\n"],"mappings":";;;;;AAIA,IAAaC,IAAiC,EAC5C,SAAS;CACP,OAAO,EAAE,SAAS,GAAG;CACrB,QAAQ,EAAE,SAAS,GAAG;AACxB,EACF,GACaC,IAAyC,EAAE,SAAS,QAAQ;AAezE,SAAgBC,EAAe,EAAE,SAAM,SAAM,gBAAa,SAAM,aAAU,SAAS,cAAW,YAAS,SAAM,iBAAc,aAA+B;CACxJ,IAAMC,IAAIJ,EAAU;CACpB,OACE,kBAACK,GAAD;EACE,OACEC,MAAS,KAAA,IAAYF,EAAE,8BAA8B,uBAAuB,EAAE,QAAK,CAAC,IAAIA,EAAE,wBAAwB,uBAAuB;GAAE;GAAM;EAAK,CAAC;EAEzJ,aAAaG;EACb,cACED,MAAS,KAAA,IAAYF,EAAE,gCAAgC,iBAAiB,EAAE,QAAK,CAAC,IAAIA,EAAE,0BAA0B,iBAAiB;GAAE;GAAM;EAAK,CAAC;EAEtI;EACX,MAAK;EACL,GAAKI,MAAY,UAAU,EAAE,aAAaC,EAAK,IAAI,CAAC;EACpD,GAAKC,IAAU,EAAE,WAAQ,IAAI,CAAC;EAC9B,GAAKC,MAAS,KAAA,IAAuB,CAAC,IAAZ,EAAE,QAAK;EACjC,GAAKC,IAAe,EAAE,gBAAa,IAAI,CAAC;EACxC,GAAKC,IAAS,EAAE,UAAO,IAAI,CAAC;CAC7B,CAAA;AAEL;AACA,QAAA,IAAA,aAA6B,iBAAc,EAAe,cAAc"}
1
+ {"version":3,"file":"delete-resource.js","names":["useUiText","KAESO_DELETE_RESOURCE_VARIANTS","KAESO_DELETE_RESOURCE_DEFAULT_VARIANTS","DeleteResource","t","AlertDialog","verb","consequence","confirm","name","trigger","open","onOpenChange","inline"],"sources":["../../src/blocks/delete-resource/delete-resource.tsx"],"sourcesContent":["import { forwardRef, type ReactElement, type ReactNode } from \"react\";\nimport { AlertDialog } from \"../../components/dialog/dialog.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_DELETE_RESOURCE_VARIANTS = {\n confirm: {\n typed: { classes: \"\" },\n simple: { classes: \"\" },\n },\n} as const;\nexport const KAESO_DELETE_RESOURCE_DEFAULT_VARIANTS = { confirm: \"typed\" } as const;\n\nexport interface DeleteResourceProps {\n kind: string;\n name: string;\n consequence: ReactNode;\n verb?: string | undefined;\n confirm?: keyof typeof KAESO_DELETE_RESOURCE_VARIANTS.confirm | undefined;\n onConfirm: () => void | Promise<void>;\n trigger?: ReactElement | undefined;\n open?: boolean | undefined;\n onOpenChange?: ((open: boolean) => void) | undefined;\n inline?: boolean | undefined;\n}\n\nexport const DeleteResource = /* @__PURE__ */ forwardRef<HTMLDivElement, DeleteResourceProps>(function DeleteResource(\n { kind, name, consequence, verb, confirm = \"typed\", onConfirm, trigger, open, onOpenChange, inline },\n ref,\n) {\n const t = useUiText();\n return (\n <AlertDialog\n ref={ref}\n title={\n verb === undefined ? t(\"deleteResource.deleteTitle\", \"Delete this {kind}?\", { kind }) : t(\"deleteResource.title\", \"{verb} this {kind}?\", { verb, kind })\n }\n description={consequence}\n confirmLabel={\n verb === undefined ? t(\"deleteResource.deleteConfirm\", \"Delete {kind}\", { kind }) : t(\"deleteResource.confirm\", \"{verb} {kind}\", { verb, kind })\n }\n onConfirm={onConfirm}\n tone=\"danger\"\n {...(confirm === \"typed\" ? { confirmText: name } : {})}\n {...(trigger ? { trigger } : {})}\n {...(open !== undefined ? { open } : {})}\n {...(onOpenChange ? { onOpenChange } : {})}\n {...(inline ? { inline } : {})}\n />\n );\n});\nif (process.env.NODE_ENV !== \"production\") DeleteResource.displayName = \"DeleteResource\";\n"],"mappings":";;;;;;AAIA,IAAaC,IAAiC,EAC5C,SAAS;CACP,OAAO,EAAE,SAAS,GAAG;CACrB,QAAQ,EAAE,SAAS,GAAG;AACxB,EACF,GACaC,IAAyC,EAAE,SAAS,QAAQ,GAe5DC,IAAiC,kBAAgD,SAC5F,EAAE,SAAM,SAAM,gBAAa,SAAM,aAAU,SAAS,cAAW,YAAS,SAAM,iBAAc,aAC5F,GACA;CACA,IAAMC,IAAIJ,EAAU;CACpB,OACE,kBAACK,GAAD;EACO;EACL,OACEC,MAAS,KAAA,IAAYF,EAAE,8BAA8B,uBAAuB,EAAE,QAAK,CAAC,IAAIA,EAAE,wBAAwB,uBAAuB;GAAE;GAAM;EAAK,CAAC;EAEzJ,aAAaG;EACb,cACED,MAAS,KAAA,IAAYF,EAAE,gCAAgC,iBAAiB,EAAE,QAAK,CAAC,IAAIA,EAAE,0BAA0B,iBAAiB;GAAE;GAAM;EAAK,CAAC;EAEtI;EACX,MAAK;EACL,GAAKI,MAAY,UAAU,EAAE,aAAaC,EAAK,IAAI,CAAC;EACpD,GAAKC,IAAU,EAAE,WAAQ,IAAI,CAAC;EAC9B,GAAKC,MAAS,KAAA,IAAuB,CAAC,IAAZ,EAAE,QAAK;EACjC,GAAKC,IAAe,EAAE,gBAAa,IAAI,CAAC;EACxC,GAAKC,IAAS,EAAE,UAAO,IAAI,CAAC;CAC7B,CAAA;AAEL,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAe,cAAc"}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { t as e } from "../chunks/cn-Dj6sRgkF.js";
3
- import { t } from "../chunks/app-frame-C8csevkL.js";
4
- import { r as n } from "../chunks/page-header-DjUMDG69.js";
3
+ import { t } from "../chunks/app-frame-DogGRmsu.js";
4
+ import { r as n } from "../chunks/page-header-DL2y2iZp.js";
5
5
  import { t as r } from "../chunks/empty-DvhyMXQq.js";
6
6
  import { a as i, t as a } from "../chunks/section-Ce1efbsP.js";
7
7
  import { Fragment as o, jsx as s, jsxs as c } from "react/jsx-runtime";
@@ -1,68 +1,69 @@
1
1
  "use client";
2
2
  import { i as e } from "../chunks/context-BELWW79w.js";
3
- import { i as t } from "../chunks/input-TyLIaQ5k.js";
4
- import { r as n } from "../chunks/toolbar-DL6zVrzU.js";
3
+ import { o as t } from "../chunks/input-2VJuj_M4.js";
4
+ import { r as n } from "../chunks/toolbar-WA_oZgu-.js";
5
5
  import { t as r } from "../chunks/empty-DvhyMXQq.js";
6
- import { i, o as a } from "../chunks/list-CkOozrVY.js";
7
- import { useMemo as o, useState as s } from "react";
8
- import { jsx as c, jsxs as l } from "react/jsx-runtime";
6
+ import { i, o as a } from "../chunks/list-M1csq-d4.js";
7
+ import { forwardRef as o, useMemo as s, useState as c } from "react";
8
+ import { jsx as l, jsxs as u } from "react/jsx-runtime";
9
9
  //#region src/blocks/resource-list/resource-list.tsx
10
- var u = { grouping: {
10
+ var d = { grouping: {
11
11
  grouped: { classes: "" },
12
12
  flat: { classes: "" }
13
- } }, d = { grouping: "grouped" };
14
- function f(e) {
13
+ } }, f = { grouping: "grouped" };
14
+ function p(e) {
15
15
  return `${e.textValue ?? (typeof e.title == "string" ? e.title : "")} ${e.displayId ?? ""}`.toLowerCase();
16
16
  }
17
- function p({ groups: u, onOpen: d, bulkActions: p = [], toolbar: m, emptyTitle: h, emptyDescription: g, emptyAction: _, "aria-label": v }) {
18
- let y = e(), [b, x] = s(""), [S, C] = s(/* @__PURE__ */ new Set()), w = b.trim().toLowerCase(), T = o(() => u.map((e) => ({
17
+ var m = /* @__PURE__ */ o(function({ groups: o, onOpen: d, bulkActions: f = [], toolbar: m, emptyTitle: h, emptyDescription: g, emptyAction: _, "aria-label": v }, y) {
18
+ let b = e(), [x, S] = c(""), [C, w] = c(/* @__PURE__ */ new Set()), T = x.trim().toLowerCase(), E = s(() => o.map((e) => ({
19
19
  ...e,
20
- items: e.items.filter((e) => !w || f(e).includes(w))
21
- })).filter((e) => e.items.length > 0), [u, w]), E = o(() => {
22
- let e = new Set(T.flatMap((e) => e.items.map((e) => e.id)));
23
- return new Set([...S].filter((t) => e.has(t)));
24
- }, [T, S]);
25
- return /* @__PURE__ */ l("div", {
20
+ items: e.items.filter((e) => !T || p(e).includes(T))
21
+ })).filter((e) => e.items.length > 0), [o, T]), D = s(() => {
22
+ let e = new Set(E.flatMap((e) => e.items.map((e) => e.id)));
23
+ return new Set([...C].filter((t) => e.has(t)));
24
+ }, [E, C]);
25
+ return /* @__PURE__ */ u("div", {
26
+ ref: y,
26
27
  className: "flex flex-col",
27
- children: [/* @__PURE__ */ l(n, {
28
- "aria-label": y("resourceList.filters", "Filters"),
28
+ children: [/* @__PURE__ */ u(n, {
29
+ "aria-label": b("resourceList.filters", "Filters"),
29
30
  children: [
30
31
  m,
31
- /* @__PURE__ */ c(n.Spacer, {}),
32
- /* @__PURE__ */ c("div", {
32
+ /* @__PURE__ */ l(n.Spacer, {}),
33
+ /* @__PURE__ */ l("div", {
33
34
  className: "w-240",
34
- children: /* @__PURE__ */ c(t, {
35
- "aria-label": y("resourceList.search", "Search"),
36
- placeholder: y("resourceList.search", "Search"),
37
- value: b,
38
- onChange: (e) => x(e.target.value),
39
- onClear: () => x(""),
35
+ children: /* @__PURE__ */ l(t, {
36
+ "aria-label": b("resourceList.search", "Search"),
37
+ placeholder: b("resourceList.search", "Search"),
38
+ value: x,
39
+ onChange: (e) => S(e.target.value),
40
+ onClear: () => S(""),
40
41
  shortcut: ["/"]
41
42
  })
42
43
  })
43
44
  ]
44
- }), T.length === 0 ? /* @__PURE__ */ c(r, {
45
+ }), E.length === 0 ? /* @__PURE__ */ l(r, {
45
46
  size: "md",
46
- title: w ? y("resourceList.noMatches", "No matches") : h ?? y("resourceList.nothingHereYet", "Nothing here yet"),
47
- ...w ? { description: y("resourceList.tryShorterSearch", "Try a shorter search.") } : g ? { description: g } : {},
48
- ...!w && _ ? { actions: _ } : {}
49
- }) : /* @__PURE__ */ c(i, {
47
+ title: T ? b("resourceList.noMatches", "No matches") : h ?? b("resourceList.nothingHereYet", "Nothing here yet"),
48
+ ...T ? { description: b("resourceList.tryShorterSearch", "Try a shorter search.") } : g ? { description: g } : {},
49
+ ...!T && _ ? { actions: _ } : {}
50
+ }) : /* @__PURE__ */ l(i, {
50
51
  "aria-label": v,
51
- groups: T,
52
- selectable: p.length > 0,
53
- selected: E,
54
- onSelectedChange: C,
52
+ groups: E,
53
+ selectable: f.length > 0,
54
+ selected: D,
55
+ onSelectedChange: w,
55
56
  ...d ? { onOpen: d } : {},
56
- selectionActions: p.map((e) => /* @__PURE__ */ c(a, {
57
+ selectionActions: f.map((e) => /* @__PURE__ */ l(a, {
57
58
  ...e.icon ? { icon: e.icon } : {},
58
- onClick: () => e.onClick([...E]),
59
+ onClick: () => e.onClick([...D]),
59
60
  children: e.label
60
61
  }, e.label))
61
62
  })]
62
63
  });
63
- }
64
- process.env.NODE_ENV !== "production" && (p.displayName = "ResourceList");
64
+ });
65
+ process.env.NODE_ENV !== "production" && (m.displayName = "ResourceList");
65
66
  //#endregion
66
- export { d as KAESO_RESOURCE_LIST_DEFAULT_VARIANTS, u as KAESO_RESOURCE_LIST_VARIANTS, p as ResourceList };
67
+ export { f as KAESO_RESOURCE_LIST_DEFAULT_VARIANTS, d as KAESO_RESOURCE_LIST_VARIANTS, m as ResourceList };
67
68
 
68
69
  //# sourceMappingURL=resource-list.js.map