@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
package/NOTICE.md CHANGED
@@ -1,5 +1,5 @@
1
1
  # Notices
2
2
 
3
- Fonts: Inter (SIL Open Font License 1.1) and Geist Mono (SIL Open Font License 1.1), self-hosted as unmodified subsets of their Fontsource builds and shipped in `dist/fonts/` with `LICENSE-Inter.txt` and `LICENSE-GeistMono.txt`. Icons: Hugeicons free, Stroke Rounded (MIT). Provider marks: the trademarks of the providers they name, shown only to identify each provider, from each provider's own vector in one colour. The repository's `NOTICE.md` lists the source of each.
3
+ Fonts: Inter (SIL Open Font License 1.1) and Geist Mono (SIL Open Font License 1.1), self-hosted as unmodified subsets of their Fontsource builds and shipped in `dist/fonts/` with `LICENSE-Inter.txt` and `LICENSE-GeistMono.txt`. Icons: Hugeicons free, Stroke Rounded (MIT). Provider marks: the trademarks of the providers they name, shown only to identify each provider, from each provider's own vector in one colour. Client marks: the trademarks of the agent clients they name, from Simple Icons (CC0 1.0), in one colour. The repository's `NOTICE.md` lists the source of each.
4
4
 
5
5
  The runtime dependencies are listed in `package.json`; each is MIT, ISC, BSD-2-Clause, BSD-3-Clause, Apache-2.0 or 0BSD licensed.
@@ -1,6 +1,85 @@
1
1
  # @logicplanes/kaeso-ui component guides
2
2
 
3
- Version 0.4.2. Generated from the showcase's demo modules (apps/showcase/src/demos); do not edit. For each component: what it is for, its import, keyboard, accessibility, do and don't, and every example's code. Props and variants: `component-registry.md`.
3
+ Version 0.4.3. Generated from the showcase's demo modules (apps/showcase/src/demos); do not edit. For each component: what it is for, its import, keyboard, accessibility, do and don't, and every example's code. Props and variants: `component-registry.md`.
4
+
5
+ ## AgentAttribution
6
+
7
+ A person's avatar with the agent that acted for them as a badge on its corner, for audit rows and activity.
8
+
9
+ `import { AgentAttribution } from "@logicplanes/kaeso-ui";`
10
+
11
+ ### Accessibility
12
+
13
+ - One role=img named after both, such as “Ada Okafor via Release helper (Claude)”, in the page's language.
14
+
15
+ ### Examples
16
+
17
+ #### Activity
18
+
19
+ ```tsx
20
+ <div className="flex flex-col gap-16">
21
+ {activity.map((a) => (
22
+ <div key={a.person} className="flex items-center gap-12">
23
+ <AgentAttribution name={a.person} agent={a.agent} />
24
+ <Text>{a.action}</Text>
25
+ </div>
26
+ ))}
27
+ </div>
28
+ ```
29
+
30
+ #### Sizes
31
+
32
+ ```tsx
33
+ <div className="flex flex-wrap items-end gap-16">
34
+ {([20, 24, 28, 32, 40] as const).map((s) => (
35
+ <AgentAttribution key={s} name="Ada Okafor" agent={{ name: "Release helper", model: "claude" }} size={s} />
36
+ ))}
37
+ </div>
38
+ ```
39
+
40
+ ## AgentAvatar
41
+
42
+ An agent acting for a person: one bot face on an ink square, the same for every agent.
43
+
44
+ `import { AgentAvatar, useModelName } from "@logicplanes/kaeso-ui";`
45
+
46
+ ### Accessibility
47
+
48
+ - role=img named after the agent; pass decorative when the name is written next to it.
49
+ - Every agent looks the same; write its model family with useModelName where it matters.
50
+
51
+ ### Examples
52
+
53
+ #### Agents
54
+
55
+ ```tsx
56
+ function Agents() {
57
+ const modelName = useModelName();
58
+ return (
59
+ <div className="flex flex-col gap-12">
60
+ {agents.map((a) => (
61
+ <div key={a.model} className="flex items-center gap-8">
62
+ <AgentAvatar name={a.name} decorative />
63
+ <Text>{a.name}</Text>
64
+ <Text variant="small" tone="secondary">
65
+ {modelName(a.model)}
66
+ </Text>
67
+ </div>
68
+ ))}
69
+ </div>
70
+ );
71
+ }
72
+ ```
73
+
74
+ #### Sizes
75
+
76
+ ```tsx
77
+ <div className="flex flex-wrap items-end gap-12">
78
+ {([20, 24, 28, 32, 40] as const).map((s) => (
79
+ <AgentAvatar key={s} name="Release helper" size={s} />
80
+ ))}
81
+ </div>
82
+ ```
4
83
 
