@logicplanes/kaeso-ui 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (356) hide show
  1. package/AGENTS.md +2 -0
  2. package/NOTICE.md +1 -1
  3. package/ai/component-guides.md +249 -24
  4. package/ai/component-registry.json +1044 -67
  5. package/ai/component-registry.md +238 -50
  6. package/ai/icons.md +1 -1
  7. package/ai/tokens.md +7 -3
  8. package/dist/blocks/delete-resource.js +1 -1
  9. package/dist/blocks/pages.js +5 -5
  10. package/dist/blocks/resource-list.js +4 -4
  11. package/dist/chunks/app-frame-B9vrgwaE.js +220 -0
  12. package/dist/chunks/app-frame-B9vrgwaE.js.map +1 -0
  13. package/dist/chunks/{avatar-D2nJNbtC.js → avatar-DOzOhYJr.js} +2 -2
  14. package/dist/chunks/{avatar-D2nJNbtC.js.map → avatar-DOzOhYJr.js.map} +1 -1
  15. package/dist/chunks/{badge-Dkyhs0_j.js → badge-wUHlj7m3.js} +2 -2
  16. package/dist/chunks/{badge-Dkyhs0_j.js.map → badge-wUHlj7m3.js.map} +1 -1
  17. package/dist/chunks/{banner-DxGBPQ7p.js → banner-BBlNFHd-.js} +4 -4
  18. package/dist/chunks/{banner-DxGBPQ7p.js.map → banner-BBlNFHd-.js.map} +1 -1
  19. package/dist/chunks/{button-DQvoOxVQ.js → button-CAPyW-v8.js} +8 -8
  20. package/dist/chunks/{button-DQvoOxVQ.js.map → button-CAPyW-v8.js.map} +1 -1
  21. package/dist/chunks/{calendar-CN3YJi2k.js → calendar-CBeptQFq.js} +2 -2
  22. package/dist/chunks/{calendar-CN3YJi2k.js.map → calendar-CBeptQFq.js.map} +1 -1
  23. package/dist/chunks/{checkbox-BgRdbfCE.js → checkbox-C5yvSS7O.js} +3 -3
  24. package/dist/chunks/{checkbox-BgRdbfCE.js.map → checkbox-C5yvSS7O.js.map} +1 -1
  25. package/dist/chunks/{cn-CidVUKMm.js → cn-DUDmdLpZ.js} +3 -1
  26. package/dist/chunks/cn-DUDmdLpZ.js.map +1 -0
  27. package/dist/chunks/{code-BADhvsgC.js → code-C49NzHUQ.js} +2 -2
  28. package/dist/chunks/{code-BADhvsgC.js.map → code-C49NzHUQ.js.map} +1 -1
  29. package/dist/chunks/{code-block-DxtladFW.js → code-block-DREsvJ-g.js} +24 -21
  30. package/dist/chunks/code-block-DREsvJ-g.js.map +1 -0
  31. package/dist/chunks/{collapsible-Cw_1aem5.js → collapsible-CDQq1Y9x.js} +6 -6
  32. package/dist/chunks/collapsible-CDQq1Y9x.js.map +1 -0
  33. package/dist/chunks/combobox-DqtzsAKG.js +314 -0
  34. package/dist/chunks/combobox-DqtzsAKG.js.map +1 -0
  35. package/dist/chunks/command-list-D5k0uvkR.js +417 -0
  36. package/dist/chunks/command-list-D5k0uvkR.js.map +1 -0
  37. package/dist/chunks/{copy-button-DXxn-YYZ.js → copy-button-CNpEnS04.js} +6 -6
  38. package/dist/chunks/{copy-button-DXxn-YYZ.js.map → copy-button-CNpEnS04.js.map} +1 -1
  39. package/dist/chunks/{core-K960A4OT.js → core-CqLWVMDI.js} +36 -36
  40. package/dist/chunks/core-CqLWVMDI.js.map +1 -0
  41. package/dist/chunks/{date-popup-B-6xhb-1.js → date-popup-BgDz6SUj.js} +4 -4
  42. package/dist/chunks/{date-popup-B-6xhb-1.js.map → date-popup-BgDz6SUj.js.map} +1 -1
  43. package/dist/chunks/{de-CTAo4KL7.js → de-CkXZKaBD.js} +37 -5
  44. package/dist/chunks/de-CkXZKaBD.js.map +1 -0
  45. package/dist/chunks/dialog-truWH0qe.js +353 -0
  46. package/dist/chunks/dialog-truWH0qe.js.map +1 -0
  47. package/dist/chunks/{empty-DIbBpytW.js → empty-YXmSkKzR.js} +2 -2
  48. package/dist/chunks/{empty-DIbBpytW.js.map → empty-YXmSkKzR.js.map} +1 -1
  49. package/dist/chunks/{field-d8V94bvZ.js → field-BZriODU7.js} +3 -3
  50. package/dist/chunks/field-BZriODU7.js.map +1 -0
  51. package/dist/chunks/{icon-CeNQtobn.js → icon-BqujXDUc.js} +2 -2
  52. package/dist/chunks/{icon-CeNQtobn.js.map → icon-BqujXDUc.js.map} +1 -1
  53. package/dist/chunks/{icon-button-_x1RUphC.js → icon-button-D4O4puwH.js} +3 -3
  54. package/dist/chunks/{icon-button-_x1RUphC.js.map → icon-button-D4O4puwH.js.map} +1 -1
  55. package/dist/chunks/identity-CsZvAUwu.js +361 -0
  56. package/dist/chunks/identity-CsZvAUwu.js.map +1 -0
  57. package/dist/chunks/{input-CNTfI6YE.js → input-B0wtkcNh.js} +5 -5
  58. package/dist/chunks/{input-CNTfI6YE.js.map → input-B0wtkcNh.js.map} +1 -1
  59. package/dist/chunks/{input-group-CYA1MEoZ.js → input-group-BQLw06B0.js} +33 -27
  60. package/dist/chunks/input-group-BQLw06B0.js.map +1 -0
  61. package/dist/chunks/{inset-BLMdxX4I.js → inset-BnBj8NJV.js} +12 -2
  62. package/dist/chunks/inset-BnBj8NJV.js.map +1 -0
  63. package/dist/chunks/{iso-field-1qmg7TP8.js → iso-field-BUXgY1dB.js} +5 -3
  64. package/dist/chunks/{iso-field-1qmg7TP8.js.map → iso-field-BUXgY1dB.js.map} +1 -1
  65. package/dist/chunks/{json-view-B6KHIWzh.js → json-view-BkG2hTXV.js} +11 -10
  66. package/dist/chunks/{json-view-B6KHIWzh.js.map → json-view-BkG2hTXV.js.map} +1 -1
  67. package/dist/chunks/{kbd-CBcBDvqU.js → kbd-DqWmbr_e.js} +2 -2
  68. package/dist/chunks/{kbd-CBcBDvqU.js.map → kbd-DqWmbr_e.js.map} +1 -1
  69. package/dist/chunks/{link-vz9aV8WX.js → link-YMcxM-BZ.js} +4 -4
  70. package/dist/chunks/{link-vz9aV8WX.js.map → link-YMcxM-BZ.js.map} +1 -1
  71. package/dist/chunks/{link-provider---9JdxTg.js → link-provider-BsUxhZKG.js} +2 -2
  72. package/dist/chunks/{link-provider---9JdxTg.js.map → link-provider-BsUxhZKG.js.map} +1 -1
  73. package/dist/chunks/list-wXZIZo_s.js +492 -0
  74. package/dist/chunks/list-wXZIZo_s.js.map +1 -0
  75. package/dist/chunks/{loader-CUehxvSZ.js → loader-ENBh2Fbt.js} +2 -2
  76. package/dist/chunks/{loader-CUehxvSZ.js.map → loader-ENBh2Fbt.js.map} +1 -1
  77. package/dist/chunks/{markdown-5NyaHHfN.js → markdown-DWyxjsSY.js} +10 -10
  78. package/dist/chunks/{markdown-5NyaHHfN.js.map → markdown-DWyxjsSY.js.map} +1 -1
  79. package/dist/chunks/{menu-DyVPwgfF.js → menu-Bnfi9P3t.js} +7 -7
  80. package/dist/chunks/{menu-DyVPwgfF.js.map → menu-Bnfi9P3t.js.map} +1 -1
  81. package/dist/chunks/{meter-DWhyzFGQ.js → meter-DhTnem4k.js} +2 -2
  82. package/dist/chunks/{meter-DWhyzFGQ.js.map → meter-DhTnem4k.js.map} +1 -1
  83. package/dist/chunks/nav-sheet-QqNRHo-y.js +60 -0
  84. package/dist/chunks/nav-sheet-QqNRHo-y.js.map +1 -0
  85. package/dist/chunks/{nav-wordmark-DLkItdvo.js → nav-wordmark-DmbT1Aiw.js} +2 -2
  86. package/dist/chunks/{nav-wordmark-DLkItdvo.js.map → nav-wordmark-DmbT1Aiw.js.map} +1 -1
  87. package/dist/chunks/option-checkbox-Df7WhGn4.js +25 -0
  88. package/dist/chunks/option-checkbox-Df7WhGn4.js.map +1 -0
  89. package/dist/chunks/over-sheet-B8vzr_zU.js +8 -0
  90. package/dist/chunks/over-sheet-B8vzr_zU.js.map +1 -0
  91. package/dist/chunks/{page-header-CEPZzhRp.js → page-header-Ccnrspbp.js} +5 -5
  92. package/dist/chunks/{page-header-CEPZzhRp.js.map → page-header-Ccnrspbp.js.map} +1 -1
  93. package/dist/chunks/{pagination-CCMxQ5pH.js → pagination-CEmWZNjp.js} +5 -4
  94. package/dist/chunks/{pagination-CCMxQ5pH.js.map → pagination-CEmWZNjp.js.map} +1 -1
  95. package/dist/chunks/picker-popover-C4ElNk7t.js +102 -0
  96. package/dist/chunks/picker-popover-C4ElNk7t.js.map +1 -0
  97. package/dist/chunks/{popover-BE7VO-a4.js → popover-bjxg020P.js} +3 -3
  98. package/dist/chunks/{popover-BE7VO-a4.js.map → popover-bjxg020P.js.map} +1 -1
  99. package/dist/chunks/{radio-CUxbLCvD.js → radio-DwYcXAzv.js} +2 -2
  100. package/dist/chunks/{radio-CUxbLCvD.js.map → radio-DwYcXAzv.js.map} +1 -1
  101. package/dist/chunks/range-popup-CG9Jo5B7.js +128 -0
  102. package/dist/chunks/range-popup-CG9Jo5B7.js.map +1 -0
  103. package/dist/chunks/release-art-Chd8l9Rf.js +555 -0
  104. package/dist/chunks/release-art-Chd8l9Rf.js.map +1 -0
  105. package/dist/chunks/{resize-motion-CMaidkwe.js → resize-motion-BWGMchyP.js} +27 -23
  106. package/dist/chunks/resize-motion-BWGMchyP.js.map +1 -0
  107. package/dist/chunks/{rights-BbiJ0AJB.js → rights-hMoaFasn.js} +12 -12
  108. package/dist/chunks/rights-hMoaFasn.js.map +1 -0
  109. package/dist/chunks/{section-DzOLLN1p.js → section-BsET7Fo-.js} +4 -4
  110. package/dist/chunks/{section-DzOLLN1p.js.map → section-BsET7Fo-.js.map} +1 -1
  111. package/dist/chunks/{segmented-MrinfDL8.js → segmented-DXKVF-nY.js} +4 -4
  112. package/dist/chunks/{segmented-MrinfDL8.js.map → segmented-DXKVF-nY.js.map} +1 -1
  113. package/dist/chunks/{select-Bc4kRiSG.js → select-Bbv2f5F8.js} +63 -80
  114. package/dist/chunks/select-Bbv2f5F8.js.map +1 -0
  115. package/dist/chunks/{separator-D5AzVFTS.js → separator-CpAUELNs.js} +2 -2
  116. package/dist/chunks/{separator-D5AzVFTS.js.map → separator-CpAUELNs.js.map} +1 -1
  117. package/dist/chunks/{sidebar-5IA18LuP.js → sidebar-Dey1ZfGt.js} +54 -51
  118. package/dist/chunks/sidebar-Dey1ZfGt.js.map +1 -0
  119. package/dist/chunks/{sidebar-menu-DRWRxcJ3.js → sidebar-menu-ct8IiL4z.js} +2 -2
  120. package/dist/chunks/{sidebar-menu-DRWRxcJ3.js.map → sidebar-menu-ct8IiL4z.js.map} +1 -1
  121. package/dist/chunks/{skeleton-kfuqdl1a.js → skeleton-BM797MAg.js} +2 -2
  122. package/dist/chunks/{skeleton-kfuqdl1a.js.map → skeleton-BM797MAg.js.map} +1 -1
  123. package/dist/chunks/{slider-DbhjJ3ML.js → slider-Ds-tqY-1.js} +2 -2
  124. package/dist/chunks/{slider-DbhjJ3ML.js.map → slider-Ds-tqY-1.js.map} +1 -1
  125. package/dist/chunks/status-dot-BqVOlShY.js +29 -0
  126. package/dist/chunks/status-dot-BqVOlShY.js.map +1 -0
  127. package/dist/chunks/{styles-Btvg2DCf.js → styles-CVJU9t9v.js} +2 -2
  128. package/dist/chunks/{styles-Btvg2DCf.js.map → styles-CVJU9t9v.js.map} +1 -1
  129. package/dist/chunks/{swap-text-BhPI8DOf.js → swap-text-Cica0pUr.js} +2 -2
  130. package/dist/chunks/{swap-text-BhPI8DOf.js.map → swap-text-Cica0pUr.js.map} +1 -1
  131. package/dist/chunks/{switch-XMY_CQE-.js → switch-CSKMEomo.js} +3 -3
  132. package/dist/chunks/{switch-XMY_CQE-.js.map → switch-CSKMEomo.js.map} +1 -1
  133. package/dist/chunks/{table-DYKa86af.js → table-D-36EM7f.js} +2 -2
  134. package/dist/chunks/{table-DYKa86af.js.map → table-D-36EM7f.js.map} +1 -1
  135. package/dist/chunks/{tag-Dg89uYpV.js → tag-CwDKXVHj.js} +4 -4
  136. package/dist/chunks/{tag-Dg89uYpV.js.map → tag-CwDKXVHj.js.map} +1 -1
  137. package/dist/chunks/{text--5MKh2G4.js → text-Dvvgg5Jt.js} +3 -3
  138. package/dist/chunks/{text--5MKh2G4.js.map → text-Dvvgg5Jt.js.map} +1 -1
  139. package/dist/chunks/{textarea-Cj8iR82R.js → textarea-2d373OyU.js} +35 -31
  140. package/dist/chunks/textarea-2d373OyU.js.map +1 -0
  141. package/dist/chunks/timeseries-LRDAZHV0.js +339 -0
  142. package/dist/chunks/timeseries-LRDAZHV0.js.map +1 -0
  143. package/dist/chunks/{toolbar-Dw3uxpsE.js → toolbar-nVLFWH2i.js} +3 -3
  144. package/dist/chunks/{toolbar-Dw3uxpsE.js.map → toolbar-nVLFWH2i.js.map} +1 -1
  145. package/dist/chunks/{tooltip-DEbCCsru.js → tooltip-S1DmyLVl.js} +4 -4
  146. package/dist/chunks/{tooltip-DEbCCsru.js.map → tooltip-S1DmyLVl.js.map} +1 -1
  147. package/dist/chunks/{tooltip-root-DRd4ciUv.js → tooltip-root-vjylFUqw.js} +4 -4
  148. package/dist/chunks/{tooltip-root-DRd4ciUv.js.map → tooltip-root-vjylFUqw.js.map} +1 -1
  149. package/dist/chunks/{virtual-rows-BZe49bKi.js → virtual-rows-yAMjeAwj.js} +4 -3
  150. package/dist/chunks/virtual-rows-yAMjeAwj.js.map +1 -0
  151. package/dist/chunks/{zh-CN-C7GmVswt.js → zh-CN-CqEA4PCM.js} +37 -5
  152. package/dist/chunks/zh-CN-CqEA4PCM.js.map +1 -0
  153. package/dist/components/app-frame.js +2 -2
  154. package/dist/components/avatar.js +1 -1
  155. package/dist/components/badge.js +1 -1
  156. package/dist/components/banner.js +1 -1
  157. package/dist/components/button-group.js +33 -32
  158. package/dist/components/button-group.js.map +1 -1
  159. package/dist/components/button.js +1 -1
  160. package/dist/components/calendar.js +1 -1
  161. package/dist/components/charts/bar.js +34 -31
  162. package/dist/components/charts/bar.js.map +1 -1
  163. package/dist/components/charts/donut.js +2 -2
  164. package/dist/components/charts/gauge.js +2 -2
  165. package/dist/components/charts/heatmap.js +1 -1
  166. package/dist/components/charts/sankey.js +2 -2
  167. package/dist/components/charts/sparkline.js +1 -1
  168. package/dist/components/charts/timeseries.js +1 -252
  169. package/dist/components/charts.js +3 -3
  170. package/dist/components/checkbox.js +1 -1
  171. package/dist/components/code-block.js +2 -2
  172. package/dist/components/code.js +1 -1
  173. package/dist/components/collapsible.js +1 -1
  174. package/dist/components/combobox.js +1 -1
  175. package/dist/components/command-list.js +4 -0
  176. package/dist/components/command-palette.js +120 -171
  177. package/dist/components/command-palette.js.map +1 -1
  178. package/dist/components/copy-button.js +1 -1
  179. package/dist/components/data-table.js +251 -193
  180. package/dist/components/data-table.js.map +1 -1
  181. package/dist/components/date-picker.js +7 -7
  182. package/dist/components/date-picker.js.map +1 -1
  183. package/dist/components/dialog.js +7 -9
  184. package/dist/components/dialog.js.map +1 -1
  185. package/dist/components/display-options.js +67 -53
  186. package/dist/components/display-options.js.map +1 -1
  187. package/dist/components/empty.js +1 -1
  188. package/dist/components/field.js +1 -1
  189. package/dist/components/filter-chip.js +138 -63
  190. package/dist/components/filter-chip.js.map +1 -1
  191. package/dist/components/filter-row.js +2 -2
  192. package/dist/components/flow.js +2 -2
  193. package/dist/components/heading.js +1 -1
  194. package/dist/components/icon-button.js +1 -1
  195. package/dist/components/icon.js +1 -1
  196. package/dist/components/input.js +56 -54
  197. package/dist/components/input.js.map +1 -1
  198. package/dist/components/kaeso/conversation.js +88 -79
  199. package/dist/components/kaeso/conversation.js.map +1 -1
  200. package/dist/components/kaeso/identity.js +1 -1
  201. package/dist/components/kaeso/moments.js +8 -8
  202. package/dist/components/kaeso/moments.js.map +1 -1
  203. package/dist/components/kaeso/rights.js +1 -1
  204. package/dist/components/kaeso/usage.js +6 -6
  205. package/dist/components/kaeso/usage.js.map +1 -1
  206. package/dist/components/kaeso.js +212 -84
  207. package/dist/components/kaeso.js.map +1 -1
  208. package/dist/components/kbd.js +1 -1
  209. package/dist/components/key-value.js +3 -3
  210. package/dist/components/label.js +1 -1
  211. package/dist/components/layout.js +1 -1
  212. package/dist/components/link.js +1 -1
  213. package/dist/components/list.js +1 -1
  214. package/dist/components/loader.js +2 -2
  215. package/dist/components/logo.js +2 -2
  216. package/dist/components/markdown.js +1 -1
  217. package/dist/components/menu.js +2 -2
  218. package/dist/components/meter.js +1 -1
  219. package/dist/components/page-header.js +1 -1
  220. package/dist/components/pagination.js +1 -1
  221. package/dist/components/playground.js +654 -381
  222. package/dist/components/playground.js.map +1 -1
  223. package/dist/components/popover.js +2 -2
  224. package/dist/components/qr-code.js +1 -1
  225. package/dist/components/radio.js +1 -1
  226. package/dist/components/release-art.js +2 -0
  227. package/dist/components/scroll-area.js +1 -1
  228. package/dist/components/section.js +1 -1
  229. package/dist/components/segmented.js +1 -1
  230. package/dist/components/select.js +1 -1
  231. package/dist/components/separator.js +1 -1
  232. package/dist/components/settings.js +3 -3
  233. package/dist/components/sheet.js +69 -52
  234. package/dist/components/sheet.js.map +1 -1
  235. package/dist/components/sidebar.js +1 -1
  236. package/dist/components/skeleton.js +1 -1
  237. package/dist/components/slider.js +1 -1
  238. package/dist/components/stat.js +88 -74
  239. package/dist/components/stat.js.map +1 -1
  240. package/dist/components/status-dot.js +1 -1
  241. package/dist/components/surface.js +1 -1
  242. package/dist/components/swap-text.js +1 -1
  243. package/dist/components/switch.js +1 -1
  244. package/dist/components/table.js +1 -1
  245. package/dist/components/tabs.js +48 -49
  246. package/dist/components/tabs.js.map +1 -1
  247. package/dist/components/tag.js +1 -1
  248. package/dist/components/text.js +1 -1
  249. package/dist/components/theme-image.js +1 -1
  250. package/dist/components/theme-menu.js +2 -2
  251. package/dist/components/theme-select.js +1 -1
  252. package/dist/components/timeline.js +1 -1
  253. package/dist/components/toast.js +4 -4
  254. package/dist/components/toc.js +1 -1
  255. package/dist/components/toolbar.js +1 -1
  256. package/dist/components/tooltip.js +1 -1
  257. package/dist/components/visually-hidden.js +1 -1
  258. package/dist/format.js +132 -79
  259. package/dist/format.js.map +1 -1
  260. package/dist/i18n-provider.js +1 -1
  261. package/dist/index.js +115 -111
  262. package/dist/kaeso.css +43 -8
  263. package/dist/styles.css +1 -1
  264. package/dist/types/components/charts/bar.d.ts +6 -0
  265. package/dist/types/components/charts/core.d.ts +2 -2
  266. package/dist/types/components/charts/docs.d.ts +7 -0
  267. package/dist/types/components/charts/time-axis.d.ts +5 -0
  268. package/dist/types/components/charts/timeseries.d.ts +9 -0
  269. package/dist/types/components/code-block/highlighter.d.ts +2 -0
  270. package/dist/types/components/combobox/combobox.d.ts +2 -0
  271. package/dist/types/components/combobox/docs.d.ts +2 -4
  272. package/dist/types/components/command-list/command-list.d.ts +84 -0
  273. package/dist/types/components/command-list/docs.d.ts +52 -0
  274. package/dist/types/components/command-list/index.d.ts +3 -0
  275. package/dist/types/components/command-list/match.d.ts +1 -0
  276. package/dist/types/components/command-list/picker-popover.d.ts +44 -0
  277. package/dist/types/components/data-table/data-table.d.ts +3 -2
  278. package/dist/types/components/data-table/docs.d.ts +1 -0
  279. package/dist/types/components/date-picker/docs.d.ts +0 -6
  280. package/dist/types/components/dialog/dialog.d.ts +24 -0
  281. package/dist/types/components/dialog/docs.d.ts +4 -0
  282. package/dist/types/components/display-options/display-options.d.ts +1 -0
  283. package/dist/types/components/filter-chip/docs.d.ts +4 -0
  284. package/dist/types/components/filter-chip/filter-chip.d.ts +7 -0
  285. package/dist/types/components/input/docs.d.ts +2 -12
  286. package/dist/types/components/input/number-input.d.ts +1 -0
  287. package/dist/types/components/input/tag-input.d.ts +1 -0
  288. package/dist/types/components/kaeso/docs.d.ts +34 -0
  289. package/dist/types/components/kaeso/identity.d.ts +10 -1
  290. package/dist/types/components/kaeso/index.d.ts +1 -0
  291. package/dist/types/components/kaeso/provider-marks.d.ts +5 -1
  292. package/dist/types/components/kaeso/provider-picker.d.ts +42 -0
  293. package/dist/types/components/list/docs.d.ts +2 -0
  294. package/dist/types/components/list/list.d.ts +2 -0
  295. package/dist/types/components/menu/styles.d.ts +1 -1
  296. package/dist/types/components/playground/docs.d.ts +32 -0
  297. package/dist/types/components/playground/index.d.ts +1 -0
  298. package/dist/types/components/playground/model-picker.d.ts +39 -4
  299. package/dist/types/components/playground/reasoning.d.ts +29 -0
  300. package/dist/types/components/playground/response-view.d.ts +7 -1
  301. package/dist/types/components/release-art/docs.d.ts +13 -0
  302. package/dist/types/components/release-art/drawing.d.ts +48 -0
  303. package/dist/types/components/release-art/index.d.ts +1 -0
  304. package/dist/types/components/release-art/release-art.d.ts +37 -0
  305. package/dist/types/components/select/docs.d.ts +0 -2
  306. package/dist/types/components/select/option-checkbox.d.ts +1 -0
  307. package/dist/types/components/sidebar/sidebar.d.ts +1 -0
  308. package/dist/types/components/stat/docs.d.ts +1 -0
  309. package/dist/types/components/stat/stat.d.ts +1 -0
  310. package/dist/types/components/status-dot/docs.d.ts +2 -0
  311. package/dist/types/components/status-dot/status-dot.d.ts +2 -0
  312. package/dist/types/format/index.d.ts +8 -0
  313. package/dist/types/index.d.ts +2 -0
  314. package/dist/types/utils/index.d.ts +1 -1
  315. package/dist/types/utils/inset.d.ts +5 -0
  316. package/dist/types/utils/over-sheet.d.ts +1 -0
  317. package/dist/types/utils/restore-focus.d.ts +1 -1
  318. package/dist/utils.js +4 -4
  319. package/foundations/accessibility.md +1 -0
  320. package/foundations/layout.md +45 -0
  321. package/foundations/writing.md +1 -0
  322. package/package.json +2 -2
  323. package/dist/chunks/app-frame-BXh-06HL.js +0 -214
  324. package/dist/chunks/app-frame-BXh-06HL.js.map +0 -1
  325. package/dist/chunks/cn-CidVUKMm.js.map +0 -1
  326. package/dist/chunks/code-block-DxtladFW.js.map +0 -1
  327. package/dist/chunks/collapsible-Cw_1aem5.js.map +0 -1
  328. package/dist/chunks/combobox-D30Wt11R.js +0 -291
  329. package/dist/chunks/combobox-D30Wt11R.js.map +0 -1
  330. package/dist/chunks/core-K960A4OT.js.map +0 -1
  331. package/dist/chunks/de-CTAo4KL7.js.map +0 -1
  332. package/dist/chunks/dialog-LNKgPEsV.js +0 -319
  333. package/dist/chunks/dialog-LNKgPEsV.js.map +0 -1
  334. package/dist/chunks/field-d8V94bvZ.js.map +0 -1
  335. package/dist/chunks/field-press-DwzBFafd.js +0 -10
  336. package/dist/chunks/field-press-DwzBFafd.js.map +0 -1
  337. package/dist/chunks/identity-BtZC_d_Q.js +0 -342
  338. package/dist/chunks/identity-BtZC_d_Q.js.map +0 -1
  339. package/dist/chunks/input-group-CYA1MEoZ.js.map +0 -1
  340. package/dist/chunks/inset-BLMdxX4I.js.map +0 -1
  341. package/dist/chunks/list-CzaiyNja.js +0 -483
  342. package/dist/chunks/list-CzaiyNja.js.map +0 -1
  343. package/dist/chunks/nav-sheet-BIErlV74.js +0 -58
  344. package/dist/chunks/nav-sheet-BIErlV74.js.map +0 -1
  345. package/dist/chunks/range-popup-DGOnGGag.js +0 -111
  346. package/dist/chunks/range-popup-DGOnGGag.js.map +0 -1
  347. package/dist/chunks/resize-motion-CMaidkwe.js.map +0 -1
  348. package/dist/chunks/rights-BbiJ0AJB.js.map +0 -1
  349. package/dist/chunks/select-Bc4kRiSG.js.map +0 -1
  350. package/dist/chunks/sidebar-5IA18LuP.js.map +0 -1
  351. package/dist/chunks/status-dot-CBoQpyL4.js +0 -25
  352. package/dist/chunks/status-dot-CBoQpyL4.js.map +0 -1
  353. package/dist/chunks/textarea-Cj8iR82R.js.map +0 -1
  354. package/dist/chunks/virtual-rows-BZe49bKi.js.map +0 -1
  355. package/dist/chunks/zh-CN-C7GmVswt.js.map +0 -1
  356. package/dist/components/charts/timeseries.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"playground.js","names":["__icon_Add01Icon","__icon_ArrowLeft01Icon","__icon_ArrowRight01Icon","__icon_Cancel01Icon","BaseCollapsible","__icon_ArrowRight01Icon","_Fragment","_Fragment","__icon_SlidersHorizontalIcon","cn","useUiText","Icon","useTruncated","Button","IconButton","NumberInput","Textarea","Slider","Segmented","KAESO_SELECT_VARIANTS","Select","Popover","ModelLabel","providerName","Markdown","Fragment$1","KAESO_COMPOSER_VARIANTS","KAESO_COMPOSER_DEFAULT_VARIANTS","COARSE","subscribeCoarse","q","onChange","isCoarse","useCoarsePointer","useSyncExternalStore","Composer","placeholderProp","ariaLabelProp","submitLabelProp","stopLabelProp","force","t","placeholder","ariaLabel","submitLabel","stopLabel","text","setText","useControllable","value","defaultValue","onValueChange","box","useRef","minRows","size","grow","useCallback","el","maxRows","empty","canSend","disabled","streaming","loading","send","onSubmit","clearOnSubmit","coarse","enterSends","submitOn","onKeyDown","className","ref","name","actions","onStop","KAESO_COMPARE_GRID_VARIANTS","KAESO_COMPARE_GRID_DEFAULT_VARIANTS","ColumnContext","Root","columns","Children","children","isValidElement","count","scroller","current","setCurrent","useState","shown","active","target","changed","onActiveChange","scrollTo","i","reduce","go","next","before","fade","end","ro","onScroll","first","release","full","max","add","onAdd","Add01Icon","addLabel","label","ArrowLeft01Icon","ArrowRight01Icon","col","useStickToEnd","body","content","pinned","useEffect","inner","enabled","last","near","Column","useContext","stickToEnd","index","divider","header","onRemove","Cancel01Icon","removeLabel","footer","CompareGrid","KAESO_RESPONSE_VIEW_VARIANTS","KAESO_RESPONSE_VIEW_DEFAULT_VARIANTS","lastLine","lines","l","Thinking","preview","live","title","duration","formatDuration","Collapsible","open","defaultOpen","onOpenChange","o","ResponseView","announce","useId","status","hasText","hasReasoning","reasoning","thinking","reasoningDuration","reasoningOpen","defaultReasoningOpen","onReasoningOpenChange","onRetry","CLAMP","UserMessage","showAll","showLess","all","setAll","clamped","maxLines","a","Thread","KAESO_RESPONSE_METRICS_VARIANTS","KAESO_RESPONSE_METRICS_DEFAULT_VARIANTS","formatLatency","ms","useElapsed","now","setNow","from","id","known","n","Item","width","ResponseMetrics","elapsed","startedAt","tokens","inputTokens","outputTokens","hasCost","cost","line","timeToFirstToken","reasoningTokens","show","dash","formatNumber","formatUSD","KAESO_PARAMETER_PANEL_VARIANTS","KAESO_PARAMETER_PANEL_DEFAULT_VARIANTS","efforts","SliderRow","digits","unset","v","min","ParameterPanel","set","patch","shownEfforts","layout","instructions","sampling","defaults","maxOutputTokensLimit","ParameterPopover","titleProp","panel","trigger","SlidersHorizontalIcon","SELECT_APPEARANCE","KAESO_MODEL_PICKER_VARIANTS","KAESO_MODEL_PICKER_DEFAULT_VARIANTS","ModelPicker","grouped","groupByProvider","options","sorted","b","appearance","KAESO_PROMPT_SUGGESTIONS_VARIANTS","KAESO_PROMPT_SUGGESTIONS_DEFAULT_VARIANTS","PromptSuggestions","align","suggestions","onSelect","s"],"sources":["../../src/components/playground/composer.tsx","../../src/components/playground/compare-grid.tsx","../../src/components/playground/response-view.tsx","../../src/components/playground/response-metrics.tsx","../../src/components/playground/parameter-panel.tsx","../../src/components/playground/model-picker.tsx","../../src/components/playground/prompt-suggestions.tsx"],"sourcesContent":["import { forwardRef, useCallback, useLayoutEffect, useRef, useSyncExternalStore, type FormEvent, type KeyboardEvent, type ReactNode } from \"react\";\nimport { useUiText } from \"../../i18n/context.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport { useControllable } from \"../../utils/use-controllable.js\";\nimport { Button } from \"../button/button.js\";\n\nexport const KAESO_COMPOSER_VARIANTS = {\n size: {\n md: { classes: \"rounded-frame\" },\n sm: { classes: \"rounded-frame\" },\n },\n} as const;\nexport const KAESO_COMPOSER_DEFAULT_VARIANTS = { size: \"md\" } as const;\n\nconst COARSE = \"(pointer: coarse)\";\nfunction subscribeCoarse(onChange: () => void) {\n if (typeof window === \"undefined\" || !window.matchMedia) return () => {};\n const q = window.matchMedia(COARSE);\n q.addEventListener?.(\"change\", onChange);\n return () => q.removeEventListener?.(\"change\", onChange);\n}\nconst isCoarse = () => typeof window !== \"undefined\" && !!window.matchMedia?.(COARSE).matches;\nconst useCoarsePointer = () => useSyncExternalStore(subscribeCoarse, isCoarse, () => false);\n\nexport interface ComposerProps {\n value?: string | undefined;\n defaultValue?: string | undefined;\n onValueChange?: ((value: string) => void) | undefined;\n onSubmit?: ((value: string) => void) | undefined;\n submitOn?: \"enter\" | \"mod-enter\" | undefined;\n onStop?: (() => void) | undefined;\n streaming?: boolean | undefined;\n loading?: boolean | undefined;\n disabled?: boolean | undefined;\n clearOnSubmit?: boolean | undefined;\n placeholder?: string | undefined;\n \"aria-label\"?: string | undefined;\n maxRows?: number | undefined;\n size?: keyof typeof KAESO_COMPOSER_VARIANTS.size | undefined;\n actions?: ReactNode | undefined;\n submitLabel?: string | undefined;\n stopLabel?: string | undefined;\n autoFocus?: boolean | undefined;\n name?: string | undefined;\n \"data-force\"?: string | undefined;\n className?: string | undefined;\n}\n\nexport const Composer = /* @__PURE__ */ forwardRef<HTMLTextAreaElement, ComposerProps>(function Composer(\n {\n value,\n defaultValue = \"\",\n onValueChange,\n onSubmit,\n onStop,\n submitOn = \"enter\",\n streaming = false,\n loading = false,\n disabled = false,\n clearOnSubmit = true,\n placeholder: placeholderProp,\n \"aria-label\": ariaLabelProp,\n maxRows = 10,\n size = \"md\",\n actions,\n submitLabel: submitLabelProp,\n stopLabel: stopLabelProp,\n autoFocus,\n name,\n \"data-force\": force,\n className,\n },\n ref,\n) {\n const t = useUiText();\n const placeholder = placeholderProp ?? t(\"composer.placeholder\", \"Write a prompt\");\n const ariaLabel = ariaLabelProp ?? t(\"composer.prompt\", \"Prompt\");\n const submitLabel = submitLabelProp ?? t(\"composer.send\", \"Send\");\n const stopLabel = stopLabelProp ?? t(\"composer.stop\", \"Stop\");\n const [text, setText] = useControllable(value, defaultValue, onValueChange);\n\n const box = useRef<HTMLTextAreaElement | null>(null);\n const minRows = size === \"sm\" ? 1 : 2;\n const grow = useCallback(() => {\n const el = box.current;\n if (!el) return;\n el.style.height = \"auto\";\n el.style.height = `${Math.min(Math.max(el.scrollHeight, minRows * 20 + 16), maxRows * 20 + 16)}px`;\n }, [maxRows, minRows]);\n useLayoutEffect(grow, [grow, text]);\n\n const empty = text.trim() === \"\";\n const canSend = !disabled && !streaming && !loading && !empty;\n const send = () => {\n if (!canSend) return;\n onSubmit?.(text);\n if (clearOnSubmit && value === undefined) setText(\"\");\n };\n const coarse = useCoarsePointer();\n const enterSends = submitOn === \"enter\" && !coarse;\n const onKeyDown = (e: KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key !== \"Enter\") return;\n if (e.nativeEvent.isComposing || e.keyCode === 229) return;\n const mod = e.metaKey || e.ctrlKey;\n if (!mod && (!enterSends || e.shiftKey || e.altKey)) return;\n e.preventDefault();\n send();\n };\n const onFormSubmit = (e: FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n send();\n };\n\n return (\n <form\n onSubmit={onFormSubmit}\n onMouseDown={(e) => {\n if (e.target === e.currentTarget && !disabled) {\n e.preventDefault();\n box.current?.focus();\n }\n }}\n {...(force ? { \"data-force\": force } : {})}\n {...(disabled ? { \"data-disabled\": \"\" } : {})}\n className={cn(\n \"flex min-w-0 cursor-text flex-col material-composer transition-control\",\n KAESO_COMPOSER_VARIANTS.size[size].classes,\n disabled && \"cursor-not-allowed\",\n className,\n )}\n >\n <textarea\n ref={(el) => {\n box.current = el;\n if (typeof ref === \"function\") ref(el);\n else if (ref) ref.current = el;\n }}\n rows={minRows}\n value={text}\n onChange={(e) => setText(e.target.value)}\n onKeyDown={onKeyDown}\n disabled={disabled}\n placeholder={placeholder}\n aria-label={ariaLabel}\n aria-keyshortcuts={enterSends ? \"Enter Meta+Enter Control+Enter\" : \"Meta+Enter Control+Enter\"}\n {...(enterSends ? { enterKeyHint: \"send\" as const } : {})}\n autoFocus={autoFocus}\n {...(name ? { name } : {})}\n className=\"block w-full min-w-0 resize-none bg-transparent px-16 pt-12 pb-4 text-body text-fg outline-none scrollbar-quiet placeholder:text-fg-tertiary disabled:cursor-not-allowed disabled:text-fg-disabled\"\n />\n <div className=\"flex min-w-0 items-center gap-8 p-8 pt-4\">\n <div className=\"flex min-w-0 flex-1 items-center gap-4\">{actions}</div>\n {streaming ? (\n <Button type=\"button\" size=\"sm\" variant=\"secondary\" reserveLabels={[submitLabel, stopLabel]} onClick={() => onStop?.()} disabled={disabled}>\n {stopLabel}\n </Button>\n ) : (\n <Button type=\"submit\" size=\"sm\" variant=\"primary\" reserveLabels={[submitLabel, stopLabel]} loading={loading} disabled={!canSend && !loading}>\n {submitLabel}\n </Button>\n )}\n </div>\n </form>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Composer.displayName = \"Composer\";\n","import {\n Children,\n createContext,\n forwardRef,\n isValidElement,\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { Add01Icon as __icon_Add01Icon, ArrowLeft01Icon as __icon_ArrowLeft01Icon, ArrowRight01Icon as __icon_ArrowRight01Icon, Cancel01Icon as __icon_Cancel01Icon } from \"@hugeicons/core-free-icons\";\nimport { IconButton } from \"../icon-button/icon-button.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_COMPARE_GRID_VARIANTS = {\n divider: {\n hairline: { classes: \"hairline-l\" },\n none: { classes: \"\" },\n },\n} as const;\nexport const KAESO_COMPARE_GRID_DEFAULT_VARIANTS = { divider: \"hairline\" } as const;\n\ninterface GridContext {\n index: number;\n count: number;\n divider: keyof typeof KAESO_COMPARE_GRID_VARIANTS.divider;\n add: ReactNode;\n}\nconst ColumnContext = /* @__PURE__ */ createContext<GridContext>({ index: 0, count: 1, divider: \"hairline\", add: null });\n\nexport interface CompareGridProps {\n children: ReactNode;\n \"aria-label\": string;\n onAdd?: (() => void) | undefined;\n addLabel?: string | undefined;\n max?: number | undefined;\n active?: number | undefined;\n onActiveChange?: ((index: number) => void) | undefined;\n divider?: keyof typeof KAESO_COMPARE_GRID_VARIANTS.divider | undefined;\n className?: string | undefined;\n}\n\nconst Root = /* @__PURE__ */ forwardRef<HTMLDivElement, CompareGridProps>(function CompareGrid(\n { children, \"aria-label\": ariaLabel, onAdd, addLabel, max = 4, active, onActiveChange, divider = \"hairline\", className },\n ref,\n) {\n const t = useUiText();\n const columns = Children.toArray(children).filter(isValidElement) as ReactElement<CompareColumnProps>[];\n const count = columns.length;\n const scroller = useRef<HTMLDivElement | null>(null);\n const [current, setCurrent] = useState(0);\n const shown = Math.min(active ?? current, Math.max(0, count - 1));\n const target = useRef<number | null>(null);\n const changed = useRef(onActiveChange);\n useLayoutEffect(() => {\n changed.current = onActiveChange;\n });\n\n const scrollTo = useCallback((i: number) => {\n const el = scroller.current?.children[i] as HTMLElement | undefined;\n const box = scroller.current;\n if (!el || !box) return;\n target.current = box.scrollLeft === el.offsetLeft ? null : i;\n const reduce = typeof matchMedia === \"function\" && matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n box.scrollTo({ left: el.offsetLeft, behavior: reduce ? \"auto\" : \"smooth\" });\n }, []);\n const go = (i: number) => {\n const next = Math.max(0, Math.min(count - 1, i));\n setCurrent(next);\n onActiveChange?.(next);\n scrollTo(next);\n };\n useEffect(() => {\n if (active !== undefined) scrollTo(active);\n }, [active, scrollTo]);\n const before = useRef(count);\n useLayoutEffect(() => {\n if (count > before.current) {\n setCurrent(count - 1);\n changed.current?.(count - 1);\n scrollTo(count - 1);\n }\n before.current = count;\n }, [count, scrollTo]);\n\n const fade = useCallback(() => {\n const box = scroller.current;\n if (!box) return;\n const end = box.scrollWidth - box.clientWidth - box.scrollLeft;\n box.style.setProperty(\"--k-fade-start\", box.scrollLeft > 1 ? \"24px\" : \"0px\");\n box.style.setProperty(\"--k-fade-end\", end > 1 ? \"24px\" : \"0px\");\n }, []);\n useLayoutEffect(() => {\n const box = scroller.current;\n if (!box || typeof ResizeObserver === \"undefined\") return;\n fade();\n const ro = new ResizeObserver(fade);\n ro.observe(box);\n return () => ro.disconnect();\n }, [fade, count]);\n\n const onScroll = () => {\n fade();\n const box = scroller.current;\n const first = box?.children[0] as HTMLElement | undefined;\n if (!box || !first || !first.offsetWidth) return;\n const i = Math.max(0, Math.min(count - 1, Math.round(box.scrollLeft / first.offsetWidth)));\n if (target.current !== null) {\n if (i !== target.current) return;\n target.current = null;\n }\n if (i !== shown) {\n setCurrent(i);\n onActiveChange?.(i);\n }\n };\n\n const release = () => {\n target.current = null;\n };\n\n const full = count >= max;\n const add = onAdd ? (\n <IconButton\n icon={__icon_Add01Icon}\n aria-label={addLabel ?? t(\"compareGrid.addModel\", \"Add model\")}\n size=\"sm\"\n onClick={onAdd}\n disabled={full}\n {...(full ? { disabledReason: t(\"compareGrid.compareUpTo\", \"Compare up to {max} at once\", { max }) } : {})}\n />\n ) : null;\n const label = columns[shown]?.props.label ?? \"\";\n\n return (\n <div ref={ref} role=\"group\" aria-label={ariaLabel} className={cn(\"flex h-full min-h-0 min-w-0 flex-col\", className)}>\n {count > 1 || onAdd ? (\n <div className=\"flex h-44 shrink-0 items-center gap-4 px-8 hairline-b md:hidden\">\n <IconButton\n icon={__icon_ArrowLeft01Icon}\n aria-label={t(\"compareGrid.previousColumn\", \"Previous column\")}\n size=\"sm\"\n disabled={shown === 0}\n onClick={() => go(shown - 1)}\n />\n <span aria-live=\"polite\" className=\"min-w-0 flex-1 truncate text-center text-small text-fg-secondary tabular\">\n <span className=\"sr-only\">{t(\"compareGrid.columnName\", \"{label}, \", { label })}</span>\n {t(\"compareGrid.position\", \"{index} of {count}\", { index: shown + 1, count })}\n </span>\n <IconButton\n icon={__icon_ArrowRight01Icon}\n aria-label={t(\"compareGrid.nextColumn\", \"Next column\")}\n size=\"sm\"\n disabled={shown >= count - 1}\n onClick={() => go(shown + 1)}\n />\n {add}\n </div>\n ) : null}\n <div\n ref={scroller}\n onScroll={onScroll}\n onPointerDown={release}\n onWheel={release}\n onTouchStart={release}\n onKeyDown={release}\n className=\"relative min-h-0 min-w-0 flex-1 compare-grid\"\n >\n {columns.map((col, i) => (\n <ColumnContext.Provider key={col.key ?? i} value={{ index: i, count, divider, add: i === count - 1 ? add : null }}>\n {col}\n </ColumnContext.Provider>\n ))}\n </div>\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Root.displayName = \"CompareGrid\";\n\nexport interface CompareColumnProps {\n label: string;\n header: ReactNode;\n actions?: ReactNode | undefined;\n children?: ReactNode | undefined;\n footer?: ReactNode | undefined;\n onRemove?: (() => void) | undefined;\n removeLabel?: string | undefined;\n stickToEnd?: boolean | undefined;\n className?: string | undefined;\n}\n\nfunction useStickToEnd(enabled: boolean) {\n const body = useRef<HTMLDivElement | null>(null);\n const content = useRef<HTMLDivElement | null>(null);\n const pinned = useRef(true);\n useEffect(() => {\n const el = body.current;\n const inner = content.current;\n if (!enabled || !el || !inner || typeof ResizeObserver === \"undefined\") return;\n let last = el.scrollTop;\n const fade = () => {\n el.style.setProperty(\"--scroll-area-overflow-y-start\", `${Math.max(0, el.scrollTop)}px`);\n el.style.setProperty(\"--scroll-area-overflow-y-end\", `${Math.max(0, el.scrollHeight - el.clientHeight - el.scrollTop)}px`);\n };\n const onScroll = () => {\n fade();\n const near = el.scrollHeight - el.scrollTop - el.clientHeight <= 24;\n pinned.current = el.scrollTop < last - 1 ? near : pinned.current || near;\n last = el.scrollTop;\n };\n const ro = new ResizeObserver(() => {\n if (pinned.current) {\n el.scrollTop = el.scrollHeight;\n last = el.scrollTop;\n }\n fade();\n });\n el.addEventListener(\"scroll\", onScroll, { passive: true });\n ro.observe(inner);\n ro.observe(el);\n return () => {\n el.removeEventListener(\"scroll\", onScroll);\n ro.disconnect();\n };\n }, [enabled]);\n return { body, content };\n}\n\nconst Column = /* @__PURE__ */ forwardRef<HTMLElement, CompareColumnProps>(function CompareGridColumn(\n { label, header, actions, children, footer, onRemove, removeLabel, stickToEnd = true, className },\n ref,\n) {\n const t = useUiText();\n const { index, count, divider, add } = useContext(ColumnContext);\n const { body, content } = useStickToEnd(stickToEnd);\n return (\n <section\n ref={ref}\n aria-label={label}\n className={cn(\n \"row-span-3 grid min-h-0 min-w-0 snap-start snap-always grid-rows-subgrid\",\n index > 0 && KAESO_COMPARE_GRID_VARIANTS.divider[divider].classes,\n className,\n )}\n >\n <header className=\"flex h-52 min-w-0 items-center gap-4 pr-10 pl-8 hairline-b\">\n <div className=\"flex min-w-0 flex-1 items-center\">{header}</div>\n {actions}\n {onRemove && count > 1 && (\n <IconButton icon={__icon_Cancel01Icon} aria-label={removeLabel ?? t(\"compareGrid.remove\", \"Remove {label}\", { label })} size=\"sm\" onClick={onRemove} />\n )}\n {add && <span className=\"hidden md:contents\">{add}</span>}\n </header>\n <div\n ref={body}\n tabIndex={0}\n aria-label={t(\"compareGrid.thread\", \"{label} thread\", { label })}\n role=\"region\"\n className=\"relative min-h-0 overflow-y-auto overscroll-contain scrollbar-quiet scroll-fade-y focus-ring-inset\"\n >\n <div ref={content} className=\"flex min-h-full flex-col px-16 pt-16 pb-24\">\n {children}\n </div>\n </div>\n {footer !== undefined && footer !== null && <footer className=\"flex min-h-44 min-w-0 items-center px-16 pt-8 pb-12\">{footer}</footer>}\n </section>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Column.displayName = \"CompareGrid.Column\";\n\nexport const CompareGrid = /* @__PURE__ */ Object.assign(Root, { Column });\n","import { forwardRef, useId, useRef, useState, type ReactNode } from \"react\";\nimport { Collapsible as BaseCollapsible } from \"@base-ui/react/collapsible\";\nimport { cn } from \"../../utils/cn.js\";\nimport { ArrowRight01Icon as __icon_ArrowRight01Icon } from \"@hugeicons/core-free-icons\";\nimport { formatDuration } from \"../../format/index.js\";\nimport { Icon } from \"../icon/icon.js\";\nimport { Button } from \"../button/button.js\";\nimport { Markdown } from \"../markdown/markdown.js\";\nimport { useTruncated } from \"../../hooks/use-truncated.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_RESPONSE_VIEW_VARIANTS = {\n status: {\n pending: { classes: \"\" },\n streaming: { classes: \"\" },\n done: { classes: \"\" },\n stopped: { classes: \"\" },\n error: { classes: \"\" },\n },\n} as const;\nexport const KAESO_RESPONSE_VIEW_DEFAULT_VARIANTS = { status: \"done\" } as const;\n\nexport type ResponseStatus = keyof typeof KAESO_RESPONSE_VIEW_VARIANTS.status;\n\nexport interface ResponseViewProps {\n text?: string | undefined;\n reasoning?: string | undefined;\n status?: ResponseStatus | undefined;\n reasoningDuration?: number | undefined;\n reasoningOpen?: boolean | undefined;\n defaultReasoningOpen?: boolean | undefined;\n onReasoningOpenChange?: ((open: boolean) => void) | undefined;\n onRetry?: (() => void) | undefined;\n footer?: ReactNode | undefined;\n \"aria-label\"?: string | undefined;\n className?: string | undefined;\n}\n\nfunction lastLine(text: string) {\n const lines = text.trim().split(\"\\n\");\n for (let i = lines.length - 1; i >= 0; i--) {\n const l = (lines[i] ?? \"\").replace(/[*_`#>]+/g, \"\").trim();\n if (l) return l;\n }\n return \"\";\n}\n\nfunction Thinking({\n text,\n live,\n duration,\n open,\n defaultOpen,\n onOpenChange,\n}: {\n text: string;\n live: boolean;\n duration: number | undefined;\n open: boolean | undefined;\n defaultOpen: boolean | undefined;\n onOpenChange: ((open: boolean) => void) | undefined;\n}) {\n const t = useUiText();\n const preview = live ? lastLine(text) : \"\";\n const title = live\n ? t(\"responseView.thinking\", \"Thinking\")\n : duration !== undefined\n ? t(\"responseView.thoughtFor\", \"Thought for {duration}\", { duration: formatDuration(duration) })\n : t(\"responseView.thinking\", \"Thinking\");\n return (\n <BaseCollapsible.Root\n {...(open !== undefined ? { open } : {})}\n {...(defaultOpen !== undefined ? { defaultOpen } : {})}\n {...(onOpenChange ? { onOpenChange: (o: boolean) => onOpenChange(o) } : {})}\n className=\"flex min-w-0 flex-col\"\n >\n <BaseCollapsible.Trigger className=\"group/think -mx-8 flex h-32 min-w-0 cursor-pointer items-center gap-6 rounded-pill px-8 text-left text-small text-fg-secondary transition-control hover:bg-fill-1 hover:text-fg focus-ring-inset\">\n <span className={cn(\"shrink-0 font-medium\", live && \"animate-pulse-quiet reduced:animate-none\")}>{title}</span>\n <Icon\n icon={__icon_ArrowRight01Icon}\n size=\"xs\"\n className=\"shrink-0 text-fg-tertiary transition-transform duration-180 ease-overlay group-data-panel-open/think:rotate-90\"\n />\n <span aria-hidden className=\"min-w-0 flex-1 truncate text-fg-tertiary group-data-panel-open/think:invisible\">\n {preview}\n </span>\n </BaseCollapsible.Trigger>\n <BaseCollapsible.Panel className=\"collapse-motion\">\n <div className=\"flex gap-12 pt-4 pb-8\">\n <span aria-hidden className=\"w-1 shrink-0 rounded-pill bg-line\" />\n <Markdown text={text} size=\"small\" tone=\"secondary\" streaming={live} collapseAfter={0} wrapCode className=\"min-w-0 flex-1\" />\n </div>\n </BaseCollapsible.Panel>\n </BaseCollapsible.Root>\n );\n}\n\nexport const ResponseView = /* @__PURE__ */ forwardRef<HTMLElement, ResponseViewProps>(function ResponseView(\n {\n text = \"\",\n reasoning,\n status = \"done\",\n reasoningDuration,\n reasoningOpen,\n defaultReasoningOpen,\n onReasoningOpenChange,\n onRetry,\n footer,\n \"aria-label\": ariaLabelProp,\n className,\n },\n ref,\n) {\n const t = useUiText();\n const ariaLabel = ariaLabelProp ?? t(\"responseView.response\", \"Response\");\n const announce = useId();\n const active = status === \"pending\" || status === \"streaming\";\n const hasText = text.trim() !== \"\";\n const hasReasoning = !!reasoning && reasoning.trim() !== \"\";\n const thinking = active && hasReasoning && !hasText;\n return (\n <article\n ref={ref}\n aria-label={ariaLabel}\n aria-busy={active || undefined}\n aria-describedby={announce}\n className={cn(\"flex min-w-0 flex-col gap-8\", className)}\n >\n {hasReasoning && (\n <Thinking\n text={reasoning}\n live={thinking}\n duration={reasoningDuration}\n open={reasoningOpen}\n defaultOpen={defaultReasoningOpen}\n onOpenChange={onReasoningOpenChange}\n />\n )}\n {hasText ? (\n <Markdown text={text} size=\"lg\" streaming={active} collapseAfter={0} wrapCode />\n ) : active && !hasReasoning ? (\n <div aria-hidden className=\"h-22\" />\n ) : null}\n {status === \"stopped\" && (\n <div className=\"flex min-h-24 flex-wrap items-center gap-x-12 gap-y-4\">\n <span className=\"text-small text-fg-tertiary\">\n {hasText ? t(\"responseView.stopped\", \"Stopped\") : t(\"responseView.stoppedBeforeResponse\", \"Stopped before a response\")}\n </span>\n {onRetry && (\n <Button size=\"xs\" variant=\"ghost\" onClick={onRetry}>\n {t(\"responseView.retry\", \"Retry\")}\n </Button>\n )}\n </div>\n )}\n {status === \"error\" && (\n <div className=\"flex min-h-24 flex-wrap items-center gap-x-12 gap-y-4\">\n <span className=\"text-small text-fg-secondary\">\n {hasText ? t(\"responseView.stoppedEarly\", \"The response stopped early\") : t(\"responseView.noResponse\", \"No response\")}\n </span>\n {onRetry && (\n <Button size=\"xs\" variant=\"secondary\" onClick={onRetry}>\n {t(\"responseView.retry\", \"Retry\")}\n </Button>\n )}\n </div>\n )}\n {status === \"done\" && !hasText && <span className=\"text-small text-fg-tertiary\">{t(\"responseView.noText\", \"The model returned no text\")}</span>}\n {footer}\n <span id={announce} className=\"sr-only\">\n {status === \"pending\"\n ? t(\"responseView.waiting\", \"Waiting for the response\")\n : status === \"streaming\"\n ? t(\"responseView.responding\", \"Responding\")\n : \"\"}\n </span>\n </article>\n );\n});\nif (process.env.NODE_ENV !== \"production\") ResponseView.displayName = \"ResponseView\";\n\nexport interface UserMessageProps {\n children: ReactNode;\n maxLines?: 0 | 2 | 3 | 4 | 6 | undefined;\n \"aria-label\"?: string | undefined;\n className?: string | undefined;\n}\n\nconst CLAMP = { 2: \"line-clamp-2\", 3: \"line-clamp-3\", 4: \"line-clamp-4\", 6: \"line-clamp-6\" } as const;\n\nexport const UserMessage = /* @__PURE__ */ forwardRef<HTMLDivElement, UserMessageProps>(function UserMessage(\n { children, maxLines = 4, \"aria-label\": ariaLabelProp, className },\n ref,\n) {\n const t = useUiText();\n const ariaLabel = ariaLabelProp ?? t(\"userMessage.prompt\", \"Prompt\");\n const showAll = t(\"userMessage.showAll\", \"Show all\");\n const showLess = t(\"userMessage.showLess\", \"Show less\");\n const [all, setAll] = useState(false);\n const text = useRef<HTMLParagraphElement | null>(null);\n const clamped = useTruncated(text, maxLines > 0 && !all);\n return (\n <div ref={ref} role=\"group\" aria-label={ariaLabel} className={cn(\"flex min-w-0 flex-col items-start gap-2\", className)}>\n <p\n ref={text}\n className={cn(\n \"max-w-prose min-w-0 text-body font-medium whitespace-pre-wrap wrap-break-word text-fg-secondary\",\n maxLines !== 0 && !all && CLAMP[maxLines],\n )}\n >\n {children}\n </p>\n {(clamped || all) && (\n <Button size=\"xs\" variant=\"link\" reserveLabels={[showAll, showLess]} onClick={() => setAll((a) => !a)} className=\"text-fg-tertiary\">\n {all ? showLess : showAll}\n </Button>\n )}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") UserMessage.displayName = \"UserMessage\";\n\nexport interface ThreadProps {\n children: ReactNode;\n className?: string | undefined;\n}\n\nexport const Thread = /* @__PURE__ */ forwardRef<HTMLDivElement, ThreadProps>(function Thread({ children, className }, ref) {\n return (\n <div ref={ref} className={cn(\"flex min-w-0 flex-col gap-32\", className)}>\n {children}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Thread.displayName = \"Thread\";\n","import { forwardRef, useEffect, useState, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { formatDuration, formatNumber, formatUSD } from \"../../format/index.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_RESPONSE_METRICS_VARIANTS = {\n size: {\n sm: { classes: \"text-caption gap-x-12 gap-y-2\" },\n md: { classes: \"text-small gap-x-16 gap-y-4\" },\n },\n} as const;\nexport const KAESO_RESPONSE_METRICS_DEFAULT_VARIANTS = { size: \"sm\" } as const;\n\nexport interface ResponseMetricsProps {\n timeToFirstToken?: number | null | undefined;\n duration?: number | null | undefined;\n inputTokens?: number | null | undefined;\n outputTokens?: number | null | undefined;\n reasoningTokens?: number | null | undefined;\n reasoning?: boolean | undefined;\n live?: boolean | undefined;\n startedAt?: number | undefined;\n cost?: string | null | undefined;\n size?: keyof typeof KAESO_RESPONSE_METRICS_VARIANTS.size | undefined;\n className?: string | undefined;\n}\n\nexport function formatLatency(ms: number): string {\n if (!Number.isFinite(ms) || ms < 0) return \"—\";\n return formatDuration(ms, { precise: true });\n}\n\nfunction useElapsed(from: number | undefined) {\n const [now, setNow] = useState(() => Date.now());\n useEffect(() => {\n if (from === undefined) return;\n setNow(Date.now());\n const id = setInterval(() => setNow(Date.now()), 100);\n return () => clearInterval(id);\n }, [from]);\n return from === undefined ? undefined : Math.max(0, now - from);\n}\n\nfunction known(n: number | null | undefined): n is number {\n return typeof n === \"number\" && Number.isFinite(n);\n}\n\nfunction Item({ label, width, children, value }: { label: string; width: string; children: ReactNode; value?: string | undefined }) {\n return (\n <div className=\"flex items-baseline gap-4 whitespace-nowrap\">\n <dt className=\"text-fg-tertiary\">{label}</dt>\n <dd className={cn(\"text-fg-secondary tabular\", width)} {...(value ? { \"aria-label\": value } : {})}>\n {children}\n </dd>\n </div>\n );\n}\n\nexport const ResponseMetrics = /* @__PURE__ */ forwardRef<HTMLDListElement, ResponseMetricsProps>(function ResponseMetrics(\n { timeToFirstToken, duration, inputTokens, outputTokens, reasoningTokens, reasoning, live = false, startedAt, cost, size = \"sm\", className },\n ref,\n) {\n const t = useUiText();\n const counting = live && startedAt !== undefined && !known(duration);\n const elapsed = useElapsed(counting ? startedAt : undefined);\n const tokens = known(inputTokens) || known(outputTokens);\n const hasCost = cost != null && cost !== \"\";\n const line = cn(\"flex min-w-0 flex-wrap items-baseline\", KAESO_RESPONSE_METRICS_VARIANTS.size[size].classes, className);\n if (!live && !tokens && !hasCost && !known(timeToFirstToken) && !known(duration) && !known(reasoningTokens)) {\n return <dl ref={ref} aria-label={t(\"responseMetrics.metrics\", \"Metrics\")} className={cn(line, size === \"sm\" ? \"min-h-16\" : \"min-h-18\")} />;\n }\n const show = (value: boolean) => live || value;\n const dash = (\n <span className=\"text-fg-tertiary\">\n <span aria-hidden>—</span>\n <span className=\"sr-only\">{t(\"responseMetrics.notYetKnown\", \"not yet known\")}</span>\n </span>\n );\n return (\n <dl ref={ref} aria-label={t(\"responseMetrics.metrics\", \"Metrics\")} className={line}>\n {show(known(timeToFirstToken)) && (\n <Item label={t(\"responseMetrics.firstToken\", \"First token\")} width=\"min-w-40\">\n {known(timeToFirstToken) ? formatLatency(timeToFirstToken) : dash}\n </Item>\n )}\n {show(known(duration)) && (\n <Item label={t(\"responseMetrics.total\", \"Total\")} width=\"min-w-40\">\n {known(duration) ? formatLatency(duration) : elapsed !== undefined ? <span className=\"text-fg-tertiary\">{formatLatency(elapsed)}</span> : dash}\n </Item>\n )}\n {show(tokens) && (\n <Item\n label={t(\"responseMetrics.tokens\", \"Tokens\")}\n width=\"min-w-48\"\n value={\n tokens\n ? t(\"responseMetrics.tokensInOut\", \"{input} in, {output} out\", {\n input: known(inputTokens) ? formatNumber(inputTokens) : t(\"responseMetrics.unknown\", \"unknown\"),\n output: known(outputTokens) ? formatNumber(outputTokens) : t(\"responseMetrics.unknown\", \"unknown\"),\n })\n : undefined\n }\n >\n {tokens ? (\n <>\n {known(inputTokens) ? formatNumber(inputTokens) : dash} → {known(outputTokens) ? formatNumber(outputTokens) : dash}\n </>\n ) : (\n dash\n )}\n </Item>\n )}\n {(known(reasoningTokens) || (live && reasoning)) && (\n <Item label={t(\"responseMetrics.reasoning\", \"Reasoning\")} width=\"min-w-24\">\n {known(reasoningTokens) ? formatNumber(reasoningTokens) : dash}\n </Item>\n )}\n {show(hasCost) && (\n <Item label={t(\"responseMetrics.cost\", \"Cost\")} width=\"min-w-40\">\n {hasCost ? formatUSD(cost) : dash}\n </Item>\n )}\n </dl>\n );\n});\nif (process.env.NODE_ENV !== \"production\") ResponseMetrics.displayName = \"ResponseMetrics\";\n","import { forwardRef, useId, type ReactElement } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { SlidersHorizontalIcon as __icon_SlidersHorizontalIcon } from \"@hugeicons/core-free-icons\";\nimport { formatNumber } from \"../../format/index.js\";\nimport { Button } from \"../button/button.js\";\nimport { IconButton } from \"../icon-button/icon-button.js\";\nimport { NumberInput } from \"../input/number-input.js\";\nimport { Textarea } from \"../input/textarea.js\";\nimport { Popover } from \"../popover/popover.js\";\nimport { Segmented } from \"../segmented/segmented.js\";\nimport { Select } from \"../select/select.js\";\nimport { Slider } from \"../slider/slider.js\";\nimport { useUiText, type UiText } from \"../../i18n/context.js\";\n\nexport const KAESO_PARAMETER_PANEL_VARIANTS = {\n layout: {\n popover: { classes: \"w-full gap-20\" },\n panel: { classes: \"w-full gap-24\" },\n },\n} as const;\nexport const KAESO_PARAMETER_PANEL_DEFAULT_VARIANTS = { layout: \"popover\" } as const;\n\nexport type ReasoningEffort = \"none\" | \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\";\nexport type ReasoningSummary = \"auto\" | \"concise\" | \"detailed\" | \"off\";\n\nexport interface PlaygroundParameters {\n instructions?: string | undefined;\n temperature?: number | undefined;\n topP?: number | undefined;\n maxOutputTokens?: number | undefined;\n reasoningEffort?: ReasoningEffort | undefined;\n reasoningSummary?: ReasoningSummary | undefined;\n}\n\nfunction efforts(t: UiText): { value: ReasoningEffort; label: string }[] {\n return [\n { value: \"none\", label: t(\"parameterPanel.effortNone\", \"None\") },\n { value: \"minimal\", label: t(\"parameterPanel.effortMinimal\", \"Minimal\") },\n { value: \"low\", label: t(\"parameterPanel.effortLow\", \"Low\") },\n { value: \"medium\", label: t(\"parameterPanel.effortMedium\", \"Medium\") },\n { value: \"high\", label: t(\"parameterPanel.effortHigh\", \"High\") },\n { value: \"xhigh\", label: t(\"parameterPanel.effortExtraHigh\", \"Extra high\") },\n { value: \"max\", label: t(\"parameterPanel.effortMax\", \"Max\") },\n ];\n}\n\nexport interface ParameterPanelProps {\n value: PlaygroundParameters;\n onValueChange: (next: PlaygroundParameters) => void;\n defaults?: Pick<PlaygroundParameters, \"temperature\" | \"topP\"> | undefined;\n instructions?: boolean | undefined;\n sampling?: boolean | undefined;\n reasoning?: ReasoningEffort[] | boolean | undefined;\n maxOutputTokensLimit?: number | undefined;\n disabled?: boolean | undefined;\n layout?: keyof typeof KAESO_PARAMETER_PANEL_VARIANTS.layout | undefined;\n className?: string | undefined;\n}\n\nfunction SliderRow({\n label,\n value,\n unset,\n min,\n max,\n step,\n digits,\n disabled,\n onChange,\n}: {\n label: string;\n value: number;\n unset: boolean;\n min: number;\n max: number;\n step: number;\n digits: number;\n disabled: boolean;\n onChange: (v: number) => void;\n}) {\n const id = useId();\n const t = useUiText();\n const shown = formatNumber(value, { minimumFractionDigits: digits, maximumFractionDigits: digits });\n return (\n <div className=\"flex flex-col gap-8\">\n <div className=\"flex items-baseline justify-between gap-12\">\n <span id={id} className={cn(\"text-body font-medium\", disabled ? \"text-fg-disabled\" : \"text-fg\")}>\n {label}\n </span>\n <span className={cn(\"text-small tabular\", unset ? \"text-fg-tertiary\" : \"text-fg-secondary\")}>\n {unset ? t(\"parameterPanel.valueDefault\", \"{value} default\", { value: shown }) : shown}\n </span>\n </div>\n <div className=\"px-8\">\n <Slider\n aria-label={label}\n min={min}\n max={max}\n step={step}\n value={value}\n disabled={disabled}\n formatValue={(v) => formatNumber(v, { minimumFractionDigits: digits, maximumFractionDigits: digits })}\n onValueChange={(v) => onChange(Array.isArray(v) ? (v[0] ?? min) : v)}\n />\n </div>\n </div>\n );\n}\n\nexport const ParameterPanel = /* @__PURE__ */ forwardRef<HTMLDivElement, ParameterPanelProps>(function ParameterPanel(\n {\n value,\n onValueChange,\n defaults,\n instructions = true,\n sampling = true,\n reasoning = false,\n maxOutputTokensLimit,\n disabled = false,\n layout = \"popover\",\n className,\n },\n ref,\n) {\n const t = useUiText();\n const set = (patch: Partial<PlaygroundParameters>) => onValueChange({ ...value, ...patch });\n const all = efforts(t);\n const shownEfforts = reasoning === true ? all : Array.isArray(reasoning) ? all.filter((e) => reasoning.includes(e.value)) : [];\n const changed =\n value.temperature !== undefined ||\n value.topP !== undefined ||\n value.maxOutputTokens !== undefined ||\n value.reasoningEffort !== undefined ||\n value.reasoningSummary !== undefined;\n return (\n <div ref={ref} className={cn(\"flex min-w-0 flex-col\", KAESO_PARAMETER_PANEL_VARIANTS.layout[layout].classes, className)}>\n {instructions && (\n <Textarea\n label={t(\"parameterPanel.systemInstructions\", \"System instructions\")}\n rows={3}\n maxRows={8}\n placeholder={t(\"parameterPanel.instructionsPlaceholder\", \"You are a helpful assistant.\")}\n value={value.instructions ?? \"\"}\n disabled={disabled}\n onChange={(e) => set({ instructions: e.target.value === \"\" ? undefined : e.target.value })}\n />\n )}\n {sampling && (\n <>\n <SliderRow\n label={t(\"parameterPanel.temperature\", \"Temperature\")}\n value={value.temperature ?? defaults?.temperature ?? 1}\n unset={value.temperature === undefined}\n min={0}\n max={2}\n step={0.05}\n digits={2}\n disabled={disabled}\n onChange={(v) => set({ temperature: v })}\n />\n <SliderRow\n label={t(\"parameterPanel.topP\", \"Top P\")}\n value={value.topP ?? defaults?.topP ?? 1}\n unset={value.topP === undefined}\n min={0}\n max={1}\n step={0.01}\n digits={2}\n disabled={disabled}\n onChange={(v) => set({ topP: v })}\n />\n </>\n )}\n <NumberInput\n label={t(\"parameterPanel.maxOutputTokens\", \"Max output tokens\")}\n size=\"sm\"\n placeholder={t(\"parameterPanel.modelDefault\", \"Model default\")}\n align=\"start\"\n min=\"1\"\n {...(maxOutputTokensLimit ? { max: String(maxOutputTokensLimit) } : {})}\n step=\"256\"\n value={value.maxOutputTokens === undefined ? \"\" : String(value.maxOutputTokens)}\n disabled={disabled}\n onValueChange={(v) => {\n const n = Number(v);\n set({ maxOutputTokens: v.trim() === \"\" || !Number.isFinite(n) || n <= 0 ? undefined : Math.round(n) });\n }}\n />\n {shownEfforts.length > 0 && (\n <>\n <Select\n label={t(\"parameterPanel.reasoningEffort\", \"Reasoning effort\")}\n size=\"sm\"\n fullWidth\n disabled={disabled}\n value={value.reasoningEffort ?? \"default\"}\n options={[{ value: \"default\", label: t(\"parameterPanel.modelDefault\", \"Model default\") }, ...shownEfforts]}\n onValueChange={(v: string) => set({ reasoningEffort: v === \"default\" ? undefined : (v as ReasoningEffort) })}\n />\n <div className=\"flex flex-col gap-8\">\n <span className={cn(\"text-body font-medium\", disabled ? \"text-fg-disabled\" : \"text-fg\")}>\n {t(\"parameterPanel.reasoningSummary\", \"Reasoning summary\")}\n </span>\n <Segmented\n aria-label={t(\"parameterPanel.reasoningSummary\", \"Reasoning summary\")}\n size=\"sm\"\n fullWidth\n disabled={disabled}\n value={value.reasoningSummary ?? \"auto\"}\n options={[\n { value: \"auto\", label: t(\"parameterPanel.summaryAuto\", \"Auto\") },\n { value: \"concise\", label: t(\"parameterPanel.summaryConcise\", \"Concise\") },\n { value: \"detailed\", label: t(\"parameterPanel.summaryDetailed\", \"Detailed\") },\n { value: \"off\", label: t(\"parameterPanel.summaryOff\", \"Off\") },\n ]}\n onValueChange={(v) => set({ reasoningSummary: v === \"auto\" ? undefined : (v as ReasoningSummary) })}\n />\n </div>\n </>\n )}\n <div className=\"flex justify-end\">\n <Button\n size=\"sm\"\n variant=\"ghost\"\n disabled={disabled || !changed}\n onClick={() => onValueChange(value.instructions !== undefined ? { instructions: value.instructions } : {})}\n >\n {t(\"parameterPanel.resetToDefaults\", \"Reset to defaults\")}\n </Button>\n </div>\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") ParameterPanel.displayName = \"ParameterPanel\";\n\nexport interface ParameterPopoverProps extends Omit<ParameterPanelProps, \"layout\" | \"className\"> {\n trigger?: ReactElement | undefined;\n title?: string | undefined;\n open?: boolean | undefined;\n defaultOpen?: boolean | undefined;\n onOpenChange?: ((open: boolean) => void) | undefined;\n side?: \"top\" | \"bottom\" | \"left\" | \"right\" | undefined;\n align?: \"start\" | \"center\" | \"end\" | undefined;\n}\n\nexport function ParameterPopover({\n trigger,\n title: titleProp,\n open,\n defaultOpen,\n onOpenChange,\n side = \"bottom\",\n align = \"end\",\n ...panel\n}: ParameterPopoverProps) {\n const t = useUiText();\n const title = titleProp ?? t(\"parameterPopover.parameters\", \"Parameters\");\n return (\n <Popover\n trapFocus\n {...(open !== undefined ? { open } : {})}\n {...(defaultOpen !== undefined ? { defaultOpen } : {})}\n {...(onOpenChange ? { onOpenChange } : {})}\n >\n <Popover.Trigger>{trigger ?? <IconButton icon={__icon_SlidersHorizontalIcon} aria-label={title} size=\"sm\" />}</Popover.Trigger>\n <Popover.Content title={title} side={side} align={align} className=\"w-320 max-w-(--available-width)\">\n <ParameterPanel {...panel} />\n </Popover.Content>\n </Popover>\n );\n}\nif (process.env.NODE_ENV !== \"production\") ParameterPopover.displayName = \"ParameterPopover\";\n","import { forwardRef } from \"react\";\nimport { useUiText } from \"../../i18n/context.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport { ModelLabel, providerName } from \"../kaeso/identity.js\";\nimport { KAESO_SELECT_VARIANTS, Select } from \"../select/select.js\";\n\nconst SELECT_APPEARANCE = { ghost: \"header\", default: \"default\" } as const;\n\nexport const KAESO_MODEL_PICKER_VARIANTS = {\n appearance: {\n ghost: { classes: KAESO_SELECT_VARIANTS.appearance.header.classes },\n default: { classes: KAESO_SELECT_VARIANTS.appearance.default.classes },\n },\n} as const;\nexport const KAESO_MODEL_PICKER_DEFAULT_VARIANTS = { appearance: \"ghost\" } as const;\n\nexport interface ModelPickerOption {\n value: string;\n provider: string;\n model?: string | undefined;\n name?: string | undefined;\n disabled?: boolean | undefined;\n}\n\nexport interface ModelPickerProps {\n options: ModelPickerOption[];\n value?: string | null | undefined;\n defaultValue?: string | null | undefined;\n onValueChange?: ((value: string) => void) | undefined;\n groupByProvider?: boolean | undefined;\n placeholder?: string | undefined;\n \"aria-label\"?: string | undefined;\n appearance?: keyof typeof KAESO_MODEL_PICKER_VARIANTS.appearance | undefined;\n size?: \"sm\" | \"md\" | undefined;\n disabled?: boolean | undefined;\n \"data-force\"?: string | undefined;\n className?: string | undefined;\n}\n\nexport const ModelPicker = /* @__PURE__ */ forwardRef<HTMLButtonElement, ModelPickerProps>(function ModelPicker(\n {\n options,\n value,\n defaultValue,\n onValueChange,\n groupByProvider,\n placeholder,\n \"aria-label\": ariaLabel,\n appearance = \"ghost\",\n size = \"sm\",\n disabled,\n \"data-force\": force,\n className,\n },\n ref,\n) {\n const t = useUiText();\n const grouped = groupByProvider ?? new Set(options.map((o) => o.provider)).size > 1;\n const sorted = grouped ? [...options].sort((a, b) => providerName(a.provider).localeCompare(providerName(b.provider))) : options;\n return (\n <Select\n ref={ref}\n aria-label={ariaLabel ?? t(\"modelPicker.model\", \"Model\")}\n appearance={SELECT_APPEARANCE[appearance]}\n size={size}\n placeholder={placeholder ?? t(\"modelPicker.choose\", \"Choose a model\")}\n {...(value !== undefined ? { value } : {})}\n {...(defaultValue !== undefined ? { defaultValue } : {})}\n {...(onValueChange ? { onValueChange } : {})}\n {...(disabled !== undefined ? { disabled } : {})}\n {...(force ? { \"data-force\": force } : {})}\n className={cn(\"max-w-full\", className)}\n options={sorted.map((o) => ({\n value: o.value,\n textValue: o.name ?? o.model ?? o.value,\n label: <ModelLabel provider={o.provider} model={o.model ?? o.value} {...(o.name ? { name: o.name } : {})} />,\n ...(grouped ? { group: providerName(o.provider) } : {}),\n ...(o.disabled ? { disabled: true } : {}),\n }))}\n />\n );\n});\nif (process.env.NODE_ENV !== \"production\") ModelPicker.displayName = \"ModelPicker\";\n","import { forwardRef } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_PROMPT_SUGGESTIONS_VARIANTS = {\n align: {\n start: { classes: \"items-stretch\" },\n center: { classes: \"items-center text-center\" },\n },\n} as const;\nexport const KAESO_PROMPT_SUGGESTIONS_DEFAULT_VARIANTS = { align: \"start\" } as const;\n\nexport interface PromptSuggestionsProps {\n suggestions: string[];\n onSelect: (prompt: string) => void;\n \"aria-label\"?: string | undefined;\n align?: keyof typeof KAESO_PROMPT_SUGGESTIONS_VARIANTS.align | undefined;\n className?: string | undefined;\n}\n\nexport const PromptSuggestions = /* @__PURE__ */ forwardRef<HTMLUListElement, PromptSuggestionsProps>(function PromptSuggestions(\n { suggestions, onSelect, \"aria-label\": ariaLabelProp, align = \"start\", className },\n ref,\n) {\n const t = useUiText();\n const ariaLabel = ariaLabelProp ?? t(\"promptSuggestions.examplePrompts\", \"Example prompts\");\n return (\n <ul ref={ref} aria-label={ariaLabel} className={cn(\"flex min-w-0 flex-col gap-2\", KAESO_PROMPT_SUGGESTIONS_VARIANTS.align[align].classes, className)}>\n {suggestions.slice(0, 3).map((s) => (\n <li key={s} className={cn(\"flex min-w-0\", align === \"center\" && \"justify-center\")}>\n <button\n type=\"button\"\n onClick={() => onSelect(s)}\n className={cn(\n \"flex h-36 max-w-full min-w-0 cursor-pointer items-center rounded-item px-16 text-body text-fg-secondary transition-control hover:bg-fill-1 hover:text-fg focus-ring-inset\",\n align === \"start\" && \"flex-1\",\n )}\n >\n <span className=\"min-w-0 truncate\">{s}</span>\n </button>\n </li>\n ))}\n </ul>\n );\n});\nif (process.env.NODE_ENV !== \"production\") PromptSuggestions.displayName = \"PromptSuggestions\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"playground.js","names":["__icon_Add01Icon","__icon_ArrowLeft01Icon","__icon_ArrowRight01Icon","__icon_Cancel01Icon","BaseCollapsible","__icon_ArrowRight01Icon","_Fragment","__icon_SlidersHorizontalIcon","_Fragment","cn","useUiText","Icon","useTruncated","Button","IconButton","useField","useFieldControl","withField","NumberInput","Textarea","Slider","Switch","Segmented","KAESO_SELECT_VARIANTS","Select","Popover","Highlight","commandMatch","CommandList","PickerTrigger","PickerPopover","ModelLabel","ProviderBadge","CapabilityIcons","providerName","Markdown","Fragment$1","KAESO_COMPOSER_VARIANTS","KAESO_COMPOSER_DEFAULT_VARIANTS","COARSE","subscribeCoarse","q","onChange","isCoarse","useCoarsePointer","useSyncExternalStore","Composer","placeholderProp","ariaLabelProp","submitLabelProp","stopLabelProp","force","t","placeholder","ariaLabel","submitLabel","stopLabel","text","setText","useControllable","value","defaultValue","onValueChange","box","useRef","minRows","size","grow","useCallback","el","maxRows","empty","canSend","disabled","streaming","loading","send","onSubmit","clearOnSubmit","coarse","enterSends","submitOn","onKeyDown","className","ref","name","actions","onStop","KAESO_COMPARE_GRID_VARIANTS","KAESO_COMPARE_GRID_DEFAULT_VARIANTS","ColumnContext","Root","columns","Children","children","isValidElement","count","scroller","current","setCurrent","useState","shown","active","target","changed","onActiveChange","scrollTo","i","reduce","go","next","before","fade","end","ro","onScroll","first","release","full","max","add","onAdd","Add01Icon","addLabel","label","ArrowLeft01Icon","ArrowRight01Icon","col","useStickToEnd","body","content","pinned","useEffect","inner","enabled","last","near","Column","useContext","stickToEnd","index","divider","header","onRemove","Cancel01Icon","removeLabel","footer","CompareGrid","KAESO_REASONING_VARIANTS","KAESO_REASONING_DEFAULT_VARIANTS","lastLine","lines","l","Reasoning","preview","hint","live","heading","title","duration","formatDuration","Collapsible","open","defaultOpen","onOpenChange","o","KAESO_RESPONSE_VIEW_VARIANTS","KAESO_RESPONSE_VIEW_DEFAULT_VARIANTS","incompleteText","reason","ResponseView","announce","useId","status","hasText","hasReasoning","reasoning","thinking","reasoningDuration","reasoningOpen","defaultReasoningOpen","onReasoningOpenChange","onRetry","incompleteReason","error","CLAMP","UserMessage","showAll","showLess","all","setAll","clamped","maxLines","a","Thread","KAESO_RESPONSE_METRICS_VARIANTS","KAESO_RESPONSE_METRICS_DEFAULT_VARIANTS","formatLatency","ms","useElapsed","now","setNow","from","id","requestCost","amount","formatUSD","known","n","Item","width","ResponseMetrics","elapsed","startedAt","tokens","inputTokens","outputTokens","hasCost","cost","line","timeToFirstToken","reasoningTokens","show","dash","formatNumber","KAESO_PARAMETER_PANEL_VARIANTS","KAESO_PARAMETER_PANEL_DEFAULT_VARIANTS","efforts","SliderRow","digits","unset","v","min","ParameterPanel","set","patch","shownEfforts","layout","instructions","sampling","defaults","maxOutputTokensLimit","ParameterPopover","titleProp","panel","trigger","SlidersHorizontalIcon","SELECT_APPEARANCE","KAESO_MODEL_PICKER_VARIANTS","KAESO_MODEL_PICKER_DEFAULT_VARIANTS","ALL","ALL_PROVIDERS","ModelRow","model","option","details","formatContext","providerLabel","modelItem","nameOf","withBadge","modelGroups","grouped","providerOrder","models","options","useProviderOrder","locale","useLocale","provider","useMemo","providers","p","b","useModelGroups","groupByProvider","ModelPicker","openProp","props","field","fc","ownOpen","setOwnOpen","setOpen","own","setOwn","chosen","allLabel","query","setQuery","only","setOnly","showDeprecated","setShowDeprecated","wasOpen","setWasOpen","byValue","hasDeprecated","chosenKey","groups","kept","visible","out","recentItems","recent","pick","x","shownProviders","counts","providerFilter","toolbar","summary","control","appearance","invalid","fullWidth","description","KAESO_PROMPT_SUGGESTIONS_VARIANTS","KAESO_PROMPT_SUGGESTIONS_DEFAULT_VARIANTS","PromptSuggestions","align","suggestions","onSelect","s"],"sources":["../../src/components/playground/composer.tsx","../../src/components/playground/compare-grid.tsx","../../src/components/playground/reasoning.tsx","../../src/components/playground/response-view.tsx","../../src/components/playground/response-metrics.tsx","../../src/components/playground/parameter-panel.tsx","../../src/components/playground/model-picker.tsx","../../src/components/playground/prompt-suggestions.tsx"],"sourcesContent":["import { forwardRef, useCallback, useLayoutEffect, useRef, useSyncExternalStore, type FormEvent, type KeyboardEvent, type ReactNode } from \"react\";\nimport { useUiText } from \"../../i18n/context.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport { useControllable } from \"../../utils/use-controllable.js\";\nimport { Button } from \"../button/button.js\";\n\nexport const KAESO_COMPOSER_VARIANTS = {\n size: {\n md: { classes: \"rounded-frame\" },\n sm: { classes: \"rounded-frame\" },\n },\n} as const;\nexport const KAESO_COMPOSER_DEFAULT_VARIANTS = { size: \"md\" } as const;\n\nconst COARSE = \"(pointer: coarse)\";\nfunction subscribeCoarse(onChange: () => void) {\n if (typeof window === \"undefined\" || !window.matchMedia) return () => {};\n const q = window.matchMedia(COARSE);\n q.addEventListener?.(\"change\", onChange);\n return () => q.removeEventListener?.(\"change\", onChange);\n}\nconst isCoarse = () => typeof window !== \"undefined\" && !!window.matchMedia?.(COARSE).matches;\nconst useCoarsePointer = () => useSyncExternalStore(subscribeCoarse, isCoarse, () => false);\n\nexport interface ComposerProps {\n value?: string | undefined;\n defaultValue?: string | undefined;\n onValueChange?: ((value: string) => void) | undefined;\n onSubmit?: ((value: string) => void) | undefined;\n submitOn?: \"enter\" | \"mod-enter\" | undefined;\n onStop?: (() => void) | undefined;\n streaming?: boolean | undefined;\n loading?: boolean | undefined;\n disabled?: boolean | undefined;\n clearOnSubmit?: boolean | undefined;\n placeholder?: string | undefined;\n \"aria-label\"?: string | undefined;\n maxRows?: number | undefined;\n size?: keyof typeof KAESO_COMPOSER_VARIANTS.size | undefined;\n actions?: ReactNode | undefined;\n submitLabel?: string | undefined;\n stopLabel?: string | undefined;\n autoFocus?: boolean | undefined;\n name?: string | undefined;\n \"data-force\"?: string | undefined;\n className?: string | undefined;\n}\n\nexport const Composer = /* @__PURE__ */ forwardRef<HTMLTextAreaElement, ComposerProps>(function Composer(\n {\n value,\n defaultValue = \"\",\n onValueChange,\n onSubmit,\n onStop,\n submitOn = \"enter\",\n streaming = false,\n loading = false,\n disabled = false,\n clearOnSubmit = true,\n placeholder: placeholderProp,\n \"aria-label\": ariaLabelProp,\n maxRows = 10,\n size = \"md\",\n actions,\n submitLabel: submitLabelProp,\n stopLabel: stopLabelProp,\n autoFocus,\n name,\n \"data-force\": force,\n className,\n },\n ref,\n) {\n const t = useUiText();\n const placeholder = placeholderProp ?? t(\"composer.placeholder\", \"Write a prompt\");\n const ariaLabel = ariaLabelProp ?? t(\"composer.prompt\", \"Prompt\");\n const submitLabel = submitLabelProp ?? t(\"composer.send\", \"Send\");\n const stopLabel = stopLabelProp ?? t(\"composer.stop\", \"Stop\");\n const [text, setText] = useControllable(value, defaultValue, onValueChange);\n\n const box = useRef<HTMLTextAreaElement | null>(null);\n const minRows = size === \"sm\" ? 1 : 2;\n const grow = useCallback(() => {\n const el = box.current;\n if (!el) return;\n el.style.height = \"auto\";\n el.style.height = `${Math.min(Math.max(el.scrollHeight, minRows * 20 + 16), maxRows * 20 + 16)}px`;\n }, [maxRows, minRows]);\n useLayoutEffect(grow, [grow, text]);\n\n const empty = text.trim() === \"\";\n const canSend = !disabled && !streaming && !loading && !empty;\n const send = () => {\n if (!canSend) return;\n onSubmit?.(text);\n if (clearOnSubmit && value === undefined) setText(\"\");\n };\n const coarse = useCoarsePointer();\n const enterSends = submitOn === \"enter\" && !coarse;\n const onKeyDown = (e: KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key !== \"Enter\") return;\n if (e.nativeEvent.isComposing || e.keyCode === 229) return;\n const mod = e.metaKey || e.ctrlKey;\n if (!mod && (!enterSends || e.shiftKey || e.altKey)) return;\n e.preventDefault();\n send();\n };\n const onFormSubmit = (e: FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n send();\n };\n\n return (\n <form\n onSubmit={onFormSubmit}\n onMouseDown={(e) => {\n if (e.target === e.currentTarget && !disabled) {\n e.preventDefault();\n box.current?.focus();\n }\n }}\n {...(force ? { \"data-force\": force } : {})}\n {...(disabled ? { \"data-disabled\": \"\" } : {})}\n className={cn(\n \"flex min-w-0 cursor-text flex-col material-composer transition-control\",\n KAESO_COMPOSER_VARIANTS.size[size].classes,\n disabled && \"cursor-not-allowed\",\n className,\n )}\n >\n <textarea\n ref={(el) => {\n box.current = el;\n if (typeof ref === \"function\") ref(el);\n else if (ref) ref.current = el;\n }}\n rows={minRows}\n value={text}\n onChange={(e) => setText(e.target.value)}\n onKeyDown={onKeyDown}\n disabled={disabled}\n placeholder={placeholder}\n aria-label={ariaLabel}\n aria-keyshortcuts={enterSends ? \"Enter Meta+Enter Control+Enter\" : \"Meta+Enter Control+Enter\"}\n {...(enterSends ? { enterKeyHint: \"send\" as const } : {})}\n autoFocus={autoFocus}\n {...(name ? { name } : {})}\n className=\"block w-full min-w-0 resize-none bg-transparent px-16 pt-12 pb-4 text-body text-fg outline-none scrollbar-quiet placeholder:text-fg-tertiary disabled:cursor-not-allowed disabled:text-fg-disabled\"\n />\n <div className=\"flex min-w-0 items-center gap-8 p-8 pt-4\">\n <div className=\"flex min-w-0 flex-1 items-center gap-4\">{actions}</div>\n {streaming ? (\n <Button type=\"button\" size=\"sm\" variant=\"secondary\" reserveLabels={[submitLabel, stopLabel]} onClick={() => onStop?.()} disabled={disabled}>\n {stopLabel}\n </Button>\n ) : (\n <Button type=\"submit\" size=\"sm\" variant=\"primary\" reserveLabels={[submitLabel, stopLabel]} loading={loading} disabled={!canSend && !loading}>\n {submitLabel}\n </Button>\n )}\n </div>\n </form>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Composer.displayName = \"Composer\";\n","import {\n Children,\n createContext,\n forwardRef,\n isValidElement,\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { Add01Icon as __icon_Add01Icon, ArrowLeft01Icon as __icon_ArrowLeft01Icon, ArrowRight01Icon as __icon_ArrowRight01Icon, Cancel01Icon as __icon_Cancel01Icon } from \"@hugeicons/core-free-icons\";\nimport { IconButton } from \"../icon-button/icon-button.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_COMPARE_GRID_VARIANTS = {\n divider: {\n hairline: { classes: \"hairline-l\" },\n none: { classes: \"\" },\n },\n} as const;\nexport const KAESO_COMPARE_GRID_DEFAULT_VARIANTS = { divider: \"hairline\" } as const;\n\ninterface GridContext {\n index: number;\n count: number;\n divider: keyof typeof KAESO_COMPARE_GRID_VARIANTS.divider;\n add: ReactNode;\n}\nconst ColumnContext = /* @__PURE__ */ createContext<GridContext>({ index: 0, count: 1, divider: \"hairline\", add: null });\n\nexport interface CompareGridProps {\n children: ReactNode;\n \"aria-label\": string;\n onAdd?: (() => void) | undefined;\n addLabel?: string | undefined;\n max?: number | undefined;\n active?: number | undefined;\n onActiveChange?: ((index: number) => void) | undefined;\n divider?: keyof typeof KAESO_COMPARE_GRID_VARIANTS.divider | undefined;\n className?: string | undefined;\n}\n\nconst Root = /* @__PURE__ */ forwardRef<HTMLDivElement, CompareGridProps>(function CompareGrid(\n { children, \"aria-label\": ariaLabel, onAdd, addLabel, max = 4, active, onActiveChange, divider = \"hairline\", className },\n ref,\n) {\n const t = useUiText();\n const columns = Children.toArray(children).filter(isValidElement) as ReactElement<CompareColumnProps>[];\n const count = columns.length;\n const scroller = useRef<HTMLDivElement | null>(null);\n const [current, setCurrent] = useState(0);\n const shown = Math.min(active ?? current, Math.max(0, count - 1));\n const target = useRef<number | null>(null);\n const changed = useRef(onActiveChange);\n useLayoutEffect(() => {\n changed.current = onActiveChange;\n });\n\n const scrollTo = useCallback((i: number) => {\n const el = scroller.current?.children[i] as HTMLElement | undefined;\n const box = scroller.current;\n if (!el || !box) return;\n target.current = box.scrollLeft === el.offsetLeft ? null : i;\n const reduce = typeof matchMedia === \"function\" && matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n box.scrollTo({ left: el.offsetLeft, behavior: reduce ? \"auto\" : \"smooth\" });\n }, []);\n const go = (i: number) => {\n const next = Math.max(0, Math.min(count - 1, i));\n setCurrent(next);\n onActiveChange?.(next);\n scrollTo(next);\n };\n useEffect(() => {\n if (active !== undefined) scrollTo(active);\n }, [active, scrollTo]);\n const before = useRef(count);\n useLayoutEffect(() => {\n if (count > before.current) {\n setCurrent(count - 1);\n changed.current?.(count - 1);\n scrollTo(count - 1);\n }\n before.current = count;\n }, [count, scrollTo]);\n\n const fade = useCallback(() => {\n const box = scroller.current;\n if (!box) return;\n const end = box.scrollWidth - box.clientWidth - box.scrollLeft;\n box.style.setProperty(\"--k-fade-start\", box.scrollLeft > 1 ? \"24px\" : \"0px\");\n box.style.setProperty(\"--k-fade-end\", end > 1 ? \"24px\" : \"0px\");\n }, []);\n useLayoutEffect(() => {\n const box = scroller.current;\n if (!box || typeof ResizeObserver === \"undefined\") return;\n fade();\n const ro = new ResizeObserver(fade);\n ro.observe(box);\n return () => ro.disconnect();\n }, [fade, count]);\n\n const onScroll = () => {\n fade();\n const box = scroller.current;\n const first = box?.children[0] as HTMLElement | undefined;\n if (!box || !first || !first.offsetWidth) return;\n const i = Math.max(0, Math.min(count - 1, Math.round(box.scrollLeft / first.offsetWidth)));\n if (target.current !== null) {\n if (i !== target.current) return;\n target.current = null;\n }\n if (i !== shown) {\n setCurrent(i);\n onActiveChange?.(i);\n }\n };\n\n const release = () => {\n target.current = null;\n };\n\n const full = count >= max;\n const add = onAdd ? (\n <IconButton\n icon={__icon_Add01Icon}\n aria-label={addLabel ?? t(\"compareGrid.addModel\", \"Add model\")}\n size=\"sm\"\n onClick={onAdd}\n disabled={full}\n {...(full ? { disabledReason: t(\"compareGrid.compareUpTo\", \"Compare up to {max} at once\", { max }) } : {})}\n />\n ) : null;\n const label = columns[shown]?.props.label ?? \"\";\n\n return (\n <div ref={ref} role=\"group\" aria-label={ariaLabel} className={cn(\"flex h-full min-h-0 min-w-0 flex-col\", className)}>\n {count > 1 || onAdd ? (\n <div className=\"flex h-44 shrink-0 items-center gap-4 px-24 hairline-b md:hidden\">\n <IconButton\n icon={__icon_ArrowLeft01Icon}\n aria-label={t(\"compareGrid.previousColumn\", \"Previous column\")}\n size=\"sm\"\n disabled={shown === 0}\n onClick={() => go(shown - 1)}\n />\n <span aria-live=\"polite\" className=\"min-w-0 flex-1 truncate text-center text-small text-fg-secondary tabular\">\n <span className=\"sr-only\">{t(\"compareGrid.columnName\", \"{label}, \", { label })}</span>\n {t(\"compareGrid.position\", \"{index} of {count}\", { index: shown + 1, count })}\n </span>\n <IconButton\n icon={__icon_ArrowRight01Icon}\n aria-label={t(\"compareGrid.nextColumn\", \"Next column\")}\n size=\"sm\"\n disabled={shown >= count - 1}\n onClick={() => go(shown + 1)}\n />\n {add}\n </div>\n ) : null}\n <div\n ref={scroller}\n onScroll={onScroll}\n onPointerDown={release}\n onWheel={release}\n onTouchStart={release}\n onKeyDown={release}\n className=\"relative min-h-0 min-w-0 flex-1 compare-grid\"\n >\n {columns.map((col, i) => (\n <ColumnContext.Provider key={col.key ?? i} value={{ index: i, count, divider, add: i === count - 1 ? add : null }}>\n {col}\n </ColumnContext.Provider>\n ))}\n </div>\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Root.displayName = \"CompareGrid\";\n\nexport interface CompareColumnProps {\n label: string;\n header: ReactNode;\n actions?: ReactNode | undefined;\n children?: ReactNode | undefined;\n footer?: ReactNode | undefined;\n onRemove?: (() => void) | undefined;\n removeLabel?: string | undefined;\n stickToEnd?: boolean | undefined;\n className?: string | undefined;\n}\n\nfunction useStickToEnd(enabled: boolean) {\n const body = useRef<HTMLDivElement | null>(null);\n const content = useRef<HTMLDivElement | null>(null);\n const pinned = useRef(true);\n useEffect(() => {\n const el = body.current;\n const inner = content.current;\n if (!enabled || !el || !inner || typeof ResizeObserver === \"undefined\") return;\n let last = el.scrollTop;\n const fade = () => {\n el.style.setProperty(\"--scroll-area-overflow-y-start\", `${Math.max(0, el.scrollTop)}px`);\n el.style.setProperty(\"--scroll-area-overflow-y-end\", `${Math.max(0, el.scrollHeight - el.clientHeight - el.scrollTop)}px`);\n };\n const onScroll = () => {\n fade();\n const near = el.scrollHeight - el.scrollTop - el.clientHeight <= 24;\n pinned.current = el.scrollTop < last - 1 ? near : pinned.current || near;\n last = el.scrollTop;\n };\n const ro = new ResizeObserver(() => {\n if (pinned.current) {\n el.scrollTop = el.scrollHeight;\n last = el.scrollTop;\n }\n fade();\n });\n el.addEventListener(\"scroll\", onScroll, { passive: true });\n ro.observe(inner);\n ro.observe(el);\n return () => {\n el.removeEventListener(\"scroll\", onScroll);\n ro.disconnect();\n };\n }, [enabled]);\n return { body, content };\n}\n\nconst Column = /* @__PURE__ */ forwardRef<HTMLElement, CompareColumnProps>(function CompareGridColumn(\n { label, header, actions, children, footer, onRemove, removeLabel, stickToEnd = true, className },\n ref,\n) {\n const t = useUiText();\n const { index, count, divider, add } = useContext(ColumnContext);\n const { body, content } = useStickToEnd(stickToEnd);\n return (\n <section\n ref={ref}\n aria-label={label}\n className={cn(\n \"row-span-3 grid min-h-0 min-w-0 snap-start snap-always grid-rows-subgrid\",\n index > 0 && KAESO_COMPARE_GRID_VARIANTS.divider[divider].classes,\n className,\n )}\n >\n <header className=\"flex h-52 min-w-0 items-center gap-4 px-24 hairline-b\">\n <div className=\"flex min-w-0 flex-1 items-center\">{header}</div>\n {actions}\n {onRemove && count > 1 && (\n <IconButton icon={__icon_Cancel01Icon} aria-label={removeLabel ?? t(\"compareGrid.remove\", \"Remove {label}\", { label })} size=\"sm\" onClick={onRemove} />\n )}\n {add && <span className=\"hidden md:contents\">{add}</span>}\n </header>\n <div\n ref={body}\n tabIndex={0}\n aria-label={t(\"compareGrid.thread\", \"{label} thread\", { label })}\n role=\"region\"\n className=\"relative min-h-0 overflow-y-auto overscroll-contain scrollbar-quiet scroll-fade-y focus-ring-inset\"\n >\n <div ref={content} className=\"flex min-h-full flex-col px-24 pt-16 pb-24\">\n {children}\n </div>\n </div>\n {footer !== undefined && footer !== null && (\n <footer className=\"flex min-h-44 min-w-0 items-start px-24 pt-12 pb-12\">\n <div className=\"min-w-0 px-12\">{footer}</div>\n </footer>\n )}\n </section>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Column.displayName = \"CompareGrid.Column\";\n\nexport const CompareGrid = /* @__PURE__ */ Object.assign(Root, { Column });\n","import { forwardRef, type ReactNode } from \"react\";\nimport { Collapsible as BaseCollapsible } from \"@base-ui/react/collapsible\";\nimport { cn } from \"../../utils/cn.js\";\nimport { ArrowRight01Icon as __icon_ArrowRight01Icon } from \"@hugeicons/core-free-icons\";\nimport { formatDuration } from \"../../format/index.js\";\nimport { Icon } from \"../icon/icon.js\";\nimport { Markdown } from \"../markdown/markdown.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_REASONING_VARIANTS = {\n state: {\n done: { classes: \"\" },\n live: { classes: \"\" },\n },\n} as const;\nexport const KAESO_REASONING_DEFAULT_VARIANTS = { state: \"done\" } as const;\n\nexport interface ReasoningProps {\n text?: string | undefined;\n live?: boolean | undefined;\n duration?: number | undefined;\n title?: ReactNode | undefined;\n hint?: ReactNode | undefined;\n open?: boolean | undefined;\n defaultOpen?: boolean | undefined;\n onOpenChange?: ((open: boolean) => void) | undefined;\n children?: ReactNode | undefined;\n className?: string | undefined;\n}\n\nfunction lastLine(text: string) {\n const lines = text.trim().split(\"\\n\");\n for (let i = lines.length - 1; i >= 0; i--) {\n const l = (lines[i] ?? \"\").replace(/[*_`#>]+/g, \"\").trim();\n if (l) return l;\n }\n return \"\";\n}\n\nexport const Reasoning = /* @__PURE__ */ forwardRef<HTMLDivElement, ReasoningProps>(function Reasoning(\n { text = \"\", live = false, duration, title, hint, open, defaultOpen, onOpenChange, children, className },\n ref,\n) {\n const t = useUiText();\n const preview = hint ?? (live ? lastLine(text) : \"\");\n const heading =\n title ??\n (!live && duration !== undefined\n ? t(\"responseView.thoughtFor\", \"Thought for {duration}\", { duration: formatDuration(duration) })\n : t(\"responseView.thinking\", \"Thinking\"));\n return (\n <BaseCollapsible.Root\n ref={ref}\n {...(open !== undefined ? { open } : {})}\n {...(defaultOpen !== undefined ? { defaultOpen } : {})}\n {...(onOpenChange ? { onOpenChange: (o: boolean) => onOpenChange(o) } : {})}\n className={cn(\"flex min-w-0 flex-col\", className)}\n >\n <BaseCollapsible.Trigger className=\"group/think flex h-32 min-w-0 cursor-pointer items-center gap-6 rounded-pill px-12 text-left text-small text-fg-secondary transition-control hover:bg-fill-1 hover:text-fg focus-ring-inset\">\n <span className={cn(\"shrink-0 font-medium\", live && \"animate-pulse-quiet reduced:animate-none\")}>{heading}</span>\n <Icon\n icon={__icon_ArrowRight01Icon}\n size=\"xs\"\n className=\"shrink-0 text-fg-tertiary transition-transform duration-180 ease-overlay group-data-panel-open/think:rotate-90\"\n />\n <span aria-hidden={hint === undefined} className=\"min-w-0 flex-1 truncate text-fg-tertiary group-data-panel-open/think:invisible\">\n {preview}\n </span>\n </BaseCollapsible.Trigger>\n <BaseCollapsible.Panel className=\"collapse-motion\">\n <div className=\"flex gap-12 pt-4 pb-8 pl-12\">\n <span aria-hidden className=\"w-1 shrink-0 rounded-pill bg-line\" />\n {children ?? <Markdown text={text} size=\"small\" tone=\"secondary\" streaming={live} collapseAfter={0} wrapCode className=\"min-w-0 flex-1\" />}\n </div>\n </BaseCollapsible.Panel>\n </BaseCollapsible.Root>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Reasoning.displayName = \"Reasoning\";\n","import { forwardRef, useId, useRef, useState, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { Button } from \"../button/button.js\";\nimport { Markdown } from \"../markdown/markdown.js\";\nimport { Reasoning } from \"./reasoning.js\";\nimport { useTruncated } from \"../../hooks/use-truncated.js\";\nimport { useUiText, type UiText } from \"../../i18n/context.js\";\n\nexport const KAESO_RESPONSE_VIEW_VARIANTS = {\n status: {\n pending: { classes: \"\" },\n streaming: { classes: \"\" },\n done: { classes: \"\" },\n stopped: { classes: \"\" },\n incomplete: { classes: \"\" },\n error: { classes: \"\" },\n },\n} as const;\nexport const KAESO_RESPONSE_VIEW_DEFAULT_VARIANTS = { status: \"done\" } as const;\n\nexport type ResponseStatus = keyof typeof KAESO_RESPONSE_VIEW_VARIANTS.status;\n\nexport interface ResponseViewProps {\n text?: string | undefined;\n reasoning?: string | undefined;\n status?: ResponseStatus | undefined;\n reasoningDuration?: number | undefined;\n reasoningOpen?: boolean | undefined;\n defaultReasoningOpen?: boolean | undefined;\n onReasoningOpenChange?: ((open: boolean) => void) | undefined;\n incompleteReason?: string | undefined;\n error?: string | undefined;\n onRetry?: (() => void) | undefined;\n footer?: ReactNode | undefined;\n \"aria-label\"?: string | undefined;\n className?: string | undefined;\n}\n\nfunction incompleteText(t: UiText, reason: string | undefined): string {\n if (reason === \"max_output_tokens\") return t(\"responseView.outputLimit\", \"Stopped at the output limit\");\n if (reason === \"content_filter\") return t(\"responseView.contentFilter\", \"Stopped by the provider's content filter\");\n return t(\"responseView.incomplete\", \"The model ended the response early\");\n}\n\nexport const ResponseView = /* @__PURE__ */ forwardRef<HTMLElement, ResponseViewProps>(function ResponseView(\n {\n text = \"\",\n reasoning,\n status = \"done\",\n reasoningDuration,\n reasoningOpen,\n defaultReasoningOpen,\n onReasoningOpenChange,\n incompleteReason,\n error,\n onRetry,\n footer,\n \"aria-label\": ariaLabelProp,\n className,\n },\n ref,\n) {\n const t = useUiText();\n const ariaLabel = ariaLabelProp ?? t(\"responseView.response\", \"Response\");\n const announce = useId();\n const active = status === \"pending\" || status === \"streaming\";\n const hasText = text.trim() !== \"\";\n const hasReasoning = !!reasoning && reasoning.trim() !== \"\";\n const thinking = active && hasReasoning && !hasText;\n return (\n <article\n ref={ref}\n aria-label={ariaLabel}\n aria-busy={active || undefined}\n aria-describedby={announce}\n className={cn(\"flex min-w-0 flex-col gap-8\", className)}\n >\n {hasReasoning && (\n <Reasoning\n text={reasoning}\n live={thinking}\n duration={reasoningDuration}\n open={reasoningOpen}\n defaultOpen={defaultReasoningOpen}\n onOpenChange={onReasoningOpenChange}\n />\n )}\n {hasText ? (\n <Markdown text={text} size=\"lg\" streaming={active} collapseAfter={0} wrapCode className=\"px-12\" />\n ) : active && !hasReasoning ? (\n <div aria-hidden className=\"h-22 px-12\" />\n ) : null}\n {status === \"stopped\" && (\n <div className=\"flex min-h-24 flex-wrap items-center gap-x-12 gap-y-4 px-12\">\n <span className=\"text-small text-fg-tertiary\">\n {hasText ? t(\"responseView.stopped\", \"Stopped\") : t(\"responseView.stoppedBeforeResponse\", \"Stopped before a response\")}\n </span>\n {onRetry && (\n <Button size=\"xs\" variant=\"ghost\" onClick={onRetry}>\n {t(\"responseView.retry\", \"Retry\")}\n </Button>\n )}\n </div>\n )}\n {status === \"incomplete\" && (\n <div className=\"flex min-h-24 flex-wrap items-center gap-x-12 gap-y-4 px-12\">\n <span className=\"text-small text-fg-secondary\">{incompleteText(t, incompleteReason)}</span>\n {onRetry && (\n <Button size=\"xs\" variant=\"ghost\" onClick={onRetry}>\n {t(\"responseView.retry\", \"Retry\")}\n </Button>\n )}\n </div>\n )}\n {status === \"error\" && (\n <div role=\"alert\" className=\"flex min-h-24 flex-col items-start gap-4 px-12\">\n <span className=\"text-small font-medium text-fg\">\n {hasText ? t(\"responseView.stoppedEarly\", \"The response stopped early\") : t(\"responseView.noResponse\", \"No response\")}\n </span>\n {error && <Markdown text={error} size=\"small\" tone=\"secondary\" className=\"max-w-prose min-w-0\" />}\n {onRetry && (\n <Button size=\"xs\" variant=\"secondary\" onClick={onRetry} className=\"mt-4\">\n {t(\"responseView.retry\", \"Retry\")}\n </Button>\n )}\n </div>\n )}\n {status === \"done\" && !hasText && <span className=\"px-12 text-small text-fg-tertiary\">{t(\"responseView.noText\", \"The model returned no text\")}</span>}\n {footer}\n <span id={announce} className=\"sr-only\">\n {status === \"pending\"\n ? t(\"responseView.waiting\", \"Waiting for the response\")\n : status === \"streaming\"\n ? t(\"responseView.responding\", \"Responding\")\n : \"\"}\n </span>\n </article>\n );\n});\nif (process.env.NODE_ENV !== \"production\") ResponseView.displayName = \"ResponseView\";\n\nexport interface UserMessageProps {\n children: ReactNode;\n maxLines?: 0 | 2 | 3 | 4 | 6 | undefined;\n \"aria-label\"?: string | undefined;\n className?: string | undefined;\n}\n\nconst CLAMP = { 2: \"line-clamp-2\", 3: \"line-clamp-3\", 4: \"line-clamp-4\", 6: \"line-clamp-6\" } as const;\n\nexport const UserMessage = /* @__PURE__ */ forwardRef<HTMLDivElement, UserMessageProps>(function UserMessage(\n { children, maxLines = 4, \"aria-label\": ariaLabelProp, className },\n ref,\n) {\n const t = useUiText();\n const ariaLabel = ariaLabelProp ?? t(\"userMessage.prompt\", \"Prompt\");\n const showAll = t(\"userMessage.showAll\", \"Show all\");\n const showLess = t(\"userMessage.showLess\", \"Show less\");\n const [all, setAll] = useState(false);\n const text = useRef<HTMLParagraphElement | null>(null);\n const clamped = useTruncated(text, maxLines > 0 && !all);\n return (\n <div ref={ref} role=\"group\" aria-label={ariaLabel} className={cn(\"flex min-w-0 flex-col items-start gap-2 px-12\", className)}>\n <p\n ref={text}\n className={cn(\n \"max-w-prose min-w-0 text-body font-medium whitespace-pre-wrap wrap-break-word text-fg-secondary\",\n maxLines !== 0 && !all && CLAMP[maxLines],\n )}\n >\n {children}\n </p>\n {(clamped || all) && (\n <Button size=\"xs\" variant=\"link\" reserveLabels={[showAll, showLess]} onClick={() => setAll((a) => !a)} className=\"text-fg-tertiary\">\n {all ? showLess : showAll}\n </Button>\n )}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") UserMessage.displayName = \"UserMessage\";\n\nexport interface ThreadProps {\n children: ReactNode;\n className?: string | undefined;\n}\n\nexport const Thread = /* @__PURE__ */ forwardRef<HTMLDivElement, ThreadProps>(function Thread({ children, className }, ref) {\n return (\n <div ref={ref} className={cn(\"flex min-w-0 flex-col gap-32\", className)}>\n {children}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Thread.displayName = \"Thread\";\n","import { forwardRef, useEffect, useState, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { formatDuration, formatNumber, formatUSD } from \"../../format/index.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_RESPONSE_METRICS_VARIANTS = {\n size: {\n sm: { classes: \"text-caption gap-x-12 gap-y-2\" },\n md: { classes: \"text-small gap-x-16 gap-y-4\" },\n },\n} as const;\nexport const KAESO_RESPONSE_METRICS_DEFAULT_VARIANTS = { size: \"sm\" } as const;\n\nexport interface ResponseMetricsProps {\n timeToFirstToken?: number | null | undefined;\n duration?: number | null | undefined;\n inputTokens?: number | null | undefined;\n outputTokens?: number | null | undefined;\n reasoningTokens?: number | null | undefined;\n reasoning?: boolean | undefined;\n live?: boolean | undefined;\n startedAt?: number | undefined;\n cost?: string | null | undefined;\n size?: keyof typeof KAESO_RESPONSE_METRICS_VARIANTS.size | undefined;\n className?: string | undefined;\n}\n\nexport function formatLatency(ms: number): string {\n if (!Number.isFinite(ms) || ms < 0) return \"—\";\n return formatDuration(ms, { precise: true });\n}\n\nfunction useElapsed(from: number | undefined) {\n const [now, setNow] = useState(() => Date.now());\n useEffect(() => {\n if (from === undefined) return;\n setNow(Date.now());\n const id = setInterval(() => setNow(Date.now()), 100);\n return () => clearInterval(id);\n }, [from]);\n return from === undefined ? undefined : Math.max(0, now - from);\n}\n\nfunction requestCost(amount: string): string {\n return /[1-9]/.test(amount) ? formatUSD(amount, { decimals: 6 }) : formatUSD(\"0\", { decimals: 0 });\n}\n\nfunction known(n: number | null | undefined): n is number {\n return typeof n === \"number\" && Number.isFinite(n);\n}\n\nfunction Item({ label, width, children }: { label: string; width: string; children: ReactNode }) {\n return (\n <div className=\"flex items-baseline gap-4 whitespace-nowrap\">\n <dt className=\"text-fg-tertiary\">{label}</dt>\n <dd className={cn(\"text-fg-secondary tabular\", width)}>{children}</dd>\n </div>\n );\n}\n\nexport const ResponseMetrics = /* @__PURE__ */ forwardRef<HTMLDListElement, ResponseMetricsProps>(function ResponseMetrics(\n { timeToFirstToken, duration, inputTokens, outputTokens, reasoningTokens, reasoning, live = false, startedAt, cost, size = \"sm\", className },\n ref,\n) {\n const t = useUiText();\n const counting = live && startedAt !== undefined && !known(duration);\n const elapsed = useElapsed(counting ? startedAt : undefined);\n const tokens = known(inputTokens) || known(outputTokens);\n const hasCost = cost != null && cost !== \"\";\n const line = cn(\"flex min-w-0 flex-wrap items-baseline\", KAESO_RESPONSE_METRICS_VARIANTS.size[size].classes, className);\n if (!live && !tokens && !hasCost && !known(timeToFirstToken) && !known(duration) && !known(reasoningTokens)) {\n return <dl ref={ref} aria-label={t(\"responseMetrics.metrics\", \"Metrics\")} className={cn(line, size === \"sm\" ? \"min-h-16\" : \"min-h-18\")} />;\n }\n const show = (value: boolean) => live || value;\n const dash = (\n <span className=\"text-fg-tertiary\">\n <span aria-hidden>—</span>\n <span className=\"sr-only\">{t(\"responseMetrics.notYetKnown\", \"not yet known\")}</span>\n </span>\n );\n return (\n <dl ref={ref} aria-label={t(\"responseMetrics.metrics\", \"Metrics\")} className={line}>\n {show(known(timeToFirstToken)) && (\n <Item label={t(\"responseMetrics.firstToken\", \"First token\")} width=\"min-w-40\">\n {known(timeToFirstToken) ? formatLatency(timeToFirstToken) : dash}\n </Item>\n )}\n {show(known(duration)) && (\n <Item label={t(\"responseMetrics.total\", \"Total\")} width=\"min-w-40\">\n {known(duration) ? formatLatency(duration) : elapsed !== undefined ? <span className=\"text-fg-tertiary\">{formatLatency(elapsed)}</span> : dash}\n </Item>\n )}\n {show(tokens) && (\n <Item label={t(\"responseMetrics.tokens\", \"Tokens\")} width=\"min-w-48\">\n {tokens\n ? t(\"responseMetrics.tokensValue\", \"{input} in · {output} out\", {\n input: known(inputTokens) ? formatNumber(inputTokens) : \"—\",\n output: known(outputTokens) ? formatNumber(outputTokens) : \"—\",\n })\n : dash}\n </Item>\n )}\n {(known(reasoningTokens) || (live && reasoning)) && (\n <Item label={t(\"responseMetrics.reasoning\", \"Reasoning\")} width=\"min-w-24\">\n {known(reasoningTokens) ? formatNumber(reasoningTokens) : dash}\n </Item>\n )}\n {show(hasCost) && (\n <Item label={t(\"responseMetrics.cost\", \"Cost\")} width=\"min-w-40\">\n {hasCost ? requestCost(cost) : dash}\n </Item>\n )}\n </dl>\n );\n});\nif (process.env.NODE_ENV !== \"production\") ResponseMetrics.displayName = \"ResponseMetrics\";\n","import { forwardRef, useId, type ReactElement } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { SlidersHorizontalIcon as __icon_SlidersHorizontalIcon } from \"@hugeicons/core-free-icons\";\nimport { formatNumber } from \"../../format/index.js\";\nimport { Button } from \"../button/button.js\";\nimport { IconButton } from \"../icon-button/icon-button.js\";\nimport { NumberInput } from \"../input/number-input.js\";\nimport { Textarea } from \"../input/textarea.js\";\nimport { Popover } from \"../popover/popover.js\";\nimport { Segmented } from \"../segmented/segmented.js\";\nimport { Select } from \"../select/select.js\";\nimport { Slider } from \"../slider/slider.js\";\nimport { useUiText, type UiText } from \"../../i18n/context.js\";\n\nexport const KAESO_PARAMETER_PANEL_VARIANTS = {\n layout: {\n popover: { classes: \"w-full gap-20\" },\n panel: { classes: \"w-full gap-24\" },\n },\n} as const;\nexport const KAESO_PARAMETER_PANEL_DEFAULT_VARIANTS = { layout: \"popover\" } as const;\n\nexport type ReasoningEffort = \"none\" | \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\";\nexport type ReasoningSummary = \"auto\" | \"concise\" | \"detailed\" | \"off\";\n\nexport interface PlaygroundParameters {\n instructions?: string | undefined;\n temperature?: number | undefined;\n topP?: number | undefined;\n maxOutputTokens?: number | undefined;\n reasoningEffort?: ReasoningEffort | undefined;\n reasoningSummary?: ReasoningSummary | undefined;\n}\n\nfunction efforts(t: UiText): { value: ReasoningEffort; label: string }[] {\n return [\n { value: \"none\", label: t(\"parameterPanel.effortNone\", \"None\") },\n { value: \"minimal\", label: t(\"parameterPanel.effortMinimal\", \"Minimal\") },\n { value: \"low\", label: t(\"parameterPanel.effortLow\", \"Low\") },\n { value: \"medium\", label: t(\"parameterPanel.effortMedium\", \"Medium\") },\n { value: \"high\", label: t(\"parameterPanel.effortHigh\", \"High\") },\n { value: \"xhigh\", label: t(\"parameterPanel.effortExtraHigh\", \"Extra high\") },\n { value: \"max\", label: t(\"parameterPanel.effortMax\", \"Max\") },\n ];\n}\n\nexport interface ParameterPanelProps {\n value: PlaygroundParameters;\n onValueChange: (next: PlaygroundParameters) => void;\n defaults?: Pick<PlaygroundParameters, \"temperature\" | \"topP\"> | undefined;\n instructions?: boolean | undefined;\n sampling?: boolean | undefined;\n reasoning?: ReasoningEffort[] | boolean | undefined;\n maxOutputTokensLimit?: number | undefined;\n disabled?: boolean | undefined;\n layout?: keyof typeof KAESO_PARAMETER_PANEL_VARIANTS.layout | undefined;\n className?: string | undefined;\n}\n\nfunction SliderRow({\n label,\n value,\n unset,\n min,\n max,\n step,\n digits,\n disabled,\n onChange,\n}: {\n label: string;\n value: number;\n unset: boolean;\n min: number;\n max: number;\n step: number;\n digits: number;\n disabled: boolean;\n onChange: (v: number) => void;\n}) {\n const id = useId();\n const t = useUiText();\n const shown = formatNumber(value, { minimumFractionDigits: digits, maximumFractionDigits: digits });\n return (\n <div className=\"flex flex-col gap-8\">\n <div className=\"flex items-baseline justify-between gap-12\">\n <span id={id} className={cn(\"text-body font-medium\", disabled ? \"text-fg-disabled\" : \"text-fg\")}>\n {label}\n </span>\n <span className={cn(\"text-small tabular\", unset ? \"text-fg-tertiary\" : \"text-fg-secondary\")}>\n {unset ? t(\"parameterPanel.valueDefault\", \"{value} default\", { value: shown }) : shown}\n </span>\n </div>\n <div className=\"px-8\">\n <Slider\n aria-label={label}\n min={min}\n max={max}\n step={step}\n value={value}\n disabled={disabled}\n formatValue={(v) => formatNumber(v, { minimumFractionDigits: digits, maximumFractionDigits: digits })}\n onValueChange={(v) => onChange(Array.isArray(v) ? (v[0] ?? min) : v)}\n />\n </div>\n </div>\n );\n}\n\nexport const ParameterPanel = /* @__PURE__ */ forwardRef<HTMLDivElement, ParameterPanelProps>(function ParameterPanel(\n {\n value,\n onValueChange,\n defaults,\n instructions = true,\n sampling = true,\n reasoning = false,\n maxOutputTokensLimit,\n disabled = false,\n layout = \"popover\",\n className,\n },\n ref,\n) {\n const t = useUiText();\n const set = (patch: Partial<PlaygroundParameters>) => onValueChange({ ...value, ...patch });\n const all = efforts(t);\n const shownEfforts = reasoning === true ? all : Array.isArray(reasoning) ? all.filter((e) => reasoning.includes(e.value)) : [];\n const changed =\n value.temperature !== undefined ||\n value.topP !== undefined ||\n value.maxOutputTokens !== undefined ||\n value.reasoningEffort !== undefined ||\n value.reasoningSummary !== undefined;\n return (\n <div ref={ref} className={cn(\"flex min-w-0 flex-col\", KAESO_PARAMETER_PANEL_VARIANTS.layout[layout].classes, className)}>\n {instructions && (\n <Textarea\n label={t(\"parameterPanel.systemInstructions\", \"System instructions\")}\n rows={3}\n maxRows={8}\n placeholder={t(\"parameterPanel.instructionsPlaceholder\", \"You are a helpful assistant.\")}\n value={value.instructions ?? \"\"}\n disabled={disabled}\n onChange={(e) => set({ instructions: e.target.value === \"\" ? undefined : e.target.value })}\n />\n )}\n {sampling && (\n <>\n <SliderRow\n label={t(\"parameterPanel.temperature\", \"Temperature\")}\n value={value.temperature ?? defaults?.temperature ?? 1}\n unset={value.temperature === undefined}\n min={0}\n max={2}\n step={0.05}\n digits={2}\n disabled={disabled}\n onChange={(v) => set({ temperature: v })}\n />\n <SliderRow\n label={t(\"parameterPanel.topP\", \"Top P\")}\n value={value.topP ?? defaults?.topP ?? 1}\n unset={value.topP === undefined}\n min={0}\n max={1}\n step={0.01}\n digits={2}\n disabled={disabled}\n onChange={(v) => set({ topP: v })}\n />\n </>\n )}\n <NumberInput\n label={t(\"parameterPanel.maxOutputTokens\", \"Max output tokens\")}\n size=\"sm\"\n placeholder={t(\"parameterPanel.modelDefault\", \"Model default\")}\n align=\"start\"\n min=\"1\"\n {...(maxOutputTokensLimit ? { max: String(maxOutputTokensLimit) } : {})}\n step=\"256\"\n value={value.maxOutputTokens === undefined ? \"\" : String(value.maxOutputTokens)}\n disabled={disabled}\n onValueChange={(v) => {\n const n = Number(v);\n set({ maxOutputTokens: v.trim() === \"\" || !Number.isFinite(n) || n <= 0 ? undefined : Math.round(n) });\n }}\n />\n {shownEfforts.length > 0 && (\n <>\n <Select\n label={t(\"parameterPanel.reasoningEffort\", \"Reasoning effort\")}\n size=\"sm\"\n fullWidth\n disabled={disabled}\n value={value.reasoningEffort ?? \"default\"}\n options={[{ value: \"default\", label: t(\"parameterPanel.modelDefault\", \"Model default\") }, ...shownEfforts]}\n onValueChange={(v: string) => set({ reasoningEffort: v === \"default\" ? undefined : (v as ReasoningEffort) })}\n />\n <div className=\"flex flex-col gap-8\">\n <span className={cn(\"text-body font-medium\", disabled ? \"text-fg-disabled\" : \"text-fg\")}>\n {t(\"parameterPanel.reasoningSummary\", \"Reasoning summary\")}\n </span>\n <Segmented\n aria-label={t(\"parameterPanel.reasoningSummary\", \"Reasoning summary\")}\n size=\"sm\"\n fullWidth\n disabled={disabled}\n value={value.reasoningSummary ?? \"auto\"}\n options={[\n { value: \"auto\", label: t(\"parameterPanel.summaryAuto\", \"Auto\") },\n { value: \"concise\", label: t(\"parameterPanel.summaryConcise\", \"Concise\") },\n { value: \"detailed\", label: t(\"parameterPanel.summaryDetailed\", \"Detailed\") },\n { value: \"off\", label: t(\"parameterPanel.summaryOff\", \"Off\") },\n ]}\n onValueChange={(v) => set({ reasoningSummary: v === \"auto\" ? undefined : (v as ReasoningSummary) })}\n />\n </div>\n </>\n )}\n <div className=\"flex justify-end\">\n <Button\n size=\"sm\"\n variant=\"ghost\"\n disabled={disabled || !changed}\n onClick={() => onValueChange(value.instructions !== undefined ? { instructions: value.instructions } : {})}\n >\n {t(\"parameterPanel.resetToDefaults\", \"Reset to defaults\")}\n </Button>\n </div>\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") ParameterPanel.displayName = \"ParameterPanel\";\n\nexport interface ParameterPopoverProps extends Omit<ParameterPanelProps, \"layout\" | \"className\"> {\n trigger?: ReactElement | undefined;\n title?: string | undefined;\n open?: boolean | undefined;\n defaultOpen?: boolean | undefined;\n onOpenChange?: ((open: boolean) => void) | undefined;\n side?: \"top\" | \"bottom\" | \"left\" | \"right\" | undefined;\n align?: \"start\" | \"center\" | \"end\" | undefined;\n}\n\nexport function ParameterPopover({\n trigger,\n title: titleProp,\n open,\n defaultOpen,\n onOpenChange,\n side = \"bottom\",\n align = \"end\",\n ...panel\n}: ParameterPopoverProps) {\n const t = useUiText();\n const title = titleProp ?? t(\"parameterPopover.parameters\", \"Parameters\");\n return (\n <Popover\n trapFocus\n {...(open !== undefined ? { open } : {})}\n {...(defaultOpen !== undefined ? { defaultOpen } : {})}\n {...(onOpenChange ? { onOpenChange } : {})}\n >\n <Popover.Trigger>{trigger ?? <IconButton icon={__icon_SlidersHorizontalIcon} aria-label={title} size=\"sm\" />}</Popover.Trigger>\n <Popover.Content title={title} side={side} align={align} className=\"w-320 max-w-(--available-width)\">\n <ParameterPanel {...panel} />\n </Popover.Content>\n </Popover>\n );\n}\nif (process.env.NODE_ENV !== \"production\") ParameterPopover.displayName = \"ParameterPopover\";\n","import { forwardRef, useCallback, useMemo, useState, type ReactNode } from \"react\";\nimport { useLocale, useUiText } from \"../../i18n/context.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport { formatContext, formatNumber } from \"../../format/index.js\";\nimport { CommandList, type CommandListGroup, type CommandListItem } from \"../command-list/command-list.js\";\nimport { PickerPopover, PickerTrigger } from \"../command-list/picker-popover.js\";\nimport { Highlight } from \"../combobox/combobox.js\";\nimport { Switch } from \"../switch/switch.js\";\nimport { KAESO_SELECT_VARIANTS, Select } from \"../select/select.js\";\nimport { commandMatch } from \"../command-list/match.js\";\nimport { useField, useFieldControl, withField, type FieldWrapProps } from \"../field/field.js\";\nimport { CapabilityIcons, ModelLabel, ProviderBadge, providerName, type Capability } from \"../kaeso/identity.js\";\n\nconst SELECT_APPEARANCE = { ghost: \"header\", default: \"default\" } as const;\n\nexport const KAESO_MODEL_PICKER_VARIANTS = {\n appearance: {\n ghost: { classes: KAESO_SELECT_VARIANTS.appearance.header.classes },\n default: { classes: KAESO_SELECT_VARIANTS.appearance.default.classes },\n },\n} as const;\nexport const KAESO_MODEL_PICKER_DEFAULT_VARIANTS = { appearance: \"ghost\" } as const;\n\nexport interface ModelPickerOption {\n value: string;\n provider: string;\n model?: string | undefined;\n name?: string | undefined;\n capabilities?: Capability[] | undefined;\n context?: number | undefined;\n price?: string | undefined;\n note?: string | undefined;\n deprecated?: boolean | undefined;\n disabled?: boolean | undefined;\n}\n\nexport interface ModelPickerProvider {\n id: string;\n name?: string | undefined;\n connected?: boolean | undefined;\n}\n\ninterface BaseProps extends FieldWrapProps {\n options: ModelPickerOption[];\n providers?: ModelPickerProvider[] | undefined;\n recent?: readonly string[] | undefined;\n groupByProvider?: boolean | undefined;\n placeholder?: string | undefined;\n \"aria-label\"?: string | undefined;\n appearance?: keyof typeof KAESO_MODEL_PICKER_VARIANTS.appearance | undefined;\n size?: \"sm\" | \"md\" | undefined;\n fullWidth?: boolean | undefined;\n disabled?: boolean | undefined;\n invalid?: boolean | undefined;\n open?: boolean | undefined;\n onOpenChange?: ((open: boolean) => void) | undefined;\n \"data-force\"?: string | undefined;\n className?: string | undefined;\n}\nexport interface SingleModelPickerProps extends BaseProps {\n multiple?: false | undefined;\n allLabel?: string | undefined;\n value?: string | null | undefined;\n defaultValue?: string | null | undefined;\n onValueChange?: ((value: string) => void) | undefined;\n}\nexport interface MultiModelPickerProps extends BaseProps {\n multiple: true;\n value?: string[] | undefined;\n defaultValue?: string[] | undefined;\n onValueChange?: ((value: string[]) => void) | undefined;\n}\nexport type ModelPickerProps = SingleModelPickerProps | MultiModelPickerProps;\n\nconst ALL = \"\";\nconst ALL_PROVIDERS = \"*\";\n\nfunction ModelRow({ option, query, providerLabel }: { option: ModelPickerOption; query: string; providerLabel?: string | undefined }) {\n const model = option.model ?? option.value;\n const details = [option.context ? formatContext(option.context) : \"\", option.price ?? \"\"].filter(Boolean).join(\" · \");\n return (\n <>\n {providerLabel !== undefined && (\n <span aria-hidden className=\"flex\">\n <ProviderBadge provider={option.provider} name={providerLabel} />\n </span>\n )}\n <span className=\"flex min-w-0 flex-1 items-baseline gap-8\">\n <span className=\"min-w-0 shrink truncate\">\n <Highlight text={option.name ?? model} query={query} />\n </span>\n {option.name && option.name !== model && (\n <span className=\"min-w-0 flex-1 truncate mono text-small font-regular text-fg-tertiary\">\n <Highlight text={model} query={query} />\n </span>\n )}\n </span>\n {option.capabilities && option.capabilities.length > 0 && <CapabilityIcons capabilities={option.capabilities} className=\"hidden sm:flex\" />}\n {(option.note ?? details) && (\n <span className={cn(\"shrink-0 text-caption font-regular tabular\", option.note ? \"text-fg-secondary\" : \"hidden text-fg-tertiary sm:inline\")}>\n {option.note ?? details}\n </span>\n )}\n </>\n );\n}\n\nfunction modelItem(o: ModelPickerOption, nameOf: (provider: string) => string, withBadge: boolean): CommandListItem {\n const model = o.model ?? o.value;\n const providerLabel = nameOf(o.provider);\n return {\n value: o.value,\n label: o.name ?? model,\n keywords: [model, providerLabel, o.provider],\n render: ({ query: q }) => <ModelRow option={o} query={q} {...(withBadge ? { providerLabel } : {})} />,\n ...(o.disabled ? { disabled: true } : {}),\n };\n}\n\nfunction modelGroups(options: ModelPickerOption[], providerOrder: string[], grouped: boolean, nameOf: (provider: string) => string): CommandListGroup[] {\n if (!grouped) return [{ id: \"models\", items: options.map((o) => modelItem(o, nameOf, true)) }];\n return providerOrder.flatMap((id) => {\n const models = options.filter((o) => o.provider === id);\n if (!models.length) return [];\n return [\n {\n id: `provider:${id}`,\n label: nameOf(id),\n leading: (\n <span aria-hidden className=\"flex\">\n <ProviderBadge provider={id} name={nameOf(id)} size=\"sm\" />\n </span>\n ),\n count: models.length,\n items: models.map((o) => modelItem(o, nameOf, false)),\n },\n ];\n });\n}\n\nfunction useProviderOrder(options: ModelPickerOption[], providers: ModelPickerProvider[]) {\n const locale = useLocale();\n const provider = useMemo(() => new Map(providers.map((p) => [p.id, p])), [providers]);\n const nameOf = useCallback((id: string) => providerName(id, provider.get(id)?.name), [provider]);\n const providerOrder = useMemo(() => {\n const ids = [...new Set(options.map((o) => o.provider))];\n return ids.sort(\n (a, b) =>\n Number(!!provider.get(b)?.connected) - Number(!!provider.get(a)?.connected) || nameOf(a).localeCompare(nameOf(b), locale, { sensitivity: \"base\" }),\n );\n }, [options, provider, nameOf, locale]);\n return { nameOf, providerOrder };\n}\n\nexport function useModelGroups(\n options: ModelPickerOption[],\n { providers = [], groupByProvider }: { providers?: ModelPickerProvider[] | undefined; groupByProvider?: boolean | undefined } = {},\n): CommandListGroup[] {\n const { nameOf, providerOrder } = useProviderOrder(options, providers);\n const grouped = groupByProvider ?? providerOrder.length > 1;\n return useMemo(() => modelGroups(options, providerOrder, grouped, nameOf), [options, providerOrder, grouped, nameOf]);\n}\n\nexport const ModelPicker = /* @__PURE__ */ forwardRef<HTMLButtonElement, ModelPickerProps>(function ModelPicker(props, ref) {\n const {\n options,\n providers = [],\n recent = [],\n groupByProvider,\n placeholder,\n \"aria-label\": ariaLabel,\n appearance = \"ghost\",\n size = \"sm\",\n fullWidth,\n disabled,\n invalid,\n open: openProp,\n onOpenChange,\n \"data-force\": force,\n className,\n label,\n description,\n error,\n optional,\n required,\n layout,\n } = props;\n const t = useUiText();\n const field = useField();\n const fc = useFieldControl(props);\n const [ownOpen, setOwnOpen] = useState(false);\n const open = openProp ?? ownOpen;\n const setOpen = (o: boolean) => {\n if (openProp === undefined) setOwnOpen(o);\n onOpenChange?.(o);\n };\n const [own, setOwn] = useState<string | string[] | null>(() => props.defaultValue ?? (props.multiple ? [] : null));\n const current = props.value !== undefined ? props.value : own;\n const chosen = Array.isArray(current) ? current : current ? [current] : [];\n const allLabel = props.multiple ? undefined : props.allLabel;\n const [query, setQuery] = useState(\"\");\n const [only, setOnly] = useState<string | null>(null);\n const [showDeprecated, setShowDeprecated] = useState(false);\n const [wasOpen, setWasOpen] = useState(open);\n if (open !== wasOpen) {\n setWasOpen(open);\n if (open) {\n setQuery(\"\");\n setOnly(null);\n }\n }\n\n const byValue = useMemo(() => new Map(options.map((o) => [o.value, o])), [options]);\n const { nameOf, providerOrder } = useProviderOrder(options, providers);\n const grouped = groupByProvider ?? providerOrder.length > 1;\n const hasDeprecated = options.some((o) => o.deprecated && !chosen.includes(o.value));\n\n const chosenKey = chosen.join(\"\\u0000\");\n const groups = useMemo<CommandListGroup[]>(() => {\n const kept = new Set(chosenKey.split(\"\\u0000\"));\n const visible = (o: ModelPickerOption) => (showDeprecated || !o.deprecated || kept.has(o.value)) && (!only || o.provider === only);\n const out: CommandListGroup[] = [];\n if (allLabel && !only) out.push({ id: \"all\", items: [{ value: ALL, label: allLabel }] });\n const recentItems =\n query.trim() || only ? [] : recent.flatMap((v) => (byValue.get(v) && visible(byValue.get(v)!) ? [modelItem(byValue.get(v)!, nameOf, true)] : []));\n if (recentItems.length) out.push({ id: \"recent\", label: t(\"modelPicker.recent\", \"Recent\"), items: recentItems });\n return [...out, ...modelGroups(options.filter(visible), providerOrder, grouped, nameOf)];\n }, [options, providerOrder, grouped, recent, byValue, query, only, showDeprecated, chosenKey, allLabel, t, nameOf]);\n\n const pick = (v: string) => {\n if (props.multiple) {\n const next = chosen.includes(v) ? chosen.filter((x) => x !== v) : [...chosen, v];\n if (props.value === undefined) setOwn(next);\n props.onValueChange?.(next);\n return;\n }\n if (props.value === undefined) setOwn(v === ALL ? null : v);\n props.onValueChange?.(v);\n setOpen(false);\n };\n\n const shownProviders = useMemo(() => {\n const q = query.trim();\n const kept = new Set(chosenKey.split(\"\\u0000\"));\n const counts = new Map<string, number>();\n for (const o of options) {\n if (o.deprecated && !showDeprecated && !kept.has(o.value)) continue;\n const model = o.model ?? o.value;\n if (q && commandMatch(q, [o.name ?? model, model, nameOf(o.provider), o.provider]) <= 0) continue;\n counts.set(o.provider, (counts.get(o.provider) ?? 0) + 1);\n }\n return providerOrder.filter((id) => counts.has(id) || id === only).map((id) => ({ id, count: counts.get(id) ?? 0 }));\n }, [options, providerOrder, query, showDeprecated, chosenKey, only, nameOf]);\n const providerFilter =\n grouped && providerOrder.length > 1 ? (\n <Select\n aria-label={t(\"modelPicker.provider\", \"Provider\")}\n size=\"sm\"\n appearance=\"ghost\"\n value={only ?? ALL_PROVIDERS}\n onValueChange={(v: string) => setOnly(v === ALL_PROVIDERS ? null : v)}\n options={[\n { value: ALL_PROVIDERS, label: t(\"modelPicker.everyProvider\", \"All providers\") },\n ...shownProviders.map(({ id, count }) => ({\n value: id,\n textValue: nameOf(id),\n label: (\n <span className=\"flex min-w-0 items-center gap-8\">\n <span aria-hidden className=\"flex shrink-0\">\n <ProviderBadge provider={id} size=\"sm\" />\n </span>\n <span className=\"min-w-0 truncate\">{nameOf(id)}</span>\n <span className=\"shrink-0 text-fg-tertiary tabular\">{formatNumber(count)}</span>\n </span>\n ),\n })),\n ]}\n />\n ) : null;\n const toolbar =\n providerFilter || hasDeprecated ? (\n <>\n {providerFilter}\n {hasDeprecated && (\n <Switch size=\"sm\" label={t(\"modelPicker.showDeprecated\", \"Deprecated\")} checked={showDeprecated} onCheckedChange={setShowDeprecated} />\n )}\n </>\n ) : undefined;\n\n const first = chosen[0] ? byValue.get(chosen[0]) : undefined;\n const summary = props.multiple ? (\n first ? (\n chosen.length === 1 ? (\n <ModelLabel\n provider={first.provider}\n providerName={nameOf(first.provider)}\n model={first.model ?? first.value}\n {...(first.name ? { name: first.name } : {})}\n />\n ) : (\n t(\"modelPicker.firstAndMore\", \"{first} +{count}\", { first: first.name ?? first.model ?? first.value, count: String(chosen.length - 1) })\n )\n ) : undefined\n ) : first ? (\n <ModelLabel\n provider={first.provider}\n providerName={nameOf(first.provider)}\n model={first.model ?? first.value}\n {...(first.name ? { name: first.name } : {})}\n />\n ) : current === ALL || (current === null && allLabel) ? (\n allLabel\n ) : undefined;\n const title = ariaLabel ?? (typeof label === \"string\" ? label : t(\"modelPicker.model\", \"Model\"));\n\n const control = (\n <PickerPopover\n title={title}\n width=\"lg\"\n open={open}\n onOpenChange={setOpen}\n trigger={\n <PickerTrigger\n ref={ref}\n appearance={SELECT_APPEARANCE[appearance]}\n size={size}\n {...fc.controlProps}\n {...(ariaLabel || !label ? { \"aria-label\": title } : {})}\n {...(disabled ? { disabled } : {})}\n {...(invalid ? { invalid } : {})}\n {...(fullWidth ? { fullWidth } : {})}\n {...(force ? { \"data-force\": force } : {})}\n placeholder={placeholder ?? (props.multiple ? t(\"modelPicker.chooseSome\", \"Choose models\") : t(\"modelPicker.choose\", \"Choose a model\"))}\n className={cn(\"max-w-full\", !(label || description || error) && className)}\n >\n {summary as ReactNode}\n </PickerTrigger>\n }\n >\n <CommandList\n groups={groups}\n aria-label={title}\n value={props.multiple ? chosen : (chosen[0] ?? (allLabel ? ALL : null))}\n {...(props.multiple ? { multiple: true } : {})}\n onSelect={pick}\n query={query}\n onQueryChange={setQuery}\n placeholder={t(\"modelPicker.search\", \"Search models\")}\n emptyText={t(\"modelPicker.noMatch\", \"No models match\")}\n toolbar={toolbar}\n autoFocus\n />\n </PickerPopover>\n );\n if (field) return control;\n return withField({ label, description, error, optional, required, layout, id: fc.wrapId, disabled, className }, control);\n});\nif (process.env.NODE_ENV !== \"production\") ModelPicker.displayName = \"ModelPicker\";\n","import { forwardRef } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_PROMPT_SUGGESTIONS_VARIANTS = {\n align: {\n start: { classes: \"items-stretch\" },\n center: { classes: \"items-center text-center\" },\n },\n} as const;\nexport const KAESO_PROMPT_SUGGESTIONS_DEFAULT_VARIANTS = { align: \"start\" } as const;\n\nexport interface PromptSuggestionsProps {\n suggestions: string[];\n onSelect: (prompt: string) => void;\n \"aria-label\"?: string | undefined;\n align?: keyof typeof KAESO_PROMPT_SUGGESTIONS_VARIANTS.align | undefined;\n className?: string | undefined;\n}\n\nexport const PromptSuggestions = /* @__PURE__ */ forwardRef<HTMLUListElement, PromptSuggestionsProps>(function PromptSuggestions(\n { suggestions, onSelect, \"aria-label\": ariaLabelProp, align = \"start\", className },\n ref,\n) {\n const t = useUiText();\n const ariaLabel = ariaLabelProp ?? t(\"promptSuggestions.examplePrompts\", \"Example prompts\");\n return (\n <ul ref={ref} aria-label={ariaLabel} className={cn(\"flex min-w-0 flex-col gap-2\", KAESO_PROMPT_SUGGESTIONS_VARIANTS.align[align].classes, className)}>\n {suggestions.slice(0, 3).map((s) => (\n <li key={s} className={cn(\"flex min-w-0\", align === \"center\" && \"justify-center\")}>\n <button\n type=\"button\"\n onClick={() => onSelect(s)}\n className={cn(\n \"flex h-36 max-w-full min-w-0 cursor-pointer items-center rounded-item px-16 text-body text-fg-secondary transition-control hover:bg-fill-1 hover:text-fg focus-ring-inset\",\n align === \"start\" && \"flex-1\",\n )}\n >\n <span className=\"min-w-0 truncate\">{s}</span>\n </button>\n </li>\n ))}\n </ul>\n );\n});\nif (process.env.NODE_ENV !== \"production\") PromptSuggestions.displayName = \"PromptSuggestions\";\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
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 { n as t, r as n } from "../chunks/portal-context-BBbzDKmY.js";
4
- import { i as r, n as i, r as a, t as o } from "../chunks/popover-BE7VO-a4.js";
4
+ import { i as r, n as i, r as a, t as o } from "../chunks/popover-bjxg020P.js";
5
5
  import { forwardRef as s } from "react";
