@logicplanes/kaeso-ui 0.2.2 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (349) hide show
  1. package/AGENTS.md +2 -0
  2. package/NOTICE.md +1 -1
  3. package/ai/component-guides.md +223 -24
  4. package/ai/component-registry.json +985 -91
  5. package/ai/component-registry.md +219 -52
  6. package/ai/icons.md +1 -1
  7. package/ai/tokens.md +7 -3
  8. package/dist/blocks/delete-resource.js +1 -1
  9. package/dist/blocks/pages.js +5 -5
  10. package/dist/blocks/resource-list.js +4 -4
  11. package/dist/chunks/app-frame-B9vrgwaE.js +220 -0
  12. package/dist/chunks/app-frame-B9vrgwaE.js.map +1 -0
  13. package/dist/chunks/{avatar-D2nJNbtC.js → avatar-DOzOhYJr.js} +2 -2
  14. package/dist/chunks/{avatar-D2nJNbtC.js.map → avatar-DOzOhYJr.js.map} +1 -1
  15. package/dist/chunks/{badge-Dkyhs0_j.js → badge-wUHlj7m3.js} +2 -2
  16. package/dist/chunks/{badge-Dkyhs0_j.js.map → badge-wUHlj7m3.js.map} +1 -1
  17. package/dist/chunks/{banner-DxGBPQ7p.js → banner-BBlNFHd-.js} +4 -4
  18. package/dist/chunks/{banner-DxGBPQ7p.js.map → banner-BBlNFHd-.js.map} +1 -1
  19. package/dist/chunks/{button-DQvoOxVQ.js → button-CAPyW-v8.js} +8 -8
  20. package/dist/chunks/{button-DQvoOxVQ.js.map → button-CAPyW-v8.js.map} +1 -1
  21. package/dist/chunks/{calendar-CN3YJi2k.js → calendar-CBeptQFq.js} +2 -2
  22. package/dist/chunks/{calendar-CN3YJi2k.js.map → calendar-CBeptQFq.js.map} +1 -1
  23. package/dist/chunks/{checkbox-BgRdbfCE.js → checkbox-C5yvSS7O.js} +3 -3
  24. package/dist/chunks/{checkbox-BgRdbfCE.js.map → checkbox-C5yvSS7O.js.map} +1 -1
  25. package/dist/chunks/{cn-CidVUKMm.js → cn-DUDmdLpZ.js} +3 -1
  26. package/dist/chunks/cn-DUDmdLpZ.js.map +1 -0
  27. package/dist/chunks/{code-BADhvsgC.js → code-C49NzHUQ.js} +2 -2
  28. package/dist/chunks/{code-BADhvsgC.js.map → code-C49NzHUQ.js.map} +1 -1
  29. package/dist/chunks/{code-block-DxtladFW.js → code-block-DREsvJ-g.js} +24 -21
  30. package/dist/chunks/code-block-DREsvJ-g.js.map +1 -0
  31. package/dist/chunks/{collapsible-Cw_1aem5.js → collapsible-CDQq1Y9x.js} +6 -6
  32. package/dist/chunks/collapsible-CDQq1Y9x.js.map +1 -0
  33. package/dist/chunks/combobox-DqtzsAKG.js +314 -0
  34. package/dist/chunks/combobox-DqtzsAKG.js.map +1 -0
  35. package/dist/chunks/command-list-D5k0uvkR.js +417 -0
  36. package/dist/chunks/command-list-D5k0uvkR.js.map +1 -0
  37. package/dist/chunks/{copy-button-DXxn-YYZ.js → copy-button-CNpEnS04.js} +6 -6
  38. package/dist/chunks/{copy-button-DXxn-YYZ.js.map → copy-button-CNpEnS04.js.map} +1 -1
  39. package/dist/chunks/{core-K960A4OT.js → core-CqLWVMDI.js} +36 -36
  40. package/dist/chunks/core-CqLWVMDI.js.map +1 -0
  41. package/dist/chunks/{date-popup-B-6xhb-1.js → date-popup-BgDz6SUj.js} +4 -4
  42. package/dist/chunks/{date-popup-B-6xhb-1.js.map → date-popup-BgDz6SUj.js.map} +1 -1
  43. package/dist/chunks/{de-CTAo4KL7.js → de-CkXZKaBD.js} +37 -5
  44. package/dist/chunks/de-CkXZKaBD.js.map +1 -0
  45. package/dist/chunks/dialog-truWH0qe.js +353 -0
  46. package/dist/chunks/dialog-truWH0qe.js.map +1 -0
  47. package/dist/chunks/{empty-DIbBpytW.js → empty-YXmSkKzR.js} +2 -2
  48. package/dist/chunks/{empty-DIbBpytW.js.map → empty-YXmSkKzR.js.map} +1 -1
  49. package/dist/chunks/{field-d8V94bvZ.js → field-BZriODU7.js} +3 -3
  50. package/dist/chunks/field-BZriODU7.js.map +1 -0
  51. package/dist/chunks/{icon-CeNQtobn.js → icon-BqujXDUc.js} +2 -2
  52. package/dist/chunks/{icon-CeNQtobn.js.map → icon-BqujXDUc.js.map} +1 -1
  53. package/dist/chunks/{icon-button-_x1RUphC.js → icon-button-D4O4puwH.js} +3 -3
  54. package/dist/chunks/{icon-button-_x1RUphC.js.map → icon-button-D4O4puwH.js.map} +1 -1
  55. package/dist/chunks/identity-CsZvAUwu.js +361 -0
  56. package/dist/chunks/identity-CsZvAUwu.js.map +1 -0
  57. package/dist/chunks/{input-CNTfI6YE.js → input-B0wtkcNh.js} +5 -5
  58. package/dist/chunks/{input-CNTfI6YE.js.map → input-B0wtkcNh.js.map} +1 -1
  59. package/dist/chunks/{input-group-CYA1MEoZ.js → input-group-BQLw06B0.js} +33 -27
  60. package/dist/chunks/input-group-BQLw06B0.js.map +1 -0
  61. package/dist/chunks/{inset-BLMdxX4I.js → inset-BnBj8NJV.js} +12 -2
  62. package/dist/chunks/inset-BnBj8NJV.js.map +1 -0
  63. package/dist/chunks/{iso-field-1qmg7TP8.js → iso-field-BUXgY1dB.js} +5 -3
  64. package/dist/chunks/{iso-field-1qmg7TP8.js.map → iso-field-BUXgY1dB.js.map} +1 -1
  65. package/dist/chunks/{json-view-B6KHIWzh.js → json-view-BkG2hTXV.js} +11 -10
  66. package/dist/chunks/{json-view-B6KHIWzh.js.map → json-view-BkG2hTXV.js.map} +1 -1
  67. package/dist/chunks/{kbd-CBcBDvqU.js → kbd-DqWmbr_e.js} +2 -2
  68. package/dist/chunks/{kbd-CBcBDvqU.js.map → kbd-DqWmbr_e.js.map} +1 -1
  69. package/dist/chunks/{link-vz9aV8WX.js → link-YMcxM-BZ.js} +4 -4
  70. package/dist/chunks/{link-vz9aV8WX.js.map → link-YMcxM-BZ.js.map} +1 -1
  71. package/dist/chunks/{link-provider---9JdxTg.js → link-provider-BsUxhZKG.js} +2 -2
  72. package/dist/chunks/{link-provider---9JdxTg.js.map → link-provider-BsUxhZKG.js.map} +1 -1
  73. package/dist/chunks/list-wXZIZo_s.js +492 -0
  74. package/dist/chunks/list-wXZIZo_s.js.map +1 -0
  75. package/dist/chunks/{loader-CUehxvSZ.js → loader-ENBh2Fbt.js} +2 -2
  76. package/dist/chunks/{loader-CUehxvSZ.js.map → loader-ENBh2Fbt.js.map} +1 -1
  77. package/dist/chunks/{markdown-5NyaHHfN.js → markdown-DWyxjsSY.js} +10 -10
  78. package/dist/chunks/{markdown-5NyaHHfN.js.map → markdown-DWyxjsSY.js.map} +1 -1
  79. package/dist/chunks/{menu-DyVPwgfF.js → menu-Bnfi9P3t.js} +7 -7
  80. package/dist/chunks/{menu-DyVPwgfF.js.map → menu-Bnfi9P3t.js.map} +1 -1
  81. package/dist/chunks/{meter-DWhyzFGQ.js → meter-DhTnem4k.js} +2 -2
  82. package/dist/chunks/{meter-DWhyzFGQ.js.map → meter-DhTnem4k.js.map} +1 -1
  83. package/dist/chunks/nav-sheet-QqNRHo-y.js +60 -0
  84. package/dist/chunks/nav-sheet-QqNRHo-y.js.map +1 -0
  85. package/dist/chunks/{nav-wordmark-DLkItdvo.js → nav-wordmark-DmbT1Aiw.js} +2 -2
  86. package/dist/chunks/{nav-wordmark-DLkItdvo.js.map → nav-wordmark-DmbT1Aiw.js.map} +1 -1
  87. package/dist/chunks/option-checkbox-Df7WhGn4.js +25 -0
  88. package/dist/chunks/option-checkbox-Df7WhGn4.js.map +1 -0
  89. package/dist/chunks/over-sheet-B8vzr_zU.js +8 -0
  90. package/dist/chunks/over-sheet-B8vzr_zU.js.map +1 -0
  91. package/dist/chunks/{page-header-CEPZzhRp.js → page-header-Ccnrspbp.js} +5 -5
  92. package/dist/chunks/{page-header-CEPZzhRp.js.map → page-header-Ccnrspbp.js.map} +1 -1
  93. package/dist/chunks/{pagination-CCMxQ5pH.js → pagination-CEmWZNjp.js} +5 -4
  94. package/dist/chunks/{pagination-CCMxQ5pH.js.map → pagination-CEmWZNjp.js.map} +1 -1
  95. package/dist/chunks/picker-popover-C4ElNk7t.js +102 -0
  96. package/dist/chunks/picker-popover-C4ElNk7t.js.map +1 -0
  97. package/dist/chunks/{popover-BE7VO-a4.js → popover-bjxg020P.js} +3 -3
  98. package/dist/chunks/{popover-BE7VO-a4.js.map → popover-bjxg020P.js.map} +1 -1
  99. package/dist/chunks/{radio-CUxbLCvD.js → radio-DwYcXAzv.js} +2 -2
  100. package/dist/chunks/{radio-CUxbLCvD.js.map → radio-DwYcXAzv.js.map} +1 -1
  101. package/dist/chunks/range-popup-CG9Jo5B7.js +128 -0
  102. package/dist/chunks/range-popup-CG9Jo5B7.js.map +1 -0
  103. package/dist/chunks/{release-art-DEc9HNa6.js → release-art-Ogl-L1Vh.js} +189 -183
  104. package/dist/chunks/release-art-Ogl-L1Vh.js.map +1 -0
  105. package/dist/chunks/{resize-motion-CMaidkwe.js → resize-motion-BWGMchyP.js} +27 -23
  106. package/dist/chunks/resize-motion-BWGMchyP.js.map +1 -0
  107. package/dist/chunks/{rights-BbiJ0AJB.js → rights-hMoaFasn.js} +12 -12
  108. package/dist/chunks/rights-hMoaFasn.js.map +1 -0
  109. package/dist/chunks/{section-DzOLLN1p.js → section-BsET7Fo-.js} +4 -4
  110. package/dist/chunks/{section-DzOLLN1p.js.map → section-BsET7Fo-.js.map} +1 -1
  111. package/dist/chunks/{segmented-MrinfDL8.js → segmented-DXKVF-nY.js} +4 -4
  112. package/dist/chunks/{segmented-MrinfDL8.js.map → segmented-DXKVF-nY.js.map} +1 -1
  113. package/dist/chunks/{select-Bc4kRiSG.js → select-Bbv2f5F8.js} +63 -80
  114. package/dist/chunks/select-Bbv2f5F8.js.map +1 -0
  115. package/dist/chunks/{separator-D5AzVFTS.js → separator-CpAUELNs.js} +2 -2
  116. package/dist/chunks/{separator-D5AzVFTS.js.map → separator-CpAUELNs.js.map} +1 -1
  117. package/dist/chunks/{sidebar-5IA18LuP.js → sidebar-Dey1ZfGt.js} +54 -51
  118. package/dist/chunks/sidebar-Dey1ZfGt.js.map +1 -0
  119. package/dist/chunks/{sidebar-menu-DRWRxcJ3.js → sidebar-menu-ct8IiL4z.js} +2 -2
  120. package/dist/chunks/{sidebar-menu-DRWRxcJ3.js.map → sidebar-menu-ct8IiL4z.js.map} +1 -1
  121. package/dist/chunks/{skeleton-kfuqdl1a.js → skeleton-BM797MAg.js} +2 -2
  122. package/dist/chunks/{skeleton-kfuqdl1a.js.map → skeleton-BM797MAg.js.map} +1 -1
  123. package/dist/chunks/{slider-DbhjJ3ML.js → slider-Ds-tqY-1.js} +2 -2
  124. package/dist/chunks/{slider-DbhjJ3ML.js.map → slider-Ds-tqY-1.js.map} +1 -1
  125. package/dist/chunks/{status-dot-BzMlYuMe.js → status-dot-BqVOlShY.js} +3 -3
  126. package/dist/chunks/{status-dot-BzMlYuMe.js.map → status-dot-BqVOlShY.js.map} +1 -1
  127. package/dist/chunks/{styles-Btvg2DCf.js → styles-CVJU9t9v.js} +2 -2
  128. package/dist/chunks/{styles-Btvg2DCf.js.map → styles-CVJU9t9v.js.map} +1 -1
  129. package/dist/chunks/{swap-text-BhPI8DOf.js → swap-text-Cica0pUr.js} +2 -2
  130. package/dist/chunks/{swap-text-BhPI8DOf.js.map → swap-text-Cica0pUr.js.map} +1 -1
  131. package/dist/chunks/{switch-XMY_CQE-.js → switch-CSKMEomo.js} +3 -3
  132. package/dist/chunks/{switch-XMY_CQE-.js.map → switch-CSKMEomo.js.map} +1 -1
  133. package/dist/chunks/{table-DYKa86af.js → table-D-36EM7f.js} +2 -2
  134. package/dist/chunks/{table-DYKa86af.js.map → table-D-36EM7f.js.map} +1 -1
  135. package/dist/chunks/{tag-Dg89uYpV.js → tag-CwDKXVHj.js} +4 -4
  136. package/dist/chunks/{tag-Dg89uYpV.js.map → tag-CwDKXVHj.js.map} +1 -1
  137. package/dist/chunks/{text--5MKh2G4.js → text-Dvvgg5Jt.js} +3 -3
  138. package/dist/chunks/{text--5MKh2G4.js.map → text-Dvvgg5Jt.js.map} +1 -1
  139. package/dist/chunks/{textarea-Cj8iR82R.js → textarea-2d373OyU.js} +35 -31
  140. package/dist/chunks/textarea-2d373OyU.js.map +1 -0
  141. package/dist/chunks/timeseries-LRDAZHV0.js +339 -0
  142. package/dist/chunks/timeseries-LRDAZHV0.js.map +1 -0
  143. package/dist/chunks/{toolbar-Dw3uxpsE.js → toolbar-nVLFWH2i.js} +3 -3
  144. package/dist/chunks/{toolbar-Dw3uxpsE.js.map → toolbar-nVLFWH2i.js.map} +1 -1
  145. package/dist/chunks/{tooltip-DEbCCsru.js → tooltip-S1DmyLVl.js} +4 -4
  146. package/dist/chunks/{tooltip-DEbCCsru.js.map → tooltip-S1DmyLVl.js.map} +1 -1
  147. package/dist/chunks/{tooltip-root-DRd4ciUv.js → tooltip-root-vjylFUqw.js} +4 -4
  148. package/dist/chunks/{tooltip-root-DRd4ciUv.js.map → tooltip-root-vjylFUqw.js.map} +1 -1
  149. package/dist/chunks/{virtual-rows-BZe49bKi.js → virtual-rows-yAMjeAwj.js} +4 -3
  150. package/dist/chunks/virtual-rows-yAMjeAwj.js.map +1 -0
  151. package/dist/chunks/{zh-CN-C7GmVswt.js → zh-CN-CqEA4PCM.js} +37 -5
  152. package/dist/chunks/zh-CN-CqEA4PCM.js.map +1 -0
  153. package/dist/components/app-frame.js +2 -2
  154. package/dist/components/avatar.js +1 -1
  155. package/dist/components/badge.js +1 -1
  156. package/dist/components/banner.js +1 -1
  157. package/dist/components/button-group.js +33 -32
  158. package/dist/components/button-group.js.map +1 -1
  159. package/dist/components/button.js +1 -1
  160. package/dist/components/calendar.js +1 -1
  161. package/dist/components/charts/bar.js +34 -31
  162. package/dist/components/charts/bar.js.map +1 -1
  163. package/dist/components/charts/donut.js +2 -2
  164. package/dist/components/charts/gauge.js +2 -2
  165. package/dist/components/charts/heatmap.js +1 -1
  166. package/dist/components/charts/sankey.js +2 -2
  167. package/dist/components/charts/sparkline.js +1 -1
  168. package/dist/components/charts/timeseries.js +1 -255
  169. package/dist/components/charts.js +3 -3
  170. package/dist/components/checkbox.js +1 -1
  171. package/dist/components/code-block.js +2 -2
  172. package/dist/components/code.js +1 -1
  173. package/dist/components/collapsible.js +1 -1
  174. package/dist/components/combobox.js +1 -1
  175. package/dist/components/command-list.js +4 -0
  176. package/dist/components/command-palette.js +120 -171
  177. package/dist/components/command-palette.js.map +1 -1
  178. package/dist/components/copy-button.js +1 -1
  179. package/dist/components/data-table.js +251 -193
  180. package/dist/components/data-table.js.map +1 -1
  181. package/dist/components/date-picker.js +6 -6
  182. package/dist/components/dialog.js +7 -9
  183. package/dist/components/dialog.js.map +1 -1
  184. package/dist/components/display-options.js +67 -53
  185. package/dist/components/display-options.js.map +1 -1
  186. package/dist/components/empty.js +1 -1
  187. package/dist/components/field.js +1 -1
  188. package/dist/components/filter-chip.js +138 -63
  189. package/dist/components/filter-chip.js.map +1 -1
  190. package/dist/components/filter-row.js +2 -2
  191. package/dist/components/flow.js +2 -2
  192. package/dist/components/heading.js +1 -1
  193. package/dist/components/icon-button.js +1 -1
  194. package/dist/components/icon.js +1 -1
  195. package/dist/components/input.js +56 -54
  196. package/dist/components/input.js.map +1 -1
  197. package/dist/components/kaeso/conversation.js +88 -79
  198. package/dist/components/kaeso/conversation.js.map +1 -1
  199. package/dist/components/kaeso/identity.js +1 -1
  200. package/dist/components/kaeso/moments.js +8 -8
  201. package/dist/components/kaeso/moments.js.map +1 -1
  202. package/dist/components/kaeso/rights.js +1 -1
  203. package/dist/components/kaeso/usage.js +6 -6
  204. package/dist/components/kaeso/usage.js.map +1 -1
  205. package/dist/components/kaeso.js +212 -84
  206. package/dist/components/kaeso.js.map +1 -1
  207. package/dist/components/kbd.js +1 -1
  208. package/dist/components/key-value.js +3 -3
  209. package/dist/components/label.js +1 -1
  210. package/dist/components/layout.js +1 -1
  211. package/dist/components/link.js +1 -1
  212. package/dist/components/list.js +1 -1
  213. package/dist/components/loader.js +2 -2
  214. package/dist/components/logo.js +2 -2
  215. package/dist/components/markdown.js +1 -1
  216. package/dist/components/menu.js +2 -2
  217. package/dist/components/meter.js +1 -1
  218. package/dist/components/page-header.js +1 -1
  219. package/dist/components/pagination.js +1 -1
  220. package/dist/components/playground.js +654 -381
  221. package/dist/components/playground.js.map +1 -1
  222. package/dist/components/popover.js +2 -2
  223. package/dist/components/qr-code.js +1 -1
  224. package/dist/components/radio.js +1 -1
  225. package/dist/components/release-art.js +1 -1
  226. package/dist/components/scroll-area.js +1 -1
  227. package/dist/components/section.js +1 -1
  228. package/dist/components/segmented.js +1 -1
  229. package/dist/components/select.js +1 -1
  230. package/dist/components/separator.js +1 -1
  231. package/dist/components/settings.js +3 -3
  232. package/dist/components/sheet.js +69 -52
  233. package/dist/components/sheet.js.map +1 -1
  234. package/dist/components/sidebar.js +1 -1
  235. package/dist/components/skeleton.js +1 -1
  236. package/dist/components/slider.js +1 -1
  237. package/dist/components/stat.js +88 -74
  238. package/dist/components/stat.js.map +1 -1
  239. package/dist/components/status-dot.js +1 -1
  240. package/dist/components/surface.js +1 -1
  241. package/dist/components/swap-text.js +1 -1
  242. package/dist/components/switch.js +1 -1
  243. package/dist/components/table.js +1 -1
  244. package/dist/components/tabs.js +48 -49
  245. package/dist/components/tabs.js.map +1 -1
  246. package/dist/components/tag.js +1 -1
  247. package/dist/components/text.js +1 -1
  248. package/dist/components/theme-image.js +1 -1
  249. package/dist/components/theme-menu.js +2 -2
  250. package/dist/components/theme-select.js +1 -1
  251. package/dist/components/timeline.js +1 -1
  252. package/dist/components/toast.js +4 -4
  253. package/dist/components/toc.js +1 -1
  254. package/dist/components/toolbar.js +1 -1
  255. package/dist/components/tooltip.js +1 -1
  256. package/dist/components/visually-hidden.js +1 -1
  257. package/dist/format.js +87 -50
  258. package/dist/format.js.map +1 -1
  259. package/dist/i18n-provider.js +1 -1
  260. package/dist/index.js +115 -112
  261. package/dist/kaeso.css +20 -7
  262. package/dist/styles.css +1 -1
  263. package/dist/types/components/charts/bar.d.ts +6 -0
  264. package/dist/types/components/charts/core.d.ts +2 -2
  265. package/dist/types/components/charts/docs.d.ts +7 -0
  266. package/dist/types/components/charts/time-axis.d.ts +5 -0
  267. package/dist/types/components/charts/timeseries.d.ts +9 -0
  268. package/dist/types/components/code-block/highlighter.d.ts +2 -0
  269. package/dist/types/components/combobox/combobox.d.ts +2 -0
  270. package/dist/types/components/combobox/docs.d.ts +2 -4
  271. package/dist/types/components/command-list/command-list.d.ts +84 -0
  272. package/dist/types/components/command-list/docs.d.ts +52 -0
  273. package/dist/types/components/command-list/index.d.ts +3 -0
  274. package/dist/types/components/command-list/match.d.ts +1 -0
  275. package/dist/types/components/command-list/picker-popover.d.ts +44 -0
  276. package/dist/types/components/data-table/data-table.d.ts +3 -2
  277. package/dist/types/components/data-table/docs.d.ts +1 -0
  278. package/dist/types/components/date-picker/docs.d.ts +0 -6
  279. package/dist/types/components/dialog/dialog.d.ts +24 -0
  280. package/dist/types/components/dialog/docs.d.ts +4 -0
  281. package/dist/types/components/display-options/display-options.d.ts +1 -0
  282. package/dist/types/components/filter-chip/docs.d.ts +4 -0
  283. package/dist/types/components/filter-chip/filter-chip.d.ts +7 -0
  284. package/dist/types/components/input/docs.d.ts +2 -12
  285. package/dist/types/components/input/number-input.d.ts +1 -0
  286. package/dist/types/components/input/tag-input.d.ts +1 -0
  287. package/dist/types/components/kaeso/docs.d.ts +34 -0
  288. package/dist/types/components/kaeso/identity.d.ts +10 -1
  289. package/dist/types/components/kaeso/index.d.ts +1 -0
  290. package/dist/types/components/kaeso/provider-marks.d.ts +5 -1
  291. package/dist/types/components/kaeso/provider-picker.d.ts +42 -0
  292. package/dist/types/components/list/docs.d.ts +2 -0
  293. package/dist/types/components/list/list.d.ts +2 -0
  294. package/dist/types/components/menu/styles.d.ts +1 -1
  295. package/dist/types/components/playground/docs.d.ts +32 -0
  296. package/dist/types/components/playground/index.d.ts +1 -0
  297. package/dist/types/components/playground/model-picker.d.ts +39 -4
  298. package/dist/types/components/playground/reasoning.d.ts +29 -0
  299. package/dist/types/components/playground/response-view.d.ts +7 -1
  300. package/dist/types/components/release-art/docs.d.ts +1 -0
  301. package/dist/types/components/release-art/release-art.d.ts +1 -0
  302. package/dist/types/components/select/docs.d.ts +0 -2
  303. package/dist/types/components/select/option-checkbox.d.ts +1 -0
  304. package/dist/types/components/sidebar/sidebar.d.ts +1 -0
  305. package/dist/types/components/stat/docs.d.ts +1 -0
  306. package/dist/types/components/stat/stat.d.ts +1 -0
  307. package/dist/types/format/index.d.ts +6 -0
  308. package/dist/types/index.d.ts +1 -0
  309. package/dist/types/utils/index.d.ts +1 -1
  310. package/dist/types/utils/inset.d.ts +5 -0
  311. package/dist/types/utils/over-sheet.d.ts +1 -0
  312. package/dist/types/utils/restore-focus.d.ts +1 -1
  313. package/dist/utils.js +4 -4
  314. package/foundations/layout.md +45 -0
  315. package/foundations/writing.md +1 -0
  316. package/package.json +2 -2
  317. package/dist/chunks/app-frame-BXh-06HL.js +0 -214
  318. package/dist/chunks/app-frame-BXh-06HL.js.map +0 -1
  319. package/dist/chunks/cn-CidVUKMm.js.map +0 -1
  320. package/dist/chunks/code-block-DxtladFW.js.map +0 -1
  321. package/dist/chunks/collapsible-Cw_1aem5.js.map +0 -1
  322. package/dist/chunks/combobox-D30Wt11R.js +0 -291
  323. package/dist/chunks/combobox-D30Wt11R.js.map +0 -1
  324. package/dist/chunks/core-K960A4OT.js.map +0 -1
  325. package/dist/chunks/de-CTAo4KL7.js.map +0 -1
  326. package/dist/chunks/dialog-LNKgPEsV.js +0 -319
  327. package/dist/chunks/dialog-LNKgPEsV.js.map +0 -1
  328. package/dist/chunks/field-d8V94bvZ.js.map +0 -1
  329. package/dist/chunks/field-press-DwzBFafd.js +0 -10
  330. package/dist/chunks/field-press-DwzBFafd.js.map +0 -1
  331. package/dist/chunks/identity-BtZC_d_Q.js +0 -342
  332. package/dist/chunks/identity-BtZC_d_Q.js.map +0 -1
  333. package/dist/chunks/input-group-CYA1MEoZ.js.map +0 -1
  334. package/dist/chunks/inset-BLMdxX4I.js.map +0 -1
  335. package/dist/chunks/list-CzaiyNja.js +0 -483
  336. package/dist/chunks/list-CzaiyNja.js.map +0 -1
  337. package/dist/chunks/nav-sheet-BIErlV74.js +0 -58
  338. package/dist/chunks/nav-sheet-BIErlV74.js.map +0 -1
  339. package/dist/chunks/range-popup-DGOnGGag.js +0 -111
  340. package/dist/chunks/range-popup-DGOnGGag.js.map +0 -1
  341. package/dist/chunks/release-art-DEc9HNa6.js.map +0 -1
  342. package/dist/chunks/resize-motion-CMaidkwe.js.map +0 -1
  343. package/dist/chunks/rights-BbiJ0AJB.js.map +0 -1
  344. package/dist/chunks/select-Bc4kRiSG.js.map +0 -1
  345. package/dist/chunks/sidebar-5IA18LuP.js.map +0 -1
  346. package/dist/chunks/textarea-Cj8iR82R.js.map +0 -1
  347. package/dist/chunks/virtual-rows-BZe49bKi.js.map +0 -1
  348. package/dist/chunks/zh-CN-C7GmVswt.js.map +0 -1
  349. package/dist/components/charts/timeseries.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"data-table.js","names":["__icon_ArrowDown01Icon","__icon_ArrowUp01Icon","cn","useInset","useUiText","Icon","Tooltip","observeResize","Text","Button","CheckboxBox","ContextMenu","Skeleton","Pagination","Empty","StatusDot","Avatar","scrollParent","STATUS_TONE_TEXT","useScrollMargin","KAESO_DATA_TABLE_VARIANTS","KAESO_DATA_TABLE_DEFAULT_VARIANTS","ROW_H","DATA_TABLE_GROW_MIN","fitColumns","width","byPriority","columns","a","b","used","keep","c","kept","full","least","growMin","last","DataTableInner","userColumns","sortingProp","ariaLabel","inset","t","sortingInner","setSortingInner","useState","selectionInner","setSelectionInner","sorting","rowSelection","selection","useMemo","selectable","table","row","useReactTable","next","u","onSortingChange","onSelectionChange","getCoreRowModel","getSortedRowModel","manualSorting","getRowId","r","root","useRef","head","body","leaf","fitInput","fitKey","hiddenFor","fit","hiddenForRef","hiddenKey","setHiddenKey","useLayoutEffect","el","mode","hiddenIds","tight","overflow","hidden","cols","trackMin","gridStyle","pinEnd","rows","virtual","virtualizeAbove","getScrollElement","scrollMargin","virtualizer","useVirtualizer","density","cellPad","i","stickyCol","stickyFirstColumn","renderRow","cells","activeRowId","freshRowIds","onRowClick","style","meta","cell","content","flexRender","raw","text","tone","rowMenu","ref","className","loading","hg","h","sortable","dir","ArrowDown01Icon","ArrowUp01Icon","error","onRetry","empty","v","hasMore","loadingMore","DataTableBase","DataTable","make","get","ctx","sortingFn","Tokens","exact","formatNumber","value","formatTokens","RelativeTime","formatDate","formatRelative","now","col","formatUSD","options","id","formatDuration"],"sources":["../../src/components/data-table/data-table.tsx","../../src/components/data-table/columns.tsx"],"sourcesContent":["import type * as React from \"react\";\nimport { forwardRef, useLayoutEffect, useMemo, useRef, useState, type CSSProperties, type ReactNode } from \"react\";\nimport {\n flexRender,\n getCoreRowModel,\n getSortedRowModel,\n useReactTable,\n type ColumnDef,\n type Row,\n type RowSelectionState,\n type SortingState,\n} from \"@tanstack/react-table\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport { cn } from \"../../utils/cn.js\";\nimport { observeResize } from \"../../utils/observe-resize.js\";\nimport { useInset } from \"../../utils/inset.js\";\nimport { ArrowDown01Icon as __icon_ArrowDown01Icon, ArrowUp01Icon as __icon_ArrowUp01Icon } from \"@hugeicons/core-free-icons\";\nimport { Icon } from \"../icon/icon.js\";\nimport { CheckboxBox } from \"../checkbox/checkbox.js\";\nimport { Skeleton } from \"../skeleton/skeleton.js\";\nimport { Empty } from \"../empty/empty.js\";\nimport { Button } from \"../button/button.js\";\nimport { Pagination } from \"../pagination/pagination.js\";\nimport { ContextMenu } from \"../menu/menu.js\";\nimport { Text } from \"../text/text.js\";\nimport { STATUS_TONE_TEXT, type StatusTone } from \"../../utils/tone.js\";\nimport { scrollParent } from \"../../hooks/scroll-parent.js\";\nimport { useScrollMargin } from \"../../hooks/use-scroll-margin.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_DATA_TABLE_VARIANTS = {\n density: {\n compact: { classes: \"h-36\" },\n default: { classes: \"h-40\" },\n comfortable: { classes: \"h-48\" },\n },\n} as const;\nexport const KAESO_DATA_TABLE_DEFAULT_VARIANTS = { density: \"default\" } as const;\n\ndeclare module \"@tanstack/react-table\" {\n interface ColumnMeta<TData, TValue> {\n align?: \"start\" | \"end\" | undefined;\n priority?: number | undefined;\n grow?: boolean | undefined;\n minWidth?: number | undefined;\n mono?: boolean | undefined;\n text?: ((row: TData) => string) | undefined;\n tone?: ((row: TData) => StatusTone | undefined) | undefined;\n }\n}\n\nexport interface DataTableProps<T> {\n data: T[];\n columns: ColumnDef<T, any>[];\n getRowId?: ((row: T) => string) | undefined;\n density?: keyof typeof KAESO_DATA_TABLE_VARIANTS.density | undefined;\n onRowClick?: ((row: T) => void) | undefined;\n rowMenu?: ((row: T) => ReactNode) | undefined;\n selectable?: boolean | undefined;\n selection?: RowSelectionState | undefined;\n onSelectionChange?: ((selection: RowSelectionState) => void) | undefined;\n sorting?: SortingState | undefined;\n onSortingChange?: ((sorting: SortingState) => void) | undefined;\n manualSorting?: boolean | undefined;\n loading?: boolean | undefined;\n error?: ReactNode | undefined;\n onRetry?: (() => void) | undefined;\n empty?: ReactNode | undefined;\n hasMore?: boolean | undefined;\n loadingMore?: boolean | undefined;\n onLoadMore?: (() => void) | undefined;\n stickyFirstColumn?: boolean | undefined;\n virtualizeAbove?: number | undefined;\n \"aria-label\": string;\n className?: string | undefined;\n activeRowId?: string | undefined;\n freshRowIds?: ReadonlySet<string> | undefined;\n}\n\nconst ROW_H = { compact: 36, default: 40, comfortable: 48 } as const;\n\nexport const DATA_TABLE_GROW_MIN = 136;\n\ntype FitColumn = { id: string; size: number; priority: number; grow: boolean; minWidth: number | undefined; fixed?: boolean | undefined };\n\nexport function fitColumns(columns: FitColumn[], width: number): { hidden: string[]; tight: boolean; overflow: boolean } {\n if (!width) return { hidden: [], tight: false, overflow: false };\n const byPriority = [...columns].sort((a, b) => a.priority - b.priority);\n let used = 48;\n const keep = new Set<string>();\n for (const c of byPriority) {\n used += c.size;\n if (used <= width || c.priority <= 1 || c.fixed) keep.add(c.id);\n }\n const kept = columns.filter((c) => keep.has(c.id));\n const full = kept.reduce((a, c) => a + c.size, 48);\n let least = kept.reduce((a, c) => a + (c.grow ? growMin(c) : c.size), 0);\n if (least > width && kept.some((c) => c.grow)) {\n const last = kept[kept.length - 1];\n for (const c of [...kept].reverse()) {\n if (least <= width) break;\n if (c.grow || c.fixed || c === last) continue;\n keep.delete(c.id);\n least -= c.size;\n }\n }\n return { hidden: columns.filter((c) => !keep.has(c.id)).map((c) => c.id), tight: full > width, overflow: least > width };\n}\n\nconst growMin = (c: { size: number; minWidth: number | undefined }) => Math.min(c.size, c.minWidth ?? DATA_TABLE_GROW_MIN);\n\nfunction DataTableInner<T>(\n {\n data,\n columns: userColumns,\n getRowId,\n density = \"default\",\n onRowClick,\n rowMenu,\n selectable,\n selection,\n onSelectionChange,\n sorting: sortingProp,\n onSortingChange,\n manualSorting,\n loading,\n error,\n onRetry,\n empty,\n hasMore,\n loadingMore,\n onLoadMore,\n stickyFirstColumn,\n virtualizeAbove = 100,\n className,\n activeRowId,\n freshRowIds,\n \"aria-label\": ariaLabel,\n }: DataTableProps<T>,\n ref: React.Ref<HTMLDivElement>,\n) {\n const inset = useInset();\n const t = useUiText();\n const [sortingInner, setSortingInner] = useState<SortingState>([]);\n const [selectionInner, setSelectionInner] = useState<RowSelectionState>({});\n const sorting = sortingProp ?? sortingInner;\n const rowSelection = selection ?? selectionInner;\n const columns = useMemo<ColumnDef<T, any>[]>(() => {\n if (!selectable) return userColumns;\n return [\n {\n id: \"__select\",\n size: 44,\n enableSorting: false,\n enableResizing: false,\n meta: { priority: 1 },\n header: ({ table }) => (\n <CheckboxBox\n aria-label={t(\"dataTable.selectAllRows\", \"Select all rows\")}\n checked={table.getIsAllRowsSelected()}\n indeterminate={table.getIsSomeRowsSelected()}\n onCheckedChange={(c) => table.toggleAllRowsSelected(c)}\n />\n ),\n cell: ({ row }) => (\n <CheckboxBox aria-label={t(\"dataTable.selectRow\", \"Select row\")} checked={row.getIsSelected()} onCheckedChange={(c) => row.toggleSelected(c)} />\n ),\n },\n ...userColumns,\n ];\n }, [userColumns, selectable, t]);\n\n const table = useReactTable({\n data,\n columns,\n state: { sorting, rowSelection },\n onSortingChange: (u) => {\n const next = typeof u === \"function\" ? u(sorting) : u;\n if (!sortingProp) setSortingInner(next);\n onSortingChange?.(next);\n },\n onRowSelectionChange: (u) => {\n const next = typeof u === \"function\" ? u(rowSelection) : u;\n if (!selection) setSelectionInner(next);\n onSelectionChange?.(next);\n },\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n manualSorting: !!manualSorting,\n enableRowSelection: !!selectable,\n columnResizeMode: \"onChange\",\n ...(getRowId ? { getRowId: (r: T) => getRowId(r) } : {}),\n defaultColumn: { size: 140, minSize: 64, maxSize: 640 },\n });\n\n const root = useRef<HTMLDivElement | null>(null);\n const head = useRef<HTMLDivElement | null>(null);\n const body = useRef<HTMLDivElement | null>(null);\n const leaf = table.getVisibleLeafColumns();\n const fitInput = leaf.map((c) => ({\n id: c.id,\n size: c.getSize(),\n priority: c.columnDef.meta?.priority ?? 2,\n grow: !!c.columnDef.meta?.grow,\n minWidth: c.columnDef.meta?.minWidth,\n fixed: c.id === \"__select\",\n }));\n const fitKey = JSON.stringify(fitInput);\n const hiddenFor = (width: number) => {\n const fit = fitColumns(fitInput, width);\n return `${fit.tight ? \"!\" : \"\"}${fit.overflow ? \">\" : \"\"}|${fit.hidden.join(\" \")}`;\n };\n const hiddenForRef = useRef(hiddenFor);\n hiddenForRef.current = hiddenFor;\n const [hiddenKey, setHiddenKey] = useState(\"|\");\n useLayoutEffect(() => {\n const el = root.current;\n if (!el) return;\n return observeResize([el], ([e]) => setHiddenKey(hiddenForRef.current(Math.round(e?.contentRect.width ?? 0))));\n }, []);\n useLayoutEffect(() => {\n if (root.current) setHiddenKey(hiddenForRef.current(Math.round(root.current.getBoundingClientRect().width)));\n }, [fitKey]);\n const [mode = \"\", hiddenIds = \"\"] = hiddenKey.split(\"|\");\n const tight = mode.includes(\"!\");\n const overflow = mode.includes(\">\");\n const hidden = useMemo(() => new Set(hiddenIds.split(\" \").filter(Boolean)), [hiddenIds]);\n const cols = leaf.filter((c) => !hidden.has(c.id));\n const trackMin = (c: (typeof cols)[number]) =>\n c.columnDef.meta?.grow ? (tight ? growMin({ size: c.getSize(), minWidth: c.columnDef.meta.minWidth }) : c.getSize()) : c.getSize();\n const template = cols.map((c) => (c.columnDef.meta?.grow ? `minmax(${trackMin(c)}px, 1fr)` : `${c.getSize()}px`)).join(\" \");\n const gridStyle: CSSProperties = { gridTemplateColumns: template, minWidth: cols.reduce((a, c) => a + trackMin(c), 0) };\n const pinEnd = overflow && cols.length > 1 && !cols[cols.length - 1]?.columnDef.meta?.grow;\n\n const rows = table.getRowModel().rows;\n const virtual = rows.length > virtualizeAbove;\n const getScrollElement = () => scrollParent(root.current);\n const scrollMargin = useScrollMargin(body, getScrollElement, rows.length);\n const virtualizer = useVirtualizer({\n count: rows.length,\n getScrollElement,\n estimateSize: () => ROW_H[density],\n overscan: 16,\n enabled: virtual,\n scrollMargin,\n });\n\n const cellPad = (i: number) =>\n cn(\"flex min-w-0 items-center px-12\", i === 0 && (inset ? \"pl-16\" : \"pl-24\"), i === cols.length - 1 && (inset ? \"pr-16\" : \"pr-24\"));\n const stickyCol = (i: number) =>\n ((stickyFirstColumn && i === 0) || (pinEnd && i === cols.length - 1)) &&\n cn(\n \"sticky z-10 group-hover/tr:bg-fill-1 group-aria-selected/tr:bg-fill-2 group-data-active/tr:bg-fill-2\",\n i === 0 ? \"left-0\" : \"right-0\",\n inset ? \"bg-raised\" : \"bg-panel\",\n );\n\n const renderRow = (row: Row<T>, style?: CSSProperties) => {\n const cells = row.getVisibleCells().filter((c) => !hidden.has(c.column.id));\n const el = (\n <div\n role=\"row\"\n aria-selected={selectable ? row.getIsSelected() : undefined}\n data-active={row.id === activeRowId || undefined}\n data-fresh={freshRowIds?.has(row.id) || undefined}\n tabIndex={onRowClick ? 0 : undefined}\n onClick={(e) => {\n if ((e.target as HTMLElement).closest(\"button, a, [role=checkbox]\")) return;\n onRowClick?.(row.original);\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" && e.target === e.currentTarget) onRowClick?.(row.original);\n }}\n style={{ ...gridStyle, ...style }}\n className={cn(\n \"group/tr grid w-full text-body text-fg transition-control focus-ring-inset\",\n KAESO_DATA_TABLE_VARIANTS.density[density].classes,\n onRowClick && \"cursor-pointer\",\n \"hover:bg-fill-1 aria-selected:bg-fill-2 data-active:bg-fill-2 data-fresh:animate-row-fresh\",\n \"hover:controls-on-fill aria-selected:controls-on-fill data-active:controls-on-fill\",\n )}\n >\n {cells.map((cell, i) => {\n const meta = cell.column.columnDef.meta;\n const content = flexRender(cell.column.columnDef.cell, cell.getContext());\n const raw = cell.getValue();\n const text = meta?.text ? meta.text(row.original) : typeof raw === \"string\" ? raw : undefined;\n const tone = meta?.tone?.(row.original);\n return (\n <div\n key={cell.id}\n role=\"cell\"\n className={cn(\n cellPad(i),\n meta?.align === \"end\" && \"justify-end text-right tabular\",\n meta?.mono && \"mono text-small\",\n tone && STATUS_TONE_TEXT[tone],\n stickyCol(i),\n )}\n >\n {text !== undefined && typeof content !== \"object\" ? (\n <Text truncate tone={tone ?? \"default\"} className={cn(\"min-w-0\", meta?.mono && \"text-small\")} mono={!!meta?.mono}>\n {text}\n </Text>\n ) : (\n <span className=\"min-w-0 truncate cell-fit\">{content}</span>\n )}\n </div>\n );\n })}\n </div>\n );\n if (!rowMenu) return <div key={row.id}>{el}</div>;\n return (\n <ContextMenu key={row.id}>\n <ContextMenu.Trigger>{el}</ContextMenu.Trigger>\n <ContextMenu.Content>{rowMenu(row.original)}</ContextMenu.Content>\n </ContextMenu>\n );\n };\n\n return (\n <div\n ref={(e) => {\n root.current = e;\n if (typeof ref === \"function\") ref(e);\n else if (ref) (ref as { current: HTMLDivElement | null }).current = e;\n }}\n className={cn(\"relative w-full min-w-0\", className)}\n >\n <div\n role=\"table\"\n aria-label={ariaLabel}\n aria-rowcount={rows.length + 1}\n aria-busy={loading || undefined}\n className={cn(\"w-full overflow-clip\", inset && \"rounded-group bg-raised shadow-xs\")}\n >\n <div\n ref={head}\n role=\"rowgroup\"\n className={cn(\"sticky top-0 z-20 overflow-hidden\", inset ? \"bg-raised\" : \"bg-panel\")}\n onScroll={(e) => {\n if (body.current && body.current.scrollLeft !== e.currentTarget.scrollLeft) body.current.scrollLeft = e.currentTarget.scrollLeft;\n }}\n >\n {table.getHeaderGroups().map((hg) => (\n <div key={hg.id} role=\"row\" className=\"grid h-36 hairline-b-strong\" style={gridStyle}>\n {hg.headers\n .filter((h) => !hidden.has(h.column.id))\n .map((h, i) => {\n const meta = h.column.columnDef.meta;\n const sortable = h.column.getCanSort();\n const dir = h.column.getIsSorted();\n return (\n <div\n key={h.id}\n role=\"columnheader\"\n aria-sort={dir === \"asc\" ? \"ascending\" : dir === \"desc\" ? \"descending\" : sortable ? \"none\" : undefined}\n className={cn(\"group/th relative\", cellPad(i), meta?.align === \"end\" && \"justify-end\", stickyCol(i), stickyCol(i) && \"hairline-b-strong\")}\n >\n {sortable ? (\n <button\n type=\"button\"\n onClick={h.column.getToggleSortingHandler()}\n className={cn(\n \"relative -mx-6 inline-flex h-28 min-w-0 cursor-pointer items-center gap-4 rounded-pill px-6 text-caption font-medium transition-control hover:bg-fill-1 hover:text-fg focus-ring tap-target\",\n dir ? \"text-fg\" : \"text-fg-secondary\",\n meta?.align === \"end\" && \"flex-row-reverse\",\n )}\n >\n <span className=\"truncate\">{flexRender(h.column.columnDef.header, h.getContext())}</span>\n <Icon\n icon={dir === \"desc\" ? __icon_ArrowDown01Icon : __icon_ArrowUp01Icon}\n size=\"xs\"\n className={cn(\"shrink-0 transition-control\", dir ? \"opacity-100\" : \"opacity-0 group-hover/th:opacity-60\")}\n />\n </button>\n ) : (\n <span className=\"truncate text-caption font-medium text-fg-secondary\">{flexRender(h.column.columnDef.header, h.getContext())}</span>\n )}\n {h.column.getCanResize() && (\n <div\n role=\"separator\"\n aria-orientation=\"vertical\"\n aria-label={t(\"dataTable.resizeColumn\", \"Resize column\")}\n onMouseDown={h.getResizeHandler()}\n onTouchStart={h.getResizeHandler()}\n onDoubleClick={() => h.column.resetSize()}\n className=\"absolute top-8 right-0 bottom-8 w-8 cursor-col-resize after:absolute after:inset-y-0 after:right-0 after:w-1 after:bg-transparent after:transition-control group-hover/th:after:bg-line-strong\"\n />\n )}\n </div>\n );\n })}\n </div>\n ))}\n </div>\n <div\n ref={body}\n role=\"rowgroup\"\n className=\"overflow-x-auto scrollbar-quiet\"\n onScroll={(e) => {\n if (head.current && head.current.scrollLeft !== e.currentTarget.scrollLeft) head.current.scrollLeft = e.currentTarget.scrollLeft;\n }}\n >\n {error ? (\n <div role=\"row\">\n <div role=\"cell\" aria-colspan={cols.length} className=\"block\">\n <Empty\n size=\"compact\"\n title={t(\"dataTable.loadFailed\", \"Couldn't load these rows\")}\n actions={\n onRetry && (\n <Button size=\"sm\" onClick={onRetry}>\n {t(\"dataTable.tryAgain\", \"Try again\")}\n </Button>\n )\n }\n />\n </div>\n </div>\n ) : loading && rows.length === 0 ? (\n Array.from({ length: 8 }, (_, r) => (\n <div key={r} role=\"row\" className={cn(\"grid\", KAESO_DATA_TABLE_VARIANTS.density[density].classes)} style={gridStyle}>\n {cols.map((c, i) => (\n <div key={c.id} role=\"cell\" className={cn(cellPad(i), c.columnDef.meta?.align === \"end\" && \"justify-end\")}>\n <Skeleton shape=\"line\" style={{ width: `${40 + ((r * 7 + i * 13) % 45)}%` }} />\n </div>\n ))}\n </div>\n ))\n ) : rows.length === 0 ? (\n <div role=\"row\">\n <div role=\"cell\" aria-colspan={cols.length} className=\"block\">\n {empty ?? (\n <Empty size=\"compact\" title={t(\"dataTable.noRows\", \"No rows\")} description={t(\"dataTable.noMatches\", \"Nothing matches these filters.\")} />\n )}\n </div>\n </div>\n ) : virtual ? (\n <div className=\"relative\" style={{ height: virtualizer.getTotalSize() }}>\n {virtualizer\n .getVirtualItems()\n .map((v) =>\n renderRow(rows[v.index]!, { position: \"absolute\", top: 0, left: 0, transform: `translateY(${Math.round(v.start - scrollMargin)}px)` }),\n )}\n </div>\n ) : (\n rows.map((r) => renderRow(r))\n )}\n </div>\n </div>\n {hasMore && <Pagination variant=\"load-more\" hasMore loading={loadingMore} onLoadMore={onLoadMore} />}\n </div>\n );\n}\n\nconst DataTableBase = /* @__PURE__ */ forwardRef(DataTableInner);\nif (process.env.NODE_ENV !== \"production\") DataTableBase.displayName = \"DataTable\";\nexport const DataTable = DataTableBase as unknown as <T>(\n p: DataTableProps<T> & { ref?: React.Ref<HTMLDivElement> | undefined },\n) => ReturnType<typeof DataTableInner>;\n","import type { ColumnDef } from \"@tanstack/react-table\";\nimport type { ReactNode } from \"react\";\nimport { formatDate, formatDuration, formatRelative, formatTokens, formatUSD, formatNumber } from \"../../format/index.js\";\nimport { StatusDot, type StatusDotProps } from \"../status-dot/status-dot.js\";\nimport { Avatar } from \"../avatar/avatar.js\";\nimport { Tooltip } from \"../tooltip/tooltip.js\";\nimport type { StatusTone } from \"../../utils/tone.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\ntype Base<T = never> = {\n id: string;\n header: ReactNode;\n size?: number | undefined;\n priority?: number | undefined;\n grow?: boolean | undefined;\n minWidth?: number | undefined;\n tone?: ((row: T) => StatusTone | undefined) | undefined;\n};\ntype Accessor<T, V> = (row: T) => V;\n\nfunction make<T, V>(\n b: Base<T>,\n get: Accessor<T, V>,\n cell: (v: V, row: T) => ReactNode,\n meta: object = {},\n sortingFn?: ColumnDef<T, V>[\"sortingFn\"],\n): ColumnDef<T, V> {\n return {\n id: b.id,\n header: () => b.header,\n accessorFn: get,\n cell: (ctx) => cell(ctx.getValue() as V, ctx.row.original),\n ...(b.size ? { size: b.size } : {}),\n ...(sortingFn ? { sortingFn } : {}),\n meta: {\n ...(b.priority !== undefined ? { priority: b.priority } : {}),\n ...(b.grow ? { grow: true } : {}),\n ...(b.minWidth !== undefined ? { minWidth: b.minWidth } : {}),\n ...(b.tone ? { tone: b.tone } : {}),\n ...meta,\n },\n };\n}\n\nfunction Tokens({ value }: { value: number }) {\n const t = useUiText();\n const exact = t(\"dataTable.tokenCount\", \"{count} tokens\", { count: formatNumber(value) });\n return (\n <Tooltip content={exact}>\n <span>\n <span aria-hidden>{formatTokens(value)}</span>\n <span className=\"sr-only\">{exact}</span>\n </span>\n </Tooltip>\n );\n}\n\nfunction RelativeTime({ value, now }: { value: string | Date; now: Date | number }) {\n const exact = formatDate(value, { time: true, seconds: true });\n return (\n <Tooltip content={`${exact} · ${formatDate(value, { time: true, utc: true })}`} shape=\"multiline\">\n <span className=\"text-fg-secondary\">\n <time dateTime={new Date(value).toISOString()}>{formatRelative(value, now)}</time>\n <span className=\"sr-only\"> {exact}</span>\n </span>\n </Tooltip>\n );\n}\n\nexport const col = {\n text: <T,>(b: Base<T>, get: Accessor<T, string>) => make(b, get, (v) => v, { text: (r: T) => get(r) }),\n mono: <T,>(b: Base<T>, get: Accessor<T, string>) => make(b, get, (v) => v, { mono: true, text: (r: T) => get(r) }),\n number: <T,>(b: Base<T>, get: Accessor<T, number>) => make(b, get, (v) => formatNumber(v), { align: \"end\" }),\n money: <T,>(b: Base<T>, get: Accessor<T, string>, options: { decimals?: number | undefined } = {}) =>\n make(\n b,\n get,\n (v) => formatUSD(v, options.decimals === undefined ? {} : { decimals: options.decimals }),\n { align: \"end\", mono: false },\n (a, c, id) => Number(a.getValue(id)) - Number(c.getValue(id)),\n ),\n tokens: <T,>(b: Base<T>, get: Accessor<T, number>) => make(b, get, (v) => <Tokens value={v} />, { align: \"end\" }),\n duration: <T,>(b: Base<T>, get: Accessor<T, number>) => make(b, get, (v) => formatDuration(v), { align: \"end\" }),\n date: <T,>(b: Base<T>, get: Accessor<T, string | Date>) =>\n make(b, get, (v) => <time dateTime={new Date(v).toISOString()}>{formatDate(v, { time: true })}</time>, {}, \"datetime\"),\n relative: <T,>(b: Base<T>, get: Accessor<T, string | Date>, options: { now?: Date | number | undefined } = {}) =>\n make(\n b,\n get,\n (v) => <RelativeTime value={v} now={options.now ?? Date.now()} />,\n {},\n (a, c, id) => new Date(a.getValue(id) as string).getTime() - new Date(c.getValue(id) as string).getTime(),\n ),\n status: <T,>(b: Base<T>, get: Accessor<T, { tone: NonNullable<StatusDotProps[\"tone\"]>; label: string }>) =>\n make(b, get, (v) => <StatusDot tone={v.tone}>{v.label}</StatusDot>, { text: undefined }),\n avatar: <T,>(b: Base<T>, get: Accessor<T, { name: string; src?: string | undefined }>) =>\n make(b, get, (v) => (\n <span className=\"inline-flex min-w-0 items-center gap-8\">\n <Avatar name={v.name} {...(v.src ? { src: v.src } : {})} size={24} decorative />\n <span className=\"truncate\">{v.name}</span>\n </span>\n )),\n custom: <T, V>(\n b: Base<T>,\n get: Accessor<T, V>,\n cell: (v: V, row: T) => ReactNode,\n meta: { align?: \"start\" | \"end\" | undefined; mono?: boolean | undefined } = {},\n ) => make(b, get, cell, meta),\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"data-table.js","names":["__icon_ArrowDown01Icon","__icon_ArrowUp01Icon","cn","useInset","useGutterPadded","useUiText","Icon","Tooltip","observeResize","Text","Button","CheckboxBox","ContextMenu","Skeleton","Pagination","Empty","StatusDot","Avatar","scrollParent","STATUS_TONE_TEXT","useScrollMargin","KAESO_DATA_TABLE_VARIANTS","KAESO_DATA_TABLE_DEFAULT_VARIANTS","ROW_H","DATA_TABLE_GROW_MIN","fitColumns","width","byPriority","columns","a","b","used","reserve","keep","c","kept","full","least","growMin","last","contentWidth","style","el","rowName","column","text","row","raw","DataTableInner","userColumns","sortingProp","ariaLabel","inset","padded","t","sortingInner","setSortingInner","useState","selectionInner","setSelectionInner","focusRow","setFocusRow","sorting","rowSelection","selection","useMemo","selectable","table","name","useReactTable","next","u","onSortingChange","onSelectionChange","getCoreRowModel","getSortedRowModel","manualSorting","getRowId","r","root","useRef","head","body","leaf","fitInput","fitKey","hiddenFor","fit","hiddenForRef","hiddenKey","setHiddenKey","useLayoutEffect","mode","hiddenIds","tight","overflow","hidden","onHiddenRef","onHiddenColumnsChange","cols","trackMin","gridStyle","pinEnd","rows","virtual","virtualizeAbove","getScrollElement","scrollMargin","virtualizer","useVirtualizer","density","cellPad","i","stickyCol","stickyFirstColumn","focusable","onRowClick","stop","focusAt","line","now","page","onRowKeyDown","to","renderRow","cells","activeRowId","freshRowIds","meta","cell","content","flexRender","tone","rowMenu","ref","className","loading","hg","h","sortable","dir","ArrowDown01Icon","ArrowUp01Icon","step","id","min","max","old","error","onRetry","empty","v","hasMore","loadingMore","DataTableBase","DataTable","make","get","ctx","sortingFn","Tokens","exact","formatNumber","value","formatTokens","RelativeTime","formatDate","formatRelative","col","formatUSD","options","formatDuration"],"sources":["../../src/components/data-table/data-table.tsx","../../src/components/data-table/columns.tsx"],"sourcesContent":["import type * as React from \"react\";\nimport { forwardRef, useLayoutEffect, useMemo, useRef, useState, type CSSProperties, type KeyboardEvent, type ReactNode } from \"react\";\nimport {\n flexRender,\n getCoreRowModel,\n getSortedRowModel,\n useReactTable,\n type ColumnDef,\n type Row,\n type RowSelectionState,\n type SortingState,\n} from \"@tanstack/react-table\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport { cn } from \"../../utils/cn.js\";\nimport { observeResize } from \"../../utils/observe-resize.js\";\nimport { useGutterPadded, useInset } from \"../../utils/inset.js\";\nimport { ArrowDown01Icon as __icon_ArrowDown01Icon, ArrowUp01Icon as __icon_ArrowUp01Icon } from \"@hugeicons/core-free-icons\";\nimport { Icon } from \"../icon/icon.js\";\nimport { CheckboxBox } from \"../checkbox/checkbox.js\";\nimport { Skeleton } from \"../skeleton/skeleton.js\";\nimport { Empty } from \"../empty/empty.js\";\nimport { Button } from \"../button/button.js\";\nimport { Pagination } from \"../pagination/pagination.js\";\nimport { ContextMenu } from \"../menu/menu.js\";\nimport { Text } from \"../text/text.js\";\nimport { STATUS_TONE_TEXT, type StatusTone } from \"../../utils/tone.js\";\nimport { scrollParent } from \"../../hooks/scroll-parent.js\";\nimport { useScrollMargin } from \"../../hooks/use-scroll-margin.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_DATA_TABLE_VARIANTS = {\n density: {\n compact: { classes: \"h-36\" },\n default: { classes: \"h-40\" },\n comfortable: { classes: \"h-48\" },\n },\n} as const;\nexport const KAESO_DATA_TABLE_DEFAULT_VARIANTS = { density: \"default\" } as const;\n\ndeclare module \"@tanstack/react-table\" {\n interface ColumnMeta<TData, TValue> {\n align?: \"start\" | \"end\" | undefined;\n priority?: number | undefined;\n grow?: boolean | undefined;\n minWidth?: number | undefined;\n mono?: boolean | undefined;\n text?: ((row: TData) => string) | undefined;\n tone?: ((row: TData) => StatusTone | undefined) | undefined;\n }\n}\n\nexport interface DataTableProps<T> {\n data: T[];\n columns: ColumnDef<T, any>[];\n getRowId?: ((row: T) => string) | undefined;\n density?: keyof typeof KAESO_DATA_TABLE_VARIANTS.density | undefined;\n onRowClick?: ((row: T) => void) | undefined;\n rowMenu?: ((row: T) => ReactNode) | undefined;\n selectable?: boolean | undefined;\n selection?: RowSelectionState | undefined;\n onSelectionChange?: ((selection: RowSelectionState) => void) | undefined;\n sorting?: SortingState | undefined;\n onSortingChange?: ((sorting: SortingState) => void) | undefined;\n manualSorting?: boolean | undefined;\n loading?: boolean | undefined;\n error?: ReactNode | undefined;\n onRetry?: (() => void) | undefined;\n empty?: ReactNode | undefined;\n hasMore?: boolean | undefined;\n loadingMore?: boolean | undefined;\n onLoadMore?: (() => void) | undefined;\n stickyFirstColumn?: boolean | undefined;\n virtualizeAbove?: number | undefined;\n \"aria-label\": string;\n className?: string | undefined;\n activeRowId?: string | undefined;\n freshRowIds?: ReadonlySet<string> | undefined;\n onHiddenColumnsChange?: ((ids: string[]) => void) | undefined;\n}\n\nconst ROW_H = { compact: 36, default: 40, comfortable: 48 } as const;\n\nexport const DATA_TABLE_GROW_MIN = 136;\n\ntype FitColumn = { id: string; size: number; priority: number; grow: boolean; minWidth: number | undefined; fixed?: boolean | undefined };\n\nexport function fitColumns(columns: FitColumn[], width: number, reserve = 48): { hidden: string[]; tight: boolean; overflow: boolean } {\n if (!width) return { hidden: [], tight: false, overflow: false };\n const byPriority = [...columns].sort((a, b) => a.priority - b.priority);\n let used = reserve;\n const keep = new Set<string>();\n for (const c of byPriority) {\n used += c.size;\n if (used <= width || c.priority <= 1 || c.fixed) keep.add(c.id);\n }\n const kept = columns.filter((c) => keep.has(c.id));\n const full = kept.reduce((a, c) => a + c.size, reserve);\n let least = kept.reduce((a, c) => a + (c.grow ? growMin(c) : c.size), 0);\n if (least > width && kept.some((c) => c.grow)) {\n const last = kept[kept.length - 1];\n for (const c of [...kept].reverse()) {\n if (least <= width) break;\n if (c.grow || c.fixed || c === last) continue;\n keep.delete(c.id);\n least -= c.size;\n }\n }\n return { hidden: columns.filter((c) => !keep.has(c.id)).map((c) => c.id), tight: full > width, overflow: least > width };\n}\n\nfunction contentWidth(el: HTMLElement): number {\n const style = getComputedStyle(el);\n return el.getBoundingClientRect().width - (parseFloat(style.paddingLeft) || 0) - (parseFloat(style.paddingRight) || 0);\n}\n\nfunction rowName<T>(column: ColumnDef<T, any> | undefined, row: Row<T>): string | undefined {\n if (!column?.id) return undefined;\n const text = column.meta?.text?.(row.original);\n if (text) return text;\n const raw = row.getValue(column.id);\n return typeof raw === \"string\" && raw ? raw : undefined;\n}\n\nconst growMin = (c: { size: number; minWidth: number | undefined }) => Math.min(c.size, c.minWidth ?? DATA_TABLE_GROW_MIN);\n\nfunction DataTableInner<T>(\n {\n data,\n columns: userColumns,\n getRowId,\n density = \"default\",\n onRowClick,\n rowMenu,\n selectable,\n selection,\n onSelectionChange,\n sorting: sortingProp,\n onSortingChange,\n manualSorting,\n loading,\n error,\n onRetry,\n empty,\n hasMore,\n loadingMore,\n onLoadMore,\n stickyFirstColumn,\n virtualizeAbove = 100,\n className,\n activeRowId,\n freshRowIds,\n onHiddenColumnsChange,\n \"aria-label\": ariaLabel,\n }: DataTableProps<T>,\n ref: React.Ref<HTMLDivElement>,\n) {\n const inset = useInset();\n const padded = useGutterPadded();\n const t = useUiText();\n const [sortingInner, setSortingInner] = useState<SortingState>([]);\n const [selectionInner, setSelectionInner] = useState<RowSelectionState>({});\n const [focusRow, setFocusRow] = useState(0);\n const sorting = sortingProp ?? sortingInner;\n const rowSelection = selection ?? selectionInner;\n const columns = useMemo<ColumnDef<T, any>[]>(() => {\n if (!selectable) return userColumns;\n return [\n {\n id: \"__select\",\n size: 44,\n enableSorting: false,\n enableResizing: false,\n meta: { priority: 1 },\n header: ({ table }) => (\n <CheckboxBox\n aria-label={t(\"dataTable.selectAllRows\", \"Select all rows\")}\n checked={table.getIsAllRowsSelected()}\n indeterminate={table.getIsSomeRowsSelected()}\n onCheckedChange={(c) => table.toggleAllRowsSelected(c)}\n />\n ),\n cell: ({ row }) => {\n const name = rowName(userColumns[0], row);\n return (\n <CheckboxBox\n aria-label={name ? t(\"dataTable.selectNamed\", \"Select {name}\", { name }) : t(\"dataTable.selectRow\", \"Select row\")}\n checked={row.getIsSelected()}\n onCheckedChange={(c) => row.toggleSelected(c)}\n />\n );\n },\n },\n ...userColumns,\n ];\n }, [userColumns, selectable, t]);\n\n const table = useReactTable({\n data,\n columns,\n state: { sorting, rowSelection },\n onSortingChange: (u) => {\n const next = typeof u === \"function\" ? u(sorting) : u;\n if (!sortingProp) setSortingInner(next);\n onSortingChange?.(next);\n },\n onRowSelectionChange: (u) => {\n const next = typeof u === \"function\" ? u(rowSelection) : u;\n if (!selection) setSelectionInner(next);\n onSelectionChange?.(next);\n },\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n manualSorting: !!manualSorting,\n enableRowSelection: !!selectable,\n columnResizeMode: \"onChange\",\n ...(getRowId ? { getRowId: (r: T) => getRowId(r) } : {}),\n defaultColumn: { size: 140, minSize: 64, maxSize: 640 },\n });\n\n const root = useRef<HTMLDivElement | null>(null);\n const head = useRef<HTMLDivElement | null>(null);\n const body = useRef<HTMLDivElement | null>(null);\n const leaf = table.getVisibleLeafColumns();\n const fitInput = leaf.map((c) => ({\n id: c.id,\n size: c.getSize(),\n priority: c.columnDef.meta?.priority ?? 2,\n grow: !!c.columnDef.meta?.grow,\n minWidth: c.columnDef.meta?.minWidth,\n fixed: c.id === \"__select\",\n }));\n const fitKey = JSON.stringify(fitInput);\n const hiddenFor = (width: number) => {\n const fit = fitColumns(fitInput, width, inset ? 48 : 0);\n return `${fit.tight ? \"!\" : \"\"}${fit.overflow ? \">\" : \"\"}|${fit.hidden.join(\" \")}`;\n };\n const hiddenForRef = useRef(hiddenFor);\n hiddenForRef.current = hiddenFor;\n const [hiddenKey, setHiddenKey] = useState(\"|\");\n useLayoutEffect(() => {\n const el = root.current;\n if (!el) return;\n return observeResize([el], ([e]) => setHiddenKey(hiddenForRef.current(Math.round(e?.contentRect.width ?? 0))));\n }, []);\n useLayoutEffect(() => {\n if (root.current) setHiddenKey(hiddenForRef.current(Math.round(contentWidth(root.current))));\n }, [fitKey]);\n const [mode = \"\", hiddenIds = \"\"] = hiddenKey.split(\"|\");\n const tight = mode.includes(\"!\");\n const overflow = mode.includes(\">\");\n const hidden = useMemo(() => new Set(hiddenIds.split(\" \").filter(Boolean)), [hiddenIds]);\n const onHiddenRef = useRef(onHiddenColumnsChange);\n onHiddenRef.current = onHiddenColumnsChange;\n useLayoutEffect(() => {\n onHiddenRef.current?.([...hidden]);\n }, [hidden]);\n const cols = leaf.filter((c) => !hidden.has(c.id));\n const trackMin = (c: (typeof cols)[number]) =>\n c.columnDef.meta?.grow ? (tight ? growMin({ size: c.getSize(), minWidth: c.columnDef.meta.minWidth }) : c.getSize()) : c.getSize();\n const template = cols.map((c) => (c.columnDef.meta?.grow ? `minmax(${trackMin(c)}px, 1fr)` : `${c.getSize()}px`)).join(\" \");\n const gridStyle: CSSProperties = { gridTemplateColumns: template, minWidth: cols.reduce((a, c) => a + trackMin(c), 0) };\n const pinEnd = overflow && cols.length > 1 && !cols[cols.length - 1]?.columnDef.meta?.grow;\n\n const rows = table.getRowModel().rows;\n const virtual = rows.length > virtualizeAbove;\n const getScrollElement = () => scrollParent(root.current);\n const scrollMargin = useScrollMargin(body, getScrollElement, rows.length);\n const virtualizer = useVirtualizer({\n count: rows.length,\n getScrollElement,\n estimateSize: () => ROW_H[density],\n overscan: 16,\n enabled: virtual,\n scrollMargin,\n });\n\n const cellPad = (i: number) => cn(\"flex min-w-0 items-center px-12\", inset && i === 0 && \"pl-20\", inset && i === cols.length - 1 && \"pr-20\");\n const stickyCol = (i: number) =>\n ((stickyFirstColumn && i === 0) || (pinEnd && i === cols.length - 1)) &&\n cn(\n \"sticky z-10 group-hover/tr:bg-fill-1 group-aria-selected/tr:bg-fill-2 group-data-active/tr:bg-fill-2\",\n i === 0 ? \"left-0\" : \"right-0\",\n inset ? \"bg-raised\" : cn(\"bg-panel\", i === 0 ? \"rounded-l-item\" : \"rounded-r-item\"),\n );\n\n const focusable = !!onRowClick || !!selectable;\n const stop = Math.min(focusRow, Math.max(rows.length - 1, 0));\n const focusAt = (i: number) => {\n const next = Math.max(0, Math.min(rows.length - 1, i));\n setFocusRow(next);\n if (virtual) virtualizer.scrollToIndex(next, { align: \"auto\" });\n const line = () => body.current?.querySelector<HTMLElement>(`[data-row-index=\"${next}\"]`);\n const now = line();\n if (now) now.focus();\n else requestAnimationFrame(() => line()?.focus());\n };\n const page = () => Math.max(1, Math.floor((getScrollElement()?.clientHeight ?? 400) / ROW_H[density]) - 1);\n const onRowKeyDown = (e: KeyboardEvent<HTMLDivElement>, row: Row<T>, i: number) => {\n if (e.target !== e.currentTarget || e.altKey || e.metaKey || e.ctrlKey) return;\n const to = { ArrowDown: i + 1, ArrowUp: i - 1, Home: 0, End: rows.length - 1, PageDown: i + page(), PageUp: i - page() }[e.key];\n if (to !== undefined) {\n e.preventDefault();\n focusAt(to);\n } else if (e.key === \"Enter\") {\n e.preventDefault();\n onRowClick?.(row.original);\n } else if (e.key === \" \" && selectable) {\n e.preventDefault();\n row.toggleSelected();\n }\n };\n\n const renderRow = (row: Row<T>, i: number, style?: CSSProperties) => {\n const cells = row.getVisibleCells().filter((c) => !hidden.has(c.column.id));\n const el = (\n <div\n role=\"row\"\n aria-rowindex={i + 2}\n aria-selected={selectable ? row.getIsSelected() : undefined}\n data-active={row.id === activeRowId || undefined}\n data-fresh={freshRowIds?.has(row.id) || undefined}\n data-row-index={i}\n tabIndex={focusable ? (i === stop ? 0 : -1) : undefined}\n onFocus={(e) => {\n if (e.target === e.currentTarget && i !== focusRow) setFocusRow(i);\n }}\n onClick={(e) => {\n if ((e.target as HTMLElement).closest(\"button, a, [role=checkbox]\")) return;\n onRowClick?.(row.original);\n }}\n onKeyDown={(e) => onRowKeyDown(e, row, i)}\n style={{ ...gridStyle, ...style }}\n className={cn(\n \"group/tr grid w-full text-body text-fg transition-control focus-ring-inset\",\n !inset && \"rounded-item\",\n KAESO_DATA_TABLE_VARIANTS.density[density].classes,\n onRowClick && \"cursor-pointer\",\n \"hover:bg-fill-1 aria-selected:bg-fill-2 data-active:bg-fill-2 data-fresh:animate-row-fresh\",\n \"hover:controls-on-fill aria-selected:controls-on-fill data-active:controls-on-fill\",\n )}\n >\n {cells.map((cell, i) => {\n const meta = cell.column.columnDef.meta;\n const content = flexRender(cell.column.columnDef.cell, cell.getContext());\n const raw = cell.getValue();\n const text = meta?.text ? meta.text(row.original) : typeof raw === \"string\" ? raw : undefined;\n const tone = meta?.tone?.(row.original);\n return (\n <div\n key={cell.id}\n role=\"cell\"\n className={cn(\n cellPad(i),\n meta?.align === \"end\" && \"justify-end text-right tabular\",\n meta?.mono && \"mono text-small\",\n tone && STATUS_TONE_TEXT[tone],\n stickyCol(i),\n )}\n >\n {text !== undefined && typeof content !== \"object\" ? (\n <Text truncate tone={tone ?? \"default\"} className={cn(\"min-w-0\", meta?.mono && \"text-small\")} mono={!!meta?.mono}>\n {text}\n </Text>\n ) : (\n <span className={cn(\"min-w-0 truncate cell-fit\", meta?.grow && \"flex-1\")}>{content}</span>\n )}\n </div>\n );\n })}\n </div>\n );\n if (!rowMenu) return <div key={row.id}>{el}</div>;\n return (\n <ContextMenu key={row.id}>\n <ContextMenu.Trigger>{el}</ContextMenu.Trigger>\n <ContextMenu.Content>{rowMenu(row.original)}</ContextMenu.Content>\n </ContextMenu>\n );\n };\n\n return (\n <div\n ref={(e) => {\n root.current = e;\n if (typeof ref === \"function\") ref(e);\n else if (ref) (ref as { current: HTMLDivElement | null }).current = e;\n }}\n className={cn(\"relative w-full min-w-0\", !inset && !padded && \"px-24\", className)}\n >\n <div\n role=\"table\"\n aria-label={ariaLabel}\n aria-rowcount={rows.length + 1}\n aria-busy={loading || undefined}\n className={cn(\"w-full overflow-clip\", inset && \"rounded-group bg-raised shadow-xs\")}\n >\n <div\n ref={head}\n role=\"rowgroup\"\n className={cn(\"sticky top-0 z-20 overflow-hidden\", inset ? \"bg-raised\" : \"bg-panel\")}\n onScroll={(e) => {\n if (body.current && body.current.scrollLeft !== e.currentTarget.scrollLeft) body.current.scrollLeft = e.currentTarget.scrollLeft;\n }}\n >\n {table.getHeaderGroups().map((hg) => (\n <div key={hg.id} role=\"row\" aria-rowindex={1} className=\"grid h-36 hairline-b-strong\" style={gridStyle}>\n {hg.headers\n .filter((h) => !hidden.has(h.column.id))\n .map((h, i) => {\n const meta = h.column.columnDef.meta;\n const sortable = h.column.getCanSort();\n const dir = h.column.getIsSorted();\n return (\n <div\n key={h.id}\n role=\"columnheader\"\n aria-sort={dir === \"asc\" ? \"ascending\" : dir === \"desc\" ? \"descending\" : sortable ? \"none\" : undefined}\n className={cn(\"group/th relative\", cellPad(i), meta?.align === \"end\" && \"justify-end\", stickyCol(i), stickyCol(i) && \"hairline-b-strong\")}\n >\n {sortable ? (\n <button\n type=\"button\"\n onClick={h.column.getToggleSortingHandler()}\n className={cn(\n \"relative -mx-6 inline-flex h-28 min-w-0 cursor-pointer items-center gap-4 rounded-pill px-6 text-caption font-medium transition-control hover:bg-fill-1 hover:text-fg focus-ring tap-target\",\n dir ? \"text-fg\" : \"text-fg-secondary\",\n meta?.align === \"end\" && \"flex-row-reverse\",\n )}\n >\n <span className=\"truncate\">{flexRender(h.column.columnDef.header, h.getContext())}</span>\n <Icon\n icon={dir === \"desc\" ? __icon_ArrowDown01Icon : __icon_ArrowUp01Icon}\n size=\"xs\"\n className={cn(\"shrink-0 transition-control\", dir ? \"opacity-100\" : \"opacity-0 group-hover/th:opacity-60\")}\n />\n </button>\n ) : (\n <span className=\"truncate text-caption font-medium text-fg-secondary\">{flexRender(h.column.columnDef.header, h.getContext())}</span>\n )}\n {h.column.getCanResize() && (\n <div\n role=\"separator\"\n aria-orientation=\"vertical\"\n aria-label={t(\"dataTable.resizeColumn\", \"Resize column\")}\n aria-valuenow={h.column.getSize()}\n aria-valuemin={h.column.columnDef.minSize ?? 64}\n aria-valuemax={h.column.columnDef.maxSize ?? 640}\n tabIndex={0}\n onKeyDown={(e) => {\n const step = { ArrowLeft: -16, ArrowRight: 16 }[e.key];\n if (step === undefined) return;\n e.preventDefault();\n const id = h.column.id;\n const min = h.column.columnDef.minSize ?? 64;\n const max = h.column.columnDef.maxSize ?? 640;\n table.setColumnSizing((old) => ({ ...old, [id]: Math.max(min, Math.min(max, h.column.getSize() + step)) }));\n }}\n onMouseDown={h.getResizeHandler()}\n onTouchStart={h.getResizeHandler()}\n onDoubleClick={() => h.column.resetSize()}\n className=\"absolute top-8 right-0 bottom-8 w-8 cursor-col-resize rounded-pill after:absolute after:inset-y-0 after:right-0 after:w-1 after:bg-transparent after:transition-control group-hover/th:after:bg-line-strong focus-ring-inset\"\n />\n )}\n </div>\n );\n })}\n </div>\n ))}\n </div>\n <div\n ref={body}\n role=\"rowgroup\"\n className=\"overflow-x-auto scrollbar-quiet\"\n onScroll={(e) => {\n if (head.current && head.current.scrollLeft !== e.currentTarget.scrollLeft) head.current.scrollLeft = e.currentTarget.scrollLeft;\n }}\n >\n {error ? (\n <div role=\"row\">\n <div role=\"cell\" aria-colspan={cols.length} className=\"block\">\n <div role=\"alert\">\n <Empty\n size=\"compact\"\n title={t(\"dataTable.loadFailed\", \"Couldn't load these rows\")}\n actions={\n onRetry && (\n <Button size=\"sm\" onClick={onRetry}>\n {t(\"dataTable.tryAgain\", \"Try again\")}\n </Button>\n )\n }\n />\n </div>\n </div>\n </div>\n ) : loading && rows.length === 0 ? (\n Array.from({ length: 8 }, (_, r) => (\n <div key={r} role=\"row\" className={cn(\"grid\", KAESO_DATA_TABLE_VARIANTS.density[density].classes)} style={gridStyle}>\n {cols.map((c, i) => (\n <div key={c.id} role=\"cell\" className={cn(cellPad(i), c.columnDef.meta?.align === \"end\" && \"justify-end\")}>\n <Skeleton shape=\"line\" style={{ width: `${40 + ((r * 7 + i * 13) % 45)}%` }} />\n </div>\n ))}\n </div>\n ))\n ) : rows.length === 0 ? (\n <div role=\"row\">\n <div role=\"cell\" aria-colspan={cols.length} className=\"block\">\n {empty ?? (\n <Empty size=\"compact\" title={t(\"dataTable.noRows\", \"No rows\")} description={t(\"dataTable.noMatches\", \"Nothing matches these filters.\")} />\n )}\n </div>\n </div>\n ) : virtual ? (\n <div className=\"relative\" style={{ height: virtualizer.getTotalSize() }}>\n {virtualizer.getVirtualItems().map((v) =>\n renderRow(rows[v.index]!, v.index, {\n position: \"absolute\",\n top: 0,\n left: 0,\n transform: `translateY(${Math.round(v.start - scrollMargin)}px)`,\n }),\n )}\n </div>\n ) : (\n rows.map((r, i) => renderRow(r, i))\n )}\n </div>\n </div>\n {hasMore && <Pagination variant=\"load-more\" hasMore loading={loadingMore} onLoadMore={onLoadMore} />}\n </div>\n );\n}\n\nconst DataTableBase = /* @__PURE__ */ forwardRef(DataTableInner);\nif (process.env.NODE_ENV !== \"production\") DataTableBase.displayName = \"DataTable\";\nexport const DataTable = DataTableBase as unknown as <T>(\n p: DataTableProps<T> & { ref?: React.Ref<HTMLDivElement> | undefined },\n) => ReturnType<typeof DataTableInner>;\n","import type { ColumnDef } from \"@tanstack/react-table\";\nimport type { ReactNode } from \"react\";\nimport { formatDate, formatDuration, formatRelative, formatTokens, formatUSD, formatNumber } from \"../../format/index.js\";\nimport { StatusDot, type StatusDotProps } from \"../status-dot/status-dot.js\";\nimport { Avatar } from \"../avatar/avatar.js\";\nimport { Tooltip } from \"../tooltip/tooltip.js\";\nimport type { StatusTone } from \"../../utils/tone.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\ntype Base<T = never> = {\n id: string;\n header: ReactNode;\n size?: number | undefined;\n priority?: number | undefined;\n grow?: boolean | undefined;\n minWidth?: number | undefined;\n tone?: ((row: T) => StatusTone | undefined) | undefined;\n};\ntype Accessor<T, V> = (row: T) => V;\n\nfunction make<T, V>(\n b: Base<T>,\n get: Accessor<T, V>,\n cell: (v: V, row: T) => ReactNode,\n meta: object = {},\n sortingFn?: ColumnDef<T, V>[\"sortingFn\"],\n): ColumnDef<T, V> {\n return {\n id: b.id,\n header: () => b.header,\n accessorFn: get,\n cell: (ctx) => cell(ctx.getValue() as V, ctx.row.original),\n ...(b.size ? { size: b.size } : {}),\n ...(sortingFn ? { sortingFn } : {}),\n meta: {\n ...(b.priority !== undefined ? { priority: b.priority } : {}),\n ...(b.grow ? { grow: true } : {}),\n ...(b.minWidth !== undefined ? { minWidth: b.minWidth } : {}),\n ...(b.tone ? { tone: b.tone } : {}),\n ...meta,\n },\n };\n}\n\nfunction Tokens({ value }: { value: number }) {\n const t = useUiText();\n const exact = t(\"dataTable.tokenCount\", \"{count} tokens\", { count: formatNumber(value) });\n return (\n <Tooltip content={exact}>\n <span>\n <span aria-hidden>{formatTokens(value)}</span>\n <span className=\"sr-only\">{exact}</span>\n </span>\n </Tooltip>\n );\n}\n\nfunction RelativeTime({ value, now }: { value: string | Date; now: Date | number }) {\n const exact = formatDate(value, { time: true, seconds: true });\n return (\n <Tooltip content={`${exact} · ${formatDate(value, { time: true, utc: true })}`} shape=\"multiline\">\n <span className=\"text-fg-secondary\">\n <time dateTime={new Date(value).toISOString()}>{formatRelative(value, now)}</time>\n <span className=\"sr-only\"> {exact}</span>\n </span>\n </Tooltip>\n );\n}\n\nexport const col = {\n text: <T,>(b: Base<T>, get: Accessor<T, string>) => make(b, get, (v) => v, { text: (r: T) => get(r) }),\n mono: <T,>(b: Base<T>, get: Accessor<T, string>) => make(b, get, (v) => v, { mono: true, text: (r: T) => get(r) }),\n number: <T,>(b: Base<T>, get: Accessor<T, number>) => make(b, get, (v) => formatNumber(v), { align: \"end\" }),\n money: <T,>(b: Base<T>, get: Accessor<T, string>, options: { decimals?: number | undefined } = {}) =>\n make(\n b,\n get,\n (v) => formatUSD(v, options.decimals === undefined ? {} : { decimals: options.decimals }),\n { align: \"end\", mono: false },\n (a, c, id) => Number(a.getValue(id)) - Number(c.getValue(id)),\n ),\n tokens: <T,>(b: Base<T>, get: Accessor<T, number>) => make(b, get, (v) => <Tokens value={v} />, { align: \"end\" }),\n duration: <T,>(b: Base<T>, get: Accessor<T, number>) => make(b, get, (v) => formatDuration(v), { align: \"end\" }),\n date: <T,>(b: Base<T>, get: Accessor<T, string | Date>) =>\n make(b, get, (v) => <time dateTime={new Date(v).toISOString()}>{formatDate(v, { time: true })}</time>, {}, \"datetime\"),\n relative: <T,>(b: Base<T>, get: Accessor<T, string | Date>, options: { now?: Date | number | undefined } = {}) =>\n make(\n b,\n get,\n (v) => <RelativeTime value={v} now={options.now ?? Date.now()} />,\n {},\n (a, c, id) => new Date(a.getValue(id) as string).getTime() - new Date(c.getValue(id) as string).getTime(),\n ),\n status: <T,>(b: Base<T>, get: Accessor<T, { tone: NonNullable<StatusDotProps[\"tone\"]>; label: string }>) =>\n make(b, get, (v) => <StatusDot tone={v.tone}>{v.label}</StatusDot>, { text: undefined }),\n avatar: <T,>(b: Base<T>, get: Accessor<T, { name: string; src?: string | undefined }>) =>\n make(b, get, (v) => (\n <span className=\"inline-flex min-w-0 items-center gap-8\">\n <Avatar name={v.name} {...(v.src ? { src: v.src } : {})} size={24} decorative />\n <span className=\"truncate\">{v.name}</span>\n </span>\n )),\n custom: <T, V>(\n b: Base<T>,\n get: Accessor<T, V>,\n cell: (v: V, row: T) => ReactNode,\n meta: { align?: \"start\" | \"end\" | undefined; mono?: boolean | undefined } = {},\n ) => make(b, get, cell, meta),\n};\n"],"mappings":"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"}