5
84
  ## AlertDialog
6
85
 
@@ -595,6 +674,28 @@ An 18px box: raised and ringed, ink when checked, with a check that draws itself
595
674
  </CheckboxGroup>
596
675
  ```
597
676
 
677
+ ## ClientButton
678
+
679
+ An agent client's mark on a raised tile, such as Claude, Cursor or GitHub Copilot, that opens how to connect it.
680
+
681
+ `import { ClientButton } from "@logicplanes/kaeso-ui";`
682
+
683
+ ### Accessibility
684
+
685
+ - A button named by `aria-label`, which is also its tooltip; the mark is decorative.
686
+
687
+ ### Examples
688
+
689
+ #### Clients
690
+
691
+ ```tsx
692
+ <div className="flex gap-8">
693
+ <ClientButton client="claude" aria-label="Add to Claude Code" />
694
+ <ClientButton client="cursor" aria-label="Add to Cursor" />
695
+ <ClientButton client="github-copilot" aria-label="Add to GitHub Copilot" />
696
+ </div>
697
+ ```
698
+
598
699
  ## ClipboardText
599
700
 
600
701
  Copy a value: a read-only pill field, a copy circle, or inline text that copies itself.
@@ -622,7 +723,7 @@ A read-only pill with the value in mono and a copy circle inside.
622
723
 
623
724
  ```tsx
624
725
  <div className="w-400">
625
- <ClipboardText value="https://gateway.northwind.example/v1" label="Copy base URL" />
726
+ <ClipboardText value="https://kaeso.example.com/v1" label="Copy base URL" />
626
727
  </div>
627
728
  ```
628
729
 
@@ -679,7 +780,7 @@ Highlighted code on a well in Kaeso's monochrome theme: copy on hover, tabs, lin
679
780
 
680
781
  ```tsx
681
782
  <div className="w-full">
682
- <CodeBlock tabs={sdkSnippets({ baseUrl: "https://gateway.northwind.example" })} />
783
+ <CodeBlock tabs={sdkSnippets({ baseUrl: "https://kaeso.example.com" })} />
683
784
  </div>
684
785
  ```
685
786
 
@@ -1456,7 +1557,7 @@ function WithResult() {
1456
1557
  title: "Key created",
1457
1558
  description: "Copy the key now: it's shown once, and Kaeso keeps only a hash of it.",
1458
1559
  size: "lg",
1459
- content: <SecretReveal secret={SECRET} name={name.trim()} baseUrl="https://gateway.northwind.example" model="gpt-5-mini" />,
1560
+ content: <SecretReveal secret={SECRET} name={name.trim()} baseUrl="https://kaeso.example.com" model="gpt-5-mini" />,
1460
1561
  footer: <Button onClick={close}>Done</Button>,
1461
1562
  }
1462
1563
  : undefined
@@ -1924,6 +2025,29 @@ A semicircle for “budget used”; thresholds as ticks.
1924
2025
  <Gauge aria-label="Monthly budget used" value={0.64} label="of $500.00 budget" valueLabel="$320.00" />
1925
2026
  ```
1926
2027
 
2028
+ ## GrantSummary
2029
+
2030
+ What an agent may do in a few short lines, each after a check mark, as on its consent page.
2031
+
2032
+ `import { GrantSummary } from "@logicplanes/kaeso-ui";`
2033
+
2034
+ ### Accessibility
2035
+
2036
+ - A list named by `aria-label`; the check marks are decorative.
2037
+
2038
+ ### Examples
2039
+
2040
+ #### An agent's rights
2041
+
2042
+ ```tsx
2043
+ <GrantSummary
2044
+ className="w-360"
2045
+ aria-label="What it can do"
2046
+ items={["Manages projects, keys, and models in Northwind", "Reads the rest of Northwind", "Also in organizations you join later"]}
2047
+ footer="For 90 days; revoke it any time in your account settings."
2048
+ />
2049
+ ```
2050
+
1927
2051
  ## Grid