6
6
  import { jsx as c } from "react/jsx-runtime";
7
7
  import { PreviewCard as l } from "@base-ui/react/preview-card";
@@ -1,5 +1,5 @@
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 { forwardRef as t, useMemo as n } from "react";
4
4
  import { jsx as r } from "react/jsx-runtime";
5
5
  import { encode as i } from "uqr";
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export { t as KAESO_RADIO_DEFAULT_VARIANTS, n as KAESO_RADIO_VARIANTS, r as Radio, i as RadioCards, a as RadioCircle, o as RadioGroup } from "../chunks/radio-CUxbLCvD.js";
2
+ export { t as KAESO_RADIO_DEFAULT_VARIANTS, n as KAESO_RADIO_VARIANTS, r as Radio, i as RadioCards, a as RadioCircle, o as RadioGroup } from "../chunks/radio-DwYcXAzv.js";
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ export { t as KAESO_RELEASE_ART_DEFAULT_VARIANTS, n as KAESO_RELEASE_ART_VARIANTS, a as RELEASE_ART_STYLES, r as ReleaseArt, o as isReleaseArtSpec, s as nextReleaseArt, c as randomReleaseArt, l as releaseArtFor, i as releaseArtSvg } from "../chunks/release-art-Chd8l9Rf.js";
@@ -1,5 +1,5 @@
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 { forwardRef as t } from "react";
4
4
  import { jsx as n, jsxs as r } from "react/jsx-runtime";