@@ -1,12 +1,12 @@
1
1
  "use client";
2
- import { t as e } from "../chunks/cn-CidVUKMm.js";
2
+ import { t as e } from "../chunks/cn-DUDmdLpZ.js";
3
3
  import { t } from "../chunks/use-controllable-B5Fd12Bx.js";
4
4
  import { i as n, n as r } from "../chunks/context-BELWW79w.js";
5
5
  import { formatDate as i, formatDateRange as a } from "../format.js";
6
- import { t as o } from "../chunks/icon-CeNQtobn.js";
7
- import { c as s, s as c } from "../chunks/tooltip-DEbCCsru.js";
8
- import { a as l, o as u, s as d } from "../chunks/field-d8V94bvZ.js";
9
- import { i as f, n as p } from "../chunks/input-group-CYA1MEoZ.js";
6
+ import { t as o } from "../chunks/icon-BqujXDUc.js";
7
+ import { c as s, s as c } from "../chunks/tooltip-S1DmyLVl.js";
8
+ import { a as l, o as u, s as d } from "../chunks/field-BZriODU7.js";
9
+ import { i as f, n as p } from "../chunks/input-group-BQLw06B0.js";
10
10
  import { n as m, r as h } from "../chunks/popover-root-D3q89WNF.js";
11
11
  import { t as g } from "../chunks/when-idle-Cy3pinqO.js";
