@logicplanes/kaeso-ui 0.2.2 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (349) hide show
  1. package/AGENTS.md +2 -0
  2. package/NOTICE.md +1 -1
  3. package/ai/component-guides.md +223 -24
  4. package/ai/component-registry.json +985 -91
  5. package/ai/component-registry.md +219 -52
  6. package/ai/icons.md +1 -1
  7. package/ai/tokens.md +7 -3
  8. package/dist/blocks/delete-resource.js +1 -1
  9. package/dist/blocks/pages.js +5 -5
  10. package/dist/blocks/resource-list.js +4 -4
  11. package/dist/chunks/app-frame-B9vrgwaE.js +220 -0
  12. package/dist/chunks/app-frame-B9vrgwaE.js.map +1 -0
  13. package/dist/chunks/{avatar-D2nJNbtC.js → avatar-DOzOhYJr.js} +2 -2
  14. package/dist/chunks/{avatar-D2nJNbtC.js.map → avatar-DOzOhYJr.js.map} +1 -1
  15. package/dist/chunks/{badge-Dkyhs0_j.js → badge-wUHlj7m3.js} +2 -2
  16. package/dist/chunks/{badge-Dkyhs0_j.js.map → badge-wUHlj7m3.js.map} +1 -1
  17. package/dist/chunks/{banner-DxGBPQ7p.js → banner-BBlNFHd-.js} +4 -4
  18. package/dist/chunks/{banner-DxGBPQ7p.js.map → banner-BBlNFHd-.js.map} +1 -1
  19. package/dist/chunks/{button-DQvoOxVQ.js → button-CAPyW-v8.js} +8 -8
  20. package/dist/chunks/{button-DQvoOxVQ.js.map → button-CAPyW-v8.js.map} +1 -1
  21. package/dist/chunks/{calendar-CN3YJi2k.js → calendar-CBeptQFq.js} +2 -2
  22. package/dist/chunks/{calendar-CN3YJi2k.js.map → calendar-CBeptQFq.js.map} +1 -1
  23. package/dist/chunks/{checkbox-BgRdbfCE.js → checkbox-C5yvSS7O.js} +3 -3
  24. package/dist/chunks/{checkbox-BgRdbfCE.js.map → checkbox-C5yvSS7O.js.map} +1 -1
  25. package/dist/chunks/{cn-CidVUKMm.js → cn-DUDmdLpZ.js} +3 -1
  26. package/dist/chunks/cn-DUDmdLpZ.js.map +1 -0
  27. package/dist/chunks/{code-BADhvsgC.js → code-C49NzHUQ.js} +2 -2
  28. package/dist/chunks/{code-BADhvsgC.js.map → code-C49NzHUQ.js.map} +1 -1
  29. package/dist/chunks/{code-block-DxtladFW.js → code-block-DREsvJ-g.js} +24 -21
  30. package/dist/chunks/code-block-DREsvJ-g.js.map +1 -0
  31. package/dist/chunks/{collapsible-Cw_1aem5.js → collapsible-CDQq1Y9x.js} +6 -6
  32. package/dist/chunks/collapsible-CDQq1Y9x.js.map +1 -0
  33. package/dist/chunks/combobox-DqtzsAKG.js +314 -0
  34. package/dist/chunks/combobox-DqtzsAKG.js.map +1 -0
  35. package/dist/chunks/command-list-D5k0uvkR.js +417 -0
  36. package/dist/chunks/command-list-D5k0uvkR.js.map +1 -0
  37. package/dist/chunks/{copy-button-DXxn-YYZ.js → copy-button-CNpEnS04.js} +6 -6
  38. package/dist/chunks/{copy-button-DXxn-YYZ.js.map → copy-button-CNpEnS04.js.map} +1 -1
  39. package/dist/chunks/{core-K960A4OT.js → core-CqLWVMDI.js} +36 -36
  40. package/dist/chunks/core-CqLWVMDI.js.map +1 -0
  41. package/dist/chunks/{date-popup-B-6xhb-1.js → date-popup-BgDz6SUj.js} +4 -4
  42. package/dist/chunks/{date-popup-B-6xhb-1.js.map → date-popup-BgDz6SUj.js.map} +1 -1
  43. package/dist/chunks/{de-CTAo4KL7.js → de-CkXZKaBD.js} +37 -5
  44. package/dist/chunks/de-CkXZKaBD.js.map +1 -0
  45. package/dist/chunks/dialog-truWH0qe.js +353 -0
  46. package/dist/chunks/dialog-truWH0qe.js.map +1 -0
  47. package/dist/chunks/{empty-DIbBpytW.js → empty-YXmSkKzR.js} +2 -2
  48. package/dist/chunks/{empty-DIbBpytW.js.map → empty-YXmSkKzR.js.map} +1 -1
  49. package/dist/chunks/{field-d8V94bvZ.js → field-BZriODU7.js} +3 -3
  50. package/dist/chunks/field-BZriODU7.js.map +1 -0
  51. package/dist/chunks/{icon-CeNQtobn.js → icon-BqujXDUc.js} +2 -2
  52. package/dist/chunks/{icon-CeNQtobn.js.map → icon-BqujXDUc.js.map} +1 -1
  53. package/dist/chunks/{icon-button-_x1RUphC.js → icon-button-D4O4puwH.js} +3 -3
  54. package/dist/chunks/{icon-button-_x1RUphC.js.map → icon-button-D4O4puwH.js.map} +1 -1
  55. package/dist/chunks/identity-CsZvAUwu.js +361 -0
  56. package/dist/chunks/identity-CsZvAUwu.js.map +1 -0
  57. package/dist/chunks/{input-CNTfI6YE.js → input-B0wtkcNh.js} +5 -5
  58. package/dist/chunks/{input-CNTfI6YE.js.map → input-B0wtkcNh.js.map} +1 -1
  59. package/dist/chunks/{input-group-CYA1MEoZ.js → input-group-BQLw06B0.js} +33 -27
  60. package/dist/chunks/input-group-BQLw06B0.js.map +1 -0
  61. package/dist/chunks/{inset-BLMdxX4I.js → inset-BnBj8NJV.js} +12 -2
  62. package/dist/chunks/inset-BnBj8NJV.js.map +1 -0
  63. package/dist/chunks/{iso-field-1qmg7TP8.js → iso-field-BUXgY1dB.js} +5 -3
  64. package/dist/chunks/{iso-field-1qmg7TP8.js.map → iso-field-BUXgY1dB.js.map} +1 -1
  65. package/dist/chunks/{json-view-B6KHIWzh.js → json-view-BkG2hTXV.js} +11 -10
  66. package/dist/chunks/{json-view-B6KHIWzh.js.map → json-view-BkG2hTXV.js.map} +1 -1
  67. package/dist/chunks/{kbd-CBcBDvqU.js → kbd-DqWmbr_e.js} +2 -2
  68. package/dist/chunks/{kbd-CBcBDvqU.js.map → kbd-DqWmbr_e.js.map} +1 -1
  69. package/dist/chunks/{link-vz9aV8WX.js → link-YMcxM-BZ.js} +4 -4
  70. package/dist/chunks/{link-vz9aV8WX.js.map → link-YMcxM-BZ.js.map} +1 -1
  71. package/dist/chunks/{link-provider---9JdxTg.js → link-provider-BsUxhZKG.js} +2 -2
  72. package/dist/chunks/{link-provider---9JdxTg.js.map → link-provider-BsUxhZKG.js.map} +1 -1
  73. package/dist/chunks/list-wXZIZo_s.js +492 -0
  74. package/dist/chunks/list-wXZIZo_s.js.map +1 -0
  75. package/dist/chunks/{loader-CUehxvSZ.js → loader-ENBh2Fbt.js} +2 -2
  76. package/dist/chunks/{loader-CUehxvSZ.js.map → loader-ENBh2Fbt.js.map} +1 -1
  77. package/dist/chunks/{markdown-5NyaHHfN.js → markdown-DWyxjsSY.js} +10 -10
  78. package/dist/chunks/{markdown-5NyaHHfN.js.map → markdown-DWyxjsSY.js.map} +1 -1
  79. package/dist/chunks/{menu-DyVPwgfF.js → menu-Bnfi9P3t.js} +7 -7
  80. package/dist/chunks/{menu-DyVPwgfF.js.map → menu-Bnfi9P3t.js.map} +1 -1
  81. package/dist/chunks/{meter-DWhyzFGQ.js → meter-DhTnem4k.js} +2 -2
  82. package/dist/chunks/{meter-DWhyzFGQ.js.map → meter-DhTnem4k.js.map} +1 -1
  83. package/dist/chunks/nav-sheet-QqNRHo-y.js +60 -0
  84. package/dist/chunks/nav-sheet-QqNRHo-y.js.map +1 -0
  85. package/dist/chunks/{nav-wordmark-DLkItdvo.js → nav-wordmark-DmbT1Aiw.js} +2 -2
  86. package/dist/chunks/{nav-wordmark-DLkItdvo.js.map → nav-wordmark-DmbT1Aiw.js.map} +1 -1
  87. package/dist/chunks/option-checkbox-Df7WhGn4.js +25 -0
  88. package/dist/chunks/option-checkbox-Df7WhGn4.js.map +1 -0
  89. package/dist/chunks/over-sheet-B8vzr_zU.js +8 -0
  90. package/dist/chunks/over-sheet-B8vzr_zU.js.map +1 -0
  91. package/dist/chunks/{page-header-CEPZzhRp.js → page-header-Ccnrspbp.js} +5 -5
  92. package/dist/chunks/{page-header-CEPZzhRp.js.map → page-header-Ccnrspbp.js.map} +1 -1
  93. package/dist/chunks/{pagination-CCMxQ5pH.js → pagination-CEmWZNjp.js} +5 -4
  94. package/dist/chunks/{pagination-CCMxQ5pH.js.map → pagination-CEmWZNjp.js.map} +1 -1
  95. package/dist/chunks/picker-popover-C4ElNk7t.js +102 -0
  96. package/dist/chunks/picker-popover-C4ElNk7t.js.map +1 -0
  97. package/dist/chunks/{popover-BE7VO-a4.js → popover-bjxg020P.js} +3 -3
  98. package/dist/chunks/{popover-BE7VO-a4.js.map → popover-bjxg020P.js.map} +1 -1
  99. package/dist/chunks/{radio-CUxbLCvD.js → radio-DwYcXAzv.js} +2 -2
  100. package/dist/chunks/{radio-CUxbLCvD.js.map → radio-DwYcXAzv.js.map} +1 -1
  101. package/dist/chunks/range-popup-CG9Jo5B7.js +128 -0
  102. package/dist/chunks/range-popup-CG9Jo5B7.js.map +1 -0
  103. package/dist/chunks/{release-art-DEc9HNa6.js → release-art-Ogl-L1Vh.js} +189 -183
  104. package/dist/chunks/release-art-Ogl-L1Vh.js.map +1 -0
  105. package/dist/chunks/{resize-motion-CMaidkwe.js → resize-motion-BWGMchyP.js} +27 -23
  106. package/dist/chunks/resize-motion-BWGMchyP.js.map +1 -0
  107. package/dist/chunks/{rights-BbiJ0AJB.js → rights-hMoaFasn.js} +12 -12
  108. package/dist/chunks/rights-hMoaFasn.js.map +1 -0
  109. package/dist/chunks/{section-DzOLLN1p.js → section-BsET7Fo-.js} +4 -4
  110. package/dist/chunks/{section-DzOLLN1p.js.map → section-BsET7Fo-.js.map} +1 -1
  111. package/dist/chunks/{segmented-MrinfDL8.js → segmented-DXKVF-nY.js} +4 -4
  112. package/dist/chunks/{segmented-MrinfDL8.js.map → segmented-DXKVF-nY.js.map} +1 -1
  113. package/dist/chunks/{select-Bc4kRiSG.js → select-Bbv2f5F8.js} +63 -80
  114. package/dist/chunks/select-Bbv2f5F8.js.map +1 -0
  115. package/dist/chunks/{separator-D5AzVFTS.js → separator-CpAUELNs.js} +2 -2
  116. package/dist/chunks/{separator-D5AzVFTS.js.map → separator-CpAUELNs.js.map} +1 -1
  117. package/dist/chunks/{sidebar-5IA18LuP.js → sidebar-Dey1ZfGt.js} +54 -51
  118. package/dist/chunks/sidebar-Dey1ZfGt.js.map +1 -0
  119. package/dist/chunks/{sidebar-menu-DRWRxcJ3.js → sidebar-menu-ct8IiL4z.js} +2 -2
  120. package/dist/chunks/{sidebar-menu-DRWRxcJ3.js.map → sidebar-menu-ct8IiL4z.js.map} +1 -1
  121. package/dist/chunks/{skeleton-kfuqdl1a.js → skeleton-BM797MAg.js} +2 -2
  122. package/dist/chunks/{skeleton-kfuqdl1a.js.map → skeleton-BM797MAg.js.map} +1 -1
  123. package/dist/chunks/{slider-DbhjJ3ML.js → slider-Ds-tqY-1.js} +2 -2
  124. package/dist/chunks/{slider-DbhjJ3ML.js.map → slider-Ds-tqY-1.js.map} +1 -1
  125. package/dist/chunks/{status-dot-BzMlYuMe.js → status-dot-BqVOlShY.js} +3 -3
  126. package/dist/chunks/{status-dot-BzMlYuMe.js.map → status-dot-BqVOlShY.js.map} +1 -1
  127. package/dist/chunks/{styles-Btvg2DCf.js → styles-CVJU9t9v.js} +2 -2
  128. package/dist/chunks/{styles-Btvg2DCf.js.map → styles-CVJU9t9v.js.map} +1 -1
  129. package/dist/chunks/{swap-text-BhPI8DOf.js → swap-text-Cica0pUr.js} +2 -2
  130. package/dist/chunks/{swap-text-BhPI8DOf.js.map → swap-text-Cica0pUr.js.map} +1 -1
  131. package/dist/chunks/{switch-XMY_CQE-.js → switch-CSKMEomo.js} +3 -3
  132. package/dist/chunks/{switch-XMY_CQE-.js.map → switch-CSKMEomo.js.map} +1 -1
  133. package/dist/chunks/{table-DYKa86af.js → table-D-36EM7f.js} +2 -2
  134. package/dist/chunks/{table-DYKa86af.js.map → table-D-36EM7f.js.map} +1 -1
  135. package/dist/chunks/{tag-Dg89uYpV.js → tag-CwDKXVHj.js} +4 -4
  136. package/dist/chunks/{tag-Dg89uYpV.js.map → tag-CwDKXVHj.js.map} +1 -1
  137. package/dist/chunks/{text--5MKh2G4.js → text-Dvvgg5Jt.js} +3 -3
  138. package/dist/chunks/{text--5MKh2G4.js.map → text-Dvvgg5Jt.js.map} +1 -1
  139. package/dist/chunks/{textarea-Cj8iR82R.js → textarea-2d373OyU.js} +35 -31
  140. package/dist/chunks/textarea-2d373OyU.js.map +1 -0
  141. package/dist/chunks/timeseries-LRDAZHV0.js +339 -0
  142. package/dist/chunks/timeseries-LRDAZHV0.js.map +1 -0
  143. package/dist/chunks/{toolbar-Dw3uxpsE.js → toolbar-nVLFWH2i.js} +3 -3
  144. package/dist/chunks/{toolbar-Dw3uxpsE.js.map → toolbar-nVLFWH2i.js.map} +1 -1
  145. package/dist/chunks/{tooltip-DEbCCsru.js → tooltip-S1DmyLVl.js} +4 -4
  146. package/dist/chunks/{tooltip-DEbCCsru.js.map → tooltip-S1DmyLVl.js.map} +1 -1
  147. package/dist/chunks/{tooltip-root-DRd4ciUv.js → tooltip-root-vjylFUqw.js} +4 -4
  148. package/dist/chunks/{tooltip-root-DRd4ciUv.js.map → tooltip-root-vjylFUqw.js.map} +1 -1
  149. package/dist/chunks/{virtual-rows-BZe49bKi.js → virtual-rows-yAMjeAwj.js} +4 -3
  150. package/dist/chunks/virtual-rows-yAMjeAwj.js.map +1 -0
  151. package/dist/chunks/{zh-CN-C7GmVswt.js → zh-CN-CqEA4PCM.js} +37 -5
  152. package/dist/chunks/zh-CN-CqEA4PCM.js.map +1 -0
  153. package/dist/components/app-frame.js +2 -2
  154. package/dist/components/avatar.js +1 -1
  155. package/dist/components/badge.js +1 -1
  156. package/dist/components/banner.js +1 -1
  157. package/dist/components/button-group.js +33 -32
  158. package/dist/components/button-group.js.map +1 -1
  159. package/dist/components/button.js +1 -1
  160. package/dist/components/calendar.js +1 -1
  161. package/dist/components/charts/bar.js +34 -31
  162. package/dist/components/charts/bar.js.map +1 -1
  163. package/dist/components/charts/donut.js +2 -2
  164. package/dist/components/charts/gauge.js +2 -2
  165. package/dist/components/charts/heatmap.js +1 -1
  166. package/dist/components/charts/sankey.js +2 -2
  167. package/dist/components/charts/sparkline.js +1 -1
  168. package/dist/components/charts/timeseries.js +1 -255
  169. package/dist/components/charts.js +3 -3
  170. package/dist/components/checkbox.js +1 -1
  171. package/dist/components/code-block.js +2 -2
  172. package/dist/components/code.js +1 -1
  173. package/dist/components/collapsible.js +1 -1
  174. package/dist/components/combobox.js +1 -1
  175. package/dist/components/command-list.js +4 -0
  176. package/dist/components/command-palette.js +120 -171
  177. package/dist/components/command-palette.js.map +1 -1
  178. package/dist/components/copy-button.js +1 -1
  179. package/dist/components/data-table.js +251 -193
  180. package/dist/components/data-table.js.map +1 -1
  181. package/dist/components/date-picker.js +6 -6
  182. package/dist/components/dialog.js +7 -9
  183. package/dist/components/dialog.js.map +1 -1
  184. package/dist/components/display-options.js +67 -53
  185. package/dist/components/display-options.js.map +1 -1
  186. package/dist/components/empty.js +1 -1
  187. package/dist/components/field.js +1 -1
  188. package/dist/components/filter-chip.js +138 -63
  189. package/dist/components/filter-chip.js.map +1 -1
  190. package/dist/components/filter-row.js +2 -2
  191. package/dist/components/flow.js +2 -2
  192. package/dist/components/heading.js +1 -1
  193. package/dist/components/icon-button.js +1 -1
  194. package/dist/components/icon.js +1 -1
  195. package/dist/components/input.js +56 -54
  196. package/dist/components/input.js.map +1 -1
  197. package/dist/components/kaeso/conversation.js +88 -79
  198. package/dist/components/kaeso/conversation.js.map +1 -1
  199. package/dist/components/kaeso/identity.js +1 -1
  200. package/dist/components/kaeso/moments.js +8 -8
  201. package/dist/components/kaeso/moments.js.map +1 -1
  202. package/dist/components/kaeso/rights.js +1 -1
  203. package/dist/components/kaeso/usage.js +6 -6
  204. package/dist/components/kaeso/usage.js.map +1 -1
  205. package/dist/components/kaeso.js +212 -84
  206. package/dist/components/kaeso.js.map +1 -1
  207. package/dist/components/kbd.js +1 -1
  208. package/dist/components/key-value.js +3 -3
  209. package/dist/components/label.js +1 -1
  210. package/dist/components/layout.js +1 -1
  211. package/dist/components/link.js +1 -1
  212. package/dist/components/list.js +1 -1
  213. package/dist/components/loader.js +2 -2
  214. package/dist/components/logo.js +2 -2
  215. package/dist/components/markdown.js +1 -1
  216. package/dist/components/menu.js +2 -2
  217. package/dist/components/meter.js +1 -1
  218. package/dist/components/page-header.js +1 -1
  219. package/dist/components/pagination.js +1 -1
  220. package/dist/components/playground.js +654 -381
  221. package/dist/components/playground.js.map +1 -1
  222. package/dist/components/popover.js +2 -2
  223. package/dist/components/qr-code.js +1 -1
  224. package/dist/components/radio.js +1 -1
  225. package/dist/components/release-art.js +1 -1
  226. package/dist/components/scroll-area.js +1 -1
  227. package/dist/components/section.js +1 -1
  228. package/dist/components/segmented.js +1 -1
  229. package/dist/components/select.js +1 -1
  230. package/dist/components/separator.js +1 -1
  231. package/dist/components/settings.js +3 -3
  232. package/dist/components/sheet.js +69 -52
  233. package/dist/components/sheet.js.map +1 -1
  234. package/dist/components/sidebar.js +1 -1
  235. package/dist/components/skeleton.js +1 -1
  236. package/dist/components/slider.js +1 -1
  237. package/dist/components/stat.js +88 -74
  238. package/dist/components/stat.js.map +1 -1
  239. package/dist/components/status-dot.js +1 -1
  240. package/dist/components/surface.js +1 -1
  241. package/dist/components/swap-text.js +1 -1
  242. package/dist/components/switch.js +1 -1
  243. package/dist/components/table.js +1 -1
  244. package/dist/components/tabs.js +48 -49
  245. package/dist/components/tabs.js.map +1 -1
  246. package/dist/components/tag.js +1 -1
  247. package/dist/components/text.js +1 -1
  248. package/dist/components/theme-image.js +1 -1
  249. package/dist/components/theme-menu.js +2 -2
  250. package/dist/components/theme-select.js +1 -1
  251. package/dist/components/timeline.js +1 -1
  252. package/dist/components/toast.js +4 -4
  253. package/dist/components/toc.js +1 -1
  254. package/dist/components/toolbar.js +1 -1
  255. package/dist/components/tooltip.js +1 -1
  256. package/dist/components/visually-hidden.js +1 -1
  257. package/dist/format.js +87 -50
  258. package/dist/format.js.map +1 -1
  259. package/dist/i18n-provider.js +1 -1
  260. package/dist/index.js +115 -112
  261. package/dist/kaeso.css +20 -7
  262. package/dist/styles.css +1 -1
  263. package/dist/types/components/charts/bar.d.ts +6 -0
  264. package/dist/types/components/charts/core.d.ts +2 -2
  265. package/dist/types/components/charts/docs.d.ts +7 -0
  266. package/dist/types/components/charts/time-axis.d.ts +5 -0
  267. package/dist/types/components/charts/timeseries.d.ts +9 -0
  268. package/dist/types/components/code-block/highlighter.d.ts +2 -0
  269. package/dist/types/components/combobox/combobox.d.ts +2 -0
  270. package/dist/types/components/combobox/docs.d.ts +2 -4
  271. package/dist/types/components/command-list/command-list.d.ts +84 -0
  272. package/dist/types/components/command-list/docs.d.ts +52 -0
  273. package/dist/types/components/command-list/index.d.ts +3 -0
  274. package/dist/types/components/command-list/match.d.ts +1 -0
  275. package/dist/types/components/command-list/picker-popover.d.ts +44 -0
  276. package/dist/types/components/data-table/data-table.d.ts +3 -2
  277. package/dist/types/components/data-table/docs.d.ts +1 -0
  278. package/dist/types/components/date-picker/docs.d.ts +0 -6
  279. package/dist/types/components/dialog/dialog.d.ts +24 -0
  280. package/dist/types/components/dialog/docs.d.ts +4 -0
  281. package/dist/types/components/display-options/display-options.d.ts +1 -0
  282. package/dist/types/components/filter-chip/docs.d.ts +4 -0
  283. package/dist/types/components/filter-chip/filter-chip.d.ts +7 -0
  284. package/dist/types/components/input/docs.d.ts +2 -12
  285. package/dist/types/components/input/number-input.d.ts +1 -0
  286. package/dist/types/components/input/tag-input.d.ts +1 -0
  287. package/dist/types/components/kaeso/docs.d.ts +34 -0
  288. package/dist/types/components/kaeso/identity.d.ts +10 -1
  289. package/dist/types/components/kaeso/index.d.ts +1 -0
  290. package/dist/types/components/kaeso/provider-marks.d.ts +5 -1
  291. package/dist/types/components/kaeso/provider-picker.d.ts +42 -0
  292. package/dist/types/components/list/docs.d.ts +2 -0
  293. package/dist/types/components/list/list.d.ts +2 -0
  294. package/dist/types/components/menu/styles.d.ts +1 -1
  295. package/dist/types/components/playground/docs.d.ts +32 -0
  296. package/dist/types/components/playground/index.d.ts +1 -0
  297. package/dist/types/components/playground/model-picker.d.ts +39 -4
  298. package/dist/types/components/playground/reasoning.d.ts +29 -0
  299. package/dist/types/components/playground/response-view.d.ts +7 -1
  300. package/dist/types/components/release-art/docs.d.ts +1 -0
  301. package/dist/types/components/release-art/release-art.d.ts +1 -0
  302. package/dist/types/components/select/docs.d.ts +0 -2
  303. package/dist/types/components/select/option-checkbox.d.ts +1 -0
  304. package/dist/types/components/sidebar/sidebar.d.ts +1 -0
  305. package/dist/types/components/stat/docs.d.ts +1 -0
  306. package/dist/types/components/stat/stat.d.ts +1 -0
  307. package/dist/types/format/index.d.ts +6 -0
  308. package/dist/types/index.d.ts +1 -0
  309. package/dist/types/utils/index.d.ts +1 -1
  310. package/dist/types/utils/inset.d.ts +5 -0
  311. package/dist/types/utils/over-sheet.d.ts +1 -0
  312. package/dist/types/utils/restore-focus.d.ts +1 -1
  313. package/dist/utils.js +4 -4
  314. package/foundations/layout.md +45 -0
  315. package/foundations/writing.md +1 -0
  316. package/package.json +2 -2
  317. package/dist/chunks/app-frame-BXh-06HL.js +0 -214
  318. package/dist/chunks/app-frame-BXh-06HL.js.map +0 -1
  319. package/dist/chunks/cn-CidVUKMm.js.map +0 -1
  320. package/dist/chunks/code-block-DxtladFW.js.map +0 -1
  321. package/dist/chunks/collapsible-Cw_1aem5.js.map +0 -1
  322. package/dist/chunks/combobox-D30Wt11R.js +0 -291
  323. package/dist/chunks/combobox-D30Wt11R.js.map +0 -1
  324. package/dist/chunks/core-K960A4OT.js.map +0 -1
  325. package/dist/chunks/de-CTAo4KL7.js.map +0 -1
  326. package/dist/chunks/dialog-LNKgPEsV.js +0 -319
  327. package/dist/chunks/dialog-LNKgPEsV.js.map +0 -1
  328. package/dist/chunks/field-d8V94bvZ.js.map +0 -1
  329. package/dist/chunks/field-press-DwzBFafd.js +0 -10
  330. package/dist/chunks/field-press-DwzBFafd.js.map +0 -1
  331. package/dist/chunks/identity-BtZC_d_Q.js +0 -342
  332. package/dist/chunks/identity-BtZC_d_Q.js.map +0 -1
  333. package/dist/chunks/input-group-CYA1MEoZ.js.map +0 -1
  334. package/dist/chunks/inset-BLMdxX4I.js.map +0 -1
  335. package/dist/chunks/list-CzaiyNja.js +0 -483
  336. package/dist/chunks/list-CzaiyNja.js.map +0 -1
  337. package/dist/chunks/nav-sheet-BIErlV74.js +0 -58
  338. package/dist/chunks/nav-sheet-BIErlV74.js.map +0 -1
  339. package/dist/chunks/range-popup-DGOnGGag.js +0 -111
  340. package/dist/chunks/range-popup-DGOnGGag.js.map +0 -1
  341. package/dist/chunks/release-art-DEc9HNa6.js.map +0 -1
  342. package/dist/chunks/resize-motion-CMaidkwe.js.map +0 -1
  343. package/dist/chunks/rights-BbiJ0AJB.js.map +0 -1
  344. package/dist/chunks/select-Bc4kRiSG.js.map +0 -1
  345. package/dist/chunks/sidebar-5IA18LuP.js.map +0 -1
  346. package/dist/chunks/textarea-Cj8iR82R.js.map +0 -1
  347. package/dist/chunks/virtual-rows-BZe49bKi.js.map +0 -1
  348. package/dist/chunks/zh-CN-C7GmVswt.js.map +0 -1
  349. package/dist/components/charts/timeseries.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"input.js","names":["__icon_ViewOffSlashIcon","__icon_ViewIcon","cn","useUiText","Tooltip","useField","useFieldControl","withField","useInputGroupSize","KAESO_INPUT_GROUP_VARIANTS","InputGroup","KAESO_INPUT_GROUP_DEFAULT_VARIANTS","INPUT_ICON_SIZE","SearchInput","KAESO_INPUT_DEFAULT_VARIANTS","KAESO_INPUT_VARIANTS","Input","KAESO_NUMBER_INPUT_VARIANTS","compareDecimal","KAESO_NUMBER_INPUT_DEFAULT_VARIANTS","groupDecimal","KAESO_TEXTAREA_VARIANTS","NumberInput","Textarea","addDecimal","KAESO_TEXTAREA_DEFAULT_VARIANTS","Tag","KAESO_SENSITIVE_INPUT_VARIANTS","KAESO_SENSITIVE_INPUT_DEFAULT_VARIANTS","SensitiveInput","props","t","revealed","setRevealed","useState","defaultRevealed","caps","setCaps","checkCaps","kind","className","description","onKeyDown","onKeyUp","ViewOffSlashIcon","ViewIcon","r","KAESO_OTP_INPUT_VARIANTS","KAESO_OTP_INPUT_DEFAULT_VARIANTS","OTPInput","ariaLabel","force","field","inner","setInner","defaultValue","focused","setFocused","sel","setSel","auto","useId","input","useRef","current","value","length","set","clean","v","onValueChange","onComplete","active","isFocused","invalid","char","i","isActive","size","disabled","el","ref","id","KAESO_TAG_INPUT_VARIANTS","KAESO_TAG_INPUT_DEFAULT_VARIANTS","TagInput","fc","draft","setDraft","tags","next","splitter","separators","s","add","parts","raw","p","messages","validate","tag","firstError","m","fieldError","error","control","label","message","x","required","placeholder","text","name"],"sources":["../../src/components/input/sensitive-input.tsx","../../src/components/input/otp-input.tsx","../../src/components/input/tag-input.tsx"],"sourcesContent":["import { forwardRef, useState, type KeyboardEvent } from \"react\";\nimport { Input, type InputProps } from \"./input.js\";\nimport { InputGroup } from \"./input-group.js\";\nimport { ViewOffSlashIcon as __icon_ViewOffSlashIcon, ViewIcon as __icon_ViewIcon } from \"@hugeicons/core-free-icons\";\nimport { cn } from \"../../utils/cn.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_SENSITIVE_INPUT_VARIANTS = {\n kind: {\n secret: { classes: \"\" },\n password: { classes: \"\" },\n },\n} as const;\nexport const KAESO_SENSITIVE_INPUT_DEFAULT_VARIANTS = { kind: \"secret\" } as const;\n\nexport interface SensitiveInputProps extends Omit<InputProps, \"type\" | \"trailing\"> {\n kind?: keyof typeof KAESO_SENSITIVE_INPUT_VARIANTS.kind | undefined;\n defaultRevealed?: boolean | undefined;\n}\n\nexport const SensitiveInput = /* @__PURE__ */ forwardRef<HTMLInputElement, SensitiveInputProps>(function SensitiveInput(\n { kind = \"secret\", defaultRevealed = false, description, onKeyDown, onKeyUp, className, ...props },\n ref,\n) {\n const t = useUiText();\n const [revealed, setRevealed] = useState(defaultRevealed);\n const [caps, setCaps] = useState(false);\n const checkCaps = (e: KeyboardEvent<HTMLInputElement>) => setCaps(kind === \"password\" && e.getModifierState?.(\"CapsLock\"));\n return (\n <Input\n ref={ref}\n type={revealed ? \"text\" : \"password\"}\n autoComplete={kind === \"password\" ? \"current-password\" : \"off\"}\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck={false}\n data-1p-ignore={kind === \"secret\" ? true : undefined}\n data-lpignore={kind === \"secret\" ? \"true\" : undefined}\n className={cn(className, revealed && \"mono\")}\n description={caps ? t(\"sensitiveInput.capsLock\", \"Caps Lock is on.\") : description}\n onKeyDown={(e) => {\n checkCaps(e);\n onKeyDown?.(e);\n }}\n onKeyUp={(e) => {\n checkCaps(e);\n onKeyUp?.(e);\n }}\n trailing={\n <InputGroup.Button\n icon={revealed ? __icon_ViewOffSlashIcon : __icon_ViewIcon}\n aria-label={revealed ? t(\"sensitiveInput.hide\", \"Hide\") : t(\"sensitiveInput.show\", \"Show\")}\n onClick={() => setRevealed((r) => !r)}\n disabled={props.disabled}\n />\n }\n {...props}\n />\n );\n});\nif (process.env.NODE_ENV !== \"production\") SensitiveInput.displayName = \"SensitiveInput\";\n","import { forwardRef, useId, useRef, useState, type InputHTMLAttributes } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { useField } from \"../field/field.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_OTP_INPUT_VARIANTS = {\n size: {\n md: { classes: \"size-48 text-title\" },\n sm: { classes: \"size-40 text-title-sm\" },\n },\n} as const;\nexport const KAESO_OTP_INPUT_DEFAULT_VARIANTS = { size: \"md\" } as const;\n\nexport interface OTPInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, \"value\" | \"defaultValue\" | \"onChange\" | \"size\" | \"maxLength\"> {\n length?: number | undefined;\n value?: string | undefined;\n defaultValue?: string | undefined;\n onValueChange?: ((value: string) => void) | undefined;\n onComplete?: ((value: string) => void) | undefined;\n invalid?: boolean | undefined;\n size?: keyof typeof KAESO_OTP_INPUT_VARIANTS.size | undefined;\n \"data-force\"?: string | undefined;\n}\n\nexport const OTPInput = /* @__PURE__ */ forwardRef<HTMLInputElement, OTPInputProps>(function OTPInput(\n {\n length = 6,\n value,\n defaultValue = \"\",\n onValueChange,\n onComplete,\n invalid,\n size = \"md\",\n disabled,\n className,\n id,\n \"aria-label\": ariaLabel,\n \"data-force\": force,\n ...props\n },\n ref,\n) {\n const field = useField();\n const t = useUiText();\n const [inner, setInner] = useState(defaultValue);\n const [focused, setFocused] = useState(false);\n const [sel, setSel] = useState(0);\n const auto = useId();\n const input = useRef<HTMLInputElement | null>(null);\n const current = (value ?? inner).slice(0, length);\n const set = (v: string) => {\n const clean = v.replace(/\\D/g, \"\").slice(0, length);\n if (value === undefined) setInner(clean);\n onValueChange?.(clean);\n if (clean.length === length) onComplete?.(clean);\n };\n const active = Math.min(sel, length - 1);\n const isFocused = focused || force?.includes(\"focus\");\n return (\n <div className={cn(\"relative inline-flex gap-8\", className)} data-invalid={invalid || field?.invalid || undefined}>\n {Array.from({ length }, (_, i) => {\n const char = current[i] ?? \"\";\n const isActive = isFocused && i === Math.min(current.length, length - 1) && (sel >= current.length || i === active);\n return (\n <div\n key={i}\n aria-hidden\n className={cn(\n \"flex items-center justify-center rounded-cell-lg font-semibold tabular text-fg material-field transition-control\",\n KAESO_OTP_INPUT_VARIANTS.size[size].classes,\n i === 2 && length === 6 && \"mr-8\",\n )}\n {...(invalid || field?.invalid ? { \"data-invalid\": \"\" } : {})}\n {...(disabled ? { \"data-disabled\": \"\" } : {})}\n {...(isActive ? { \"data-focused\": \"\" } : {})}\n >\n {char || (isActive ? <span className=\"h-20 w-1 animate-pulse-quiet bg-fg\" /> : null)}\n </div>\n );\n })}\n <input\n ref={(el) => {\n input.current = el;\n if (typeof ref === \"function\") ref(el);\n else if (ref) ref.current = el;\n }}\n id={field?.controlId ?? id ?? `k-otp-${auto}`}\n type=\"text\"\n inputMode=\"numeric\"\n autoComplete=\"one-time-code\"\n pattern=\"\\d*\"\n maxLength={length}\n value={current}\n disabled={disabled}\n aria-label={ariaLabel ?? (field ? undefined : t(\"otpInput.label\", \"Verification code\"))}\n {...(field?.controlProps[\"aria-describedby\"] ? { \"aria-describedby\": field.controlProps[\"aria-describedby\"] } : {})}\n {...(invalid || field?.invalid ? { \"aria-invalid\": true } : {})}\n onChange={(e) => {\n set(e.target.value);\n setSel(e.target.selectionStart ?? e.target.value.length);\n }}\n onSelect={(e) => setSel((e.target as HTMLInputElement).selectionStart ?? 0)}\n onFocus={() => setFocused(true)}\n onBlur={() => setFocused(false)}\n className=\"absolute inset-0 h-full w-full cursor-text bg-transparent text-transparent caret-transparent opacity-0 outline-none disabled:cursor-not-allowed\"\n {...props}\n />\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") OTPInput.displayName = \"OTPInput\";\n","import { forwardRef, useRef, useState, type ClipboardEvent, type KeyboardEvent } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { useField, useFieldControl, withField, type FieldWrapProps } from \"../field/field.js\";\nimport { Tag } from \"../tag/tag.js\";\nimport { Tooltip } from \"../tooltip/tooltip.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_TAG_INPUT_VARIANTS = {\n size: {\n md: { classes: \"min-h-36 p-4\" },\n },\n} as const;\nexport const KAESO_TAG_INPUT_DEFAULT_VARIANTS = { size: \"md\" } as const;\n\nexport interface TagInputProps extends FieldWrapProps {\n value?: string[] | undefined;\n defaultValue?: string[] | undefined;\n onValueChange?: ((value: string[]) => void) | undefined;\n placeholder?: string | undefined;\n validate?: ((tag: string) => true | string) | undefined;\n separators?: string[] | undefined;\n disabled?: boolean | undefined;\n id?: string | undefined;\n name?: string | undefined;\n className?: string | undefined;\n \"aria-label\"?: string | undefined;\n \"data-force\"?: string | undefined;\n}\n\nexport const TagInput = /* @__PURE__ */ forwardRef<HTMLInputElement, TagInputProps>(function TagInput(props, ref) {\n const {\n value,\n defaultValue = [],\n onValueChange,\n placeholder,\n validate,\n separators = [\",\", \" \", \";\"],\n disabled,\n id,\n name,\n className,\n label,\n description,\n error,\n optional,\n required,\n layout,\n \"aria-label\": ariaLabel,\n \"data-force\": force,\n } = props;\n const field = useField();\n const fc = useFieldControl(props);\n const t = useUiText();\n const [inner, setInner] = useState<string[]>(defaultValue);\n const [draft, setDraft] = useState(\"\");\n const input = useRef<HTMLInputElement | null>(null);\n const tags = value ?? inner;\n const set = (next: string[]) => {\n if (value === undefined) setInner(next);\n onValueChange?.(next);\n };\n const splitter = new RegExp(`[${separators.map((s) => s.replace(/[\\]\\\\^-]/g, \"\\\\$&\")).join(\"\")}\\\\n]+`);\n const add = (raw: string) => {\n const parts = raw\n .split(splitter)\n .map((p) => p.trim())\n .filter(Boolean)\n .filter((p) => !tags.includes(p));\n if (parts.length) set([...tags, ...parts]);\n setDraft(\"\");\n };\n const messages = tags.map((tag) => (validate ? validate(tag) : true));\n const firstError = messages.find((m) => m !== true);\n const fieldError = error ?? (typeof firstError === \"string\" ? firstError : undefined);\n const control = (\n <div\n className={cn(\n \"flex w-full min-w-0 flex-wrap items-center gap-4 rounded-field material-field transition-control cursor-text\",\n KAESO_TAG_INPUT_VARIANTS.size.md.classes,\n disabled && \"cursor-not-allowed\",\n !(label || description || fieldError) && className,\n )}\n {...(fieldError || field?.invalid ? { \"data-invalid\": \"\" } : {})}\n {...(disabled ? { \"data-disabled\": \"\" } : {})}\n {...(force ? { \"data-force\": force } : {})}\n onMouseDown={(e) => {\n if (e.target === e.currentTarget) {\n e.preventDefault();\n input.current?.focus();\n }\n }}\n >\n {tags.map((tag, i) => {\n const message = messages[i];\n return (\n <Tag\n key={tag}\n invalid={message !== true}\n {...(disabled ? {} : { onRemove: () => set(tags.filter((x) => x !== tag)), removeLabel: t(\"tagInput.remove\", \"Remove {tag}\", { tag }) })}\n >\n {typeof message === \"string\" ? (\n <Tooltip content={message}>\n <span>{tag}</span>\n </Tooltip>\n ) : (\n tag\n )}\n </Tag>\n );\n })}\n <input\n ref={(el) => {\n input.current = el;\n if (typeof ref === \"function\") ref(el);\n else if (ref) ref.current = el;\n }}\n {...(id ? { id } : {})}\n {...fc.controlProps}\n {...(ariaLabel ? { \"aria-label\": ariaLabel } : {})}\n {...(fieldError ? { \"aria-invalid\": true } : {})}\n disabled={disabled}\n required={required && tags.length === 0}\n {...(required ? { \"aria-required\": true } : {})}\n value={draft}\n placeholder={tags.length ? undefined : placeholder}\n onChange={(e) => {\n const v = e.target.value;\n if (separators.some((s) => v.endsWith(s))) add(v);\n else setDraft(v);\n }}\n onKeyDown={(e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\" && draft.trim()) {\n e.preventDefault();\n add(draft);\n } else if (e.key === \"Backspace\" && !draft && tags.length) {\n set(tags.slice(0, -1));\n }\n }}\n onPaste={(e: ClipboardEvent<HTMLInputElement>) => {\n const text = e.clipboardData.getData(\"text\");\n if (splitter.test(text)) {\n e.preventDefault();\n add(draft + text);\n }\n }}\n onBlur={() => draft.trim() && add(draft)}\n className={cn(\n \"my-4 min-w-80 flex-1 bg-transparent px-8 text-body text-fg outline-none placeholder:text-fg-tertiary disabled:cursor-not-allowed\",\n tags.length === 0 && \"pl-12\",\n )}\n />\n {name && <input type=\"hidden\" name={name} value={tags.join(\",\")} />}\n </div>\n );\n if (field) return control;\n return withField({ label, description, error: fieldError, optional, required, layout, id: fc.wrapId ?? id, disabled, className }, control);\n});\nif (process.env.NODE_ENV !== \"production\") TagInput.displayName = \"TagInput\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"input.js","names":["__icon_ViewOffSlashIcon","__icon_ViewIcon","cn","useUiText","Tooltip","useField","useFieldControl","withField","useInputGroupSize","KAESO_INPUT_GROUP_VARIANTS","InputGroup","KAESO_INPUT_GROUP_DEFAULT_VARIANTS","INPUT_ICON_SIZE","SearchInput","KAESO_INPUT_DEFAULT_VARIANTS","KAESO_INPUT_VARIANTS","Input","KAESO_NUMBER_INPUT_VARIANTS","compareDecimal","KAESO_NUMBER_INPUT_DEFAULT_VARIANTS","groupDecimal","KAESO_TEXTAREA_VARIANTS","NumberInput","Textarea","addDecimal","KAESO_TEXTAREA_DEFAULT_VARIANTS","Tag","KAESO_SENSITIVE_INPUT_VARIANTS","KAESO_SENSITIVE_INPUT_DEFAULT_VARIANTS","SensitiveInput","props","t","revealed","setRevealed","useState","defaultRevealed","caps","setCaps","checkCaps","kind","className","description","onKeyDown","onKeyUp","ViewOffSlashIcon","ViewIcon","r","KAESO_OTP_INPUT_VARIANTS","KAESO_OTP_INPUT_DEFAULT_VARIANTS","OTPInput","ariaLabel","force","field","inner","setInner","defaultValue","focused","setFocused","sel","setSel","auto","useId","input","useRef","current","value","length","set","clean","v","onValueChange","onComplete","active","isFocused","invalid","char","i","isActive","size","disabled","el","ref","id","KAESO_TAG_INPUT_VARIANTS","KAESO_TAG_INPUT_DEFAULT_VARIANTS","TagInput","fc","draft","setDraftState","setDraft","next","onInputValueChange","tags","splitter","separators","s","add","parts","raw","p","messages","validate","tag","firstError","m","fieldError","error","control","label","message","x","required","placeholder","text","name"],"sources":["../../src/components/input/sensitive-input.tsx","../../src/components/input/otp-input.tsx","../../src/components/input/tag-input.tsx"],"sourcesContent":["import { forwardRef, useState, type KeyboardEvent } from \"react\";\nimport { Input, type InputProps } from \"./input.js\";\nimport { InputGroup } from \"./input-group.js\";\nimport { ViewOffSlashIcon as __icon_ViewOffSlashIcon, ViewIcon as __icon_ViewIcon } from \"@hugeicons/core-free-icons\";\nimport { cn } from \"../../utils/cn.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_SENSITIVE_INPUT_VARIANTS = {\n kind: {\n secret: { classes: \"\" },\n password: { classes: \"\" },\n },\n} as const;\nexport const KAESO_SENSITIVE_INPUT_DEFAULT_VARIANTS = { kind: \"secret\" } as const;\n\nexport interface SensitiveInputProps extends Omit<InputProps, \"type\" | \"trailing\"> {\n kind?: keyof typeof KAESO_SENSITIVE_INPUT_VARIANTS.kind | undefined;\n defaultRevealed?: boolean | undefined;\n}\n\nexport const SensitiveInput = /* @__PURE__ */ forwardRef<HTMLInputElement, SensitiveInputProps>(function SensitiveInput(\n { kind = \"secret\", defaultRevealed = false, description, onKeyDown, onKeyUp, className, ...props },\n ref,\n) {\n const t = useUiText();\n const [revealed, setRevealed] = useState(defaultRevealed);\n const [caps, setCaps] = useState(false);\n const checkCaps = (e: KeyboardEvent<HTMLInputElement>) => setCaps(kind === \"password\" && e.getModifierState?.(\"CapsLock\"));\n return (\n <Input\n ref={ref}\n type={revealed ? \"text\" : \"password\"}\n autoComplete={kind === \"password\" ? \"current-password\" : \"off\"}\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck={false}\n data-1p-ignore={kind === \"secret\" ? true : undefined}\n data-lpignore={kind === \"secret\" ? \"true\" : undefined}\n className={cn(className, revealed && \"mono\")}\n description={caps ? t(\"sensitiveInput.capsLock\", \"Caps Lock is on.\") : description}\n onKeyDown={(e) => {\n checkCaps(e);\n onKeyDown?.(e);\n }}\n onKeyUp={(e) => {\n checkCaps(e);\n onKeyUp?.(e);\n }}\n trailing={\n <InputGroup.Button\n icon={revealed ? __icon_ViewOffSlashIcon : __icon_ViewIcon}\n aria-label={\n kind === \"password\"\n ? revealed\n ? t(\"sensitiveInput.hidePassword\", \"Hide password\")\n : t(\"sensitiveInput.showPassword\", \"Show password\")\n : revealed\n ? t(\"sensitiveInput.hide\", \"Hide\")\n : t(\"sensitiveInput.show\", \"Show\")\n }\n onClick={() => setRevealed((r) => !r)}\n disabled={props.disabled}\n />\n }\n {...props}\n />\n );\n});\nif (process.env.NODE_ENV !== \"production\") SensitiveInput.displayName = \"SensitiveInput\";\n","import { forwardRef, useId, useRef, useState, type InputHTMLAttributes } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { useField } from \"../field/field.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_OTP_INPUT_VARIANTS = {\n size: {\n md: { classes: \"size-48 text-title\" },\n sm: { classes: \"size-40 text-title-sm\" },\n },\n} as const;\nexport const KAESO_OTP_INPUT_DEFAULT_VARIANTS = { size: \"md\" } as const;\n\nexport interface OTPInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, \"value\" | \"defaultValue\" | \"onChange\" | \"size\" | \"maxLength\"> {\n length?: number | undefined;\n value?: string | undefined;\n defaultValue?: string | undefined;\n onValueChange?: ((value: string) => void) | undefined;\n onComplete?: ((value: string) => void) | undefined;\n invalid?: boolean | undefined;\n size?: keyof typeof KAESO_OTP_INPUT_VARIANTS.size | undefined;\n \"data-force\"?: string | undefined;\n}\n\nexport const OTPInput = /* @__PURE__ */ forwardRef<HTMLInputElement, OTPInputProps>(function OTPInput(\n {\n length = 6,\n value,\n defaultValue = \"\",\n onValueChange,\n onComplete,\n invalid,\n size = \"md\",\n disabled,\n className,\n id,\n \"aria-label\": ariaLabel,\n \"data-force\": force,\n ...props\n },\n ref,\n) {\n const field = useField();\n const t = useUiText();\n const [inner, setInner] = useState(defaultValue);\n const [focused, setFocused] = useState(false);\n const [sel, setSel] = useState(0);\n const auto = useId();\n const input = useRef<HTMLInputElement | null>(null);\n const current = (value ?? inner).slice(0, length);\n const set = (v: string) => {\n const clean = v.replace(/\\D/g, \"\").slice(0, length);\n if (value === undefined) setInner(clean);\n onValueChange?.(clean);\n if (clean.length === length) onComplete?.(clean);\n };\n const active = Math.min(sel, length - 1);\n const isFocused = focused || force?.includes(\"focus\");\n return (\n <div className={cn(\"relative inline-flex gap-8\", className)} data-invalid={invalid || field?.invalid || undefined}>\n {Array.from({ length }, (_, i) => {\n const char = current[i] ?? \"\";\n const isActive = isFocused && i === Math.min(current.length, length - 1) && (sel >= current.length || i === active);\n return (\n <div\n key={i}\n aria-hidden\n className={cn(\n \"flex items-center justify-center rounded-cell-lg font-semibold tabular text-fg material-field transition-control\",\n KAESO_OTP_INPUT_VARIANTS.size[size].classes,\n i === 2 && length === 6 && \"mr-8\",\n )}\n {...(invalid || field?.invalid ? { \"data-invalid\": \"\" } : {})}\n {...(disabled ? { \"data-disabled\": \"\" } : {})}\n {...(isActive ? { \"data-focused\": \"\" } : {})}\n >\n {char || (isActive ? <span className=\"h-20 w-1 animate-pulse-quiet bg-fg\" /> : null)}\n </div>\n );\n })}\n <input\n ref={(el) => {\n input.current = el;\n if (typeof ref === \"function\") ref(el);\n else if (ref) ref.current = el;\n }}\n id={field?.controlId ?? id ?? `k-otp-${auto}`}\n type=\"text\"\n inputMode=\"numeric\"\n autoComplete=\"one-time-code\"\n pattern=\"\\d*\"\n maxLength={length}\n value={current}\n disabled={disabled}\n aria-label={ariaLabel ?? (field ? undefined : t(\"otpInput.label\", \"Verification code\"))}\n {...(field?.controlProps[\"aria-describedby\"] ? { \"aria-describedby\": field.controlProps[\"aria-describedby\"] } : {})}\n {...(invalid || field?.invalid ? { \"aria-invalid\": true } : {})}\n onChange={(e) => {\n set(e.target.value);\n setSel(e.target.selectionStart ?? e.target.value.length);\n }}\n onSelect={(e) => setSel((e.target as HTMLInputElement).selectionStart ?? 0)}\n onFocus={() => setFocused(true)}\n onBlur={() => setFocused(false)}\n className=\"absolute inset-0 h-full w-full cursor-text bg-transparent text-transparent caret-transparent opacity-0 outline-none disabled:cursor-not-allowed\"\n {...props}\n />\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") OTPInput.displayName = \"OTPInput\";\n","import { forwardRef, useRef, useState, type ClipboardEvent, type KeyboardEvent } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { useField, useFieldControl, withField, type FieldWrapProps } from \"../field/field.js\";\nimport { Tag } from \"../tag/tag.js\";\nimport { Tooltip } from \"../tooltip/tooltip.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_TAG_INPUT_VARIANTS = {\n size: {\n md: { classes: \"min-h-36 p-4\" },\n },\n} as const;\nexport const KAESO_TAG_INPUT_DEFAULT_VARIANTS = { size: \"md\" } as const;\n\nexport interface TagInputProps extends FieldWrapProps {\n value?: string[] | undefined;\n defaultValue?: string[] | undefined;\n onValueChange?: ((value: string[]) => void) | undefined;\n onInputValueChange?: ((draft: string) => void) | undefined;\n placeholder?: string | undefined;\n validate?: ((tag: string) => true | string) | undefined;\n separators?: string[] | undefined;\n disabled?: boolean | undefined;\n id?: string | undefined;\n name?: string | undefined;\n className?: string | undefined;\n \"aria-label\"?: string | undefined;\n \"data-force\"?: string | undefined;\n}\n\nexport const TagInput = /* @__PURE__ */ forwardRef<HTMLInputElement, TagInputProps>(function TagInput(props, ref) {\n const {\n value,\n defaultValue = [],\n onValueChange,\n onInputValueChange,\n placeholder,\n validate,\n separators = [\",\", \" \", \";\"],\n disabled,\n id,\n name,\n className,\n label,\n description,\n error,\n optional,\n required,\n layout,\n \"aria-label\": ariaLabel,\n \"data-force\": force,\n } = props;\n const field = useField();\n const fc = useFieldControl(props);\n const t = useUiText();\n const [inner, setInner] = useState<string[]>(defaultValue);\n const [draft, setDraftState] = useState(\"\");\n const setDraft = (next: string) => {\n setDraftState(next);\n onInputValueChange?.(next);\n };\n const input = useRef<HTMLInputElement | null>(null);\n const tags = value ?? inner;\n const set = (next: string[]) => {\n if (value === undefined) setInner(next);\n onValueChange?.(next);\n };\n const splitter = new RegExp(`[${separators.map((s) => s.replace(/[\\]\\\\^-]/g, \"\\\\$&\")).join(\"\")}\\\\n\\\\t]+`);\n const add = (raw: string) => {\n const parts = raw\n .split(splitter)\n .map((p) => p.trim())\n .filter(Boolean)\n .filter((p) => !tags.includes(p));\n if (parts.length) set([...tags, ...parts]);\n setDraft(\"\");\n };\n const messages = tags.map((tag) => (validate ? validate(tag) : true));\n const firstError = messages.find((m) => m !== true);\n const fieldError = error ?? (typeof firstError === \"string\" ? firstError : undefined);\n const control = (\n <div\n className={cn(\n \"flex w-full min-w-0 flex-wrap items-center gap-4 rounded-field material-field transition-control cursor-text\",\n KAESO_TAG_INPUT_VARIANTS.size.md.classes,\n disabled && \"cursor-not-allowed\",\n !(label || description || fieldError) && className,\n )}\n {...(fieldError || field?.invalid ? { \"data-invalid\": \"\" } : {})}\n {...(disabled ? { \"data-disabled\": \"\" } : {})}\n {...(force ? { \"data-force\": force } : {})}\n onMouseDown={(e) => {\n if (e.target === e.currentTarget) {\n e.preventDefault();\n input.current?.focus();\n }\n }}\n >\n {tags.map((tag, i) => {\n const message = messages[i];\n return (\n <Tag\n key={tag}\n invalid={message !== true}\n {...(disabled ? {} : { onRemove: () => set(tags.filter((x) => x !== tag)), removeLabel: t(\"tagInput.remove\", \"Remove {tag}\", { tag }) })}\n >\n {typeof message === \"string\" ? (\n <Tooltip content={message}>\n <span>{tag}</span>\n </Tooltip>\n ) : (\n tag\n )}\n </Tag>\n );\n })}\n <input\n ref={(el) => {\n input.current = el;\n if (typeof ref === \"function\") ref(el);\n else if (ref) ref.current = el;\n }}\n {...(id ? { id } : {})}\n {...fc.controlProps}\n {...(ariaLabel ? { \"aria-label\": ariaLabel } : {})}\n {...(fieldError ? { \"aria-invalid\": true } : {})}\n disabled={disabled}\n required={required && tags.length === 0}\n {...(required ? { \"aria-required\": true } : {})}\n value={draft}\n placeholder={tags.length ? undefined : placeholder}\n onChange={(e) => {\n const v = e.target.value;\n if (separators.some((s) => v.endsWith(s))) add(v);\n else setDraft(v);\n }}\n onKeyDown={(e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\" && draft.trim()) {\n e.preventDefault();\n add(draft);\n } else if (e.key === \"Backspace\" && !draft && tags.length) {\n set(tags.slice(0, -1));\n }\n }}\n onPaste={(e: ClipboardEvent<HTMLInputElement>) => {\n const text = e.clipboardData.getData(\"text\");\n if (splitter.test(text)) {\n e.preventDefault();\n add(draft + text);\n }\n }}\n onBlur={() => draft.trim() && add(draft)}\n className={cn(\n \"my-4 min-w-80 flex-1 bg-transparent px-8 text-body text-fg outline-none placeholder:text-fg-tertiary disabled:cursor-not-allowed\",\n tags.length === 0 && \"pl-12\",\n )}\n />\n {name && <input type=\"hidden\" name={name} value={tags.join(\",\")} />}\n </div>\n );\n if (field) return control;\n return withField({ label, description, error: fieldError, optional, required, layout, id: fc.wrapId ?? id, disabled, className }, control);\n});\nif (process.env.NODE_ENV !== \"production\") TagInput.displayName = \"TagInput\";\n"],"mappings":"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"}