1928
2052
 
1929
2053
  Grid, Stack and Inline: layout with gaps from the spacing scale only.
@@ -2139,7 +2263,7 @@ An invalid value gets the danger ring; what is wrong goes in a toast.
2139
2263
  ```tsx
2140
2264
  <div className="flex w-360 flex-col gap-12">
2141
2265
  <Input aria-label="Email" leadingIcon={icons.mail} placeholder="ada@northwind.example" />
2142
- <Input aria-label="Gateway URL" prefix="https://" placeholder="gateway.northwind.example" />
2266
+ <Input aria-label="Gateway URL" prefix="https://" placeholder="kaeso.example.com" />
2143
2267
  <Input aria-label="Rate limit" suffix="/ min" defaultValue="600" align="end" />
2144
2268
  </div>
2145
2269
  ```
@@ -2171,7 +2295,7 @@ Addons inside the pill: text, icons, a ghost circle or a key cap, sharing one fo
2171
2295
  <div className="flex w-400 flex-col gap-12">
2172
2296
  <InputGroup>
2173
2297
  <InputGroup.Addon>https://</InputGroup.Addon>
2174
- <InputGroup.Input aria-label="Host" placeholder="gateway.northwind.example" />
2298
+ <InputGroup.Input aria-label="Host" placeholder="kaeso.example.com" />
2175
2299
  <InputGroup.Addon>/v1</InputGroup.Addon>
2176
2300
  </InputGroup>
2177
2301
  <InputGroup trailingButton>