12
12
  import { forwardRef as _, useCallback as v, useEffect as y, useId as b, useMemo as x, useReducer as S, useRef as C, useState as w } from "react";
@@ -17,7 +17,7 @@ var k = { size: {
17
17
  sm: { classes: "h-32 pl-10 pr-12 gap-6 text-body" },
18
18
  md: { classes: "h-36 pl-14 pr-16 gap-8 text-body" },
19
19
  lg: { classes: "h-40 pl-16 pr-18 gap-8 text-body" }
20
- } }, A = { size: "md" }, j = /* @__PURE__ */ c(() => import("../chunks/date-popup-B-6xhb-1.js"), { base: () => import.meta.url }), M = /* @__PURE__ */ c(() => import("../chunks/range-popup-DGOnGGag.js"), { base: () => import.meta.url }), N = () => s(j), P = () => s(M);
20
+ } }, A = { size: "md" }, j = /* @__PURE__ */ c(() => import("../chunks/date-popup-BgDz6SUj.js"), { base: () => import.meta.url }), M = /* @__PURE__ */ c(() => import("../chunks/range-popup-CG9Jo5B7.js"), { base: () => import.meta.url }), N = () => s(j), P = () => s(M);
21
21
  function F(e) {
22
22
  let [t, n] = w(!1), [, r] = S((e) => e + 1, 0), i = !!e.current(), a = t && !i;
23
23
  y(() => {
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  import { i as e } from "../chunks/context-BELWW79w.js";
3
- import { n as t } from "../chunks/button-DQvoOxVQ.js";
4
- import { n } from "../chunks/resize-motion-CMaidkwe.js";
5
- import { a as r, c as i, i as a, l as o, n as s, o as c, r as l, s as u, t as d, u as f } from "../chunks/dialog-LNKgPEsV.js";
3
+ import { n as t } from "../chunks/button-CAPyW-v8.js";
4
+ import { n } from "../chunks/resize-motion-BWGMchyP.js";
5
+ import { a as r, c as i, i as a, l as o, n as s, o as c, r as l, s as u, t as d, u as f } from "../chunks/dialog-truWH0qe.js";
6
6
  import { Fragment as p, useEffect as m, useId as h, useLayoutEffect as g, useMemo as _, useRef as v, useState as y } from "react";
7
7
  import { Fragment as b, jsx as x, jsxs as S } from "react/jsx-runtime";
8
8
  //#region src/components/dialog/step-dialog.tsx
@@ -50,10 +50,6 @@ function T({ open: n, onOpenChange: r, title: i, steps: a, submitLabel: o, onSub
50
50
  "aria-labelledby": `${O}-step-${e.id}`,
51
51
  ...t === E ? M ? { "data-enter": M } : {} : { hidden: !0 },
52
52
  className: "flex min-w-0 flex-col gap-16 step-motion",
53
- onKeyDown: (e) => {
54
- let t = e.target;
55
- e.key === "Enter" && !e.metaKey && !e.ctrlKey && t.tagName === "INPUT" && t.getAttribute("role") !== "combobox" && (e.preventDefault(), G());
56
- },
57
53
  children: [/* @__PURE__ */ S("div", {
58
54
  className: "flex flex-col gap-4",
59
55
  children: [/* @__PURE__ */ x("h3", {
@@ -70,10 +66,12 @@ function T({ open: n, onOpenChange: r, title: i, steps: a, submitLabel: o, onSub
70
66
  }), Z = {
71
67
  ...n === void 0 ? {} : { open: n },
72
68
  ...r ? { onOpenChange: r } : {},
73
- ...p ? { inline: p } : {}
69
+ ...p ? { inline: p } : {},
70
+ persistent: !0
74
71
  };
75
72
  return T ? /* @__PURE__ */ S(s, {
76
73
  ...Z,
74
+ anchor: "top",
77
75
  size: T.size ?? d,
78
76
  title: T.title,
79
77
  description: T.description,
@@ -93,6 +91,7 @@ function T({ open: n, onOpenChange: r, title: i, steps: a, submitLabel: o, onSub
93
91
  })]
94
92
  }) : /* @__PURE__ */ S(s, {
95
93
  ...Z,
94
+ anchor: "top",
96
95
  busy: !!l,
97
96
  size: d,
98
97
  title: i,
@@ -112,7 +111,6 @@ function T({ open: n, onOpenChange: r, title: i, steps: a, submitLabel: o, onSub
112
111
  disabled: !!W,
113
112
  ...W ? { disabledReason: W } : {},
114
113
  onClick: G,
115
- reserveLabels: [o, q],
116
114
  children: U ? o : q
117
115
  })] }),
118
116
  children: [/* @__PURE__ */ x("p", {
@@ -1 +1 @@
1
- {"version":3,"file":"dialog.js","names":["_Fragment","useUiText","Button","KAESO_DIALOG_DEFAULT_VARIANTS","KAESO_LAYER_DIALOG_VARIANTS","KAESO_ALERT_DIALOG_VARIANTS","LayerDialog","Dialog","KAESO_DIALOG_VARIANTS","KAESO_ALERT_DIALOG_DEFAULT_VARIANTS","KAESO_LAYER_DIALOG_DEFAULT_VARIANTS","AlertDialog","focusDialogSection","Fragment$1","reducedMotion","bodyOf","el","StepDialog","index","setIndex","useState","defaultStep","uid","useId","t","announced","setAnnounced","enter","setEnter","opened","setOpened","open","sections","useRef","resultSection","moved","shown","go","to","body","finished","result","useLayoutEffect","useEffect","step","steps","last","blocked","next","submitting","onSubmit","progress","continueLabel","heardBefore","heardAfter","stepList","i","s","target","frame","onOpenChange","inline","size","tone","submitLabel","unmountClosed","DialogScope","state","setState","showing","closed","tracker","useMemo","id","DialogScopeContext","Fragment"],"sources":["../../src/components/dialog/step-dialog.tsx","../../src/components/dialog/scope.tsx"],"sourcesContent":["import { useEffect, useId, useLayoutEffect, useRef, useState, type KeyboardEvent, type ReactNode } from \"react\";\nimport { Button } from \"../button/button.js\";\nimport { Dialog, KAESO_DIALOG_VARIANTS } from \"./dialog.js\";\nimport { focusDialogSection } from \"./focus.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport interface DialogStep {\n id: string;\n title: ReactNode;\n description?: ReactNode | undefined;\n content: ReactNode;\n blockedReason?: string | undefined;\n}\n\nexport interface StepDialogResult {\n title: ReactNode;\n description?: ReactNode | undefined;\n content: ReactNode;\n footer: ReactNode;\n size?: keyof typeof KAESO_DIALOG_VARIANTS.size | undefined;\n}\n\nexport interface StepDialogProps {\n open?: boolean | undefined;\n onOpenChange?: ((open: boolean) => void) | undefined;\n title: ReactNode;\n steps: DialogStep[];\n submitLabel: string;\n onSubmit: () => void;\n submitting?: boolean | undefined;\n tone?: \"default\" | \"danger\" | undefined;\n size?: keyof typeof KAESO_DIALOG_VARIANTS.size | undefined;\n inline?: boolean | undefined;\n defaultStep?: number | undefined;\n result?: StepDialogResult | undefined;\n}\n\nfunction reducedMotion() {\n return typeof window !== \"undefined\" && !!window.matchMedia?.(\"(prefers-reduced-motion: reduce)\").matches;\n}\n\nconst bodyOf = (el: HTMLElement | null | undefined) => el?.closest<HTMLElement>(\"[data-dialog-body]\") ?? null;\n\nexport function StepDialog({\n open,\n onOpenChange,\n title,\n steps,\n submitLabel,\n onSubmit,\n submitting,\n tone = \"default\",\n size = \"sm\",\n inline,\n defaultStep = 0,\n result,\n}: StepDialogProps) {\n const [index, setIndex] = useState(defaultStep);\n const uid = useId();\n const t = useUiText();\n const [announced, setAnnounced] = useState(false);\n const [enter, setEnter] = useState<\"forward\" | \"back\" | null>(null);\n const [opened, setOpened] = useState({ open, defaultStep });\n if (opened.open !== open || opened.defaultStep !== defaultStep) {\n setOpened({ open, defaultStep });\n if (open || opened.defaultStep !== defaultStep) {\n setIndex(defaultStep);\n setAnnounced(false);\n setEnter(null);\n }\n }\n const sections = useRef<(HTMLElement | null)[]>([]);\n const resultSection = useRef<HTMLElement | null>(null);\n const moved = useRef(false);\n const shown = useRef(index);\n const go = (to: number) => {\n moved.current = true;\n setAnnounced(true);\n setEnter(reducedMotion() ? null : to > index ? \"forward\" : \"back\");\n setIndex(to);\n };\n useLayoutEffect(() => {\n if (shown.current === index) return;\n shown.current = index;\n const body = bodyOf(sections.current[index]);\n if (body) body.scrollTop = 0;\n }, [index]);\n const finished = !!result;\n useLayoutEffect(() => {\n if (!finished) return;\n const body = bodyOf(resultSection.current);\n if (body) body.scrollTop = 0;\n focusDialogSection(resultSection.current);\n }, [finished]);\n useEffect(() => {\n if (!moved.current) return;\n moved.current = false;\n focusDialogSection(sections.current[index]);\n }, [index]);\n const step = steps[Math.min(index, steps.length - 1)];\n const last = index >= steps.length - 1;\n const blocked = step?.blockedReason;\n const next = () => {\n if (blocked || submitting) return;\n if (last) onSubmit();\n else go(index + 1);\n };\n const progress = { current: index + 1, total: steps.length };\n const continueLabel = t(\"stepDialog.continue\", \"Continue\");\n const [heardBefore, heardAfter = \"\"] = t(\"stepDialog.stepAnnouncement\", \"Step {current} of {total}: {title}\", progress).split(\"{title}\");\n const stepList = (\n <div className=\"-m-8 overflow-clip p-8\">\n {steps.map((s, i) => (\n <section\n key={s.id}\n ref={(el) => {\n sections.current[i] = el;\n }}\n aria-labelledby={`${uid}-step-${s.id}`}\n {...(i !== index ? { hidden: true } : enter ? { \"data-enter\": enter } : {})}\n className=\"flex min-w-0 flex-col gap-16 step-motion\"\n onKeyDown={(e: KeyboardEvent) => {\n const target = e.target as HTMLElement;\n if (e.key === \"Enter\" && !e.metaKey && !e.ctrlKey && target.tagName === \"INPUT\" && target.getAttribute(\"role\") !== \"combobox\") {\n e.preventDefault();\n next();\n }\n }}\n >\n <div className=\"flex flex-col gap-4\">\n <h3 id={`${uid}-step-${s.id}`} tabIndex={-1} className=\"text-body-lg font-semibold text-fg outline-none\">\n {s.title}\n </h3>\n {s.description && <p className=\"text-small text-fg-secondary\">{s.description}</p>}\n </div>\n {s.content}\n </section>\n ))}\n </div>\n );\n const frame = {\n ...(open !== undefined ? { open } : {}),\n ...(onOpenChange ? { onOpenChange } : {}),\n ...(inline ? { inline } : {}),\n };\n if (result)\n return (\n <Dialog {...frame} size={result.size ?? size} title={result.title} description={result.description} footer={result.footer}>\n <p className=\"sr-only\" aria-live=\"polite\">\n {result.title}\n </p>\n <div className=\"-m-8 overflow-clip p-8\">\n <section ref={resultSection} {...(reducedMotion() ? {} : { \"data-enter\": \"forward\" })} className=\"flex min-w-0 flex-col step-motion\">\n {result.content}\n </section>\n </div>\n </Dialog>\n );\n return (\n <Dialog\n {...frame}\n busy={!!submitting}\n size={size}\n title={title}\n description={steps.length > 1 ? t(\"stepDialog.stepOf\", \"Step {current} of {total}\", progress) : undefined}\n onSubmit={next}\n footer={\n <>\n {index > 0 ? (\n <Button onClick={() => go(index - 1)} disabled={!!submitting}>\n {t(\"stepDialog.back\", \"Back\")}\n </Button>\n ) : (\n <Button onClick={() => onOpenChange?.(false)} disabled={!!submitting}>\n {t(\"stepDialog.cancel\", \"Cancel\")}\n </Button>\n )}\n <Button\n variant={last && tone === \"danger\" ? \"danger\" : \"primary\"}\n loading={last && submitting}\n disabled={!!blocked}\n {...(blocked ? { disabledReason: blocked } : {})}\n onClick={next}\n reserveLabels={[submitLabel, continueLabel]}\n >\n {last ? submitLabel : continueLabel}\n </Button>\n </>\n }\n >\n <p className=\"sr-only\" aria-live=\"polite\">\n {announced && step && (\n <>\n {heardBefore}\n {step.title}\n {heardAfter}\n </>\n )}\n </p>\n {stepList}\n </Dialog>\n );\n}\nif (process.env.NODE_ENV !== \"production\") StepDialog.displayName = \"StepDialog\";\n","import { Fragment, useEffect, useMemo, useRef, useState, type ReactNode } from \"react\";\nimport { DialogScopeContext, type DialogScopeTracker } from \"../../utils/dialog-scope.js\";\n\nexport interface DialogScopeProps {\n open: boolean;\n children: ReactNode;\n}\n\ninterface ScopeState {\n open: boolean;\n session: number;\n mounted: boolean;\n}\n\nconst unmountClosed = (s: ScopeState): ScopeState => (s.open || !s.mounted ? s : { ...s, mounted: false });\n\nexport function DialogScope({ open, children }: DialogScopeProps) {\n const [state, setState] = useState<ScopeState>({ open, session: 0, mounted: open });\n if (state.open !== open) setState({ open, session: open ? state.session + 1 : state.session, mounted: open || state.mounted });\n const showing = useRef(new Set<string>());\n const closed = useRef(!open);\n useEffect(() => {\n closed.current = !open;\n if (!open && showing.current.size === 0) setState(unmountClosed);\n }, [open]);\n const tracker = useMemo<DialogScopeTracker>(\n () => ({\n showing: (id) => void showing.current.add(id),\n hidden: (id) => {\n showing.current.delete(id);\n if (closed.current && showing.current.size === 0) setState(unmountClosed);\n },\n }),\n [],\n );\n if (!state.mounted) return null;\n return (\n <DialogScopeContext.Provider value={tracker}>\n <Fragment key={state.session}>{children}</Fragment>\n </DialogScopeContext.Provider>\n );\n}\nif (process.env.NODE_ENV !== \"production\") DialogScope.displayName = \"DialogScope\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"dialog.js","names":["_Fragment","useUiText","Button","KAESO_DIALOG_DEFAULT_VARIANTS","KAESO_LAYER_DIALOG_VARIANTS","KAESO_ALERT_DIALOG_VARIANTS","LayerDialog","Dialog","KAESO_DIALOG_VARIANTS","KAESO_ALERT_DIALOG_DEFAULT_VARIANTS","KAESO_LAYER_DIALOG_DEFAULT_VARIANTS","AlertDialog","focusDialogSection","Fragment$1","reducedMotion","bodyOf","el","StepDialog","index","setIndex","useState","defaultStep","uid","useId","t","announced","setAnnounced","enter","setEnter","opened","setOpened","open","sections","useRef","resultSection","moved","shown","go","to","body","finished","result","useLayoutEffect","useEffect","step","steps","last","blocked","next","submitting","onSubmit","progress","continueLabel","heardBefore","heardAfter","stepList","i","s","frame","onOpenChange","inline","size","tone","submitLabel","unmountClosed","DialogScope","state","setState","showing","closed","tracker","useMemo","id","DialogScopeContext","Fragment"],"sources":["../../src/components/dialog/step-dialog.tsx","../../src/components/dialog/scope.tsx"],"sourcesContent":["import { useEffect, useId, useLayoutEffect, useRef, useState, type ReactNode } from \"react\";\nimport { Button } from \"../button/button.js\";\nimport { Dialog, KAESO_DIALOG_VARIANTS } from \"./dialog.js\";\nimport { focusDialogSection } from \"./focus.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport interface DialogStep {\n id: string;\n title: ReactNode;\n description?: ReactNode | undefined;\n content: ReactNode;\n blockedReason?: string | undefined;\n}\n\nexport interface StepDialogResult {\n title: ReactNode;\n description?: ReactNode | undefined;\n content: ReactNode;\n footer: ReactNode;\n size?: keyof typeof KAESO_DIALOG_VARIANTS.size | undefined;\n}\n\nexport interface StepDialogProps {\n open?: boolean | undefined;\n onOpenChange?: ((open: boolean) => void) | undefined;\n title: ReactNode;\n steps: DialogStep[];\n submitLabel: string;\n onSubmit: () => void;\n submitting?: boolean | undefined;\n tone?: \"default\" | \"danger\" | undefined;\n size?: keyof typeof KAESO_DIALOG_VARIANTS.size | undefined;\n inline?: boolean | undefined;\n defaultStep?: number | undefined;\n result?: StepDialogResult | undefined;\n}\n\nfunction reducedMotion() {\n return typeof window !== \"undefined\" && !!window.matchMedia?.(\"(prefers-reduced-motion: reduce)\").matches;\n}\n\nconst bodyOf = (el: HTMLElement | null | undefined) => el?.closest<HTMLElement>(\"[data-dialog-body]\") ?? null;\n\nexport function StepDialog({\n open,\n onOpenChange,\n title,\n steps,\n submitLabel,\n onSubmit,\n submitting,\n tone = \"default\",\n size = \"sm\",\n inline,\n defaultStep = 0,\n result,\n}: StepDialogProps) {\n const [index, setIndex] = useState(defaultStep);\n const uid = useId();\n const t = useUiText();\n const [announced, setAnnounced] = useState(false);\n const [enter, setEnter] = useState<\"forward\" | \"back\" | null>(null);\n const [opened, setOpened] = useState({ open, defaultStep });\n if (opened.open !== open || opened.defaultStep !== defaultStep) {\n setOpened({ open, defaultStep });\n if (open || opened.defaultStep !== defaultStep) {\n setIndex(defaultStep);\n setAnnounced(false);\n setEnter(null);\n }\n }\n const sections = useRef<(HTMLElement | null)[]>([]);\n const resultSection = useRef<HTMLElement | null>(null);\n const moved = useRef(false);\n const shown = useRef(index);\n const go = (to: number) => {\n moved.current = true;\n setAnnounced(true);\n setEnter(reducedMotion() ? null : to > index ? \"forward\" : \"back\");\n setIndex(to);\n };\n useLayoutEffect(() => {\n if (shown.current === index) return;\n shown.current = index;\n const body = bodyOf(sections.current[index]);\n if (body) body.scrollTop = 0;\n }, [index]);\n const finished = !!result;\n useLayoutEffect(() => {\n if (!finished) return;\n const body = bodyOf(resultSection.current);\n if (body) body.scrollTop = 0;\n focusDialogSection(resultSection.current);\n }, [finished]);\n useEffect(() => {\n if (!moved.current) return;\n moved.current = false;\n focusDialogSection(sections.current[index]);\n }, [index]);\n const step = steps[Math.min(index, steps.length - 1)];\n const last = index >= steps.length - 1;\n const blocked = step?.blockedReason;\n const next = () => {\n if (blocked || submitting) return;\n if (last) onSubmit();\n else go(index + 1);\n };\n const progress = { current: index + 1, total: steps.length };\n const continueLabel = t(\"stepDialog.continue\", \"Continue\");\n const [heardBefore, heardAfter = \"\"] = t(\"stepDialog.stepAnnouncement\", \"Step {current} of {total}: {title}\", progress).split(\"{title}\");\n const stepList = (\n <div className=\"-m-8 overflow-clip p-8\">\n {steps.map((s, i) => (\n <section\n key={s.id}\n ref={(el) => {\n sections.current[i] = el;\n }}\n aria-labelledby={`${uid}-step-${s.id}`}\n {...(i !== index ? { hidden: true } : enter ? { \"data-enter\": enter } : {})}\n className=\"flex min-w-0 flex-col gap-16 step-motion\"\n >\n <div className=\"flex flex-col gap-4\">\n <h3 id={`${uid}-step-${s.id}`} tabIndex={-1} className=\"text-body-lg font-semibold text-fg outline-none\">\n {s.title}\n </h3>\n {s.description && <p className=\"text-small text-fg-secondary\">{s.description}</p>}\n </div>\n {s.content}\n </section>\n ))}\n </div>\n );\n const frame = {\n ...(open !== undefined ? { open } : {}),\n ...(onOpenChange ? { onOpenChange } : {}),\n ...(inline ? { inline } : {}),\n persistent: true,\n };\n if (result)\n return (\n <Dialog {...frame} anchor=\"top\" size={result.size ?? size} title={result.title} description={result.description} footer={result.footer}>\n <p className=\"sr-only\" aria-live=\"polite\">\n {result.title}\n </p>\n <div className=\"-m-8 overflow-clip p-8\">\n <section ref={resultSection} {...(reducedMotion() ? {} : { \"data-enter\": \"forward\" })} className=\"flex min-w-0 flex-col step-motion\">\n {result.content}\n </section>\n </div>\n </Dialog>\n );\n return (\n <Dialog\n {...frame}\n anchor=\"top\"\n busy={!!submitting}\n size={size}\n title={title}\n description={steps.length > 1 ? t(\"stepDialog.stepOf\", \"Step {current} of {total}\", progress) : undefined}\n onSubmit={next}\n footer={\n <>\n {index > 0 ? (\n <Button onClick={() => go(index - 1)} disabled={!!submitting}>\n {t(\"stepDialog.back\", \"Back\")}\n </Button>\n ) : (\n <Button onClick={() => onOpenChange?.(false)} disabled={!!submitting}>\n {t(\"stepDialog.cancel\", \"Cancel\")}\n </Button>\n )}\n <Button\n variant={last && tone === \"danger\" ? \"danger\" : \"primary\"}\n loading={last && submitting}\n disabled={!!blocked}\n {...(blocked ? { disabledReason: blocked } : {})}\n onClick={next}\n >\n {last ? submitLabel : continueLabel}\n </Button>\n </>\n }\n >\n <p className=\"sr-only\" aria-live=\"polite\">\n {announced && step && (\n <>\n {heardBefore}\n {step.title}\n {heardAfter}\n </>\n )}\n </p>\n {stepList}\n </Dialog>\n );\n}\nif (process.env.NODE_ENV !== \"production\") StepDialog.displayName = \"StepDialog\";\n","import { Fragment, useEffect, useMemo, useRef, useState, type ReactNode } from \"react\";\nimport { DialogScopeContext, type DialogScopeTracker } from \"../../utils/dialog-scope.js\";\n\nexport interface DialogScopeProps {\n open: boolean;\n children: ReactNode;\n}\n\ninterface ScopeState {\n open: boolean;\n session: number;\n mounted: boolean;\n}\n\nconst unmountClosed = (s: ScopeState): ScopeState => (s.open || !s.mounted ? s : { ...s, mounted: false });\n\nexport function DialogScope({ open, children }: DialogScopeProps) {\n const [state, setState] = useState<ScopeState>({ open, session: 0, mounted: open });\n if (state.open !== open) setState({ open, session: open ? state.session + 1 : state.session, mounted: open || state.mounted });\n const showing = useRef(new Set<string>());\n const closed = useRef(!open);\n useEffect(() => {\n closed.current = !open;\n if (!open && showing.current.size === 0) setState(unmountClosed);\n }, [open]);\n const tracker = useMemo<DialogScopeTracker>(\n () => ({\n showing: (id) => void showing.current.add(id),\n hidden: (id) => {\n showing.current.delete(id);\n if (closed.current && showing.current.size === 0) setState(unmountClosed);\n },\n }),\n [],\n );\n if (!state.mounted) return null;\n return (\n <DialogScopeContext.Provider value={tracker}>\n <Fragment key={state.session}>{children}</Fragment>\n </DialogScopeContext.Provider>\n );\n}\nif (process.env.NODE_ENV !== \"production\") DialogScope.displayName = \"DialogScope\";\n"],"mappings":"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"}
@@ -1,30 +1,30 @@
1
1
  "use client";
2
- import { t as e } from "../chunks/cn-CidVUKMm.js";
2
+ import { t as e } from "../chunks/cn-DUDmdLpZ.js";
3
3
  import { t } from "../chunks/dev-CR1p7gCm.js";
4
- import { i as n } from "../chunks/context-BELWW79w.js";
5
- import { t as r } from "../chunks/icon-CeNQtobn.js";
6
- import { t as i } from "../chunks/icon-button-_x1RUphC.js";
7
- import { a } from "../chunks/tag-Dg89uYpV.js";
8
- import { r as o } from "../chunks/switch-XMY_CQE-.js";
9
- import { r as s } from "../chunks/segmented-MrinfDL8.js";
10
- import { r as c } from "../chunks/select-Bc4kRiSG.js";
11
- import { i as l } from "../chunks/popover-BE7VO-a4.js";
12
- import { jsx as u, jsxs as d } from "react/jsx-runtime";
13
- import { SlidersHorizontalIcon as f } from "@hugeicons/core-free-icons";
4
+ import { i as n, r } from "../chunks/context-BELWW79w.js";
5
+ import { t as i } from "../chunks/icon-BqujXDUc.js";
6
+ import { t as a } from "../chunks/icon-button-D4O4puwH.js";
7
+ import { a as o } from "../chunks/tag-CwDKXVHj.js";
8
+ import { r as s } from "../chunks/switch-CSKMEomo.js";
9
+ import { r as c } from "../chunks/segmented-DXKVF-nY.js";
10
+ import { r as l } from "../chunks/select-Bbv2f5F8.js";
11
+ import { i as u } from "../chunks/popover-bjxg020P.js";
12
+ import { jsx as d, jsxs as f } from "react/jsx-runtime";
13
+ import { SlidersHorizontalIcon as p, ViewOffSlashIcon as m } from "@hugeicons/core-free-icons";
14
14
  //#region src/components/display-options/display-options.tsx
15
- var p = { trigger: {
15
+ var h = { trigger: {
16
16
  secondary: { classes: "" },
17
17
  ghost: { classes: "" }
18
- } }, m = { trigger: "secondary" };
19
- function h({ view: e, rows: t, toggles: i, properties: l, footer: f }) {
20
- let p = n();
21
- return /* @__PURE__ */ d("div", {
18
+ } }, g = { trigger: "secondary" };
19
+ function _({ view: e, rows: t, toggles: a, properties: u, footer: p }) {
20
+ let h = n(), g = r(), _ = u ? u.options.filter((e) => u.value.includes(e.value) && u.hidden?.includes(e.value)) : [];
21
+ return /* @__PURE__ */ f("div", {
22
22
  className: "flex w-320 flex-col",
23
23
  children: [
24
- e && /* @__PURE__ */ u("div", {
24
+ e && /* @__PURE__ */ d("div", {
25
25
  className: "p-12 pb-8",
26
- children: /* @__PURE__ */ u(s, {
27
- "aria-label": p("displayOptions.view", "View"),
26
+ children: /* @__PURE__ */ d(c, {
27
+ "aria-label": h("displayOptions.view", "View"),
28
28
  options: e.options,
29
29
  value: e.value,
30
30
  onValueChange: e.onChange,
@@ -33,17 +33,17 @@ function h({ view: e, rows: t, toggles: i, properties: l, footer: f }) {
33
33
  className: "bg-item-hover"
34
34
  })
35
35
  }),
36
- t && t.length > 0 && /* @__PURE__ */ u("div", {
36
+ t && t.length > 0 && /* @__PURE__ */ d("div", {
37
37
  className: "flex flex-col px-12 py-4",
38
- children: t.map((e) => /* @__PURE__ */ d("div", {
38
+ children: t.map((e) => /* @__PURE__ */ f("div", {
39
39
  className: "flex h-40 items-center justify-between gap-12",
40
- children: [/* @__PURE__ */ d("span", {
40
+ children: [/* @__PURE__ */ f("span", {
41
41
  className: "flex items-center gap-8 text-body text-fg-secondary",
42
- children: [e.icon && /* @__PURE__ */ u(r, {
42
+ children: [e.icon && /* @__PURE__ */ d(i, {
43
43
  icon: e.icon,
44
44
  size: "sm"
45
45
  }), e.label]
46
- }), /* @__PURE__ */ u(c, {
46
+ }), /* @__PURE__ */ d(l, {
47
47
  size: "sm",
48
48
  appearance: "default",
49
49
  "aria-label": e.label,
@@ -53,9 +53,9 @@ function h({ view: e, rows: t, toggles: i, properties: l, footer: f }) {
53
53
  })]
54
54
  }, e.label))
55
55
  }),
56
- i && i.length > 0 && /* @__PURE__ */ u("div", {
56
+ a && a.length > 0 && /* @__PURE__ */ d("div", {
57
57
  className: "flex flex-col px-12 py-4 hairline-t",
58
- children: i.map((e) => /* @__PURE__ */ u(o, {
58
+ children: a.map((e) => /* @__PURE__ */ d(s, {
59
59
  size: "sm",
60
60
  label: e.label,
61
61
  checked: e.checked,
@@ -63,50 +63,64 @@ function h({ view: e, rows: t, toggles: i, properties: l, footer: f }) {
63
63
  className: "h-40"
64
64
  }, e.label))
65
65
  }),
66
- l && /* @__PURE__ */ d("div", {
66
+ u && /* @__PURE__ */ f("div", {
67
67
  className: "flex flex-col gap-8 p-12 hairline-t",
68
- children: [/* @__PURE__ */ u("span", {
69
- className: "text-caption font-medium text-fg-secondary",
70
- children: p("displayOptions.properties", "Display properties")
71
- }), /* @__PURE__ */ u("div", {
72
- className: "flex flex-wrap gap-6",
73
- children: l.options.map((e) => {
74
- let t = l.value.includes(e.value);
75
- return /* @__PURE__ */ u(a, {
76
- size: "sm",
77
- variant: t ? "soft" : "outline",
78
- pressed: t,
79
- onClick: () => l.onChange(t ? l.value.filter((t) => t !== e.value) : [...l.value, e.value]),
80
- children: e.label
81
- }, e.value);
68
+ children: [
69
+ /* @__PURE__ */ d("span", {
70
+ className: "text-caption font-medium text-fg-secondary",
71
+ children: h("displayOptions.properties", "Display properties")
72
+ }),
73
+ /* @__PURE__ */ d("div", {
74
+ className: "flex flex-wrap gap-6",
75
+ children: u.options.map((e) => {
76
+ let t = u.value.includes(e.value), n = t && _.includes(e);
77
+ return /* @__PURE__ */ d(o, {
78
+ size: "sm",
79
+ variant: t ? "soft" : "outline",
80
+ pressed: t,
81
+ ...n ? {
82
+ icon: m,
83
+ "aria-description": h("displayOptions.doesNotFit", "Doesn't fit at this width")
84
+ } : {},
85
+ onClick: () => u.onChange(t ? u.value.filter((t) => t !== e.value) : [...u.value, e.value]),
86
+ children: e.label
87
+ }, e.value);
88
+ })
89
+ }),
90
+ _.length > 0 && /* @__PURE__ */ d("span", {
91
+ className: "text-caption text-fg-tertiary",
92
+ children: h("displayOptions.hiddenProperties", "{count, plural, one {{properties} doesn't fit at this width.} other {{properties} don't fit at this width.}}", {
93
+ count: _.length,
94
+ properties: new Intl.ListFormat(g, { type: "conjunction" }).format(_.map((e) => e.label))
95
+ })
82
96
  })
83
- })]
97
+ ]
84
98
  }),
85
- f && /* @__PURE__ */ u("div", {
99
+ p && /* @__PURE__ */ d("div", {
86
100
  className: "p-12 hairline-t",
87
- children: f
101
+ children: p
88
102
  })
89
103
  ]
90
104
  });
91
105
  }
92
- function g({ trigger: r = "secondary", inline: a, ...o }) {
106
+ function v({ trigger: r = "secondary", inline: i, ...o }) {
93
107
  let s = n();
94
- return !o.view && !o.rows?.length && !o.toggles?.length && !o.properties && t("DisplayOptions: pass view, rows, toggles or properties; an empty panel is never useful."), a ? /* @__PURE__ */ u("div", {
108
+ return !o.view && !o.rows?.length && !o.toggles?.length && !o.properties && t("DisplayOptions: pass view, rows, toggles or properties; an empty panel is never useful."), i ? /* @__PURE__ */ d("div", {
95
109
  className: e("rounded-popover bg-raised shadow-raised"),
96
- children: /* @__PURE__ */ u(h, { ...o })
97
- }) : /* @__PURE__ */ d(l, { children: [/* @__PURE__ */ u(l.Trigger, { children: /* @__PURE__ */ u(i, {
98
- icon: f,
110
+ children: /* @__PURE__ */ d(_, { ...o })
111
+ }) : /* @__PURE__ */ f(u, { children: [/* @__PURE__ */ d(u.Trigger, { children: /* @__PURE__ */ d(a, {
112
+ icon: p,
99
113
  "aria-label": s("displayOptions.displayOptions", "Display options"),
100
114
  variant: r
101
- }) }), /* @__PURE__ */ u(l.Content, {
115
+ }) }), /* @__PURE__ */ d(u.Content, {
102
116
  padding: "none",
103
117
  align: "end",
104
118
  "aria-label": s("displayOptions.displayOptions", "Display options"),
105
- children: /* @__PURE__ */ u(h, { ...o })
119
+ children: /* @__PURE__ */ d(_, { ...o })
106
120
  })] });
107
121
  }
108
- process.env.NODE_ENV !== "production" && (g.displayName = "DisplayOptions");
122
+ process.env.NODE_ENV !== "production" && (v.displayName = "DisplayOptions");
109
123
  //#endregion
110
- export { g as DisplayOptions, m as KAESO_DISPLAY_OPTIONS_DEFAULT_VARIANTS, p as KAESO_DISPLAY_OPTIONS_VARIANTS };
124
+ export { v as DisplayOptions, g as KAESO_DISPLAY_OPTIONS_DEFAULT_VARIANTS, h as KAESO_DISPLAY_OPTIONS_VARIANTS };
111
125
 
112
126
  //# sourceMappingURL=display-options.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"display-options.js","names":["__icon_SlidersHorizontalIcon","cn","useUiText","Icon","IconButton","Switch","Segmented","Select","Popover","KAESO_DISPLAY_OPTIONS_VARIANTS","KAESO_DISPLAY_OPTIONS_DEFAULT_VARIANTS","Panel","t","view","rows","r","toggles","toggle","properties","on","o","Tag","v","footer","DisplayOptions","props","devWarn","inline","SlidersHorizontalIcon","trigger"],"sources":["../../src/components/display-options/display-options.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { devWarn } from \"../../utils/dev.js\";\nimport { SlidersHorizontalIcon as __icon_SlidersHorizontalIcon } from \"@hugeicons/core-free-icons\";\nimport { IconButton } from \"../icon-button/icon-button.js\";\nimport { Popover } from \"../popover/popover.js\";\nimport { Segmented, type SegmentedOption } from \"../segmented/segmented.js\";\nimport { Select, type SelectOption } from \"../select/select.js\";\nimport { Switch } from \"../switch/switch.js\";\nimport { Tag } from \"../tag/tag.js\";\nimport type { IconData } from \"../icon/icon.js\";\nimport { Icon } from \"../icon/icon.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_DISPLAY_OPTIONS_VARIANTS = {\n trigger: {\n secondary: { classes: \"\" },\n ghost: { classes: \"\" },\n },\n} as const;\nexport const KAESO_DISPLAY_OPTIONS_DEFAULT_VARIANTS = { trigger: \"secondary\" } as const;\n\nexport interface DisplayOptionsRow {\n label: string;\n icon?: IconData | undefined;\n value: string;\n options: SelectOption[];\n onChange: (value: string) => void;\n}\nexport interface DisplayOptionsToggle {\n label: string;\n checked: boolean;\n onChange: (checked: boolean) => void;\n}\n\nexport interface DisplayOptionsProps {\n view?: { value: string; options: SegmentedOption[]; onChange: (v: string) => void } | undefined;\n rows?: DisplayOptionsRow[] | undefined;\n toggles?: DisplayOptionsToggle[] | undefined;\n properties?: { options: { value: string; label: string }[]; value: string[]; onChange: (v: string[]) => void } | undefined;\n trigger?: keyof typeof KAESO_DISPLAY_OPTIONS_VARIANTS.trigger | undefined;\n inline?: boolean | undefined;\n footer?: ReactNode | undefined;\n}\n\nfunction Panel({ view, rows, toggles, properties, footer }: DisplayOptionsProps) {\n const t = useUiText();\n return (\n <div className=\"flex w-320 flex-col\">\n {view && (\n <div className=\"p-12 pb-8\">\n <Segmented\n aria-label={t(\"displayOptions.view\", \"View\")}\n options={view.options}\n value={view.value}\n onValueChange={view.onChange}\n fullWidth\n size=\"sm\"\n className=\"bg-item-hover\"\n />\n </div>\n )}\n {rows && rows.length > 0 && (\n <div className=\"flex flex-col px-12 py-4\">\n {rows.map((r) => (\n <div key={r.label} className=\"flex h-40 items-center justify-between gap-12\">\n <span className=\"flex items-center gap-8 text-body text-fg-secondary\">\n {r.icon && <Icon icon={r.icon} size=\"sm\" />}\n {r.label}\n </span>\n <Select size=\"sm\" appearance=\"default\" aria-label={r.label} options={r.options} value={r.value} onValueChange={r.onChange} />\n </div>\n ))}\n </div>\n )}\n {toggles && toggles.length > 0 && (\n <div className=\"flex flex-col px-12 py-4 hairline-t\">\n {toggles.map((toggle) => (\n <Switch key={toggle.label} size=\"sm\" label={toggle.label} checked={toggle.checked} onCheckedChange={toggle.onChange} className=\"h-40\" />\n ))}\n </div>\n )}\n {properties && (\n <div className=\"flex flex-col gap-8 p-12 hairline-t\">\n <span className=\"text-caption font-medium text-fg-secondary\">{t(\"displayOptions.properties\", \"Display properties\")}</span>\n <div className=\"flex flex-wrap gap-6\">\n {properties.options.map((o) => {\n const on = properties.value.includes(o.value);\n return (\n <Tag\n key={o.value}\n size=\"sm\"\n variant={on ? \"soft\" : \"outline\"}\n pressed={on}\n onClick={() => properties.onChange(on ? properties.value.filter((v) => v !== o.value) : [...properties.value, o.value])}\n >\n {o.label}\n </Tag>\n );\n })}\n </div>\n </div>\n )}\n {footer && <div className=\"p-12 hairline-t\">{footer}</div>}\n </div>\n );\n}\n\nexport function DisplayOptions({ trigger = \"secondary\", inline, ...props }: DisplayOptionsProps) {\n const t = useUiText();\n if (!props.view && !props.rows?.length && !props.toggles?.length && !props.properties)\n devWarn(\"DisplayOptions: pass view, rows, toggles or properties; an empty panel is never useful.\");\n if (inline) {\n return (\n <div className={cn(\"rounded-popover bg-raised shadow-raised\")}>\n <Panel {...props} />\n </div>\n );\n }\n return (\n <Popover>\n <Popover.Trigger>\n <IconButton icon={__icon_SlidersHorizontalIcon} aria-label={t(\"displayOptions.displayOptions\", \"Display options\")} variant={trigger} />\n </Popover.Trigger>\n <Popover.Content padding=\"none\" align=\"end\" aria-label={t(\"displayOptions.displayOptions\", \"Display options\")}>\n <Panel {...props} />\n </Popover.Content>\n </Popover>\n );\n}\nif (process.env.NODE_ENV !== \"production\") DisplayOptions.displayName = \"DisplayOptions\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"display-options.js","names":["__icon_ViewOffSlashIcon","__icon_SlidersHorizontalIcon","cn","useUiText","Icon","IconButton","Tag","Switch","Segmented","Select","Popover","KAESO_DISPLAY_OPTIONS_VARIANTS","KAESO_DISPLAY_OPTIONS_DEFAULT_VARIANTS","Panel","t","locale","useLocale","squeezed","properties","o","view","rows","r","toggles","toggle","on","out","ViewOffSlashIcon","v","footer","DisplayOptions","props","devWarn","inline","SlidersHorizontalIcon","trigger"],"sources":["../../src/components/display-options/display-options.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { devWarn } from \"../../utils/dev.js\";\nimport { ViewOffSlashIcon as __icon_ViewOffSlashIcon, SlidersHorizontalIcon as __icon_SlidersHorizontalIcon } from \"@hugeicons/core-free-icons\";\nimport { IconButton } from \"../icon-button/icon-button.js\";\nimport { Popover } from \"../popover/popover.js\";\nimport { Segmented, type SegmentedOption } from \"../segmented/segmented.js\";\nimport { Select, type SelectOption } from \"../select/select.js\";\nimport { Switch } from \"../switch/switch.js\";\nimport { Tag } from \"../tag/tag.js\";\nimport type { IconData } from \"../icon/icon.js\";\nimport { Icon } from \"../icon/icon.js\";\nimport { useLocale, useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_DISPLAY_OPTIONS_VARIANTS = {\n trigger: {\n secondary: { classes: \"\" },\n ghost: { classes: \"\" },\n },\n} as const;\nexport const KAESO_DISPLAY_OPTIONS_DEFAULT_VARIANTS = { trigger: \"secondary\" } as const;\n\nexport interface DisplayOptionsRow {\n label: string;\n icon?: IconData | undefined;\n value: string;\n options: SelectOption[];\n onChange: (value: string) => void;\n}\nexport interface DisplayOptionsToggle {\n label: string;\n checked: boolean;\n onChange: (checked: boolean) => void;\n}\n\nexport interface DisplayOptionsProps {\n view?: { value: string; options: SegmentedOption[]; onChange: (v: string) => void } | undefined;\n rows?: DisplayOptionsRow[] | undefined;\n toggles?: DisplayOptionsToggle[] | undefined;\n properties?: { options: { value: string; label: string }[]; value: string[]; onChange: (v: string[]) => void; hidden?: string[] | undefined } | undefined;\n trigger?: keyof typeof KAESO_DISPLAY_OPTIONS_VARIANTS.trigger | undefined;\n inline?: boolean | undefined;\n footer?: ReactNode | undefined;\n}\n\nfunction Panel({ view, rows, toggles, properties, footer }: DisplayOptionsProps) {\n const t = useUiText();\n const locale = useLocale();\n const squeezed = properties ? properties.options.filter((o) => properties.value.includes(o.value) && properties.hidden?.includes(o.value)) : [];\n return (\n <div className=\"flex w-320 flex-col\">\n {view && (\n <div className=\"p-12 pb-8\">\n <Segmented\n aria-label={t(\"displayOptions.view\", \"View\")}\n options={view.options}\n value={view.value}\n onValueChange={view.onChange}\n fullWidth\n size=\"sm\"\n className=\"bg-item-hover\"\n />\n </div>\n )}\n {rows && rows.length > 0 && (\n <div className=\"flex flex-col px-12 py-4\">\n {rows.map((r) => (\n <div key={r.label} className=\"flex h-40 items-center justify-between gap-12\">\n <span className=\"flex items-center gap-8 text-body text-fg-secondary\">\n {r.icon && <Icon icon={r.icon} size=\"sm\" />}\n {r.label}\n </span>\n <Select size=\"sm\" appearance=\"default\" aria-label={r.label} options={r.options} value={r.value} onValueChange={r.onChange} />\n </div>\n ))}\n </div>\n )}\n {toggles && toggles.length > 0 && (\n <div className=\"flex flex-col px-12 py-4 hairline-t\">\n {toggles.map((toggle) => (\n <Switch key={toggle.label} size=\"sm\" label={toggle.label} checked={toggle.checked} onCheckedChange={toggle.onChange} className=\"h-40\" />\n ))}\n </div>\n )}\n {properties && (\n <div className=\"flex flex-col gap-8 p-12 hairline-t\">\n <span className=\"text-caption font-medium text-fg-secondary\">{t(\"displayOptions.properties\", \"Display properties\")}</span>\n <div className=\"flex flex-wrap gap-6\">\n {properties.options.map((o) => {\n const on = properties.value.includes(o.value);\n const out = on && squeezed.includes(o);\n return (\n <Tag\n key={o.value}\n size=\"sm\"\n variant={on ? \"soft\" : \"outline\"}\n pressed={on}\n {...(out ? { icon: __icon_ViewOffSlashIcon, \"aria-description\": t(\"displayOptions.doesNotFit\", \"Doesn't fit at this width\") } : {})}\n onClick={() => properties.onChange(on ? properties.value.filter((v) => v !== o.value) : [...properties.value, o.value])}\n >\n {o.label}\n </Tag>\n );\n })}\n </div>\n {squeezed.length > 0 && (\n <span className=\"text-caption text-fg-tertiary\">\n {t(\n \"displayOptions.hiddenProperties\",\n \"{count, plural, one {{properties} doesn't fit at this width.} other {{properties} don't fit at this width.}}\",\n {\n count: squeezed.length,\n properties: new Intl.ListFormat(locale, { type: \"conjunction\" }).format(squeezed.map((o) => o.label)),\n },\n )}\n </span>\n )}\n </div>\n )}\n {footer && <div className=\"p-12 hairline-t\">{footer}</div>}\n </div>\n );\n}\n\nexport function DisplayOptions({ trigger = \"secondary\", inline, ...props }: DisplayOptionsProps) {\n const t = useUiText();\n if (!props.view && !props.rows?.length && !props.toggles?.length && !props.properties)\n devWarn(\"DisplayOptions: pass view, rows, toggles or properties; an empty panel is never useful.\");\n if (inline) {\n return (\n <div className={cn(\"rounded-popover bg-raised shadow-raised\")}>\n <Panel {...props} />\n </div>\n );\n }\n return (\n <Popover>\n <Popover.Trigger>\n <IconButton icon={__icon_SlidersHorizontalIcon} aria-label={t(\"displayOptions.displayOptions\", \"Display options\")} variant={trigger} />\n </Popover.Trigger>\n <Popover.Content padding=\"none\" align=\"end\" aria-label={t(\"displayOptions.displayOptions\", \"Display options\")}>\n <Panel {...props} />\n </Popover.Content>\n </Popover>\n );\n}\nif (process.env.NODE_ENV !== \"production\") DisplayOptions.displayName = \"DisplayOptions\";\n"],"mappings":"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"}