@@ -1,21 +1,22 @@
1
1
  "use client";
2
- import { t as e } from "../../chunks/cn-CidVUKMm.js";
2
+ import { t as e } from "../../chunks/cn-DUDmdLpZ.js";
3
3
  import { i as t } from "../../chunks/context-BELWW79w.js";
4
- import { t as n } from "../../chunks/icon-CeNQtobn.js";
5
- import { t as r } from "../../chunks/banner-DxGBPQ7p.js";
6
- import { t as i } from "../../chunks/json-view-B6KHIWzh.js";
7
- import { t as a } from "../../chunks/badge-Dkyhs0_j.js";
8
- import { n as o } from "../../chunks/collapsible-Cw_1aem5.js";
9
- import { t as s } from "../../chunks/safe-href-G5DBNVwm.js";
10
- import { Suspense as c, forwardRef as l, lazy as u } from "react";
11
- import { jsx as d, jsxs as f } from "react/jsx-runtime";
12
- import { Image01Icon as p, Pdf01Icon as m, ToolsIcon as h } from "@hugeicons/core-free-icons";
4
+ import { t as n } from "../../chunks/icon-BqujXDUc.js";
5
+ import { r } from "../../chunks/link-YMcxM-BZ.js";
6
+ import { t as i } from "../../chunks/banner-BBlNFHd-.js";
7
+ import { t as a } from "../../chunks/json-view-BkG2hTXV.js";
8
+ import { t as o } from "../../chunks/badge-wUHlj7m3.js";
9
+ import { n as s } from "../../chunks/collapsible-CDQq1Y9x.js";
10
+ import { t as c } from "../../chunks/safe-href-G5DBNVwm.js";
11
+ import { Suspense as l, forwardRef as u, lazy as d } from "react";
12
+ import { jsx as f, jsxs as p } from "react/jsx-runtime";
13
+ import { Image01Icon as m, Pdf01Icon as h, ToolsIcon as g } from "@hugeicons/core-free-icons";
13
14
  //#region src/components/kaeso/conversation.tsx