@@ -2415,11 +2539,13 @@ function Wizard() {
2415
2539
  const [view, setView] = useState<"pick" | "review" | "custom">("pick");
2416
2540
  const [model, setModel] = useState("");
2417
2541
  const [custom, setCustom] = useState("");
2542
+ const [query, setQuery] = useState("");
2418
2543
  const m = models.find((x) => x.model === model);
2419
2544
  const start = () => {
2420
2545
  setView("pick");
2421
2546
  setModel("");
2422
2547
  setCustom("");
2548
+ setQuery("");
2423
2549
  setOpen(true);
2424
2550
  };
2425
2551
  const close = () => setOpen(false);
@@ -2431,29 +2557,31 @@ function Wizard() {
2431
2557
  const pick = {
2432
2558
  title: "Add model",
2433
2559
  description: "Pick a model from the models.dev catalogue.",
2560
+ toolbar: <SearchInput aria-label="Search models" placeholder="Search" value={query} onChange={(e) => setQuery(e.target.value)} data-autofocus />,
2434
2561
  content: (
2435
2562
  <div className="flex flex-col gap-12">
2436
2563
  <List
2437
2564
  aria-label="Models on models.dev"
2438
2565
  density="compact"
2439
- items={models.map((x) => ({
2440
- id: x.model,
2441
- textValue: x.model,
2442
- title: <ModelLabel provider={x.provider} providerName={providerNames[x.provider]} model={x.model} name={x.name} />,
2443
- }))}
2566
+ items={models
2567
+ .filter((x) => x.model.includes(query.trim().toLowerCase()))
2568
+ .map((x) => ({
2569
+ id: x.model,
2570
+ textValue: x.model,
2571
+ title: <ModelLabel provider={x.provider} providerName={providerNames[x.provider]} model={x.model} name={x.name} />,
2572
+ }))}
2444
2573
  onOpen={(item) => {
2445
2574
  setModel(item.id);
2446
2575
  setView("review");
2447
2576
  }}
2448
2577
  />
2449
- <Text variant="small" tone="secondary">
2450
- Not on models.dev?{" "}
2451
- <Button variant="link" size="sm" onClick={() => setView("custom")}>
2452
- Add a custom model
2453
- </Button>
2454
- </Text>
2455
2578
  </div>
2456
2579
  ),
2580
+ footerStart: (
2581
+ <Button variant="ghost" leadingIcon={icons.add} onClick={() => setView("custom")}>
2582
+ Add a custom model
2583
+ </Button>
2584
+ ),
2457
2585
  };
2458
2586
  const second = {
2459
2587
  review: {
@@ -3409,9 +3537,23 @@ Choosing a provider from any number of them: connected ones first with their key
3409
3537
  ### Accessibility
3410
3538
 
3411
3539
  - A search field over a listbox, with Connected and Other providers as groups; each option reads the provider's name and hint.
3540
+ - As tiles, a radio group: arrow keys move the choice, and a press or click on a tile calls onChoose, so a dialog step can continue at once.
3412
3541
 
3413
3542
  ### Examples
3414
3543
 
3544
+ #### Tiles in a dialog's first step
3545
+
3546
+ ```tsx
3547
+ function Grid() {
3548
+ const [provider, setProvider] = useState<string | null>(null);
3549
+ return (
3550
+ <div className="w-512 max-w-full">
3551
+ <ProviderPicker appearance="grid" aria-label="Provider" providers={providers} value={provider} onValueChange={setProvider} />
3552
+ </div>
3553
+ );
3554
+ }
3555
+ ```
3556
+
3415
3557
  #### In a dialog step
3416
3558
 
3417
3559
  ```tsx
@@ -3924,7 +4066,7 @@ The one-time secret: calm, centered, certain. Copy it, store it, see how to use
3924
4066
 
3925
4067
  ```tsx
3926
4068
  <div className="w-560">
3927
- <SecretReveal secret={SECRET} name="checkout-web" baseUrl="https://gateway.northwind.example" model="gpt-5-mini" />
4069
+ <SecretReveal secret={SECRET} name="checkout-web" baseUrl="https://kaeso.example.com" model="gpt-5-mini" />
3928
4070
  </div>
3929
4071
  ```
3930
4072
 
@@ -3932,7 +4074,7 @@ The one-time secret: calm, centered, certain. Copy it, store it, see how to use
3932
4074
 
3933
4075
  ```tsx
3934
4076
  <div className="w-640">
3935
- <EnvironmentSnippet baseUrl="https://gateway.northwind.example" />
4077
+ <EnvironmentSnippet baseUrl="https://kaeso.example.com" />
3936
4078
  </div>
3937
4079
  ```
3938
4080
 
@@ -3943,12 +4085,12 @@ The one-time secret: calm, centered, certain. Copy it, store it, see how to use
3943
4085
  <SecretReveal
3944
4086
  secret={SECRET}
3945
4087
  name="terraform"
3946
- baseUrl="https://gateway.northwind.example"
4088
+ baseUrl="https://kaeso.example.com"
3947
4089
  snippets={[
3948
4090
  {
3949
4091
  label: "curl",
3950
4092
  lang: "bash",
3951
- code: `curl https://gateway.northwind.example/platform/v1/orgs/org_01/projects \\\n -H "Authorization: Bearer ${SECRET}"`,
4093
+ code: `curl https://kaeso.example.com/platform/v1/orgs/org_01/projects \\\n -H "Authorization: Bearer ${SECRET}"`,
3952
4094
  },
3953
4095
  ]}
3954
4096
  />
@@ -4545,6 +4687,59 @@ An 8px semantic dot with its word. Status is never color alone.
4545
4687
  </div>
4546
4688
  ```
4547
4689
 
4690
+ ## SwapText
4691
+
4692
+ Text that changes with state in a place sized for its widest version, so nothing around it moves.
4693
+
4694
+ `import { SwapText } from "@logicplanes/kaeso-ui";`
4695
+
4696
+ ### Accessibility
4697
+
4698
+ - Only the current text is read; the reserved versions are hidden from screen readers.
4699
+ - Buttons take reserveLabels, which wraps their label in SwapText; reach for SwapText itself for text outside a button.
4700
+
4701
+ ### Examples
4702
+
4703
+ #### Basic
4704
+
4705
+ ```tsx
4706
+ function Basic() {
4707
+ const [active, setActive] = useState(true);
4708
+ return (
4709
+ <div className="flex items-center gap-12 text-body">
4710
+ <Switch size="sm" aria-label="Key active" checked={active} onCheckedChange={setActive} />
4711
+ <span className="font-medium text-fg">
4712
+ <SwapText reserve={["Active", "Paused"]} align="start">
4713
+ {active ? "Active" : "Paused"}
4714
+ </SwapText>
4715
+ </span>
4716
+ <span className="text-fg-secondary">production</span>
4717
+ </div>
4718
+ );
4719
+ }
4720
+ ```
4721
+
4722
+ #### Aligned at the start
4723
+
4724
+ In a column, start-aligned labels keep the text after them on one line.
4725
+
4726
+ ```tsx
4727
+ <div className="flex flex-col gap-8 text-body">
4728
+ {[
4729
+ { status: "Streaming", model: "gpt-5-mini" },
4730
+ { status: "Done", model: "claude-sonnet-4-5" },
4731
+ { status: "Failed", model: "gpt-4.1-nano" },
4732
+ ].map((row) => (
4733
+ <div key={row.model} className="flex items-center gap-12">
4734
+ <SwapText reserve={STATUSES} align="start" className="font-medium text-fg">
4735
+ {row.status}
4736
+ </SwapText>
4737
+ <span className="mono text-fg-secondary">{row.model}</span>
4738
+ </div>
4739
+ ))}
4740
+ </div>
4741
+ ```
4742
+
4548
4743
  ## Switch
4549
4744
 
4550
4745
  A pill track and a round thumb that travels in 180ms.
@@ -4962,6 +5157,44 @@ An image drawn twice, once for each theme, such as a diagram: it follows the the
4962
5157
  <ThemeImage light="/demos/route.light.svg" dark="/demos/route.dark.svg" alt="Route of a request: app, Kaeso, provider" width={364} height={49} />
4963
5158
  ```
4964
5159
 
5160
+ ## ThemeMenu
5161
+
5162
+ A circle that opens system, light or dark, stored as `kaeso:theme`; its icon shows the theme in use.
5163
+
5164
+ `import { ThemeMenu } from "@logicplanes/kaeso-ui";`
5165
+
5166
+ ### Keyboard
5167
+
5168
+ | Key | Action |
5169
+ |---|---|
5170
+ | Enter Space | Opens the menu |
5171
+ | Up Down | Moves between the choices |
5172
+ | Enter | Chooses and closes |
5173
+ | Escape | Closes and returns focus |
5174
+
5175
+ ### Accessibility
5176
+
5177
+ - Named Theme in the provider's language; the menu marks the current choice as checked.
5178
+ - Reads and sets the choice of the nearest ThemeProvider; every provider on the page follows it.
5179
+
5180
+ ### Examples
5181
+
5182
+ #### Basic
5183
+
5184
+ ```tsx
5185
+ <ThemeProvider>
5186
+ <ThemeMenu />
5187
+ </ThemeProvider>
5188
+ ```
5189
+
5190
+ #### Raised
5191
+
5192
+ ```tsx
5193
+ <ThemeProvider>
5194
+ <ThemeMenu variant="secondary" size="md" />
5195
+ </ThemeProvider>
5196
+ ```
5197
+
4965
5198
  ## ThemeSelect
4966
5199
 
4967
5200
  A select for system, light or dark, stored as `kaeso:theme`, with its label in the provider's language.
@@ -5022,6 +5255,35 @@ A select for system, light or dark, stored as `kaeso:theme`, with its label in t
5022
5255
  </ThemeProvider>
5023
5256
  ```
5024
5257
 
5258
+ ## Thumbnail
5259
+
5260
+ A square image someone sent, such as a photo in a request's conversation, cropped to fill a well.
5261
+
5262
+ `import { Thumbnail } from "@logicplanes/kaeso-ui";`
5263
+
5264
+ ### Accessibility
5265
+
5266
+ - Alt is required: say what the image shows, or the sender's own description when the request carried one.
5267
+ - When the image can't load, its text alternative takes its place, so nothing is lost.
5268
+
5269
+ ### Examples
5270
+
5271
+ #### An image in a message
5272
+
5273
+ ```tsx
5274
+ <Thumbnail src="/demos/receipt.svg" alt="A receipt from Northwind Labs" />
5275
+ ```
5276
+
5277
+ #### Sizes
5278
+
5279
+ ```tsx
5280
+ <div className="flex flex-wrap items-end gap-12">
5281
+ <Thumbnail src="/demos/receipt.svg" alt="A receipt, 64px" size="sm" />
5282
+ <Thumbnail src="/demos/receipt.svg" alt="A receipt, 120px" />
5283
+ <Thumbnail src="/demos/receipt.svg" alt="A receipt, 160px" size="lg" />
5284
+ </div>
5285
+ ```
5286
+
5025
5287
  ## Timeline
5026
5288
 
5027
5289
  Events down a 1px line: the audit log.