5
5
  import { CSPProvider as i } from "@base-ui/react/csp-provider";
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export { t as AuthLayout, n as KAESO_SECTION_DEFAULT_VARIANTS, r as KAESO_SECTION_VARIANTS, i as Section, a as SplitView } from "../chunks/section-DzOLLN1p.js";
2
+ export { t as AuthLayout, n as KAESO_SECTION_DEFAULT_VARIANTS, r as KAESO_SECTION_VARIANTS, i as Section, a as SplitView } from "../chunks/section-BsET7Fo-.js";
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export { t as KAESO_SEGMENTED_DEFAULT_VARIANTS, n as KAESO_SEGMENTED_VARIANTS, r as Segmented } from "../chunks/segmented-MrinfDL8.js";
2
+ export { t as KAESO_SEGMENTED_DEFAULT_VARIANTS, n as KAESO_SEGMENTED_VARIANTS, r as Segmented } from "../chunks/segmented-DXKVF-nY.js";
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export { t as KAESO_SELECT_DEFAULT_VARIANTS, n as KAESO_SELECT_VARIANTS, r as Select } from "../chunks/select-Bc4kRiSG.js";
2
+ export { t as KAESO_SELECT_DEFAULT_VARIANTS, n as KAESO_SELECT_VARIANTS, r as Select } from "../chunks/select-Bbv2f5F8.js";
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export { t as KAESO_SEPARATOR_DEFAULT_VARIANTS, n as KAESO_SEPARATOR_VARIANTS, r as Separator } from "../chunks/separator-D5AzVFTS.js";
2
+ export { t as KAESO_SEPARATOR_DEFAULT_VARIANTS, n as KAESO_SEPARATOR_VARIANTS, r as Separator } from "../chunks/separator-CpAUELNs.js";
@@ -1,7 +1,7 @@
1
1
  "use client";
2
- import { t as e } from "../chunks/cn-CidVUKMm.js";
3
- import { r as t } from "../chunks/link-provider---9JdxTg.js";
4
- import { t as n } from "../chunks/icon-CeNQtobn.js";
2
+ import { t as e } from "../chunks/cn-DUDmdLpZ.js";
3
+ import { r as t } from "../chunks/link-provider-BsUxhZKG.js";
4
+ import { t as n } from "../chunks/icon-BqujXDUc.js";
5
5
  import { forwardRef as r } from "react";
6
6
  import { Fragment as i, jsx as a, jsxs as o } from "react/jsx-runtime";
7
7
  import { ArrowRight01Icon as s } from "@hugeicons/core-free-icons";