14
- var g = /* @__PURE__ */ u(() => import("../../chunks/markdown-5NyaHHfN.js").then((e) => e.o).then((e) => ({ default: e.Markdown }))), _ = { density: {
15
+ var _ = /* @__PURE__ */ d(() => import("../../chunks/markdown-DWyxjsSY.js").then((e) => e.o).then((e) => ({ default: e.Markdown }))), v = { density: {
15
16
  default: { classes: "gap-24" },
16
17
  compact: { classes: "gap-16" }
17
- } }, v = { density: "default" };
18
- function y(e) {
18
+ } }, y = { density: "default" };
19
+ function b(e) {
19
20
  return {
20
21
  system: e("conversationView.system", "System"),
21
22
  developer: e("conversationView.developer", "Developer"),
@@ -24,8 +25,12 @@ function y(e) {
24
25
  tool: e("conversationView.tool", "Tool")
25
26
  };
26
27
  }
27
- var b = (e) => /^data:image\/[a-z0-9.+-]+;/i.test(e) ? e : s(e);
28
- function x(e) {
28
+ var x = /^data:image\/[a-z0-9.+-]+;/i;
29
+ function S(e) {
30
+ let t = c(e);
31
+ return t && /^https?:/.test(t) ? t : null;
32
+ }
33
+ function C(e) {
29
34
  let t = e.trim();
30
35
  if (!/^[[{]/.test(t)) return !1;
31
36
  try {
@@ -34,14 +39,14 @@ function x(e) {
34
39
  return !1;
35
40
  }
36
41
  }
37
- function S({ text: t, markdown: n, small: r }) {
38
- let i = /* @__PURE__ */ d("p", {
42
+ function w({ text: t, markdown: n, small: r }) {
43
+ let i = /* @__PURE__ */ f("p", {
39
44
  className: e("max-w-prose whitespace-pre-wrap wrap-break-word text-pretty", r ? "text-small text-fg-secondary" : "text-body text-fg"),
40
45
  children: t
41
46
  });
42
- return n ? /* @__PURE__ */ d(c, {
47
+ return n ? /* @__PURE__ */ f(l, {
43
48
  fallback: i,
44
- children: /* @__PURE__ */ d(g, {
49
+ children: /* @__PURE__ */ f(_, {
45
50
  text: t,
46
51
  ...r ? {
47
52
  size: "small",
@@ -50,143 +55,147 @@ function S({ text: t, markdown: n, small: r }) {
50
55
  })
51
56
  }) : i;
52
57
  }
53
- function C({ blocks: e, markdown: s }) {
54
- let c = t();
55
- return /* @__PURE__ */ d("div", {
58
+ function T({ blocks: e, markdown: c }) {
59
+ let l = t();
60
+ return /* @__PURE__ */ f("div", {
56
61
  className: "flex flex-col gap-12",
57
62
  children: e.map((e, t) => {
58
63
  switch (e.type) {
59
- case "text": return /* @__PURE__ */ d(S, {
64
+ case "text": return /* @__PURE__ */ f(w, {
60
65
  text: e.text,
61
- markdown: s
66
+ markdown: c
62
67
  }, t);
63
- case "tool_call": return /* @__PURE__ */ f("div", {
68
+ case "tool_call": return /* @__PURE__ */ p("div", {
64
69
  className: "flex flex-col gap-8",
65
- children: [/* @__PURE__ */ f("span", {
70
+ children: [/* @__PURE__ */ p("span", {
66
71
  className: "inline-flex items-center gap-8 text-small font-medium text-fg-secondary",
67
72
  children: [
68
- /* @__PURE__ */ d(n, {
69
- icon: h,
73
+ /* @__PURE__ */ f(n, {
74
+ icon: g,
70
75
  size: "xs"
71
76
  }),
72
- c("conversationView.called", "Called **{name}**", { name: e.name }).split("**").map((e, t) => t % 2 ? /* @__PURE__ */ d("span", {
77
+ l("conversationView.called", "Called **{name}**", { name: e.name }).split("**").map((e, t) => t % 2 ? /* @__PURE__ */ f("span", {
73
78
  className: "mono text-fg",
74
79
  children: e
75
80
  }, t) : e),
76
- e.id && /* @__PURE__ */ d("span", {
81
+ e.id && /* @__PURE__ */ f("span", {
77
82
  className: "mono text-fg-tertiary",
78
83
  children: e.id
79
84
  })
80
85
  ]
81
- }), /* @__PURE__ */ d(i, {
86
+ }), /* @__PURE__ */ f(a, {
82
87
  value: e.arguments,
83
88
  defaultDepth: 3
84
89
  })]
85
90
  }, t);
86
- case "tool_result": return /* @__PURE__ */ f("div", {
91
+ case "tool_result": return /* @__PURE__ */ p("div", {
87
92
  className: "flex flex-col gap-8 pl-16 hairline-l",
88
- children: [/* @__PURE__ */ f("span", {
93
+ children: [/* @__PURE__ */ p("span", {
89
94
  className: "inline-flex items-center gap-8 text-small font-medium text-fg-secondary",
90
95
  children: [
91
- c("conversationView.result", "Result"),
92
- e.tool_call_id && /* @__PURE__ */ d("span", {
96
+ l("conversationView.result", "Result"),
97
+ e.tool_call_id && /* @__PURE__ */ f("span", {
93
98
  className: "mono text-fg-tertiary",
94
99
  children: e.tool_call_id
95
100
  }),
96
- e.is_error && /* @__PURE__ */ d(a, {
101
+ e.is_error && /* @__PURE__ */ f(o, {
97
102
  tone: "danger",
98
- children: c("conversationView.error", "Error")
103
+ children: l("conversationView.error", "Error")
99
104
  })
100
105
  ]
101
- }), typeof e.content == "string" ? s && !x(e.content) ? /* @__PURE__ */ d(S, {
106
+ }), typeof e.content == "string" ? c && !C(e.content) ? /* @__PURE__ */ f(w, {
102
107
  text: e.content,
103
108
  markdown: !0
104
- }) : /* @__PURE__ */ d("pre", {
109
+ }) : /* @__PURE__ */ f("pre", {
105
110
  className: "mono text-small whitespace-pre-wrap wrap-anywhere text-fg",
106
111
  children: e.content
107
- }) : /* @__PURE__ */ d(C, {
112
+ }) : /* @__PURE__ */ f(T, {
108
113
  blocks: e.content,
109
- markdown: s
114
+ markdown: c
110
115
  })]
111
116
  }, t);
112
- case "reasoning": return /* @__PURE__ */ d(o, {
113
- title: /* @__PURE__ */ d("span", {
117
+ case "reasoning": return /* @__PURE__ */ f(s, {
118
+ title: /* @__PURE__ */ f("span", {
114
119
  className: "text-fg-secondary",
115
- children: c("conversationView.reasoning", "Reasoning")
120
+ children: l("conversationView.reasoning", "Reasoning")
116
121
  }),
117
- hint: e.redacted ? c("conversationView.redacted", "Redacted by the provider") : void 0,
118
- children: e.redacted ? /* @__PURE__ */ d("p", {
122
+ hint: e.redacted ? l("conversationView.redacted", "Redacted by the provider") : void 0,
123
+ children: e.redacted ? /* @__PURE__ */ f("p", {
119
124
  className: "max-w-prose text-small text-fg-secondary",
120
- children: c("conversationView.encrypted", "The provider returned this reasoning in encrypted form.")
121
- }) : /* @__PURE__ */ d(S, {
125
+ children: l("conversationView.encrypted", "The provider returned this reasoning in encrypted form.")
126
+ }) : /* @__PURE__ */ f(w, {
122
127
  text: e.text,
123
- markdown: s,
128
+ markdown: c,
124
129
  small: !0
125
130
  })
126
131
  }, t);
127
132
  case "image": {
128
- let r = e.src ? b(e.src) : null;
129
- return r ? /* @__PURE__ */ d("a", {
130
- href: r,
131
- target: "_blank",
132
- rel: "noopener noreferrer nofollow",
133
- className: "block w-120 overflow-hidden rounded-well ring-over ring-over-line focus-ring",
134
- children: /* @__PURE__ */ d("img", {
135
- src: r,
136
- alt: e.alt ?? c("conversationView.imageInput", "Image input"),
133
+ if (e.src && x.test(e.src)) return /* @__PURE__ */ f("span", {
134
+ className: "block w-120 overflow-hidden rounded-well ring-over ring-over-line",
135
+ children: /* @__PURE__ */ f("img", {
136
+ src: e.src,
137
+ alt: e.alt ?? l("conversationView.imageInput", "Image input"),
137
138
  className: "block h-120 w-120 object-cover"
138
139
  })
139
- }, t) : /* @__PURE__ */ f("span", {
140
+ }, t);
141
+ let i = e.src ? S(e.src) : null;
142
+ return i ? /* @__PURE__ */ f(r, {
143
+ href: i,
144
+ external: !0,
145
+ rel: "noopener noreferrer nofollow",
146
+ className: "w-max max-w-full wrap-anywhere",
147
+ children: l("conversationView.imageFrom", "Image from {host}", { host: new URL(i).host })
148
+ }, t) : /* @__PURE__ */ p("span", {
140
149
  className: "inline-flex h-32 w-max items-center gap-8 rounded-pill bg-fill-1 px-12 text-small text-fg-secondary",
141
150
  children: [
142
- /* @__PURE__ */ d(n, {
143
- icon: p,
151
+ /* @__PURE__ */ f(n, {
152
+ icon: m,
144
153
  size: "xs"
145
154
  }),
146
155
  " ",
147
- c("conversationView.image", "Image"),
156
+ l("conversationView.image", "Image"),
148
157
  " ",
149
- e.media_type && /* @__PURE__ */ d("span", {
158
+ e.media_type && /* @__PURE__ */ f("span", {
150
159
  className: "mono",
151
160
  children: e.media_type
152
161
  })
153
162
  ]
154
163
  }, t);
155
164
  }
156
- case "document": return /* @__PURE__ */ f("span", {
165
+ case "document": return /* @__PURE__ */ p("span", {
157
166
  className: "inline-flex h-32 w-max items-center gap-8 rounded-pill bg-fill-1 px-12 text-small text-fg-secondary",
158
167
  children: [
159
- /* @__PURE__ */ d(n, {
160
- icon: m,
168
+ /* @__PURE__ */ f(n, {
169
+ icon: h,
161
170
  size: "xs"
162
171
  }),
163
172
  " ",
164
- e.name ?? c("conversationView.document", "Document")
173
+ e.name ?? l("conversationView.document", "Document")
165
174
  ]
166
175
  }, t);
167
- case "refusal": return /* @__PURE__ */ d(r, {
176
+ case "refusal": return /* @__PURE__ */ f(i, {
168
177
  tone: "warning",
169
- title: c("conversationView.refused", "The model refused."),
178
+ title: l("conversationView.refused", "The model refused."),
170
179
  children: e.text
171
180
  }, t);
172
181
  }
173
182
  })
174
183
  });
175
184
  }
176
- var w = /* @__PURE__ */ l(function({ messages: n, density: r = "default", markdown: i = !1, className: a, footer: o }, s) {
177
- let c = y(t());
178
- return /* @__PURE__ */ f("div", {
185
+ var E = /* @__PURE__ */ u(function({ messages: n, density: r = "default", markdown: i = !1, className: a, footer: o }, s) {
186
+ let c = b(t());
187
+ return /* @__PURE__ */ p("div", {
179
188
  ref: s,
180
- className: e("flex flex-col", _.density[r].classes, a),
181
- children: [n.map((t, n) => /* @__PURE__ */ f("section", {
189
+ className: e("flex flex-col", v.density[r].classes, a),
190
+ children: [n.map((t, n) => /* @__PURE__ */ p("section", {
182
191
  "aria-label": c[t.role],
183
192
  className: "flex flex-col gap-8",
184
- children: [/* @__PURE__ */ d("span", {
193
+ children: [/* @__PURE__ */ f("span", {
185
194
  className: e("text-caption font-medium", t.role === "assistant" ? "text-fg" : "text-fg-secondary"),
186
195
  children: c[t.role]
187
- }), /* @__PURE__ */ d("div", {
196
+ }), /* @__PURE__ */ f("div", {
188
197
  className: e(t.role === "system" || t.role === "developer" ? "rounded-well bg-fill-1 px-16 py-12" : ""),
189
- children: /* @__PURE__ */ d(C, {
198
+ children: /* @__PURE__ */ f(T, {
190
199
  blocks: typeof t.content == "string" ? [{
191
200
  type: "text",
192
201
  text: t.content
@@ -197,8 +206,8 @@ var w = /* @__PURE__ */ l(function({ messages: n, density: r = "default", markdo
197
206
  }, n)), o]
198
207
  });
199
208
  });
200
- process.env.NODE_ENV !== "production" && (w.displayName = "ConversationView");
209
+ process.env.NODE_ENV !== "production" && (E.displayName = "ConversationView");
201
210
  //#endregion
202
- export { w as ConversationView, v as KAESO_CONVERSATION_DEFAULT_VARIANTS, _ as KAESO_CONVERSATION_VARIANTS };
211
+ export { E as ConversationView, y as KAESO_CONVERSATION_DEFAULT_VARIANTS, v as KAESO_CONVERSATION_VARIANTS };
203
212
 
204
213
  //# sourceMappingURL=conversation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"conversation.js","names":["__icon_ToolsIcon","__icon_Image01Icon","__icon_Pdf01Icon","cn","useUiText","Icon","Banner","JsonView","Badge","Collapsible","safeHref","LazyMarkdown","n","m","KAESO_CONVERSATION_VARIANTS","KAESO_CONVERSATION_DEFAULT_VARIANTS","roleNames","t","imageHref","src","isJson","s","Prose","plain","small","text","markdown","Suspense","Blocks","blocks","b","i","ToolsIcon","j","part","href","Image01Icon","Pdf01Icon","ConversationView","role","density","className","messages","footer"],"sources":["../../../src/components/kaeso/conversation.tsx"],"sourcesContent":["import { forwardRef, lazy, Suspense, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { ToolsIcon as __icon_ToolsIcon, Image01Icon as __icon_Image01Icon, Pdf01Icon as __icon_Pdf01Icon } from \"@hugeicons/core-free-icons\";\nimport { Icon } from \"../icon/icon.js\";\nimport { Banner } from \"../banner/banner.js\";\nimport { Collapsible } from \"../collapsible/collapsible.js\";\nimport { JsonView } from \"../code-block/json-view.js\";\nimport { Badge } from \"../badge/badge.js\";\nimport { safeHref } from \"../../utils/safe-href.js\";\nimport { useUiText, type UiText } from \"../../i18n/context.js\";\n\nconst LazyMarkdown = /* @__PURE__ */ lazy(() => import(\"../markdown/markdown.js\").then((m) => ({ default: m.Markdown })));\n\nexport const KAESO_CONVERSATION_VARIANTS = {\n density: {\n default: { classes: \"gap-24\" },\n compact: { classes: \"gap-16\" },\n },\n} as const;\nexport const KAESO_CONVERSATION_DEFAULT_VARIANTS = { density: \"default\" } as const;\n\nexport type ContentBlock =\n | { type: \"text\"; text: string }\n | { type: \"tool_call\"; id?: string | undefined; name: string; arguments: unknown }\n | { type: \"tool_result\"; tool_call_id?: string | undefined; content: string | ContentBlock[]; is_error?: boolean | undefined }\n | { type: \"reasoning\"; text: string; redacted?: boolean | undefined }\n | { type: \"image\"; src?: string | undefined; alt?: string | undefined; media_type?: string | undefined }\n | { type: \"document\"; name?: string | undefined; media_type?: string | undefined }\n | { type: \"refusal\"; text: string };\n\nexport interface ConversationMessage {\n role: \"system\" | \"user\" | \"assistant\" | \"tool\" | \"developer\";\n content: string | ContentBlock[];\n}\n\nfunction roleNames(t: UiText): Record<ConversationMessage[\"role\"], string> {\n return {\n system: t(\"conversationView.system\", \"System\"),\n developer: t(\"conversationView.developer\", \"Developer\"),\n user: t(\"conversationView.user\", \"User\"),\n assistant: t(\"conversationView.assistant\", \"Assistant\"),\n tool: t(\"conversationView.tool\", \"Tool\"),\n };\n}\n\nconst imageHref = (src: string) => (/^data:image\\/[a-z0-9.+-]+;/i.test(src) ? src : safeHref(src));\n\nfunction isJson(s: string) {\n const t = s.trim();\n if (!/^[[{]/.test(t)) return false;\n try {\n JSON.parse(t);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction Prose({ text, markdown, small }: { text: string; markdown: boolean; small?: boolean | undefined }) {\n const plain = (\n <p className={cn(\"max-w-prose whitespace-pre-wrap wrap-break-word text-pretty\", small ? \"text-small text-fg-secondary\" : \"text-body text-fg\")}>{text}</p>\n );\n if (!markdown) return plain;\n return (\n <Suspense fallback={plain}>\n <LazyMarkdown text={text} {...(small ? { size: \"small\" as const, tone: \"secondary\" as const } : {})} />\n </Suspense>\n );\n}\n\nfunction Blocks({ blocks, markdown }: { blocks: ContentBlock[]; markdown: boolean }) {\n const t = useUiText();\n return (\n <div className=\"flex flex-col gap-12\">\n {blocks.map((b, i) => {\n switch (b.type) {\n case \"text\":\n return <Prose key={i} text={b.text} markdown={markdown} />;\n case \"tool_call\":\n return (\n <div key={i} className=\"flex flex-col gap-8\">\n <span className=\"inline-flex items-center gap-8 text-small font-medium text-fg-secondary\">\n <Icon icon={__icon_ToolsIcon} size=\"xs\" />\n {t(\"conversationView.called\", \"Called **{name}**\", { name: b.name })\n .split(\"**\")\n .map((part, j) =>\n j % 2 ? (\n <span key={j} className=\"mono text-fg\">\n {part}\n </span>\n ) : (\n part\n ),\n )}\n {b.id && <span className=\"mono text-fg-tertiary\">{b.id}</span>}\n </span>\n <JsonView value={b.arguments} defaultDepth={3} />\n </div>\n );\n case \"tool_result\":\n return (\n <div key={i} className=\"flex flex-col gap-8 pl-16 hairline-l\">\n <span className=\"inline-flex items-center gap-8 text-small font-medium text-fg-secondary\">\n {t(\"conversationView.result\", \"Result\")}\n {b.tool_call_id && <span className=\"mono text-fg-tertiary\">{b.tool_call_id}</span>}\n {b.is_error && <Badge tone=\"danger\">{t(\"conversationView.error\", \"Error\")}</Badge>}\n </span>\n {typeof b.content !== \"string\" ? (\n <Blocks blocks={b.content} markdown={markdown} />\n ) : markdown && !isJson(b.content) ? (\n <Prose text={b.content} markdown />\n ) : (\n <pre className=\"mono text-small whitespace-pre-wrap wrap-anywhere text-fg\">{b.content}</pre>\n )}\n </div>\n );\n case \"reasoning\":\n return (\n <Collapsible\n key={i}\n title={<span className=\"text-fg-secondary\">{t(\"conversationView.reasoning\", \"Reasoning\")}</span>}\n hint={b.redacted ? t(\"conversationView.redacted\", \"Redacted by the provider\") : undefined}\n >\n {b.redacted ? (\n <p className=\"max-w-prose text-small text-fg-secondary\">\n {t(\"conversationView.encrypted\", \"The provider returned this reasoning in encrypted form.\")}\n </p>\n ) : (\n <Prose text={b.text} markdown={markdown} small />\n )}\n </Collapsible>\n );\n case \"image\": {\n const href = b.src ? imageHref(b.src) : null;\n return href ? (\n <a\n key={i}\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer nofollow\"\n className=\"block w-120 overflow-hidden rounded-well ring-over ring-over-line focus-ring\"\n >\n <img src={href} alt={b.alt ?? t(\"conversationView.imageInput\", \"Image input\")} className=\"block h-120 w-120 object-cover\" />\n </a>\n ) : (\n <span key={i} className=\"inline-flex h-32 w-max items-center gap-8 rounded-pill bg-fill-1 px-12 text-small text-fg-secondary\">\n <Icon icon={__icon_Image01Icon} size=\"xs\" /> {t(\"conversationView.image\", \"Image\")} {b.media_type && <span className=\"mono\">{b.media_type}</span>}\n </span>\n );\n }\n case \"document\":\n return (\n <span key={i} className=\"inline-flex h-32 w-max items-center gap-8 rounded-pill bg-fill-1 px-12 text-small text-fg-secondary\">\n <Icon icon={__icon_Pdf01Icon} size=\"xs\" /> {b.name ?? t(\"conversationView.document\", \"Document\")}\n </span>\n );\n case \"refusal\":\n return (\n <Banner key={i} tone=\"warning\" title={t(\"conversationView.refused\", \"The model refused.\")}>\n {b.text}\n </Banner>\n );\n }\n })}\n </div>\n );\n}\n\nexport interface ConversationViewProps {\n messages: ConversationMessage[];\n density?: keyof typeof KAESO_CONVERSATION_VARIANTS.density | undefined;\n markdown?: boolean | undefined;\n className?: string | undefined;\n footer?: ReactNode | undefined;\n}\n\nexport const ConversationView = /* @__PURE__ */ forwardRef<HTMLDivElement, ConversationViewProps>(function ConversationView(\n { messages, density = \"default\", markdown = false, className, footer },\n ref,\n) {\n const t = useUiText();\n const role = roleNames(t);\n return (\n <div ref={ref} className={cn(\"flex flex-col\", KAESO_CONVERSATION_VARIANTS.density[density].classes, className)}>\n {messages.map((m, i) => (\n <section key={i} aria-label={role[m.role]} className=\"flex flex-col gap-8\">\n <span className={cn(\"text-caption font-medium\", m.role === \"assistant\" ? \"text-fg\" : \"text-fg-secondary\")}>{role[m.role]}</span>\n <div className={cn(m.role === \"system\" || m.role === \"developer\" ? \"rounded-well bg-fill-1 px-16 py-12\" : \"\")}>\n <Blocks blocks={typeof m.content === \"string\" ? [{ type: \"text\", text: m.content }] : m.content} markdown={markdown} />\n </div>\n </section>\n ))}\n {footer}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") ConversationView.displayName = \"ConversationView\";\n"],"mappings":";;;;;;;;;;;;;AAWA,IAAMW,IAA+B,wBAAW,OAAO,oCAA0B,CAAA,MAAA,MAAAC,EAAA,CAAA,CAAA,CAAC,MAAM,OAAO,EAAE,SAASC,EAAE,SAAS,EAAE,CAAC,GAE3GC,IAA8B,EACzC,SAAS;CACP,SAAS,EAAE,SAAS,SAAS;CAC7B,SAAS,EAAE,SAAS,SAAS;AAC/B,EACF,GACaC,IAAsC,EAAE,SAAS,UAAU;AAgBxE,SAASC,EAAU,GAAwD;CACzE,OAAO;EACL,QAAQC,EAAE,2BAA2B,QAAQ;EAC7C,WAAWA,EAAE,8BAA8B,WAAW;EACtD,MAAMA,EAAE,yBAAyB,MAAM;EACvC,WAAWA,EAAE,8BAA8B,WAAW;EACtD,MAAMA,EAAE,yBAAyB,MAAM;CACzC;AACF;AAEA,IAAMC,KAAa,MAAiB,8BAA8B,KAAKC,CAAG,IAAIA,IAAMT,EAASS,CAAG;AAEhG,SAASC,EAAO,GAAW;CACzB,IAAM,IAAIC,EAAE,KAAK;CACjB,IAAI,CAAC,QAAQ,KAAK,CAAC,GAAG,OAAO;CAC7B,IAAI;EAEF,OADA,KAAK,MAAM,CAAC,GACL;CACT,QAAQ;EACN,OAAO;CACT;AACF;AAEA,SAASC,EAAM,EAAE,SAAM,aAAU,YAA2E;CAC1G,IAAMC,IACJ,kBAAC,KAAD;EAAG,WAAWpB,EAAG,+DAA+DqB,IAAQ,iCAAiC,mBAAmB;EAAI,UAAAC;CAAQ,CAAA;CAG1J,OADKC,IAEH,kBAACC,GAAD;EAAU,UAAUJ;EAClB,UAAA,kBAACZ,GAAD;GAAoB;GAAM,GAAKa,IAAQ;IAAE,MAAM;IAAkB,MAAM;GAAqB,IAAI,CAAC;EAAK,CAAA;CAC9F,CAAA,IAJUD;AAMxB;AAEA,SAASK,EAAO,EAAE,WAAQ,eAA2D;CACnF,IAAMX,IAAIb,EAAU;CACpB,OACE,kBAAC,OAAD;EAAK,WAAU;EACZ,UAAAyB,EAAO,KAAK,GAAG,MAAM;GACpB,QAAQC,EAAE,MAAV;IACE,KAAK,QACH,OAAO,kBAACR,GAAD;KAAe,MAAMQ,EAAE;KAAgB;IAAW,GAAtCC,CAAsC;IAC3D,KAAK,aACH,OACE,kBAAC,OAAD;KAAa,WAAU;KAAvB,UAAA,CACE,kBAAC,QAAD;MAAM,WAAU;MAAhB,UAAA;OACE,kBAAC1B,GAAD;QAAM,MAAML;QAAkB,MAAK;OAAM,CAAA;OACxCiB,EAAE,2BAA2B,qBAAqB,EAAE,MAAMa,EAAE,KAAK,CAAC,CAAC,CACjE,MAAM,IAAI,CAAC,CACX,KAAK,GAAM,MACVG,IAAI,IACF,kBAAC,QAAD;QAAc,WAAU;QACrB,UAAAC;OACG,GAFKD,CAEL,IAENC,CAEJ;OACDJ,EAAE,MAAM,kBAAC,QAAD;QAAM,WAAU;QAAyB,UAAAA,EAAE;OAAS,CAAA;MACzD;KACN,CAAA,GAAA,kBAACvB,GAAD;MAAU,OAAOuB,EAAE;MAAW,cAAc;KAAI,CAAA,CAC7C;IAjBK,GAAAC,CAiBL;IAET,KAAK,eACH,OACE,kBAAC,OAAD;KAAa,WAAU;KAAvB,UAAA,CACE,kBAAC,QAAD;MAAM,WAAU;MAAhB,UAAA;OACGd,EAAE,2BAA2B,QAAQ;OACrCa,EAAE,gBAAgB,kBAAC,QAAD;QAAM,WAAU;QAAyB,UAAAA,EAAE;OAAmB,CAAA;OAChFA,EAAE,YAAY,kBAACtB,GAAD;QAAO,MAAK;QAAU,UAAAS,EAAE,0BAA0B,OAAO;OAAS,CAAA;MAC7E;KACL,CAAA,GAAA,OAAOa,EAAE,WAAY,WAElBJ,KAAY,CAACN,EAAOU,EAAE,OAAO,IAC/B,kBAACR,GAAD;MAAO,MAAMQ,EAAE;MAAS,UAAA;KAAU,CAAA,IAElC,kBAAC,OAAD;MAAK,WAAU;MAA6D,UAAAA,EAAE;KAAa,CAAA,IAJ3F,kBAACF,GAAD;MAAQ,QAAQE,EAAE;MAAmB;KAAW,CAAA,CAM/C;IAbK,GAAAC,CAaL;IAET,KAAK,aACH,OACE,kBAACtB,GAAD;KAEE,OAAO,kBAAC,QAAD;MAAM,WAAU;MAAqB,UAAAQ,EAAE,8BAA8B,WAAW;KAAQ,CAAA;KAC/F,MAAMa,EAAE,WAAWb,EAAE,6BAA6B,0BAA0B,IAAI,KAAA;KAE/E,UAAAa,EAAE,WACD,kBAAC,KAAD;MAAG,WAAU;MACV,UAAAb,EAAE,8BAA8B,yDAAyD;KACzF,CAAA,IAEH,kBAACK,GAAD;MAAO,MAAMQ,EAAE;MAAgB;MAAU,OAAA;KAAO,CAAA;IAEvC,GAXNC,CAWM;IAEjB,KAAK,SAAS;KACZ,IAAMI,IAAOL,EAAE,MAAMZ,EAAUY,EAAE,GAAG,IAAI;KACxC,OAAOK,IACL,kBAAC,KAAD;MAEQ;MACN,QAAO;MACP,KAAI;MACJ,WAAU;MAEV,UAAA,kBAAC,OAAD;OAAK,KAAKA;OAAM,KAAKL,EAAE,OAAOb,EAAE,+BAA+B,aAAa;OAAG,WAAU;MAAkC,CAAA;KAC1H,GAPIc,CAOJ,IAEH,kBAAC,QAAD;MAAc,WAAU;MAAxB,UAAA;OACE,kBAAC1B,GAAD;QAAM,MAAMJ;QAAoB,MAAK;OAAM,CAAA;OAAC;OAAEgB,EAAE,0BAA0B,OAAO;OAAE;OAAEa,EAAE,cAAc,kBAAC,QAAD;QAAM,WAAU;QAAQ,UAAAA,EAAE;OAAiB,CAAA;MAC5I;KAFK,GAAAC,CAEL;IAEV;IACA,KAAK,YACH,OACE,kBAAC,QAAD;KAAc,WAAU;KAAxB,UAAA;MACE,kBAAC1B,GAAD;OAAM,MAAMH;OAAkB,MAAK;MAAM,CAAA;MAAC;MAAE4B,EAAE,QAAQb,EAAE,6BAA6B,UAAU;KAC3F;IAFK,GAAAc,CAEL;IAEV,KAAK,WACH,OACE,kBAACzB,GAAD;KAAgB,MAAK;KAAU,OAAOW,EAAE,4BAA4B,oBAAoB;KACrF,UAAAa,EAAE;IACG,GAFKC,CAEL;GAEd;EACF,CAAC;CACE,CAAA;AAET;AAUA,IAAaO,IAAmC,kBAAkD,SAChG,EAAE,aAAU,aAAU,WAAW,cAAW,IAAO,cAAW,aAC9D,GACA;CAEA,IAAMC,IAAOvB,EADHZ,EACa,CAAC;CACxB,OACE,kBAAC,OAAD;EAAU;EAAK,WAAWD,EAAG,iBAAiBW,EAA4B,QAAQ0B,EAAQ,CAAC,SAASC,CAAS;EAA7G,UAAA,CACGC,EAAS,KAAK,GAAG,MAChB,kBAAC,WAAD;GAAiB,cAAYH,EAAK1B,EAAE;GAAO,WAAU;GAArD,UAAA,CACE,kBAAC,QAAD;IAAM,WAAWV,EAAG,4BAA4BU,EAAE,SAAS,cAAc,YAAY,mBAAmB;IAAI,UAAA0B,EAAK1B,EAAE;GAAY,CAAA,GAC/H,kBAAC,OAAD;IAAK,WAAWV,EAAGU,EAAE,SAAS,YAAYA,EAAE,SAAS,cAAc,uCAAuC,EAAE;IAC1G,UAAA,kBAACe,GAAD;KAAQ,QAAQ,OAAOf,EAAE,WAAY,WAAW,CAAC;MAAE,MAAM;MAAQ,MAAMA,EAAE;KAAQ,CAAC,IAAIA,EAAE;KAAmB;IAAW,CAAA;GACnH,CAAA,CACE;EALK,GAAAkB,CAKL,CACV,GACAY,CACE;;AAET,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAiB,cAAc"}
1
+ {"version":3,"file":"conversation.js","names":["__icon_ToolsIcon","__icon_Image01Icon","__icon_Pdf01Icon","cn","useUiText","Icon","Banner","JsonView","Badge","Collapsible","safeHref","LazyMarkdown","n","m","KAESO_CONVERSATION_VARIANTS","KAESO_CONVERSATION_DEFAULT_VARIANTS","roleNames","t","DATA_IMAGE","webHref","href","src","isJson","s","Prose","plain","small","text","markdown","Suspense","Blocks","blocks","b","i","ToolsIcon","j","part","Link","Image01Icon","Pdf01Icon","ConversationView","role","density","className","messages","footer"],"sources":["../../../src/components/kaeso/conversation.tsx"],"sourcesContent":["import { forwardRef, lazy, Suspense, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { ToolsIcon as __icon_ToolsIcon, Image01Icon as __icon_Image01Icon, Pdf01Icon as __icon_Pdf01Icon } from \"@hugeicons/core-free-icons\";\nimport { Icon } from \"../icon/icon.js\";\nimport { Banner } from \"../banner/banner.js\";\nimport { Collapsible } from \"../collapsible/collapsible.js\";\nimport { JsonView } from \"../code-block/json-view.js\";\nimport { Badge } from \"../badge/badge.js\";\nimport { Link } from \"../link/link.js\";\nimport { safeHref } from \"../../utils/safe-href.js\";\nimport { useUiText, type UiText } from \"../../i18n/context.js\";\n\nconst LazyMarkdown = /* @__PURE__ */ lazy(() => import(\"../markdown/markdown.js\").then((m) => ({ default: m.Markdown })));\n\nexport const KAESO_CONVERSATION_VARIANTS = {\n density: {\n default: { classes: \"gap-24\" },\n compact: { classes: \"gap-16\" },\n },\n} as const;\nexport const KAESO_CONVERSATION_DEFAULT_VARIANTS = { density: \"default\" } as const;\n\nexport type ContentBlock =\n | { type: \"text\"; text: string }\n | { type: \"tool_call\"; id?: string | undefined; name: string; arguments: unknown }\n | { type: \"tool_result\"; tool_call_id?: string | undefined; content: string | ContentBlock[]; is_error?: boolean | undefined }\n | { type: \"reasoning\"; text: string; redacted?: boolean | undefined }\n | { type: \"image\"; src?: string | undefined; alt?: string | undefined; media_type?: string | undefined }\n | { type: \"document\"; name?: string | undefined; media_type?: string | undefined }\n | { type: \"refusal\"; text: string };\n\nexport interface ConversationMessage {\n role: \"system\" | \"user\" | \"assistant\" | \"tool\" | \"developer\";\n content: string | ContentBlock[];\n}\n\nfunction roleNames(t: UiText): Record<ConversationMessage[\"role\"], string> {\n return {\n system: t(\"conversationView.system\", \"System\"),\n developer: t(\"conversationView.developer\", \"Developer\"),\n user: t(\"conversationView.user\", \"User\"),\n assistant: t(\"conversationView.assistant\", \"Assistant\"),\n tool: t(\"conversationView.tool\", \"Tool\"),\n };\n}\n\nconst DATA_IMAGE = /^data:image\\/[a-z0-9.+-]+;/i;\n\nfunction webHref(src: string): string | null {\n const href = safeHref(src);\n return href && /^https?:/.test(href) ? href : null;\n}\n\nfunction isJson(s: string) {\n const t = s.trim();\n if (!/^[[{]/.test(t)) return false;\n try {\n JSON.parse(t);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction Prose({ text, markdown, small }: { text: string; markdown: boolean; small?: boolean | undefined }) {\n const plain = (\n <p className={cn(\"max-w-prose whitespace-pre-wrap wrap-break-word text-pretty\", small ? \"text-small text-fg-secondary\" : \"text-body text-fg\")}>{text}</p>\n );\n if (!markdown) return plain;\n return (\n <Suspense fallback={plain}>\n <LazyMarkdown text={text} {...(small ? { size: \"small\" as const, tone: \"secondary\" as const } : {})} />\n </Suspense>\n );\n}\n\nfunction Blocks({ blocks, markdown }: { blocks: ContentBlock[]; markdown: boolean }) {\n const t = useUiText();\n return (\n <div className=\"flex flex-col gap-12\">\n {blocks.map((b, i) => {\n switch (b.type) {\n case \"text\":\n return <Prose key={i} text={b.text} markdown={markdown} />;\n case \"tool_call\":\n return (\n <div key={i} className=\"flex flex-col gap-8\">\n <span className=\"inline-flex items-center gap-8 text-small font-medium text-fg-secondary\">\n <Icon icon={__icon_ToolsIcon} size=\"xs\" />\n {t(\"conversationView.called\", \"Called **{name}**\", { name: b.name })\n .split(\"**\")\n .map((part, j) =>\n j % 2 ? (\n <span key={j} className=\"mono text-fg\">\n {part}\n </span>\n ) : (\n part\n ),\n )}\n {b.id && <span className=\"mono text-fg-tertiary\">{b.id}</span>}\n </span>\n <JsonView value={b.arguments} defaultDepth={3} />\n </div>\n );\n case \"tool_result\":\n return (\n <div key={i} className=\"flex flex-col gap-8 pl-16 hairline-l\">\n <span className=\"inline-flex items-center gap-8 text-small font-medium text-fg-secondary\">\n {t(\"conversationView.result\", \"Result\")}\n {b.tool_call_id && <span className=\"mono text-fg-tertiary\">{b.tool_call_id}</span>}\n {b.is_error && <Badge tone=\"danger\">{t(\"conversationView.error\", \"Error\")}</Badge>}\n </span>\n {typeof b.content !== \"string\" ? (\n <Blocks blocks={b.content} markdown={markdown} />\n ) : markdown && !isJson(b.content) ? (\n <Prose text={b.content} markdown />\n ) : (\n <pre className=\"mono text-small whitespace-pre-wrap wrap-anywhere text-fg\">{b.content}</pre>\n )}\n </div>\n );\n case \"reasoning\":\n return (\n <Collapsible\n key={i}\n title={<span className=\"text-fg-secondary\">{t(\"conversationView.reasoning\", \"Reasoning\")}</span>}\n hint={b.redacted ? t(\"conversationView.redacted\", \"Redacted by the provider\") : undefined}\n >\n {b.redacted ? (\n <p className=\"max-w-prose text-small text-fg-secondary\">\n {t(\"conversationView.encrypted\", \"The provider returned this reasoning in encrypted form.\")}\n </p>\n ) : (\n <Prose text={b.text} markdown={markdown} small />\n )}\n </Collapsible>\n );\n case \"image\": {\n if (b.src && DATA_IMAGE.test(b.src))\n return (\n <span key={i} className=\"block w-120 overflow-hidden rounded-well ring-over ring-over-line\">\n <img src={b.src} alt={b.alt ?? t(\"conversationView.imageInput\", \"Image input\")} className=\"block h-120 w-120 object-cover\" />\n </span>\n );\n const href = b.src ? webHref(b.src) : null;\n return href ? (\n <Link key={i} href={href} external rel=\"noopener noreferrer nofollow\" className=\"w-max max-w-full wrap-anywhere\">\n {t(\"conversationView.imageFrom\", \"Image from {host}\", { host: new URL(href).host })}\n </Link>\n ) : (\n <span key={i} className=\"inline-flex h-32 w-max items-center gap-8 rounded-pill bg-fill-1 px-12 text-small text-fg-secondary\">\n <Icon icon={__icon_Image01Icon} size=\"xs\" /> {t(\"conversationView.image\", \"Image\")} {b.media_type && <span className=\"mono\">{b.media_type}</span>}\n </span>\n );\n }\n case \"document\":\n return (\n <span key={i} className=\"inline-flex h-32 w-max items-center gap-8 rounded-pill bg-fill-1 px-12 text-small text-fg-secondary\">\n <Icon icon={__icon_Pdf01Icon} size=\"xs\" /> {b.name ?? t(\"conversationView.document\", \"Document\")}\n </span>\n );\n case \"refusal\":\n return (\n <Banner key={i} tone=\"warning\" title={t(\"conversationView.refused\", \"The model refused.\")}>\n {b.text}\n </Banner>\n );\n }\n })}\n </div>\n );\n}\n\nexport interface ConversationViewProps {\n messages: ConversationMessage[];\n density?: keyof typeof KAESO_CONVERSATION_VARIANTS.density | undefined;\n markdown?: boolean | undefined;\n className?: string | undefined;\n footer?: ReactNode | undefined;\n}\n\nexport const ConversationView = /* @__PURE__ */ forwardRef<HTMLDivElement, ConversationViewProps>(function ConversationView(\n { messages, density = \"default\", markdown = false, className, footer },\n ref,\n) {\n const t = useUiText();\n const role = roleNames(t);\n return (\n <div ref={ref} className={cn(\"flex flex-col\", KAESO_CONVERSATION_VARIANTS.density[density].classes, className)}>\n {messages.map((m, i) => (\n <section key={i} aria-label={role[m.role]} className=\"flex flex-col gap-8\">\n <span className={cn(\"text-caption font-medium\", m.role === \"assistant\" ? \"text-fg\" : \"text-fg-secondary\")}>{role[m.role]}</span>\n <div className={cn(m.role === \"system\" || m.role === \"developer\" ? \"rounded-well bg-fill-1 px-16 py-12\" : \"\")}>\n <Blocks blocks={typeof m.content === \"string\" ? [{ type: \"text\", text: m.content }] : m.content} markdown={markdown} />\n </div>\n </section>\n ))}\n {footer}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") ConversationView.displayName = \"ConversationView\";\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export { t as KAESO_IDENTITY_DEFAULT_VARIANTS, n as KAESO_IDENTITY_VARIANTS, r as KeyDisplay, i as ModelLabel, a as ProviderBadge, o as ProviderCard, s as RequestTimeline, c as StatusCode, l as providerName } from "../../chunks/identity-BtZC_d_Q.js";
2
+ export { t as CapabilityIcons, n as KAESO_IDENTITY_DEFAULT_VARIANTS, r as KAESO_IDENTITY_VARIANTS, i as KeyDisplay, a as ModelLabel, o as ProviderBadge, s as ProviderCard, c as RequestTimeline, l as StatusCode, u as providerName } from "../../chunks/identity-CsZvAUwu.js";
@@ -1,11 +1,11 @@
1
1
  "use client";
2
- import { t as e } from "../../chunks/cn-CidVUKMm.js";
2
+ import { t as e } from "../../chunks/cn-DUDmdLpZ.js";
3
3
  import { i as t } from "../../chunks/context-BELWW79w.js";
4
- import { t as n } from "../../chunks/icon-CeNQtobn.js";
5
- import { n as r } from "../../chunks/button-DQvoOxVQ.js";
4
+ import { t as n } from "../../chunks/icon-BqujXDUc.js";
5
+ import { n as r } from "../../chunks/button-CAPyW-v8.js";
6
6
  import { t as i } from "../../chunks/use-copy-Dm2ncvMX.js";
7
- import { t as a } from "../../chunks/copy-button-DXxn-YYZ.js";
8
- import { t as o } from "../../chunks/code-block-DxtladFW.js";
7
+ import { t as a } from "../../chunks/copy-button-CNpEnS04.js";
8
+ import { t as o } from "../../chunks/code-block-DREsvJ-g.js";
9
9
  import { forwardRef as s } from "react";
10
10
  import { jsx as c, jsxs as l } from "react/jsx-runtime";
11
11
  import { Alert02Icon as u, Copy01Icon as d, Tick02Icon as f } from "@hugeicons/core-free-icons";
@@ -17,17 +17,17 @@ function h({ baseUrl: e, apiKey: t = "$KAESO_API_KEY", model: n = "gpt-5" }) {
17
17
  {
18
18
  label: "Python",
19
19
  lang: "python",
20
- code: `from openai import OpenAI\n${t.startsWith("$") ? "import os\n" : ""}\nclient = OpenAI(base_url="${e}/v1", api_key=${r})\n\nresponse = client.responses.create(\n model="${n}",\n input="Write one sentence about gateways.",\n)\nprint(response.output_text)`
20
+ code: `from openai import OpenAI\n${t.startsWith("$") ? "import os\n" : ""}\nclient = OpenAI(\n base_url="${e}/v1",\n api_key=${r},\n)\n\nresponse = client.responses.create(\n model="${n}",\n input="Write one sentence about gateways.",\n)\nprint(response.output_text)`
21
21
  },
22
22
  {
23
23
  label: "Node",
24
24
  lang: "ts",
25
- code: `import OpenAI from "openai";\n\nconst client = new OpenAI({ baseURL: "${e}/v1", apiKey: ${i} });\n\nconst response = await client.responses.create({\n model: "${n}",\n input: "Write one sentence about gateways.",\n});\nconsole.log(response.output_text);`
25
+ code: `import OpenAI from "openai";\n\nconst client = new OpenAI({\n baseURL: "${e}/v1",\n apiKey: ${i},\n});\n\nconst response = await client.responses.create({\n model: "${n}",\n input: "Write one sentence about gateways.",\n});\nconsole.log(response.output_text);`
26
26
  },
27
27
  {
28
28
  label: "curl",
29
29
  lang: "bash",
30
- code: `curl ${e}/v1/responses \\\n -H "Authorization: Bearer ${t}" \\\n -H "Content-Type: application/json" \\\n -d '{"model": "${n}", "input": "Write one sentence about gateways."}'`
30
+ code: `${t.startsWith("$") ? "" : `KAESO_API_KEY=${t}\n`}curl ${e}/v1/responses \\\n -H "Authorization: Bearer ${t.startsWith("$") ? t : "$KAESO_API_KEY"}" \\\n -H "Content-Type: application/json" \\\n -d '{\n "model": "${n}",\n "input": "Write one sentence about gateways."\n }'`
31
31
  }
32
32
  ];
33
33
  }
@@ -1 +1 @@
1
- {"version":3,"file":"moments.js","names":["__icon_Tick02Icon","__icon_Copy01Icon","__icon_Alert02Icon","cn","useUiText","Icon","Button","useCopy","ClipboardText","CodeBlock","KAESO_MOMENTS_VARIANTS","KAESO_MOMENTS_DEFAULT_VARIANTS","sdkSnippets","envKey","apiKey","nodeKey","baseUrl","model","SecretReveal","t","copyKey","done","className","name","range","selection","secret","copied","Tick02Icon","Copy01Icon","copy","onCopied","Alert02Icon","snippets","EnvironmentSnippet"],"sources":["../../../src/components/kaeso/moments.tsx"],"sourcesContent":["import { forwardRef, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { Tick02Icon as __icon_Tick02Icon, Copy01Icon as __icon_Copy01Icon, Alert02Icon as __icon_Alert02Icon } from \"@hugeicons/core-free-icons\";\nimport { useCopy } from \"../../hooks/use-copy.js\";\nimport { Icon } from \"../icon/icon.js\";\nimport { Button } from \"../button/button.js\";\nimport { CodeBlock, type CodeTab } from \"../code-block/code-block.js\";\nimport { ClipboardText } from \"../copy-button/copy-button.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_MOMENTS_VARIANTS = {\n secret: { md: { classes: \"rounded-well bg-fill-1 px-20 py-16\" } },\n} as const;\nexport const KAESO_MOMENTS_DEFAULT_VARIANTS = { secret: \"md\" } as const;\n\nexport interface SnippetOptions {\n baseUrl: string;\n apiKey?: string | undefined;\n model?: string | undefined;\n}\n\nexport function sdkSnippets({ baseUrl, apiKey = \"$KAESO_API_KEY\", model = \"gpt-5\" }: SnippetOptions): CodeTab[] {\n const envKey = apiKey.startsWith(\"$\") ? `os.environ[\"${apiKey.slice(1)}\"]` : `\"${apiKey}\"`;\n const nodeKey = apiKey.startsWith(\"$\") ? `process.env.${apiKey.slice(1)}` : `\"${apiKey}\"`;\n return [\n {\n label: \"Python\",\n lang: \"python\",\n code: `from openai import OpenAI\\n${apiKey.startsWith(\"$\") ? \"import os\\n\" : \"\"}\\nclient = OpenAI(base_url=\"${baseUrl}/v1\", api_key=${envKey})\\n\\nresponse = client.responses.create(\\n model=\"${model}\",\\n input=\"Write one sentence about gateways.\",\\n)\\nprint(response.output_text)`,\n },\n {\n label: \"Node\",\n lang: \"ts\",\n code: `import OpenAI from \"openai\";\\n\\nconst client = new OpenAI({ baseURL: \"${baseUrl}/v1\", apiKey: ${nodeKey} });\\n\\nconst response = await client.responses.create({\\n model: \"${model}\",\\n input: \"Write one sentence about gateways.\",\\n});\\nconsole.log(response.output_text);`,\n },\n {\n label: \"curl\",\n lang: \"bash\",\n code: `curl ${baseUrl}/v1/responses \\\\\\n -H \"Authorization: Bearer ${apiKey}\" \\\\\\n -H \"Content-Type: application/json\" \\\\\\n -d '{\"model\": \"${model}\", \"input\": \"Write one sentence about gateways.\"}'`,\n },\n ];\n}\n\nexport interface SecretRevealProps extends SnippetOptions {\n secret: string;\n name?: ReactNode | undefined;\n onCopied?: (() => void) | undefined;\n snippets?: CodeTab[] | false | undefined;\n className?: string | undefined;\n}\n\nexport const SecretReveal = /* @__PURE__ */ forwardRef<HTMLDivElement, SecretRevealProps>(function SecretReveal(\n { secret, name, baseUrl, model, onCopied, snippets, className },\n ref,\n) {\n const t = useUiText();\n const { copied, copy } = useCopy(2400);\n const copyKey = t(\"secretReveal.copyKey\", \"Copy key\");\n const done = t(\"secretReveal.copied\", \"Copied\");\n return (\n <div ref={ref} className={cn(\"flex flex-col gap-24\", className)}>\n <div className=\"flex flex-col items-center gap-16 text-center\">\n <div\n tabIndex={0}\n role=\"textbox\"\n aria-readonly\n aria-label={typeof name === \"string\" ? t(\"secretReveal.secretFor\", \"Secret for {name}\", { name }) : t(\"secretReveal.secret\", \"Secret\")}\n onClick={(e) => {\n const range = document.createRange();\n range.selectNodeContents(e.currentTarget);\n const selection = window.getSelection();\n selection?.removeAllRanges();\n selection?.addRange(range);\n }}\n className=\"w-full cursor-text rounded-well bg-fill-1 px-20 py-16 mono text-body-lg leading-code break-all text-fg select-all focus-ring\"\n >\n {secret}\n </div>\n <Button\n variant=\"primary\"\n size=\"xl\"\n leadingIcon={copied ? __icon_Tick02Icon : __icon_Copy01Icon}\n reserveLabels={[copyKey, done]}\n onClick={async () => {\n if (await copy(secret)) onCopied?.();\n }}\n >\n {copied ? done : copyKey}\n </Button>\n <p className=\"inline-flex items-center gap-6 text-body text-warning-text\">\n <Icon icon={__icon_Alert02Icon} size=\"sm\" />\n {t(\"secretReveal.shownOnce\", \"Shown once. Store it now.\")}\n </p>\n </div>\n {snippets !== false && <CodeBlock tabs={snippets ?? sdkSnippets({ baseUrl, apiKey: secret, ...(model ? { model } : {}) })} copy />}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") SecretReveal.displayName = \"SecretReveal\";\n\nexport const EnvironmentSnippet = /* @__PURE__ */ forwardRef<HTMLDivElement, SnippetOptions & { className?: string | undefined }>(function EnvironmentSnippet(\n { baseUrl, apiKey = \"$KAESO_API_KEY\", model, className },\n ref,\n) {\n const t = useUiText();\n return (\n <div ref={ref} className={cn(\"flex flex-col gap-16\", className)}>\n <div className=\"grid gap-12 md:grid-cols-2\">\n <div className=\"flex min-w-0 flex-col gap-6\">\n <span className=\"text-small font-medium text-fg-secondary\">{t(\"environmentSnippet.baseUrl\", \"Base URL\")}</span>\n <ClipboardText value={`${baseUrl}/v1`} label={t(\"environmentSnippet.copyBaseUrl\", \"Copy base URL\")} />\n </div>\n <div className=\"flex min-w-0 flex-col gap-6\">\n <span className=\"text-small font-medium text-fg-secondary\">{t(\"environmentSnippet.apiKey\", \"API key\")}</span>\n <ClipboardText value={apiKey} label={t(\"environmentSnippet.copyVariableName\", \"Copy variable name\")} />\n </div>\n </div>\n <CodeBlock tabs={sdkSnippets({ baseUrl, apiKey, ...(model ? { model } : {}) })} />\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") EnvironmentSnippet.displayName = \"EnvironmentSnippet\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"moments.js","names":["__icon_Tick02Icon","__icon_Copy01Icon","__icon_Alert02Icon","cn","useUiText","Icon","Button","useCopy","ClipboardText","CodeBlock","KAESO_MOMENTS_VARIANTS","KAESO_MOMENTS_DEFAULT_VARIANTS","sdkSnippets","envKey","apiKey","nodeKey","baseUrl","model","SecretReveal","t","copyKey","done","className","name","range","selection","secret","copied","Tick02Icon","Copy01Icon","copy","onCopied","Alert02Icon","snippets","EnvironmentSnippet"],"sources":["../../../src/components/kaeso/moments.tsx"],"sourcesContent":["import { forwardRef, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { Tick02Icon as __icon_Tick02Icon, Copy01Icon as __icon_Copy01Icon, Alert02Icon as __icon_Alert02Icon } from \"@hugeicons/core-free-icons\";\nimport { useCopy } from \"../../hooks/use-copy.js\";\nimport { Icon } from \"../icon/icon.js\";\nimport { Button } from \"../button/button.js\";\nimport { CodeBlock, type CodeTab } from \"../code-block/code-block.js\";\nimport { ClipboardText } from \"../copy-button/copy-button.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_MOMENTS_VARIANTS = {\n secret: { md: { classes: \"rounded-well bg-fill-1 px-20 py-16\" } },\n} as const;\nexport const KAESO_MOMENTS_DEFAULT_VARIANTS = { secret: \"md\" } as const;\n\nexport interface SnippetOptions {\n baseUrl: string;\n apiKey?: string | undefined;\n model?: string | undefined;\n}\n\nexport function sdkSnippets({ baseUrl, apiKey = \"$KAESO_API_KEY\", model = \"gpt-5\" }: SnippetOptions): CodeTab[] {\n const envKey = apiKey.startsWith(\"$\") ? `os.environ[\"${apiKey.slice(1)}\"]` : `\"${apiKey}\"`;\n const nodeKey = apiKey.startsWith(\"$\") ? `process.env.${apiKey.slice(1)}` : `\"${apiKey}\"`;\n return [\n {\n label: \"Python\",\n lang: \"python\",\n code: `from openai import OpenAI\\n${apiKey.startsWith(\"$\") ? \"import os\\n\" : \"\"}\\nclient = OpenAI(\\n base_url=\"${baseUrl}/v1\",\\n api_key=${envKey},\\n)\\n\\nresponse = client.responses.create(\\n model=\"${model}\",\\n input=\"Write one sentence about gateways.\",\\n)\\nprint(response.output_text)`,\n },\n {\n label: \"Node\",\n lang: \"ts\",\n code: `import OpenAI from \"openai\";\\n\\nconst client = new OpenAI({\\n baseURL: \"${baseUrl}/v1\",\\n apiKey: ${nodeKey},\\n});\\n\\nconst response = await client.responses.create({\\n model: \"${model}\",\\n input: \"Write one sentence about gateways.\",\\n});\\nconsole.log(response.output_text);`,\n },\n {\n label: \"curl\",\n lang: \"bash\",\n code: `${apiKey.startsWith(\"$\") ? \"\" : `KAESO_API_KEY=${apiKey}\\n`}curl ${baseUrl}/v1/responses \\\\\\n -H \"Authorization: Bearer ${apiKey.startsWith(\"$\") ? apiKey : \"$KAESO_API_KEY\"}\" \\\\\\n -H \"Content-Type: application/json\" \\\\\\n -d '{\\n \"model\": \"${model}\",\\n \"input\": \"Write one sentence about gateways.\"\\n }'`,\n },\n ];\n}\n\nexport interface SecretRevealProps extends SnippetOptions {\n secret: string;\n name?: ReactNode | undefined;\n onCopied?: (() => void) | undefined;\n snippets?: CodeTab[] | false | undefined;\n className?: string | undefined;\n}\n\nexport const SecretReveal = /* @__PURE__ */ forwardRef<HTMLDivElement, SecretRevealProps>(function SecretReveal(\n { secret, name, baseUrl, model, onCopied, snippets, className },\n ref,\n) {\n const t = useUiText();\n const { copied, copy } = useCopy(2400);\n const copyKey = t(\"secretReveal.copyKey\", \"Copy key\");\n const done = t(\"secretReveal.copied\", \"Copied\");\n return (\n <div ref={ref} className={cn(\"flex flex-col gap-24\", className)}>\n <div className=\"flex flex-col items-center gap-16 text-center\">\n <div\n tabIndex={0}\n role=\"textbox\"\n aria-readonly\n aria-label={typeof name === \"string\" ? t(\"secretReveal.secretFor\", \"Secret for {name}\", { name }) : t(\"secretReveal.secret\", \"Secret\")}\n onClick={(e) => {\n const range = document.createRange();\n range.selectNodeContents(e.currentTarget);\n const selection = window.getSelection();\n selection?.removeAllRanges();\n selection?.addRange(range);\n }}\n className=\"w-full cursor-text rounded-well bg-fill-1 px-20 py-16 mono text-body-lg leading-code break-all text-fg select-all focus-ring\"\n >\n {secret}\n </div>\n <Button\n variant=\"primary\"\n size=\"xl\"\n leadingIcon={copied ? __icon_Tick02Icon : __icon_Copy01Icon}\n reserveLabels={[copyKey, done]}\n onClick={async () => {\n if (await copy(secret)) onCopied?.();\n }}\n >\n {copied ? done : copyKey}\n </Button>\n <p className=\"inline-flex items-center gap-6 text-body text-warning-text\">\n <Icon icon={__icon_Alert02Icon} size=\"sm\" />\n {t(\"secretReveal.shownOnce\", \"Shown once. Store it now.\")}\n </p>\n </div>\n {snippets !== false && <CodeBlock tabs={snippets ?? sdkSnippets({ baseUrl, apiKey: secret, ...(model ? { model } : {}) })} copy />}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") SecretReveal.displayName = \"SecretReveal\";\n\nexport const EnvironmentSnippet = /* @__PURE__ */ forwardRef<HTMLDivElement, SnippetOptions & { className?: string | undefined }>(function EnvironmentSnippet(\n { baseUrl, apiKey = \"$KAESO_API_KEY\", model, className },\n ref,\n) {\n const t = useUiText();\n return (\n <div ref={ref} className={cn(\"flex flex-col gap-16\", className)}>\n <div className=\"grid gap-12 md:grid-cols-2\">\n <div className=\"flex min-w-0 flex-col gap-6\">\n <span className=\"text-small font-medium text-fg-secondary\">{t(\"environmentSnippet.baseUrl\", \"Base URL\")}</span>\n <ClipboardText value={`${baseUrl}/v1`} label={t(\"environmentSnippet.copyBaseUrl\", \"Copy base URL\")} />\n </div>\n <div className=\"flex min-w-0 flex-col gap-6\">\n <span className=\"text-small font-medium text-fg-secondary\">{t(\"environmentSnippet.apiKey\", \"API key\")}</span>\n <ClipboardText value={apiKey} label={t(\"environmentSnippet.copyVariableName\", \"Copy variable name\")} />\n </div>\n </div>\n <CodeBlock tabs={sdkSnippets({ baseUrl, apiKey, ...(model ? { model } : {}) })} />\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") EnvironmentSnippet.displayName = \"EnvironmentSnippet\";\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export { t as KAESO_RIGHTS_MATRIX_DEFAULT_VARIANTS, n as KAESO_RIGHTS_MATRIX_VARIANTS, r as RightsMatrix } from "../../chunks/rights-BbiJ0AJB.js";
2
+ export { t as KAESO_RIGHTS_MATRIX_DEFAULT_VARIANTS, n as KAESO_RIGHTS_MATRIX_VARIANTS, r as RightsMatrix } from "../../chunks/rights-hMoaFasn.js";
@@ -1,11 +1,11 @@
1
1
  "use client";
2
- import { t as e } from "../../chunks/cn-CidVUKMm.js";
2
+ import { t as e } from "../../chunks/cn-DUDmdLpZ.js";
3
3
  import { i as t } from "../../chunks/context-BELWW79w.js";
4
4
  import { formatNumber as n, formatTokens as r } from "../../format.js";
5
- import { t as i } from "../../chunks/icon-CeNQtobn.js";
6
- import { a } from "../../chunks/meter-DWhyzFGQ.js";
7
- import { t as o } from "../../chunks/badge-Dkyhs0_j.js";
8
- import { C as s, c, l } from "../../chunks/core-K960A4OT.js";
5
+ import { t as i } from "../../chunks/icon-BqujXDUc.js";
6
+ import { a } from "../../chunks/meter-DhTnem4k.js";
7
+ import { t as o } from "../../chunks/badge-wUHlj7m3.js";
8
+ import { C as s, c, l } from "../../chunks/core-CqLWVMDI.js";
9
9
  import { forwardRef as u } from "react";
10
10
  import { jsx as d, jsxs as f } from "react/jsx-runtime";
11
11
  import { Layers01Icon as p, LeftToRightListBulletIcon as m, Wallet01Icon as h } from "@hugeicons/core-free-icons";
@@ -44,7 +44,7 @@ var b = /* @__PURE__ */ u(function({ tokens: i, className: a }, o) {
44
44
  }, e))
45
45
  }), /* @__PURE__ */ d("dl", {
46
46
  className: "flex flex-wrap gap-x-24 gap-y-8",
47
- children: v.map((e) => /* @__PURE__ */ f("div", {
47
+ children: v.filter((e) => i[e] !== void 0).map((e) => /* @__PURE__ */ f("div", {
48
48
  className: "flex flex-col gap-2",
49
49
  children: [/* @__PURE__ */ f("dt", {
50
50
  className: "flex items-center gap-8 text-small text-fg-secondary",