@logicplanes/kaeso-ui 0.4.4 → 0.4.5

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 (482) hide show
  1. package/ai/component-guides.md +250 -98
  2. package/ai/component-registry.json +264 -236
  3. package/ai/component-registry.md +222 -218
  4. package/ai/icons.md +1 -1
  5. package/ai/tokens.md +18 -14
  6. package/dist/blocks/delete-resource.js +3 -3
  7. package/dist/blocks/delete-resource.js.map +1 -1
  8. package/dist/blocks/pages.js +47 -42
  9. package/dist/blocks/pages.js.map +1 -1
  10. package/dist/blocks/resource-list.js +68 -55
  11. package/dist/blocks/resource-list.js.map +1 -1
  12. package/dist/chunks/agent-avatar-DHieggHK.js +188 -0
  13. package/dist/chunks/agent-avatar-DHieggHK.js.map +1 -0
  14. package/dist/chunks/app-frame-DysOel2X.js +232 -0
  15. package/dist/chunks/app-frame-DysOel2X.js.map +1 -0
  16. package/dist/chunks/arrow-focus-B0KdRFX8.js +20 -0
  17. package/dist/chunks/arrow-focus-B0KdRFX8.js.map +1 -0
  18. package/dist/chunks/avatar-CYNMK7uY.js +110 -0
  19. package/dist/chunks/avatar-CYNMK7uY.js.map +1 -0
  20. package/dist/chunks/badge-C0GC3B9X.js +27 -0
  21. package/dist/chunks/badge-C0GC3B9X.js.map +1 -0
  22. package/dist/chunks/banner-B3DGLTBu.js +88 -0
  23. package/dist/chunks/banner-B3DGLTBu.js.map +1 -0
  24. package/dist/chunks/button-IblhXUyZ.js +202 -0
  25. package/dist/chunks/button-IblhXUyZ.js.map +1 -0
  26. package/dist/chunks/{calendar-BWaf2MXc.js → calendar-Dc6_dl0f.js} +4 -4
  27. package/dist/chunks/calendar-Dc6_dl0f.js.map +1 -0
  28. package/dist/chunks/checkbox-9tbimmF3.js +141 -0
  29. package/dist/chunks/checkbox-9tbimmF3.js.map +1 -0
  30. package/dist/chunks/{cn-Dj6sRgkF.js → cn-BjnOAUrA.js} +45 -4
  31. package/dist/chunks/cn-BjnOAUrA.js.map +1 -0
  32. package/dist/chunks/code-block-64e-Cy1S.js +346 -0
  33. package/dist/chunks/code-block-64e-Cy1S.js.map +1 -0
  34. package/dist/chunks/{code-block-DdNPHEzI.js → code-block-KIvuE8jg.js} +122 -114
  35. package/dist/chunks/code-block-KIvuE8jg.js.map +1 -0
  36. package/dist/chunks/{code-tqj0uhBL.js → code-xqjww4Pv.js} +5 -6
  37. package/dist/chunks/code-xqjww4Pv.js.map +1 -0
  38. package/dist/chunks/combobox-DkcjkWc6.js +352 -0
  39. package/dist/chunks/combobox-DkcjkWc6.js.map +1 -0
  40. package/dist/chunks/command-list-CypqsC4T.js +456 -0
  41. package/dist/chunks/command-list-CypqsC4T.js.map +1 -0
  42. package/dist/chunks/{copy-button-FJvPJn72.js → copy-button-CwU8t_9_.js} +22 -15
  43. package/dist/chunks/copy-button-CwU8t_9_.js.map +1 -0
  44. package/dist/chunks/core-CmK-8ObW.js +505 -0
  45. package/dist/chunks/core-CmK-8ObW.js.map +1 -0
  46. package/dist/chunks/data-table-CqY8_6IS.js +581 -0
  47. package/dist/chunks/data-table-CqY8_6IS.js.map +1 -0
  48. package/dist/chunks/date-popup-DAnjptFt.js +58 -0
  49. package/dist/chunks/date-popup-DAnjptFt.js.map +1 -0
  50. package/dist/chunks/{de-D_0mmG-k.js → de-CqC4aSIV.js} +74 -40
  51. package/dist/chunks/de-CqC4aSIV.js.map +1 -0
  52. package/dist/chunks/{dialog-Cg9A_6SF.js → dialog-2zb6ClNR.js} +156 -134
  53. package/dist/chunks/dialog-2zb6ClNR.js.map +1 -0
  54. package/dist/chunks/disclosure-BtYRTDO3.js +22 -0
  55. package/dist/chunks/disclosure-BtYRTDO3.js.map +1 -0
  56. package/dist/chunks/domain-obd_w9xk.js +28 -0
  57. package/dist/chunks/domain-obd_w9xk.js.map +1 -0
  58. package/dist/chunks/{empty-DvhyMXQq.js → empty-BpiUgGzm.js} +2 -2
  59. package/dist/chunks/{empty-DvhyMXQq.js.map → empty-BpiUgGzm.js.map} +1 -1
  60. package/dist/chunks/{field-TviMvYa2.js → field-D7m-yl-D.js} +37 -34
  61. package/dist/chunks/field-D7m-yl-D.js.map +1 -0
  62. package/dist/chunks/{icon-D7ja-_Yk.js → icon-CBzOwqrX.js} +7 -6
  63. package/dist/chunks/{icon-D7ja-_Yk.js.map → icon-CBzOwqrX.js.map} +1 -1
  64. package/dist/chunks/{icon-button-CrdF_eMG.js → icon-button-Dfwpvmav.js} +7 -6
  65. package/dist/chunks/icon-button-Dfwpvmav.js.map +1 -0
  66. package/dist/chunks/{identity-BmhQ6BQ-.js → identity-3Foi5F8w.js} +7 -7
  67. package/dist/chunks/{identity-BmhQ6BQ-.js.map → identity-3Foi5F8w.js.map} +1 -1
  68. package/dist/chunks/{input-2VJuj_M4.js → input-Bo5-UZg2.js} +15 -9
  69. package/dist/chunks/input-Bo5-UZg2.js.map +1 -0
  70. package/dist/chunks/{input-group-DQ_4DoXg.js → input-group-jPcK9T_a.js} +42 -29
  71. package/dist/chunks/input-group-jPcK9T_a.js.map +1 -0
  72. package/dist/chunks/iso-field-DoqHBg8n.js +52 -0
  73. package/dist/chunks/iso-field-DoqHBg8n.js.map +1 -0
  74. package/dist/chunks/json-view-DZ2nL2Ir.js +253 -0
  75. package/dist/chunks/json-view-DZ2nL2Ir.js.map +1 -0
  76. package/dist/chunks/{kbd-BF1vKXJf.js → kbd-8A0ML_up.js} +30 -28
  77. package/dist/chunks/kbd-8A0ML_up.js.map +1 -0
  78. package/dist/chunks/label-DW24Aj0Z.js +26 -0
  79. package/dist/chunks/label-DW24Aj0Z.js.map +1 -0
  80. package/dist/chunks/{link-KWI7PevW.js → link-CMjkcLQK.js} +14 -14
  81. package/dist/chunks/link-CMjkcLQK.js.map +1 -0
  82. package/dist/chunks/list-B4G-sWwV.js +540 -0
  83. package/dist/chunks/list-B4G-sWwV.js.map +1 -0
  84. package/dist/chunks/{loader-DCfPndXa.js → loader-zo8CCIGJ.js} +2 -2
  85. package/dist/chunks/{loader-DCfPndXa.js.map → loader-zo8CCIGJ.js.map} +1 -1
  86. package/dist/chunks/markdown-C565aBR7.js +338 -0
  87. package/dist/chunks/markdown-C565aBR7.js.map +1 -0
  88. package/dist/chunks/menu-Clvv6ftq.js +485 -0
  89. package/dist/chunks/menu-Clvv6ftq.js.map +1 -0
  90. package/dist/chunks/merge-refs-BN1FyQt9.js +20 -0
  91. package/dist/chunks/merge-refs-BN1FyQt9.js.map +1 -0
  92. package/dist/chunks/meter-CASMHlxl.js +100 -0
  93. package/dist/chunks/meter-CASMHlxl.js.map +1 -0
  94. package/dist/chunks/nav-sheet-Dt6JSvzX.js +67 -0
  95. package/dist/chunks/nav-sheet-Dt6JSvzX.js.map +1 -0
  96. package/dist/chunks/{nav-wordmark-_pjheAsZ.js → nav-wordmark-J4pB_vjr.js} +4 -8
  97. package/dist/chunks/nav-wordmark-J4pB_vjr.js.map +1 -0
  98. package/dist/chunks/page-header-kS5tdmvb.js +45 -0
  99. package/dist/chunks/page-header-kS5tdmvb.js.map +1 -0
  100. package/dist/chunks/pagination-D7fAm8qg.js +147 -0
  101. package/dist/chunks/pagination-D7fAm8qg.js.map +1 -0
  102. package/dist/chunks/picker-popover-1FHb1LQG.js +119 -0
  103. package/dist/chunks/picker-popover-1FHb1LQG.js.map +1 -0
  104. package/dist/chunks/popover-Bl5QYqnh.js +51 -0
  105. package/dist/chunks/popover-Bl5QYqnh.js.map +1 -0
  106. package/dist/chunks/{portal-context-BBbzDKmY.js → portal-context-CTatR2Z8.js} +14 -4
  107. package/dist/chunks/portal-context-CTatR2Z8.js.map +1 -0
  108. package/dist/chunks/{radio-CDDFpdtL.js → radio-C6GtzF_t.js} +38 -23
  109. package/dist/chunks/radio-C6GtzF_t.js.map +1 -0
  110. package/dist/chunks/range-popup-lGiZsG3s.js +160 -0
  111. package/dist/chunks/range-popup-lGiZsG3s.js.map +1 -0
  112. package/dist/chunks/reasoning-frame-C3HdQRRS.js +51 -0
  113. package/dist/chunks/reasoning-frame-C3HdQRRS.js.map +1 -0
  114. package/dist/chunks/release-art-ChiT4T2S.js +582 -0
  115. package/dist/chunks/release-art-ChiT4T2S.js.map +1 -0
  116. package/dist/chunks/rights-B68ocZuq.js +312 -0
  117. package/dist/chunks/rights-B68ocZuq.js.map +1 -0
  118. package/dist/chunks/{scroll-area-D8MD7Vpo.js → scroll-area-_Ljh4-bG.js} +11 -6
  119. package/dist/chunks/scroll-area-_Ljh4-bG.js.map +1 -0
  120. package/dist/chunks/section-CFBYhsUi.js +77 -0
  121. package/dist/chunks/section-CFBYhsUi.js.map +1 -0
  122. package/dist/chunks/section-header-DU1Q4Tdf.js +28 -0
  123. package/dist/chunks/section-header-DU1Q4Tdf.js.map +1 -0
  124. package/dist/chunks/segmented-D9i1avik.js +119 -0
  125. package/dist/chunks/segmented-D9i1avik.js.map +1 -0
  126. package/dist/chunks/select-BqjmQOqx.js +222 -0
  127. package/dist/chunks/select-BqjmQOqx.js.map +1 -0
  128. package/dist/chunks/{separator-D7TzNHmX.js → separator-BNWf6BBj.js} +13 -8
  129. package/dist/chunks/separator-BNWf6BBj.js.map +1 -0
  130. package/dist/chunks/sidebar-Dq7oGOje.js +664 -0
  131. package/dist/chunks/sidebar-Dq7oGOje.js.map +1 -0
  132. package/dist/chunks/{sidebar-menu-BN3jkTlK.js → sidebar-menu-QSSNu1jJ.js} +2 -2
  133. package/dist/chunks/{sidebar-menu-BN3jkTlK.js.map → sidebar-menu-QSSNu1jJ.js.map} +1 -1
  134. package/dist/chunks/{skeleton-Dcz57Zyp.js → skeleton-D-qk3mes.js} +3 -3
  135. package/dist/chunks/skeleton-D-qk3mes.js.map +1 -0
  136. package/dist/chunks/slider-CcE8GtuV.js +58 -0
  137. package/dist/chunks/slider-CcE8GtuV.js.map +1 -0
  138. package/dist/chunks/{status-dot-QJTF0Yv4.js → status-dot-CP6runiC.js} +4 -4
  139. package/dist/chunks/{status-dot-QJTF0Yv4.js.map → status-dot-CP6runiC.js.map} +1 -1
  140. package/dist/chunks/{styles-CVJU9t9v.js → styles-hkFkoBbi.js} +2 -2
  141. package/dist/chunks/{styles-CVJU9t9v.js.map → styles-hkFkoBbi.js.map} +1 -1
  142. package/dist/chunks/{swap-text-Dr0Irxz6.js → swap-text-SlUjrTlG.js} +3 -3
  143. package/dist/chunks/swap-text-SlUjrTlG.js.map +1 -0
  144. package/dist/chunks/switch-ngywMQdl.js +76 -0
  145. package/dist/chunks/switch-ngywMQdl.js.map +1 -0
  146. package/dist/chunks/table-CTK5E0J7.js +102 -0
  147. package/dist/chunks/table-CTK5E0J7.js.map +1 -0
  148. package/dist/chunks/tag-BGr6lTSV.js +100 -0
  149. package/dist/chunks/tag-BGr6lTSV.js.map +1 -0
  150. package/dist/chunks/{text-CIXH8rmT.js → text-DkKdTVUf.js} +9 -9
  151. package/dist/chunks/text-DkKdTVUf.js.map +1 -0
  152. package/dist/chunks/{textarea--4FRL3Pb.js → textarea-CO0HP6fK.js} +47 -36
  153. package/dist/chunks/textarea-CO0HP6fK.js.map +1 -0
  154. package/dist/chunks/timeseries-Ck-q0wWn.js +381 -0
  155. package/dist/chunks/timeseries-Ck-q0wWn.js.map +1 -0
  156. package/dist/chunks/toolbar-u0Gm7Q7-.js +61 -0
  157. package/dist/chunks/toolbar-u0Gm7Q7-.js.map +1 -0
  158. package/dist/chunks/tooltip-Tkm-urbi.js +202 -0
  159. package/dist/chunks/tooltip-Tkm-urbi.js.map +1 -0
  160. package/dist/chunks/tooltip-root-BC_RNNiP.js +70 -0
  161. package/dist/chunks/tooltip-root-BC_RNNiP.js.map +1 -0
  162. package/dist/chunks/truncated-d1afmUJT.js +33 -0
  163. package/dist/chunks/truncated-d1afmUJT.js.map +1 -0
  164. package/dist/chunks/use-coarse-pointer-Ml5oE6oX.js +28 -0
  165. package/dist/chunks/use-coarse-pointer-Ml5oE6oX.js.map +1 -0
  166. package/dist/chunks/use-hydrating-COtYVRo4.js +8 -0
  167. package/dist/chunks/use-hydrating-COtYVRo4.js.map +1 -0
  168. package/dist/chunks/use-scroll-fade-uc8mWSDX.js +30 -0
  169. package/dist/chunks/use-scroll-fade-uc8mWSDX.js.map +1 -0
  170. package/dist/chunks/{zh-CN-Bm6UPIbW.js → zh-CN-BlpsT6d_.js} +73 -39
  171. package/dist/chunks/zh-CN-BlpsT6d_.js.map +1 -0
  172. package/dist/components/agent-avatar.js +1 -1
  173. package/dist/components/app-frame.js +2 -2
  174. package/dist/components/avatar.js +1 -1
  175. package/dist/components/badge.js +1 -1
  176. package/dist/components/banner.js +1 -1
  177. package/dist/components/button-group.js +22 -22
  178. package/dist/components/button-group.js.map +1 -1
  179. package/dist/components/button.js +1 -1
  180. package/dist/components/calendar.js +1 -1
  181. package/dist/components/charts/bar.js +235 -160
  182. package/dist/components/charts/bar.js.map +1 -1
  183. package/dist/components/charts/donut.js +144 -99
  184. package/dist/components/charts/donut.js.map +1 -1
  185. package/dist/components/charts/gauge.js +61 -49
  186. package/dist/components/charts/gauge.js.map +1 -1
  187. package/dist/components/charts/heatmap.js +179 -70
  188. package/dist/components/charts/heatmap.js.map +1 -1
  189. package/dist/components/charts/sankey.js +144 -77
  190. package/dist/components/charts/sankey.js.map +1 -1
  191. package/dist/components/charts/sparkline.js +54 -38
  192. package/dist/components/charts/sparkline.js.map +1 -1
  193. package/dist/components/charts/timeseries.js +1 -1
  194. package/dist/components/charts.js +2 -2
  195. package/dist/components/checkbox.js +1 -1
  196. package/dist/components/code-block.js +3 -3
  197. package/dist/components/code.js +1 -1
  198. package/dist/components/collapsible.js +77 -1
  199. package/dist/components/collapsible.js.map +1 -0
  200. package/dist/components/combobox.js +1 -1
  201. package/dist/components/command-list.js +2 -2
  202. package/dist/components/command-palette.js +89 -66
  203. package/dist/components/command-palette.js.map +1 -1
  204. package/dist/components/copy-button.js +1 -1
  205. package/dist/components/data-table.js +1 -459
  206. package/dist/components/date-picker.js +162 -151
  207. package/dist/components/date-picker.js.map +1 -1
  208. package/dist/components/dialog.js +74 -63
  209. package/dist/components/dialog.js.map +1 -1
  210. package/dist/components/display-options.js +76 -64
  211. package/dist/components/display-options.js.map +1 -1
  212. package/dist/components/empty.js +1 -1
  213. package/dist/components/field.js +1 -1
  214. package/dist/components/figure.js +2 -2
  215. package/dist/components/filter-chip.js +36 -27
  216. package/dist/components/filter-chip.js.map +1 -1
  217. package/dist/components/filter-row.js +4 -4
  218. package/dist/components/filter-row.js.map +1 -1
  219. package/dist/components/flow.js +94 -63
  220. package/dist/components/flow.js.map +1 -1
  221. package/dist/components/heading.js +1 -1
  222. package/dist/components/icon-button.js +1 -1
  223. package/dist/components/icon.js +1 -1
  224. package/dist/components/input.js +176 -98
  225. package/dist/components/input.js.map +1 -1
  226. package/dist/components/kaeso/conversation.js +51 -46
  227. package/dist/components/kaeso/conversation.js.map +1 -1
  228. package/dist/components/kaeso/identity.js +1 -1
  229. package/dist/components/kaeso/moments.js +23 -20
  230. package/dist/components/kaeso/moments.js.map +1 -1
  231. package/dist/components/kaeso/rights.js +1 -1
  232. package/dist/components/kaeso/usage.js +90 -74
  233. package/dist/components/kaeso/usage.js.map +1 -1
  234. package/dist/components/kaeso.js +200 -187
  235. package/dist/components/kaeso.js.map +1 -1
  236. package/dist/components/kbd.js +1 -1
  237. package/dist/components/key-value.js +32 -47
  238. package/dist/components/key-value.js.map +1 -1
  239. package/dist/components/label.js +1 -25
  240. package/dist/components/layout.js +2 -2
  241. package/dist/components/layout.js.map +1 -1
  242. package/dist/components/link.js +1 -1
  243. package/dist/components/list.js +1 -1
  244. package/dist/components/loader.js +11 -10
  245. package/dist/components/loader.js.map +1 -1
  246. package/dist/components/logo.js +2 -2
  247. package/dist/components/markdown.js +1 -1
  248. package/dist/components/menu.js +2 -2
  249. package/dist/components/meter.js +1 -1
  250. package/dist/components/page-header.js +1 -1
  251. package/dist/components/pagination.js +1 -1
  252. package/dist/components/playground.js +644 -529
  253. package/dist/components/playground.js.map +1 -1
  254. package/dist/components/popover.js +4 -4
  255. package/dist/components/popover.js.map +1 -1
  256. package/dist/components/portal.js +1 -1
  257. package/dist/components/qr-code.js +2 -2
  258. package/dist/components/qr-code.js.map +1 -1
  259. package/dist/components/radio.js +1 -1
  260. package/dist/components/release-art.js +1 -1
  261. package/dist/components/scroll-area.js +1 -1
  262. package/dist/components/section.js +1 -1
  263. package/dist/components/segmented.js +1 -1
  264. package/dist/components/select.js +1 -1
  265. package/dist/components/separator.js +1 -1
  266. package/dist/components/settings.js +39 -46
  267. package/dist/components/settings.js.map +1 -1
  268. package/dist/components/sheet.js +10 -9
  269. package/dist/components/sheet.js.map +1 -1
  270. package/dist/components/sidebar.js +1 -1
  271. package/dist/components/skeleton.js +1 -1
  272. package/dist/components/slider.js +1 -1
  273. package/dist/components/stat.js +98 -84
  274. package/dist/components/stat.js.map +1 -1
  275. package/dist/components/status-dot.js +1 -1
  276. package/dist/components/surface.js +1 -1
  277. package/dist/components/swap-text.js +1 -1
  278. package/dist/components/switch.js +1 -1
  279. package/dist/components/table.js +1 -1
  280. package/dist/components/tabs.js +73 -55
  281. package/dist/components/tabs.js.map +1 -1
  282. package/dist/components/tag.js +1 -1
  283. package/dist/components/text.js +1 -1
  284. package/dist/components/theme-image.js +1 -1
  285. package/dist/components/theme-menu.js +5 -2
  286. package/dist/components/theme-menu.js.map +1 -1
  287. package/dist/components/theme-select.js +1 -1
  288. package/dist/components/thumbnail.js +35 -24
  289. package/dist/components/thumbnail.js.map +1 -1
  290. package/dist/components/timeline.js +51 -35
  291. package/dist/components/timeline.js.map +1 -1
  292. package/dist/components/toast.js +76 -66
  293. package/dist/components/toast.js.map +1 -1
  294. package/dist/components/toc.js +14 -8
  295. package/dist/components/toc.js.map +1 -1
  296. package/dist/components/toolbar.js +1 -1
  297. package/dist/components/tooltip.js +1 -1
  298. package/dist/components/visually-hidden.js +1 -1
  299. package/dist/i18n-provider.js +1 -1
  300. package/dist/index.js +100 -100
  301. package/dist/kaeso.css +605 -67
  302. package/dist/styles.css +1 -1
  303. package/dist/tailwind.css +1 -1
  304. package/dist/types/blocks/delete-resource/delete-resource.d.ts +2 -2
  305. package/dist/types/components/agent-avatar/agent-avatar.d.ts +24 -19
  306. package/dist/types/components/badge/badge.d.ts +3 -3
  307. package/dist/types/components/banner/banner.d.ts +3 -3
  308. package/dist/types/components/button/button.d.ts +2 -2
  309. package/dist/types/components/button-group/button-group.d.ts +1 -1
  310. package/dist/types/components/charts/domain.d.ts +11 -0
  311. package/dist/types/components/charts/marks.d.ts +1 -0
  312. package/dist/types/components/code/code.d.ts +3 -3
  313. package/dist/types/components/code-block/json-view.d.ts +2 -1
  314. package/dist/types/components/code-block/numbers.d.ts +1 -0
  315. package/dist/types/components/collapsible/collapsible.d.ts +2 -2
  316. package/dist/types/components/collapsible/disclosure.d.ts +2 -0
  317. package/dist/types/components/data-table/data-table.d.ts +6 -5
  318. package/dist/types/components/data-table/docs.d.ts +1 -0
  319. package/dist/types/components/data-table/time-columns.d.ts +1 -0
  320. package/dist/types/components/date-picker/focus-day.d.ts +1 -0
  321. package/dist/types/components/date-picker/iso-field.d.ts +8 -1
  322. package/dist/types/components/dialog/dialog.d.ts +7 -7
  323. package/dist/types/components/field/field.d.ts +1 -1
  324. package/dist/types/components/flow/flow.d.ts +1 -1
  325. package/dist/types/components/icon-button/icon-button.d.ts +1 -1
  326. package/dist/types/components/input/input-group.d.ts +2 -0
  327. package/dist/types/components/input/number-input.d.ts +4 -4
  328. package/dist/types/components/input/otp-input.d.ts +3 -3
  329. package/dist/types/components/kaeso/client-button.d.ts +2 -1
  330. package/dist/types/components/kaeso/provider-picker.d.ts +1 -0
  331. package/dist/types/components/kaeso/rights.d.ts +1 -1
  332. package/dist/types/components/kaeso/role-picker.d.ts +1 -0
  333. package/dist/types/components/key-value/key-value.d.ts +2 -2
  334. package/dist/types/components/layout/layout.d.ts +2 -2
  335. package/dist/types/components/link/link.d.ts +4 -4
  336. package/dist/types/components/list/list.d.ts +2 -2
  337. package/dist/types/components/menu/menu.d.ts +2 -1
  338. package/dist/types/components/menu/styles.d.ts +3 -3
  339. package/dist/types/components/meter/meter.d.ts +3 -3
  340. package/dist/types/components/page-header/page-header.d.ts +1 -1
  341. package/dist/types/components/pagination/pagination.d.ts +2 -2
  342. package/dist/types/components/playground/prompt-suggestions.d.ts +1 -0
  343. package/dist/types/components/playground/reasoning-frame.d.ts +14 -0
  344. package/dist/types/components/playground/reasoning.d.ts +1 -0
  345. package/dist/types/components/popover/popover.d.ts +1 -1
  346. package/dist/types/components/scroll-area/scroll-area.d.ts +2 -2
  347. package/dist/types/components/section/section-header.d.ts +6 -0
  348. package/dist/types/components/segmented/segmented.d.ts +1 -0
  349. package/dist/types/components/select/select.d.ts +1 -1
  350. package/dist/types/components/sheet/sheet.d.ts +3 -3
  351. package/dist/types/components/sidebar/sidebar.d.ts +1 -0
  352. package/dist/types/components/slider/slider.d.ts +2 -2
  353. package/dist/types/components/stat/stat.d.ts +1 -1
  354. package/dist/types/components/tabs/tabs.d.ts +6 -4
  355. package/dist/types/components/text/truncated.d.ts +7 -0
  356. package/dist/types/components/timeline/timeline.d.ts +5 -5
  357. package/dist/types/components/toc/toc.d.ts +1 -1
  358. package/dist/types/components/toolbar/toolbar.d.ts +1 -1
  359. package/dist/types/components/tooltip/tooltip.d.ts +2 -2
  360. package/dist/types/components/tooltip/trigger-props.d.ts +1 -0
  361. package/dist/types/hooks/use-coarse-pointer.d.ts +1 -0
  362. package/dist/types/hooks/use-hydrating.d.ts +1 -0
  363. package/dist/types/utils/arrow-focus.d.ts +4 -1
  364. package/dist/types/utils/cn.d.ts +33 -0
  365. package/dist/types/utils/portal-context.d.ts +7 -1
  366. package/dist/utils.js +2 -2
  367. package/foundations/accessibility.md +3 -2
  368. package/foundations/color.md +5 -1
  369. package/foundations/elevation.md +1 -0
  370. package/foundations/motion.md +1 -1
  371. package/foundations/shape.md +2 -2
  372. package/foundations/typography.md +12 -12
  373. package/package.json +2 -2
  374. package/dist/chunks/agent-avatar-0pdBTWkR.js +0 -171
  375. package/dist/chunks/agent-avatar-0pdBTWkR.js.map +0 -1
  376. package/dist/chunks/app-frame-DogGRmsu.js +0 -221
  377. package/dist/chunks/app-frame-DogGRmsu.js.map +0 -1
  378. package/dist/chunks/arrow-focus-BcySmwwU.js +0 -11
  379. package/dist/chunks/arrow-focus-BcySmwwU.js.map +0 -1
  380. package/dist/chunks/avatar-CWbdwbJv.js +0 -83
  381. package/dist/chunks/avatar-CWbdwbJv.js.map +0 -1
  382. package/dist/chunks/badge-C2KtxCLB.js +0 -26
  383. package/dist/chunks/badge-C2KtxCLB.js.map +0 -1
  384. package/dist/chunks/banner-BA2ALw9M.js +0 -85
  385. package/dist/chunks/banner-BA2ALw9M.js.map +0 -1
  386. package/dist/chunks/button-CzuxqawA.js +0 -164
  387. package/dist/chunks/button-CzuxqawA.js.map +0 -1
  388. package/dist/chunks/calendar-BWaf2MXc.js.map +0 -1
  389. package/dist/chunks/checkbox-CQjwCPkc.js +0 -126
  390. package/dist/chunks/checkbox-CQjwCPkc.js.map +0 -1
  391. package/dist/chunks/cn-Dj6sRgkF.js.map +0 -1
  392. package/dist/chunks/code-block-BZIe_B9l.js +0 -334
  393. package/dist/chunks/code-block-BZIe_B9l.js.map +0 -1
  394. package/dist/chunks/code-block-DdNPHEzI.js.map +0 -1
  395. package/dist/chunks/code-tqj0uhBL.js.map +0 -1
  396. package/dist/chunks/collapsible-CKrCX_T9.js +0 -87
  397. package/dist/chunks/collapsible-CKrCX_T9.js.map +0 -1
  398. package/dist/chunks/combobox-DjDI7SUC.js +0 -319
  399. package/dist/chunks/combobox-DjDI7SUC.js.map +0 -1
  400. package/dist/chunks/command-list-C2Y7V_lt.js +0 -418
  401. package/dist/chunks/command-list-C2Y7V_lt.js.map +0 -1
  402. package/dist/chunks/copy-button-FJvPJn72.js.map +0 -1
  403. package/dist/chunks/core-BYns5ytV.js +0 -472
  404. package/dist/chunks/core-BYns5ytV.js.map +0 -1
  405. package/dist/chunks/date-popup-CPA_zt6o.js +0 -35
  406. package/dist/chunks/date-popup-CPA_zt6o.js.map +0 -1
  407. package/dist/chunks/de-D_0mmG-k.js.map +0 -1
  408. package/dist/chunks/dialog-Cg9A_6SF.js.map +0 -1
  409. package/dist/chunks/field-TviMvYa2.js.map +0 -1
  410. package/dist/chunks/hidden-description-B2zSmLcn.js +0 -23
  411. package/dist/chunks/hidden-description-B2zSmLcn.js.map +0 -1
  412. package/dist/chunks/icon-button-CrdF_eMG.js.map +0 -1
  413. package/dist/chunks/input-2VJuj_M4.js.map +0 -1
  414. package/dist/chunks/input-group-DQ_4DoXg.js.map +0 -1
  415. package/dist/chunks/iso-field-B2rTwiBo.js +0 -33
  416. package/dist/chunks/iso-field-B2rTwiBo.js.map +0 -1
  417. package/dist/chunks/json-view-Dqd2TDkc.js +0 -175
  418. package/dist/chunks/json-view-Dqd2TDkc.js.map +0 -1
  419. package/dist/chunks/kbd-BF1vKXJf.js.map +0 -1
  420. package/dist/chunks/link-KWI7PevW.js.map +0 -1
  421. package/dist/chunks/list-M1csq-d4.js +0 -494
  422. package/dist/chunks/list-M1csq-d4.js.map +0 -1
  423. package/dist/chunks/markdown-BupwFOae.js +0 -313
  424. package/dist/chunks/markdown-BupwFOae.js.map +0 -1
  425. package/dist/chunks/menu-DEmBfdPm.js +0 -450
  426. package/dist/chunks/menu-DEmBfdPm.js.map +0 -1
  427. package/dist/chunks/meter-Bj4N3Xuh.js +0 -84
  428. package/dist/chunks/meter-Bj4N3Xuh.js.map +0 -1
  429. package/dist/chunks/nav-sheet-CzgIwgAm.js +0 -60
  430. package/dist/chunks/nav-sheet-CzgIwgAm.js.map +0 -1
  431. package/dist/chunks/nav-wordmark-_pjheAsZ.js.map +0 -1
  432. package/dist/chunks/page-header-DL2y2iZp.js +0 -41
  433. package/dist/chunks/page-header-DL2y2iZp.js.map +0 -1
  434. package/dist/chunks/pagination-Cn_qF4cg.js +0 -86
  435. package/dist/chunks/pagination-Cn_qF4cg.js.map +0 -1
  436. package/dist/chunks/picker-popover-BxyU1U9F.js +0 -106
  437. package/dist/chunks/picker-popover-BxyU1U9F.js.map +0 -1
  438. package/dist/chunks/popover-DNN4S47w.js +0 -50
  439. package/dist/chunks/popover-DNN4S47w.js.map +0 -1
  440. package/dist/chunks/portal-context-BBbzDKmY.js.map +0 -1
  441. package/dist/chunks/radio-CDDFpdtL.js.map +0 -1
  442. package/dist/chunks/range-popup-CRyWYUB1.js +0 -128
  443. package/dist/chunks/range-popup-CRyWYUB1.js.map +0 -1
  444. package/dist/chunks/release-art-ZwfFQImt.js +0 -561
  445. package/dist/chunks/release-art-ZwfFQImt.js.map +0 -1
  446. package/dist/chunks/rights-Cyp0Pzp-.js +0 -279
  447. package/dist/chunks/rights-Cyp0Pzp-.js.map +0 -1
  448. package/dist/chunks/scroll-area-D8MD7Vpo.js.map +0 -1
  449. package/dist/chunks/scroll-parent-WXvzQcUo.js +0 -14
  450. package/dist/chunks/scroll-parent-WXvzQcUo.js.map +0 -1
  451. package/dist/chunks/section-Ce1efbsP.js +0 -87
  452. package/dist/chunks/section-Ce1efbsP.js.map +0 -1
  453. package/dist/chunks/segmented-CErcoxwi.js +0 -114
  454. package/dist/chunks/segmented-CErcoxwi.js.map +0 -1
  455. package/dist/chunks/select-x4XVsdCI.js +0 -210
  456. package/dist/chunks/select-x4XVsdCI.js.map +0 -1
  457. package/dist/chunks/separator-D7TzNHmX.js.map +0 -1
  458. package/dist/chunks/sidebar-3r1ZRXlN.js +0 -621
  459. package/dist/chunks/sidebar-3r1ZRXlN.js.map +0 -1
  460. package/dist/chunks/skeleton-Dcz57Zyp.js.map +0 -1
  461. package/dist/chunks/slider-Ci83PGtj.js +0 -57
  462. package/dist/chunks/slider-Ci83PGtj.js.map +0 -1
  463. package/dist/chunks/swap-text-Dr0Irxz6.js.map +0 -1
  464. package/dist/chunks/switch-BNMq_kGt.js +0 -59
  465. package/dist/chunks/switch-BNMq_kGt.js.map +0 -1
  466. package/dist/chunks/table-BeOSKl_3.js +0 -84
  467. package/dist/chunks/table-BeOSKl_3.js.map +0 -1
  468. package/dist/chunks/tag-D_M1s2qS.js +0 -87
  469. package/dist/chunks/tag-D_M1s2qS.js.map +0 -1
  470. package/dist/chunks/text-CIXH8rmT.js.map +0 -1
  471. package/dist/chunks/textarea--4FRL3Pb.js.map +0 -1
  472. package/dist/chunks/timeseries-D1xjRXfk.js +0 -339
  473. package/dist/chunks/timeseries-D1xjRXfk.js.map +0 -1
  474. package/dist/chunks/toolbar-WA_oZgu-.js +0 -37
  475. package/dist/chunks/toolbar-WA_oZgu-.js.map +0 -1
  476. package/dist/chunks/tooltip-OcwO0VUT.js +0 -154
  477. package/dist/chunks/tooltip-OcwO0VUT.js.map +0 -1
  478. package/dist/chunks/tooltip-root-DzahJDVj.js +0 -60
  479. package/dist/chunks/tooltip-root-DzahJDVj.js.map +0 -1
  480. package/dist/chunks/zh-CN-Bm6UPIbW.js.map +0 -1
  481. package/dist/components/data-table.js.map +0 -1
  482. package/dist/components/label.js.map +0 -1
@@ -1,279 +0,0 @@
1
- "use client";
2
- import { t as e } from "./cn-Dj6sRgkF.js";
3
- import { i as t } from "./context-BELWW79w.js";
4
- import { t as n } from "./icon-D7ja-_Yk.js";
5
- import { r } from "./tooltip-OcwO0VUT.js";
6
- import { o as i } from "./input-2VJuj_M4.js";
7
- import { n as a } from "./checkbox-CQjwCPkc.js";
8
- import { r as o } from "./combobox-DjDI7SUC.js";
9
- import { t as s } from "./empty-DvhyMXQq.js";
10
- import { t as c } from "./badge-C2KtxCLB.js";
11
- import { forwardRef as l, useEffect as u, useId as d, useMemo as f, useRef as p, useState as m } from "react";
12
- import { jsx as h, jsxs as g } from "react/jsx-runtime";
13
- import { Alert02Icon as _, MinusSignIcon as v, Tick02Icon as y } from "@hugeicons/core-free-icons";
14
- //#region src/components/kaeso/rights-logic.ts
15
- function b(e, t, n) {
16
- let r = new Map(e.map((e) => [e.code, e])), i = /* @__PURE__ */ new Map();
17
- for (let t of e) for (let e of t.requires ?? []) i.set(e, [...i.get(e) ?? [], t.code]);
18
- let a = [{
19
- code: t,
20
- granted: n
21
- }], o = /* @__PURE__ */ new Set([t]), s = [t];
22
- for (; s.length;) {
23
- let e = s.shift(), t = n ? r.get(e)?.requires ?? [] : i.get(e) ?? [];
24
- for (let e of t) {
25
- if (o.has(e)) continue;
26
- o.add(e);
27
- let t = r.get(e);
28
- t && !t.disabled && (s.push(e), t.granted !== n && a.push({
29
- code: e,
30
- granted: n
31
- }));
32
- }
33
- }
34
- return a;
35
- }
36
- function x(e, t, n) {
37
- let r = new Map(e.map((e) => [e.code, e.granted])), i = /* @__PURE__ */ new Map();
38
- for (let a of t) {
39
- if (a.disabled || r.get(a.code) === n) continue;
40
- let t = e.map((e) => ({
41
- ...e,
42
- granted: i.get(e.code) ?? e.granted
43
- }));
44
- for (let e of b(t, a.code, n)) i.set(e.code, e.granted), r.set(e.code, e.granted);
45
- }
46
- return [...i].map(([e, t]) => ({
47
- code: e,
48
- granted: t
49
- }));
50
- }
51
- //#endregion
52
- //#region src/components/kaeso/rights.tsx
53
- var S = {
54
- origin: {
55
- preset: { classes: "text-fg-tertiary" },
56
- added: { classes: "text-success-text" },
57
- removed: { classes: "text-danger-text" },
58
- none: { classes: "" }
59
- },
60
- mode: {
61
- edit: { classes: "" },
62
- readOnly: { classes: "" }
63
- }
64
- }, C = {
65
- origin: "none",
66
- mode: "edit"
67
- };
68
- function w(e) {
69
- return {
70
- preset: e("rightsMatrix.fromRole", "From role"),
71
- added: e("rightsMatrix.added", "Added"),
72
- removed: e("rightsMatrix.removed", "Removed"),
73
- none: ""
74
- };
75
- }
76
- var T = (e, ...t) => t.some((t) => t?.toLowerCase().includes(e)), E = /* @__PURE__ */ l(function({ groups: n, onChange: r, onRightsChange: o, readOnly: c, searchable: l, originLabels: _, "aria-label": v, className: y }, S) {
77
- let C = t(), [E, O] = m(""), [k, A] = m(""), [j, M] = m(() => /* @__PURE__ */ new Set()), N = p(void 0);
78
- u(() => () => clearTimeout(N.current), []);
79
- let P = p(null), F = d(), I = f(() => n.flatMap((e) => e.rights), [n]), L = f(() => new Map(I.map((e) => [e.code, e.label ?? e.code])), [I]), R = f(() => {
80
- if (I.length < 3) return /* @__PURE__ */ new Set();
81
- let e = new Set(I.flatMap((e) => e.requires ?? []));
82
- return new Set([...e].filter((e) => I.every((t) => t.code === e || t.requires?.includes(e))));
83
- }, [I]), z = I.some((e) => e.origin !== void 0), B = {
84
- ...w(C),
85
- ..._
86
- }, V = E.trim().toLowerCase(), H = n.map((e) => !V || T(V, e.label) ? e : {
87
- ...e,
88
- rights: e.rights.filter((e) => T(V, e.label, e.code, e.description))
89
- }).filter((e) => e.rights.length > 0), U = (e) => {
90
- if (!e.length) return;
91
- if (o) o(e);
92
- else if (r) for (let t of e) r(t.code, t.granted);
93
- let [t, ...n] = e, i = n.map((e) => L.get(e.code) ?? e.code);
94
- A(i.length && t ? t.granted ? C("rightsMatrix.alsoGranted", "Also granted {rights}", { rights: i.join(C("rightsMatrix.listSeparator", ", ")) }) : C("rightsMatrix.alsoRemoved", "Also removed {rights}", { rights: i.join(C("rightsMatrix.listSeparator", ", ")) }) : ""), clearTimeout(N.current), M(new Set(n.map((e) => e.code))), n.length && (N.current = setTimeout(() => M(/* @__PURE__ */ new Set()), 1200));
95
- };
96
- return /* @__PURE__ */ g("div", {
97
- ref: (e) => {
98
- P.current = e, typeof S == "function" ? S(e) : S && (S.current = e);
99
- },
100
- role: "group",
101
- "aria-label": v ?? C("rightsMatrix.rights", "Rights"),
102
- onKeyDown: (e) => {
103
- let t = e.target;
104
- if (t.getAttribute("role") !== "checkbox" || !P.current) return;
105
- let n = [...P.current.querySelectorAll("[role=\"checkbox\"]")], r = n.indexOf(t), i = e.key === "ArrowDown" ? n[r + 1] : e.key === "ArrowUp" ? n[r - 1] : e.key === "Home" ? n[0] : e.key === "End" ? n[n.length - 1] : void 0;
106
- i && (e.preventDefault(), i.focus());
107
- },
108
- className: e("@container flex min-w-0 flex-col gap-24", y),
109
- children: [
110
- l && /* @__PURE__ */ h(i, {
111
- className: "w-full",
112
- "aria-label": C("rightsMatrix.searchRights", "Search rights"),
113
- placeholder: C("rightsMatrix.searchRights", "Search rights"),
114
- value: E,
115
- onChange: (e) => O(e.target.value),
116
- onClear: () => O("")
117
- }),
118
- H.length === 0 && /* @__PURE__ */ h(s, {
119
- size: "compact",
120
- title: C("rightsMatrix.noMatch", "No rights match"),
121
- description: C("rightsMatrix.noMatchHint", "Try a right's name, its code, or a word from its description.")
122
- }),
123
- H.map((e, t) => {
124
- let n = `${F}-g${t}`, r = e.rights.filter((e) => e.granted).length, i = e.rights.filter((e) => !e.disabled), o = i.length > 0 && i.every((e) => e.granted), s = i.some((e) => e.granted);
125
- return /* @__PURE__ */ g("section", {
126
- "aria-labelledby": n,
127
- className: "flex min-w-0 flex-col",
128
- children: [/* @__PURE__ */ g("div", {
129
- className: "flex items-start gap-12 px-12 pb-4",
130
- children: [!c && /* @__PURE__ */ h("span", {
131
- className: "flex h-20 items-center",
132
- children: /* @__PURE__ */ h(a, {
133
- "aria-label": V ? C("rightsMatrix.everyRightShownIn", "Every right shown in {group}", { group: e.label }) : C("rightsMatrix.everyRightIn", "Every right in {group}", { group: e.label }),
134
- checked: o,
135
- indeterminate: s && !o,
136
- disabled: i.length === 0,
137
- onCheckedChange: () => U(x(I, e.rights, !o))
138
- })
139
- }), /* @__PURE__ */ g("span", {
140
- className: "flex min-w-0 flex-1 flex-col",
141
- children: [/* @__PURE__ */ g("span", {
142
- className: "flex items-baseline justify-between gap-12",
143
- children: [/* @__PURE__ */ h("span", {
144
- id: n,
145
- className: "min-w-0 wrap-break-word text-body font-semibold text-fg",
146
- children: e.label
147
- }), /* @__PURE__ */ h("span", {
148
- className: "shrink-0 text-small text-fg-tertiary tabular",
149
- children: C("rightsMatrix.grantedOfTotal", "{granted} of {total}", {
150
- granted: r,
151
- total: e.rights.length
152
- })
153
- })]
154
- }), e.description && /* @__PURE__ */ h("span", {
155
- className: "text-small text-fg-secondary text-pretty",
156
- children: e.description
157
- })]
158
- })]
159
- }), e.rights.map((e) => /* @__PURE__ */ h(D, {
160
- right: e,
161
- readOnly: !!c,
162
- query: V,
163
- hasOrigin: z,
164
- originText: B,
165
- names: L,
166
- universal: R,
167
- flashed: j.has(e.code),
168
- onToggle: (t) => U(b(I, e.code, t))
169
- }, e.code))]
170
- }, e.label);
171
- }),
172
- /* @__PURE__ */ h("span", {
173
- "aria-live": "polite",
174
- className: "sr-only",
175
- children: k
176
- })
177
- ]
178
- });
179
- });
180
- process.env.NODE_ENV !== "production" && (E.displayName = "RightsMatrix");
181
- function D({ right: i, readOnly: s, query: l, hasOrigin: u, originText: f, names: p, universal: m, flashed: b, onToggle: x }) {
182
- let C = t(), w = d(), T = d(), E = i.label ?? i.code, D = s ? [] : (i.requires ?? []).filter((e) => !m.has(e)).map((e) => p.get(e) ?? e), O = /* @__PURE__ */ g("span", {
183
- className: "flex min-w-0 flex-1 flex-col gap-2",
184
- children: [
185
- /* @__PURE__ */ g("span", {
186
- className: "flex min-w-0 items-start gap-8",
187
- children: [
188
- /* @__PURE__ */ h("span", {
189
- id: T,
190
- className: e("min-w-0 wrap-break-word", i.label ? "text-body font-medium" : "mono text-small", s && !i.granted ? "text-fg-tertiary" : "text-fg"),
191
- children: /* @__PURE__ */ h(o, {
192
- text: E,
193
- query: l
194
- })
195
- }),
196
- i.label && /* @__PURE__ */ h("span", {
197
- className: "hidden h-20 min-w-0 items-center @auth:flex",
198
- children: /* @__PURE__ */ h("span", {
199
- className: "min-w-0 truncate mono text-caption text-fg-tertiary",
200
- children: i.code
201
- })
202
- }),
203
- i.sensitive && /* @__PURE__ */ h("span", {
204
- className: e("flex shrink-0 items-center", i.label ? "h-20" : "h-18"),
205
- children: /* @__PURE__ */ h(r, {
206
- content: C("rightsMatrix.sensitiveHint", "Sensitive: exposes data or is hard to undo"),
207
- children: /* @__PURE__ */ h("span", {
208
- tabIndex: 0,
209
- className: "inline-flex shrink-0 rounded-pill text-warning-text focus-ring",
210
- children: /* @__PURE__ */ h(n, {
211
- icon: _,
212
- size: "sm",
213
- label: C("rightsMatrix.sensitive", "Sensitive")
214
- })
215
- })
216
- })
217
- }),
218
- u && !s && /* @__PURE__ */ h("span", {
219
- className: e("ml-auto flex w-80 shrink-0 items-center justify-end text-right text-small", i.label ? "h-20" : "h-18", S.origin[i.origin ?? "none"].classes),
220
- children: f[i.origin ?? "none"]
221
- })
222
- ]
223
- }),
224
- /* @__PURE__ */ h("span", {
225
- id: w,
226
- className: e("text-small text-pretty", s && !i.granted ? "text-fg-tertiary" : "text-fg-secondary"),
227
- children: i.description
228
- }),
229
- D.length > 0 && /* @__PURE__ */ h("span", {
230
- className: "text-caption text-fg-tertiary",
231
- children: C("rightsMatrix.needs", "Needs {rights}", { rights: D.join(C("rightsMatrix.listSeparator", ", ")) })
232
- }),
233
- s && i.granted && !!i.sources?.length && /* @__PURE__ */ h("span", {
234
- className: "flex flex-wrap gap-4 pt-4",
235
- children: i.sources.map((e) => e.detail ? /* @__PURE__ */ h(r, {
236
- content: e.detail,
237
- children: /* @__PURE__ */ h(c, {
238
- tabIndex: 0,
239
- className: "focus-ring",
240
- children: e.label
241
- })
242
- }, e.label) : /* @__PURE__ */ h(c, { children: e.label }, e.label))
243
- })
244
- ]
245
- });
246
- if (s) return /* @__PURE__ */ g("div", {
247
- className: "flex min-h-52 items-start gap-12 px-12 py-8",
248
- children: [/* @__PURE__ */ h("span", {
249
- className: "flex h-20 w-18 shrink-0 items-center justify-center",
250
- children: /* @__PURE__ */ h(n, {
251
- icon: i.granted ? y : v,
252
- size: "sm",
253
- className: i.granted ? "text-fg" : "text-fg-disabled",
254
- label: i.granted ? C("rightsMatrix.granted", "Granted") : C("rightsMatrix.notGranted", "Not granted")
255
- })
256
- }), O]
257
- });
258
- let k = /* @__PURE__ */ g("label", {
259
- className: e("flex min-h-52 cursor-pointer items-start gap-12 rounded-item px-12 py-8 transition-control hover:bg-fill-1", b && "bg-fill-2 hover:bg-fill-2", i.disabled && "cursor-not-allowed"),
260
- children: [/* @__PURE__ */ h("span", {
261
- className: "flex h-20 items-center",
262
- children: /* @__PURE__ */ h(a, {
263
- checked: i.granted,
264
- disabled: i.disabled,
265
- onCheckedChange: x,
266
- "aria-labelledby": T,
267
- "aria-describedby": w
268
- })
269
- }), O]
270
- });
271
- return i.disabled && i.disabledReason ? /* @__PURE__ */ h(r, {
272
- content: i.disabledReason,
273
- children: k
274
- }) : k;
275
- }
276
- //#endregion
277
- export { b as a, x as i, S as n, E as r, C as t };
278
-
279
- //# sourceMappingURL=rights-Cyp0Pzp-.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rights-Cyp0Pzp-.js","names":["__icon_Alert02Icon","__icon_Tick02Icon","__icon_MinusSignIcon","cn","useUiText","Icon","SearchInput","CheckboxBox","Highlight","Empty","Badge","rightsCascade","byCode","rights","r","dependents","req","out","seen","code","queue","next","linked","granted","c","groupCascade","state","all","group","current","n","g","KAESO_RIGHTS_MATRIX_VARIANTS","KAESO_RIGHTS_MATRIX_DEFAULT_VARIANTS","originTexts","t","matches","texts","q","RightsMatrix","ariaLabel","query","setQuery","useState","announcement","setAnnouncement","flashed","setFlashed","flashTimer","useRef","root","baseId","useId","useMemo","groups","names","universal","required","hasOrigins","originText","originLabels","shown","apply","changes","onRightsChange","onChange","first","rest","also","el","ref","target","boxes","i","className","searchable","headingId","gi","grantedCount","changeable","allOn","someOn","readOnly","RightRow","descId","nameId","name","needs","text","Tooltip","Alert02Icon","hasOrigin","s","Tick02Icon","MinusSignIcon","row","onToggle"],"sources":["../../src/components/kaeso/rights-logic.ts","../../src/components/kaeso/rights.tsx"],"sourcesContent":["export interface RightChange {\n code: string;\n granted: boolean;\n}\n\ninterface Node {\n code: string;\n granted: boolean;\n requires?: string[] | undefined;\n disabled?: boolean | undefined;\n}\n\nexport function rightsCascade(rights: readonly Node[], code: string, granted: boolean): RightChange[] {\n const byCode = new Map(rights.map((r) => [r.code, r]));\n const dependents = new Map<string, string[]>();\n for (const r of rights) for (const req of r.requires ?? []) dependents.set(req, [...(dependents.get(req) ?? []), r.code]);\n const out: RightChange[] = [{ code, granted }];\n const seen = new Set([code]);\n const queue = [code];\n while (queue.length) {\n const next = queue.shift() as string;\n const linked = granted ? (byCode.get(next)?.requires ?? []) : (dependents.get(next) ?? []);\n for (const c of linked) {\n if (seen.has(c)) continue;\n seen.add(c);\n const r = byCode.get(c);\n if (!r || r.disabled) continue;\n queue.push(c);\n if (r.granted !== granted) out.push({ code: c, granted });\n }\n }\n return out;\n}\n\nexport function groupCascade(all: readonly Node[], group: readonly Node[], granted: boolean): RightChange[] {\n const state = new Map(all.map((r) => [r.code, r.granted]));\n const out = new Map<string, boolean>();\n for (const r of group) {\n if (r.disabled || state.get(r.code) === granted) continue;\n const current = all.map((n) => ({ ...n, granted: out.get(n.code) ?? n.granted }));\n for (const c of rightsCascade(current, r.code, granted)) {\n out.set(c.code, c.granted);\n state.set(c.code, c.granted);\n }\n }\n return [...out].map(([code, g]) => ({ code, granted: g }));\n}\n","import { forwardRef, useEffect, useId, useMemo, useRef, useState, type KeyboardEvent, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { Alert02Icon as __icon_Alert02Icon, Tick02Icon as __icon_Tick02Icon, MinusSignIcon as __icon_MinusSignIcon } from \"@hugeicons/core-free-icons\";\nimport { Icon } from \"../icon/icon.js\";\nimport { CheckboxBox } from \"../checkbox/checkbox.js\";\nimport { Tooltip } from \"../tooltip/tooltip.js\";\nimport { SearchInput } from \"../input/input.js\";\nimport { Empty } from \"../empty/empty.js\";\nimport { Badge } from \"../badge/badge.js\";\nimport { Highlight } from \"../combobox/combobox.js\";\nimport { groupCascade, rightsCascade, type RightChange } from \"./rights-logic.js\";\nimport { useUiText, type UiText } from \"../../i18n/context.js\";\n\nexport const KAESO_RIGHTS_MATRIX_VARIANTS = {\n origin: {\n preset: { classes: \"text-fg-tertiary\" },\n added: { classes: \"text-success-text\" },\n removed: { classes: \"text-danger-text\" },\n none: { classes: \"\" },\n },\n mode: {\n edit: { classes: \"\" },\n readOnly: { classes: \"\" },\n },\n} as const;\nexport const KAESO_RIGHTS_MATRIX_DEFAULT_VARIANTS = { origin: \"none\", mode: \"edit\" } as const;\n\ntype Origin = keyof typeof KAESO_RIGHTS_MATRIX_VARIANTS.origin;\n\nexport interface RightSource {\n label: string;\n detail?: string | undefined;\n}\n\nexport interface Right {\n code: string;\n label?: string | undefined;\n description: string;\n granted: boolean;\n origin?: Origin | undefined;\n sensitive?: boolean | undefined;\n requires?: string[] | undefined;\n sources?: RightSource[] | undefined;\n disabled?: boolean | undefined;\n disabledReason?: string | undefined;\n}\n\nexport interface RightsGroup {\n label: string;\n description?: string | undefined;\n rights: Right[];\n}\n\nexport interface RightsMatrixProps {\n groups: RightsGroup[];\n onChange?: ((code: string, granted: boolean) => void) | undefined;\n onRightsChange?: ((changes: RightChange[]) => void) | undefined;\n readOnly?: boolean | undefined;\n searchable?: boolean | undefined;\n originLabels?: Partial<Record<Origin, string>> | undefined;\n \"aria-label\"?: string | undefined;\n className?: string | undefined;\n}\n\nfunction originTexts(t: UiText): Record<Origin, string> {\n return { preset: t(\"rightsMatrix.fromRole\", \"From role\"), added: t(\"rightsMatrix.added\", \"Added\"), removed: t(\"rightsMatrix.removed\", \"Removed\"), none: \"\" };\n}\n\nconst matches = (q: string, ...texts: (string | undefined)[]) => texts.some((t) => t?.toLowerCase().includes(q));\n\nexport const RightsMatrix = /* @__PURE__ */ forwardRef<HTMLDivElement, RightsMatrixProps>(function RightsMatrix(\n { groups, onChange, onRightsChange, readOnly, searchable, originLabels, \"aria-label\": ariaLabel, className },\n ref,\n) {\n const t = useUiText();\n const [query, setQuery] = useState(\"\");\n const [announcement, setAnnouncement] = useState(\"\");\n const [flashed, setFlashed] = useState<ReadonlySet<string>>(() => new Set());\n const flashTimer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n useEffect(() => () => clearTimeout(flashTimer.current), []);\n const root = useRef<HTMLDivElement | null>(null);\n const baseId = useId();\n const all = useMemo(() => groups.flatMap((g) => g.rights), [groups]);\n const names = useMemo(() => new Map(all.map((r) => [r.code, r.label ?? r.code])), [all]);\n const universal = useMemo(() => {\n if (all.length < 3) return new Set<string>();\n const required = new Set(all.flatMap((r) => r.requires ?? []));\n return new Set([...required].filter((c) => all.every((r) => r.code === c || r.requires?.includes(c))));\n }, [all]);\n const hasOrigins = all.some((r) => r.origin !== undefined);\n const originText = { ...originTexts(t), ...originLabels };\n const q = query.trim().toLowerCase();\n const shown = groups\n .map((g) => (!q || matches(q, g.label) ? g : { ...g, rights: g.rights.filter((r) => matches(q, r.label, r.code, r.description)) }))\n .filter((g) => g.rights.length > 0);\n\n const apply = (changes: RightChange[]) => {\n if (!changes.length) return;\n if (onRightsChange) onRightsChange(changes);\n else if (onChange) for (const c of changes) onChange(c.code, c.granted);\n const [first, ...rest] = changes;\n const also = rest.map((c) => names.get(c.code) ?? c.code);\n setAnnouncement(\n also.length && first\n ? first.granted\n ? t(\"rightsMatrix.alsoGranted\", \"Also granted {rights}\", { rights: also.join(t(\"rightsMatrix.listSeparator\", \", \")) })\n : t(\"rightsMatrix.alsoRemoved\", \"Also removed {rights}\", { rights: also.join(t(\"rightsMatrix.listSeparator\", \", \")) })\n : \"\",\n );\n clearTimeout(flashTimer.current);\n setFlashed(new Set(rest.map((c) => c.code)));\n if (rest.length) flashTimer.current = setTimeout(() => setFlashed(new Set()), 1200);\n };\n\n const onKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\n const target = e.target as HTMLElement;\n if (target.getAttribute(\"role\") !== \"checkbox\" || !root.current) return;\n const boxes = [...root.current.querySelectorAll<HTMLElement>('[role=\"checkbox\"]')];\n const i = boxes.indexOf(target);\n const next =\n e.key === \"ArrowDown\"\n ? boxes[i + 1]\n : e.key === \"ArrowUp\"\n ? boxes[i - 1]\n : e.key === \"Home\"\n ? boxes[0]\n : e.key === \"End\"\n ? boxes[boxes.length - 1]\n : undefined;\n if (!next) return;\n e.preventDefault();\n next.focus();\n };\n\n return (\n <div\n ref={(el) => {\n root.current = el;\n if (typeof ref === \"function\") ref(el);\n else if (ref) ref.current = el;\n }}\n role=\"group\"\n aria-label={ariaLabel ?? t(\"rightsMatrix.rights\", \"Rights\")}\n onKeyDown={onKeyDown}\n className={cn(\"@container flex min-w-0 flex-col gap-24\", className)}\n >\n {searchable && (\n <SearchInput\n className=\"w-full\"\n aria-label={t(\"rightsMatrix.searchRights\", \"Search rights\")}\n placeholder={t(\"rightsMatrix.searchRights\", \"Search rights\")}\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n onClear={() => setQuery(\"\")}\n />\n )}\n {shown.length === 0 && (\n <Empty\n size=\"compact\"\n title={t(\"rightsMatrix.noMatch\", \"No rights match\")}\n description={t(\"rightsMatrix.noMatchHint\", \"Try a right's name, its code, or a word from its description.\")}\n />\n )}\n {shown.map((g, gi) => {\n const headingId = `${baseId}-g${gi}`;\n const grantedCount = g.rights.filter((r) => r.granted).length;\n const changeable = g.rights.filter((r) => !r.disabled);\n const allOn = changeable.length > 0 && changeable.every((r) => r.granted);\n const someOn = changeable.some((r) => r.granted);\n return (\n <section key={g.label} aria-labelledby={headingId} className=\"flex min-w-0 flex-col\">\n <div className=\"flex items-start gap-12 px-12 pb-4\">\n {!readOnly && (\n <span className=\"flex h-20 items-center\">\n <CheckboxBox\n aria-label={\n q\n ? t(\"rightsMatrix.everyRightShownIn\", \"Every right shown in {group}\", { group: g.label })\n : t(\"rightsMatrix.everyRightIn\", \"Every right in {group}\", { group: g.label })\n }\n checked={allOn}\n indeterminate={someOn && !allOn}\n disabled={changeable.length === 0}\n onCheckedChange={() => apply(groupCascade(all, g.rights, !allOn))}\n />\n </span>\n )}\n <span className=\"flex min-w-0 flex-1 flex-col\">\n <span className=\"flex items-baseline justify-between gap-12\">\n <span id={headingId} className=\"min-w-0 wrap-break-word text-body font-semibold text-fg\">\n {g.label}\n </span>\n <span className=\"shrink-0 text-small text-fg-tertiary tabular\">\n {t(\"rightsMatrix.grantedOfTotal\", \"{granted} of {total}\", { granted: grantedCount, total: g.rights.length })}\n </span>\n </span>\n {g.description && <span className=\"text-small text-fg-secondary text-pretty\">{g.description}</span>}\n </span>\n </div>\n {g.rights.map((r) => (\n <RightRow\n key={r.code}\n right={r}\n readOnly={!!readOnly}\n query={q}\n hasOrigin={hasOrigins}\n originText={originText}\n names={names}\n universal={universal}\n flashed={flashed.has(r.code)}\n onToggle={(granted) => apply(rightsCascade(all, r.code, granted))}\n />\n ))}\n </section>\n );\n })}\n <span aria-live=\"polite\" className=\"sr-only\">\n {announcement}\n </span>\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") RightsMatrix.displayName = \"RightsMatrix\";\n\nfunction RightRow({\n right: r,\n readOnly,\n query,\n hasOrigin,\n originText,\n names,\n universal,\n flashed,\n onToggle,\n}: {\n right: Right;\n readOnly: boolean;\n query: string;\n hasOrigin: boolean;\n originText: Record<Origin, string>;\n names: Map<string, string>;\n universal: ReadonlySet<string>;\n flashed: boolean;\n onToggle: (granted: boolean) => void;\n}) {\n const t = useUiText();\n const descId = useId();\n const nameId = useId();\n const name = r.label ?? r.code;\n const needs = readOnly ? [] : (r.requires ?? []).filter((c) => !universal.has(c)).map((c) => names.get(c) ?? c);\n const text: ReactNode = (\n <span className=\"flex min-w-0 flex-1 flex-col gap-2\">\n <span className=\"flex min-w-0 items-start gap-8\">\n <span\n id={nameId}\n className={cn(\n \"min-w-0 wrap-break-word\",\n r.label ? \"text-body font-medium\" : \"mono text-small\",\n readOnly && !r.granted ? \"text-fg-tertiary\" : \"text-fg\",\n )}\n >\n <Highlight text={name} query={query} />\n </span>\n {r.label && (\n <span className=\"hidden h-20 min-w-0 items-center @auth:flex\">\n <span className=\"min-w-0 truncate mono text-caption text-fg-tertiary\">{r.code}</span>\n </span>\n )}\n {r.sensitive && (\n <span className={cn(\"flex shrink-0 items-center\", r.label ? \"h-20\" : \"h-18\")}>\n <Tooltip content={t(\"rightsMatrix.sensitiveHint\", \"Sensitive: exposes data or is hard to undo\")}>\n <span tabIndex={0} className=\"inline-flex shrink-0 rounded-pill text-warning-text focus-ring\">\n <Icon icon={__icon_Alert02Icon} size=\"sm\" label={t(\"rightsMatrix.sensitive\", \"Sensitive\")} />\n </span>\n </Tooltip>\n </span>\n )}\n {hasOrigin && !readOnly && (\n <span\n className={cn(\n \"ml-auto flex w-80 shrink-0 items-center justify-end text-right text-small\",\n r.label ? \"h-20\" : \"h-18\",\n KAESO_RIGHTS_MATRIX_VARIANTS.origin[r.origin ?? \"none\"].classes,\n )}\n >\n {originText[r.origin ?? \"none\"]}\n </span>\n )}\n </span>\n <span id={descId} className={cn(\"text-small text-pretty\", readOnly && !r.granted ? \"text-fg-tertiary\" : \"text-fg-secondary\")}>\n {r.description}\n </span>\n {needs.length > 0 && (\n <span className=\"text-caption text-fg-tertiary\">\n {t(\"rightsMatrix.needs\", \"Needs {rights}\", { rights: needs.join(t(\"rightsMatrix.listSeparator\", \", \")) })}\n </span>\n )}\n {readOnly && r.granted && !!r.sources?.length && (\n <span className=\"flex flex-wrap gap-4 pt-4\">\n {r.sources.map((s) =>\n s.detail ? (\n <Tooltip key={s.label} content={s.detail}>\n <Badge tabIndex={0} className=\"focus-ring\">\n {s.label}\n </Badge>\n </Tooltip>\n ) : (\n <Badge key={s.label}>{s.label}</Badge>\n ),\n )}\n </span>\n )}\n </span>\n );\n\n if (readOnly) {\n return (\n <div className=\"flex min-h-52 items-start gap-12 px-12 py-8\">\n <span className=\"flex h-20 w-18 shrink-0 items-center justify-center\">\n <Icon\n icon={r.granted ? __icon_Tick02Icon : __icon_MinusSignIcon}\n size=\"sm\"\n className={r.granted ? \"text-fg\" : \"text-fg-disabled\"}\n label={r.granted ? t(\"rightsMatrix.granted\", \"Granted\") : t(\"rightsMatrix.notGranted\", \"Not granted\")}\n />\n </span>\n {text}\n </div>\n );\n }\n\n const row = (\n <label\n className={cn(\n \"flex min-h-52 cursor-pointer items-start gap-12 rounded-item px-12 py-8 transition-control hover:bg-fill-1\",\n flashed && \"bg-fill-2 hover:bg-fill-2\",\n r.disabled && \"cursor-not-allowed\",\n )}\n >\n <span className=\"flex h-20 items-center\">\n <CheckboxBox checked={r.granted} disabled={r.disabled} onCheckedChange={onToggle} aria-labelledby={nameId} aria-describedby={descId} />\n </span>\n {text}\n </label>\n );\n return r.disabled && r.disabledReason ? <Tooltip content={r.disabledReason}>{row}</Tooltip> : row;\n}\n"],"mappings":";;;;;;;;;;;;;;AAYA,SAAgBW,EAAc,GAAyB,GAAc,GAAiC;CACpG,IAAMC,IAAS,IAAI,IAAIC,EAAO,KAAK,MAAM,CAACC,EAAE,MAAMA,CAAC,CAAC,CAAC,GAC/CC,oBAAa,IAAI,IAAsB;CAC7C,KAAK,IAAMD,KAAKD,GAAQ,KAAK,IAAMG,KAAOF,EAAE,YAAY,CAAC,GAAG,EAAW,IAAIE,GAAK,CAAC,GAAID,EAAW,IAAIC,CAAG,KAAK,CAAC,GAAIF,EAAE,IAAI,CAAC;CACxH,IAAMG,IAAqB,CAAC;EAAE;EAAM;CAAQ,CAAC,GACvCC,oBAAO,IAAI,IAAI,CAACC,CAAI,CAAC,GACrBC,IAAQ,CAACD,CAAI;CACnB,OAAOC,EAAM,SAAQ;EACnB,IAAMC,IAAOD,EAAM,MAAM,GACnBE,IAASC,IAAWX,EAAO,IAAIS,CAAI,CAAC,EAAE,YAAY,CAAC,IAAMN,EAAW,IAAIM,CAAI,KAAK,CAAC;EACxF,KAAK,IAAMG,KAAKF,GAAQ;GACtB,IAAIJ,EAAK,IAAIM,CAAC,GAAG;GACjB,EAAK,IAAIA,CAAC;GACV,IAAMV,IAAIF,EAAO,IAAIY,CAAC;GACtB,AAAKV,KAAK,GAAE,aACZM,EAAM,KAAKI,CAAC,GACRV,EAAE,YAAYS,KAASN,EAAI,KAAK;IAAE,MAAMO;IAAG;GAAQ,CAAC;EAC1D;CACF;CACA,OAAOP;AACT;AAEA,SAAgBQ,EAAa,GAAsB,GAAwB,GAAiC;CAC1G,IAAMC,IAAQ,IAAI,IAAIC,EAAI,KAAK,MAAM,CAACb,EAAE,MAAMA,EAAE,OAAO,CAAC,CAAC,GACnDG,oBAAM,IAAI,IAAqB;CACrC,KAAK,IAAMH,KAAKc,GAAO;EACrB,IAAId,EAAE,YAAYY,EAAM,IAAIZ,EAAE,IAAI,MAAMS,GAAS;EACjD,IAAMM,IAAUF,EAAI,KAAK,OAAO;GAAE,GAAGG;GAAG,SAASb,EAAI,IAAIa,EAAE,IAAI,KAAKA,EAAE;EAAQ,EAAE;EAChF,KAAK,IAAMN,KAAKb,EAAckB,GAASf,EAAE,MAAMS,CAAO,GAEpD,AADAN,EAAI,IAAIO,EAAE,MAAMA,EAAE,OAAO,GACzBE,EAAM,IAAIF,EAAE,MAAMA,EAAE,OAAO;CAE/B;CACA,OAAO,CAAC,GAAGP,CAAG,CAAC,CAAC,KAAK,CAACE,GAAMY,QAAQ;EAAE;EAAM,SAASA;CAAE,EAAE;AAC3D;;;ACjCA,IAAaC,IAA+B;CAC1C,QAAQ;EACN,QAAQ,EAAE,SAAS,mBAAmB;EACtC,OAAO,EAAE,SAAS,oBAAoB;EACtC,SAAS,EAAE,SAAS,mBAAmB;EACvC,MAAM,EAAE,SAAS,GAAG;CACtB;CACA,MAAM;EACJ,MAAM,EAAE,SAAS,GAAG;EACpB,UAAU,EAAE,SAAS,GAAG;CAC1B;AACF,GACaC,IAAuC;CAAE,QAAQ;CAAQ,MAAM;AAAO;AAuCnF,SAASC,EAAY,GAAmC;CACtD,OAAO;EAAE,QAAQC,EAAE,yBAAyB,WAAW;EAAG,OAAOA,EAAE,sBAAsB,OAAO;EAAG,SAASA,EAAE,wBAAwB,SAAS;EAAG,MAAM;CAAG;AAC7J;AAEA,IAAMC,KAAW,GAAW,GAAGC,MAAkCA,EAAM,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,SAASC,CAAC,CAAC,GAElGC,IAA+B,kBAA8C,SACxF,EAAE,WAAQ,aAAU,mBAAgB,aAAU,eAAY,iBAAc,cAAcC,GAAW,gBACjG,GACA;CACA,IAAML,IAAI/B,EAAU,GACd,CAACqC,GAAOC,KAAYC,EAAS,EAAE,GAC/B,CAACC,GAAcC,KAAmBF,EAAS,EAAE,GAC7C,CAACG,GAASC,KAAcJ,wBAAoC,IAAI,IAAI,CAAC,GACrEK,IAAaC,EAAkD,KAAA,CAAS;CAC9E,cAAsB,aAAaD,EAAW,OAAO,GAAG,CAAC,CAAC;CAC1D,IAAME,IAAOD,EAA8B,IAAI,GACzCE,IAASC,EAAM,GACfzB,IAAM0B,QAAcC,EAAO,SAAS,MAAMvB,EAAE,MAAM,GAAG,CAACuB,CAAM,CAAC,GAC7DC,IAAQF,QAAc,IAAI,IAAI1B,EAAI,KAAK,MAAM,CAACb,EAAE,MAAMA,EAAE,SAASA,EAAE,IAAI,CAAC,CAAC,GAAG,CAACa,CAAG,CAAC,GACjF6B,IAAYH,QAAc;EAC9B,IAAI1B,EAAI,SAAS,GAAG,uBAAO,IAAI,IAAY;EAC3C,IAAM8B,IAAW,IAAI,IAAI9B,EAAI,SAAS,MAAMb,EAAE,YAAY,CAAC,CAAC,CAAC;EAC7D,OAAO,IAAI,IAAI,CAAC,GAAG2C,CAAQ,CAAC,CAAC,QAAQ,MAAM9B,EAAI,OAAO,MAAMb,EAAE,SAASU,KAAKV,EAAE,UAAU,SAASU,CAAC,CAAC,CAAC,CAAC;CACvG,GAAG,CAACG,CAAG,CAAC,GACF+B,IAAa/B,EAAI,MAAM,MAAMb,EAAE,WAAW,KAAA,CAAS,GACnD6C,IAAa;EAAE,GAAGzB,EAAYC,CAAC;EAAG,GAAGyB;CAAa,GAClDtB,IAAIG,EAAM,KAAK,CAAC,CAAC,YAAY,GAC7BoB,IAAQP,EACX,KAAK,MAAO,CAAChB,KAAKF,EAAQE,GAAGP,EAAE,KAAK,IAAIA,IAAI;EAAE,GAAGA;EAAG,QAAQA,EAAE,OAAO,QAAQ,MAAMK,EAAQE,GAAGxB,EAAE,OAAOA,EAAE,MAAMA,EAAE,WAAW,CAAC;CAAE,CAAE,CAAC,CAClI,QAAQ,MAAMiB,EAAE,OAAO,SAAS,CAAC,GAE9B+B,KAAS,MAA2B;EACxC,IAAI,CAACC,EAAQ,QAAQ;EACrB,IAAIC,GAAgB,EAAeD,CAAO;OACrC,IAAIE,GAAU,KAAK,IAAMzC,KAAKuC,GAAS,EAASvC,EAAE,MAAMA,EAAE,OAAO;EACtE,IAAM,CAAC0C,GAAO,GAAGC,KAAQJ,GACnBK,IAAOD,EAAK,KAAK,MAAMZ,EAAM,IAAI/B,EAAE,IAAI,KAAKA,EAAE,IAAI;EAUxD,AATAqB,EACEuB,EAAK,UAAUF,IACXA,EAAM,UACJ/B,EAAE,4BAA4B,yBAAyB,EAAE,QAAQiC,EAAK,KAAKjC,EAAE,8BAA8B,IAAI,CAAC,EAAE,CAAC,IACnHA,EAAE,4BAA4B,yBAAyB,EAAE,QAAQiC,EAAK,KAAKjC,EAAE,8BAA8B,IAAI,CAAC,EAAE,CAAC,IACrH,EACN,GACA,aAAaa,EAAW,OAAO,GAC/BD,EAAW,IAAI,IAAIoB,EAAK,KAAK,MAAM3C,EAAE,IAAI,CAAC,CAAC,GACvC2C,EAAK,WAAQ,EAAW,UAAU,iBAAiBpB,kBAAW,IAAI,IAAI,CAAC,GAAG,IAAI;CACpF;CAsBA,OACE,kBAAC,OAAD;EACE,MAAM,MAAO;GAEX,AADA,EAAK,UAAUsB,GACX,OAAOC,KAAQ,aAAYA,EAAID,CAAE,IAC5BC,MAAK,EAAI,UAAUD;EAC9B;EACA,MAAK;EACL,cAAY7B,KAAaL,EAAE,uBAAuB,QAAQ;EAC/C,YA7BI,MAAqC;GACtD,IAAMoC,IAAS,EAAE;GACjB,IAAIA,EAAO,aAAa,MAAM,MAAM,cAAc,CAACrB,EAAK,SAAS;GACjE,IAAMsB,IAAQ,CAAC,GAAGtB,EAAK,QAAQ,iBAA8B,qBAAmB,CAAC,GAC3EuB,IAAID,EAAM,QAAQD,CAAM,GACxBlD,IACJ,EAAE,QAAQ,cACNmD,EAAMC,IAAI,KACV,EAAE,QAAQ,YACRD,EAAMC,IAAI,KACV,EAAE,QAAQ,SACRD,EAAM,KACN,EAAE,QAAQ,QACRA,EAAMA,EAAM,SAAS,KACrB,KAAA;GACZ,AAAKnD,MACL,EAAE,eAAe,GACjBA,EAAK,MAAM;EACb;EAYI,WAAWlB,EAAG,2CAA2CuE,CAAS;EATpE,UAAA;GAWGC,KACC,kBAACrE,GAAD;IACE,WAAU;IACV,cAAY6B,EAAE,6BAA6B,eAAe;IAC1D,aAAaA,EAAE,6BAA6B,eAAe;IAC3D,OAAOM;IACP,WAAW,MAAMC,EAAS,EAAE,OAAO,KAAK;IACxC,eAAeA,EAAS,EAAE;GAC3B,CAAA;GAEFmB,EAAM,WAAW,KAChB,kBAACpD,GAAD;IACE,MAAK;IACL,OAAO0B,EAAE,wBAAwB,iBAAiB;IAClD,aAAaA,EAAE,4BAA4B,+DAA+D;GAC3G,CAAA;GAEF0B,EAAM,KAAK,GAAG,MAAO;IACpB,IAAMe,IAAY,GAAGzB,EAAO,IAAI0B,KAC1BC,IAAe/C,EAAE,OAAO,QAAQ,MAAMjB,EAAE,OAAO,CAAC,CAAC,QACjDiE,IAAahD,EAAE,OAAO,QAAQ,MAAM,CAACjB,EAAE,QAAQ,GAC/CkE,IAAQD,EAAW,SAAS,KAAKA,EAAW,OAAO,MAAMjE,EAAE,OAAO,GAClEmE,IAASF,EAAW,MAAM,MAAMjE,EAAE,OAAO;IAC/C,OACE,kBAAC,WAAD;KAAuB,mBAAiB8D;KAAW,WAAU;KAA7D,UAAA,CACE,kBAAC,OAAD;MAAK,WAAU;MAAf,UAAA,CACG,CAACM,KACA,kBAAC,QAAD;OAAM,WAAU;OACd,UAAA,kBAAC3E,GAAD;QACE,cACE+B,IACIH,EAAE,kCAAkC,gCAAgC,EAAE,OAAOJ,EAAE,MAAM,CAAC,IACtFI,EAAE,6BAA6B,0BAA0B,EAAE,OAAOJ,EAAE,MAAM,CAAC;QAEjF,SAASiD;QACT,eAAeC,KAAU,CAACD;QAC1B,UAAUD,EAAW,WAAW;QAChC,uBAAuBjB,EAAMrC,EAAaE,GAAKI,EAAE,QAAQ,CAACiD,CAAK,CAAC;OACjE,CAAA;MACG,CAAA,GAER,kBAAC,QAAD;OAAM,WAAU;OAAhB,UAAA,CACE,kBAAC,QAAD;QAAM,WAAU;QAAhB,UAAA,CACE,kBAAC,QAAD;SAAM,IAAIJ;SAAW,WAAU;SAC5B,UAAA7C,EAAE;QACC,CAAA,GACN,kBAAC,QAAD;SAAM,WAAU;SACb,UAAAI,EAAE,+BAA+B,wBAAwB;UAAE,SAAS2C;UAAc,OAAO/C,EAAE,OAAO;SAAO,CAAC;QACvG,CAAA,CACF;OACL,CAAA,GAAAA,EAAE,eAAe,kBAAC,QAAD;QAAM,WAAU;QAA4C,UAAAA,EAAE;OAAkB,CAAA,CAC9F;MACH,CAAA,CAAA;KACJ,CAAA,GAAAA,EAAE,OAAO,KAAK,MACb,kBAACoD,GAAD;MAEE,OAAOrE;MACP,UAAU,CAAC,CAACoE;MACZ,OAAO5C;MACP,WAAWoB;MACC;MACL;MACI;MACX,SAASZ,EAAQ,IAAIhC,EAAE,IAAI;MAC3B,WAAW,MAAYgD,EAAMnD,EAAcgB,GAAKb,EAAE,MAAMS,CAAO,CAAC;KACjE,GAVMT,EAAE,IAUR,CACF,CACM;IA3CK,GAAAiB,EAAE,KA2CP;GAEb,CAAC;GACD,kBAAC,QAAD;IAAM,aAAU;IAAS,WAAU;IAChC,UAAAa;GACG,CAAA;EACH;;AAET,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAa,cAAc;AAEtE,SAASuC,EAAS,EAChB,OAAOrE,GACP,aACA,UACA,cACA,eACA,UACA,cACA,YACA,eAWC;CACD,IAAMqB,IAAI/B,EAAU,GACdgF,IAAShC,EAAM,GACfiC,IAASjC,EAAM,GACfkC,IAAOxE,EAAE,SAASA,EAAE,MACpByE,IAAQL,IAAW,CAAC,KAAKpE,EAAE,YAAY,CAAC,EAAA,CAAG,QAAQ,MAAM,CAAC0C,EAAU,IAAIhC,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM+B,EAAM,IAAI/B,CAAC,KAAKA,CAAC,GACxGgE,IACJ,kBAAC,QAAD;EAAM,WAAU;EAAhB,UAAA;GACE,kBAAC,QAAD;IAAM,WAAU;IAAhB,UAAA;KACE,kBAAC,QAAD;MACE,IAAIH;MACJ,WAAWlF,EACT,2BACAW,EAAE,QAAQ,0BAA0B,mBACpCoE,KAAY,CAACpE,EAAE,UAAU,qBAAqB,SAChD;MAEA,UAAA,kBAACN,GAAD;OAAW,MAAM8E;OAAa;MAAQ,CAAA;KAClC,CAAA;KACLxE,EAAE,SACD,kBAAC,QAAD;MAAM,WAAU;MACd,UAAA,kBAAC,QAAD;OAAM,WAAU;OAAuD,UAAAA,EAAE;MAAW,CAAA;KAChF,CAAA;KAEPA,EAAE,aACD,kBAAC,QAAD;MAAM,WAAWX,EAAG,8BAA8BW,EAAE,QAAQ,SAAS,MAAM;MACzE,UAAA,kBAAC2E,GAAD;OAAS,SAAStD,EAAE,8BAA8B,4CAA4C;OAC5F,UAAA,kBAAC,QAAD;QAAM,UAAU;QAAG,WAAU;QAC3B,UAAA,kBAAC9B,GAAD;SAAM,MAAML;SAAoB,MAAK;SAAK,OAAOmC,EAAE,0BAA0B,WAAW;QAAI,CAAA;OACxF,CAAA;MACC,CAAA;KACL,CAAA;KAEPwD,KAAa,CAACT,KACb,kBAAC,QAAD;MACE,WAAW/E,EACT,6EACAW,EAAE,QAAQ,SAAS,QACnBkB,EAA6B,OAAOlB,EAAE,UAAU,OAAO,CAAC,OAC1D;MAEC,UAAA6C,EAAW7C,EAAE,UAAU;KACpB,CAAA;IAEJ;;GACN,kBAAC,QAAD;IAAM,IAAIsE;IAAQ,WAAWjF,EAAG,0BAA0B+E,KAAY,CAACpE,EAAE,UAAU,qBAAqB,mBAAmB;IACxH,UAAAA,EAAE;GACC,CAAA;GACLyE,EAAM,SAAS,KACd,kBAAC,QAAD;IAAM,WAAU;IACb,UAAApD,EAAE,sBAAsB,kBAAkB,EAAE,QAAQoD,EAAM,KAAKpD,EAAE,8BAA8B,IAAI,CAAC,EAAE,CAAC;GACpG,CAAA;GAEP+C,KAAYpE,EAAE,WAAW,CAAC,CAACA,EAAE,SAAS,UACrC,kBAAC,QAAD;IAAM,WAAU;IACb,UAAAA,EAAE,QAAQ,KAAK,MACd8E,EAAE,SACA,kBAACH,GAAD;KAAuB,SAASG,EAAE;KAChC,UAAA,kBAAClF,GAAD;MAAO,UAAU;MAAG,WAAU;MAC3B,UAAAkF,EAAE;KACE,CAAA;IACA,GAJKA,EAAE,KAIP,IAET,kBAAClF,GAAD,EAAA,UAAsBkF,EAAE,MAAa,GAAzBA,EAAE,KAAuB,CAEzC;GACI,CAAA;EAEJ;;CAGR,IAAIV,GACF,OACE,kBAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CACE,kBAAC,QAAD;GAAM,WAAU;GACd,UAAA,kBAAC7E,GAAD;IACE,MAAMS,EAAE,UAAUb,IAAoBC;IACtC,MAAK;IACL,WAAWY,EAAE,UAAU,YAAY;IACnC,OAAOA,EAAE,UAAUqB,EAAE,wBAAwB,SAAS,IAAIA,EAAE,2BAA2B,aAAa;GACrG,CAAA;EACG,CAAA,GACLqD,CACE;;CAIT,IAAMO,IACJ,kBAAC,SAAD;EACE,WAAW5F,EACT,8GACA2C,KAAW,6BACXhC,EAAE,YAAY,oBAChB;EALF,UAAA,CAOE,kBAAC,QAAD;GAAM,WAAU;GACd,UAAA,kBAACP,GAAD;IAAa,SAASO,EAAE;IAAS,UAAUA,EAAE;IAAU,iBAAiBkF;IAAU,mBAAiBX;IAAQ,oBAAkBD;GAAS,CAAA;EAClI,CAAA,GACLI,CACI;;CAET,OAAO1E,EAAE,YAAYA,EAAE,iBAAiB,kBAAC2E,GAAD;EAAS,SAAS3E,EAAE;EAAiB,UAAAiF;CAAa,CAAA,IAAIA;AAChG"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"scroll-area-D8MD7Vpo.js","names":["BaseScrollArea","ScrollArea","cn","KAESO_SCROLL_AREA_VARIANTS","KAESO_SCROLL_AREA_DEFAULT_VARIANTS","Bar","ScrollArea","orientation","ScrollArea$1","label","CSPProvider","className","viewportClassName"],"sources":["../../src/components/scroll-area/scroll-area.tsx"],"sourcesContent":["import { forwardRef, type ReactNode } from \"react\";\nimport { CSPProvider } from \"@base-ui/react/csp-provider\";\nimport { ScrollArea as BaseScrollArea } from \"@base-ui/react/scroll-area\";\nimport { cn } from \"../../utils/cn.js\";\n\nexport const KAESO_SCROLL_AREA_VARIANTS = {\n orientation: {\n vertical: { classes: \"scroll-axis-y scroll-fade-y\" },\n horizontal: { classes: \"scroll-axis-x scroll-fade-x\" },\n both: { classes: \"scroll-axis-both\" },\n },\n} as const;\nexport const KAESO_SCROLL_AREA_DEFAULT_VARIANTS = { orientation: \"vertical\" } as const;\n\nexport interface ScrollAreaProps {\n children: ReactNode;\n orientation?: keyof typeof KAESO_SCROLL_AREA_VARIANTS.orientation | undefined;\n className?: string | undefined;\n viewportClassName?: string | undefined;\n \"aria-label\"?: string | undefined;\n}\n\nconst Bar = ({ orientation }: { orientation: \"vertical\" | \"horizontal\" }) => (\n <BaseScrollArea.Scrollbar\n orientation={orientation}\n className={cn(\n \"flex touch-none p-2 opacity-0 select-none transition-control data-hovering:opacity-100 data-scrolling:opacity-100\",\n orientation === \"vertical\" ? \"w-10\" : \"h-10 flex-col\",\n )}\n >\n <BaseScrollArea.Thumb className=\"flex-1 rounded-pill bg-line-strong\" />\n </BaseScrollArea.Scrollbar>\n);\n\nexport const ScrollArea = /* @__PURE__ */ forwardRef<HTMLDivElement, ScrollAreaProps>(function ScrollArea(\n { children, orientation = \"vertical\", className, viewportClassName, \"aria-label\": label },\n ref,\n) {\n return (\n <CSPProvider disableStyleElements>\n <BaseScrollArea.Root ref={ref} className={cn(\"relative min-h-0 overflow-hidden\", className)}>\n <BaseScrollArea.Viewport\n className={cn(\"size-full focus-ring-inset\", KAESO_SCROLL_AREA_VARIANTS.orientation[orientation].classes, viewportClassName)}\n {...(label ? { role: \"region\", \"aria-label\": label } : {})}\n >\n {children}\n </BaseScrollArea.Viewport>\n {orientation !== \"horizontal\" && <Bar orientation=\"vertical\" />}\n {orientation !== \"vertical\" && <Bar orientation=\"horizontal\" />}\n {orientation === \"both\" && <BaseScrollArea.Corner />}\n </BaseScrollArea.Root>\n </CSPProvider>\n );\n});\nif (process.env.NODE_ENV !== \"production\") ScrollArea.displayName = \"ScrollArea\";\n"],"mappings":";;;;;;;AAKA,IAAaG,IAA6B,EACxC,aAAa;CACX,UAAU,EAAE,SAAS,8BAA8B;CACnD,YAAY,EAAE,SAAS,8BAA8B;CACrD,MAAM,EAAE,SAAS,mBAAmB;AACtC,EACF,GACaC,IAAqC,EAAE,aAAa,WAAW,GAUtEC,KAAO,EAAE,qBACb,kBAACL,EAAe,WAAhB;CACe;CACb,WAAWE,EACT,qHACAK,MAAgB,aAAa,SAAS,eACxC;CAEA,UAAA,kBAACP,EAAe,OAAhB,EAAsB,WAAU,qCAAsC,CAAA;AAC9C,CAAA,GAGfC,IAA6B,kBAA4C,SACpF,EAAE,aAAU,iBAAc,YAAY,cAAW,sBAAmB,cAAcQ,KAClF,GACA;CACA,OACE,kBAACC,GAAD;EAAa,sBAAA;EACX,UAAA,kBAACV,EAAe,MAAhB;GAA0B;GAAK,WAAWE,EAAG,oCAAoCS,CAAS;GAA1F,UAAA;IACE,kBAACX,EAAe,UAAhB;KACE,WAAWE,EAAG,8BAA8BC,EAA2B,YAAYI,EAAY,CAAC,SAASK,CAAiB;KAC1H,GAAKH,IAAQ;MAAE,MAAM;MAAU,cAAcA;KAAM,IAAI,CAAC;KAEvD;IACsB,CAAA;IACxBF,MAAgB,gBAAgB,kBAACF,GAAD,EAAK,aAAY,WAAY,CAAA;IAC7DE,MAAgB,cAAc,kBAACF,GAAD,EAAK,aAAY,aAAc,CAAA;IAC7DE,MAAgB,UAAU,kBAACP,EAAe,QAAhB,CAAwB,CAAA;GAChC;;CACV,CAAA;AAEjB,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAW,cAAc"}
@@ -1,14 +0,0 @@
1
- //#region src/hooks/scroll-parent.ts
2
- function e(e) {
3
- let t = e?.parentElement ?? null;
4
- for (; t;) {
5
- let e = getComputedStyle(t);
6
- if (/(auto|scroll|overlay)/.test(e.overflowY) && t.scrollHeight > t.clientHeight) return t;
7
- t = t.parentElement;
8
- }
9
- return document.scrollingElement ?? null;
10
- }
11
- //#endregion
12
- export { e as t };
13
-
14
- //# sourceMappingURL=scroll-parent-WXvzQcUo.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scroll-parent-WXvzQcUo.js","names":["scrollParent","p","el","s"],"sources":["../../src/hooks/scroll-parent.ts"],"sourcesContent":["export function scrollParent(el: HTMLElement | null): HTMLElement | null {\n let p = el?.parentElement ?? null;\n while (p) {\n const s = getComputedStyle(p);\n if (/(auto|scroll|overlay)/.test(s.overflowY) && p.scrollHeight > p.clientHeight) return p;\n p = p.parentElement;\n }\n return (document.scrollingElement as HTMLElement | null) ?? null;\n}\n"],"mappings":";AAAA,SAAgBA,EAAa,GAA4C;CACvE,IAAIC,IAAIC,GAAI,iBAAiB;CAC7B,OAAOD,IAAG;EACR,IAAME,IAAI,iBAAiBF,CAAC;EAC5B,IAAI,wBAAwB,KAAKE,EAAE,SAAS,KAAKF,EAAE,eAAeA,EAAE,cAAc,OAAOA;EACzF,IAAIA,EAAE;CACR;CACA,OAAQ,SAAS,oBAA2C;AAC9D"}
@@ -1,87 +0,0 @@
1
- "use client";
2
- import { t as e } from "./cn-Dj6sRgkF.js";
3
- import { t } from "./nav-wordmark-_pjheAsZ.js";
4
- import { forwardRef as n } from "react";
5
- import { jsx as r, jsxs as i } from "react/jsx-runtime";
6
- //#region src/components/section/section.tsx
7
- var a = { spacing: {
8
- default: { classes: "mt-48 first:mt-0" },
9
- none: { classes: "" }
10
- } }, o = { spacing: "default" }, s = /* @__PURE__ */ n(function({ title: t, description: n, actions: o, spacing: s = "default", children: c, className: l }, u) {
11
- return /* @__PURE__ */ i("section", {
12
- ref: u,
13
- className: e(a.spacing[s].classes, l),
14
- children: [(t || o) && /* @__PURE__ */ i("header", {
15
- className: "mb-16 flex flex-wrap items-end justify-between gap-x-16 gap-y-12",
16
- children: [/* @__PURE__ */ i("div", {
17
- className: "flex min-w-0 flex-col gap-2",
18
- children: [t && /* @__PURE__ */ r("h2", {
19
- className: "text-title-sm font-semibold text-fg",
20
- children: t
21
- }), n && /* @__PURE__ */ r("p", {
22
- className: "max-w-prose text-small text-fg-secondary",
23
- children: n
24
- })]
25
- }), o && /* @__PURE__ */ r("div", {
26
- className: "flex shrink-0 items-center gap-8",
27
- children: o
28
- })]
29
- }), c]
30
- });
31
- });
32
- process.env.NODE_ENV !== "production" && (s.displayName = "Section");
33
- var c = /* @__PURE__ */ n(function({ children: t, aside: n, className: a }, o) {
34
- return /* @__PURE__ */ i("div", {
35
- ref: o,
36
- className: e("grid grid-cols-1 lg:grid-cols-aside", a),
37
- children: [/* @__PURE__ */ r("div", {
38
- className: "min-w-0 lg:pr-32",
39
- children: t
40
- }), /* @__PURE__ */ r("aside", {
41
- className: "mt-32 min-w-0 lg:mt-0 lg:pl-32 lg:hairline-l",
42
- children: /* @__PURE__ */ r("div", {
43
- className: "flex flex-col gap-32 lg:sticky lg:top-16",
44
- children: n
45
- })
46
- })]
47
- });
48
- });
49
- process.env.NODE_ENV !== "production" && (c.displayName = "SplitView");
50
- var l = /* @__PURE__ */ n(function({ title: n, description: a, children: o, footer: s, className: c }, l) {
51
- return /* @__PURE__ */ i("div", {
52
- ref: l,
53
- className: e("relative flex min-h-dvh flex-col items-center bg-panel px-16 py-64 text-fg", c),
54
- children: [
55
- /* @__PURE__ */ r("div", {
56
- className: "absolute top-0 left-0 mt-8 flex h-52 items-center px-16 sm:px-28",
57
- children: /* @__PURE__ */ r(t, {})
58
- }),
59
- /* @__PURE__ */ i("div", {
60
- className: "flex w-full max-w-auth flex-1 flex-col justify-center",
61
- children: [
62
- /* @__PURE__ */ r("h1", {
63
- className: "text-center text-title-lg font-semibold text-fg text-balance",
64
- children: n
65
- }),
66
- a && /* @__PURE__ */ r("p", {
67
- className: "mt-8 text-center text-body-lg font-regular text-fg-secondary text-pretty",
68
- children: a
69
- }),
70
- /* @__PURE__ */ r("div", {
71
- className: "mt-24 flex flex-col gap-16",
72
- children: o
73
- })
74
- ]
75
- }),
76
- s && /* @__PURE__ */ r("div", {
77
- className: "mt-48 text-small text-fg-tertiary",
78
- children: s
79
- })
80
- ]
81
- });
82
- });
83
- process.env.NODE_ENV !== "production" && (l.displayName = "AuthLayout");
84
- //#endregion
85
- export { c as a, s as i, o as n, a as r, l as t };
86
-
87
- //# sourceMappingURL=section-Ce1efbsP.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"section-Ce1efbsP.js","names":["cn","KAESO_SECTION_VARIANTS","KAESO_SECTION_DEFAULT_VARIANTS","Section","spacing","className","title","actions","description","children","SplitView","aside","AuthLayout","NavWordmark","footer"],"sources":["../../src/components/section/section.tsx"],"sourcesContent":["import { forwardRef, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { NavWordmark } from \"../logo/nav-wordmark.js\";\n\nexport const KAESO_SECTION_VARIANTS = {\n spacing: {\n default: { classes: \"mt-48 first:mt-0\" },\n none: { classes: \"\" },\n },\n} as const;\nexport const KAESO_SECTION_DEFAULT_VARIANTS = { spacing: \"default\" } as const;\n\nexport interface SectionProps {\n title?: ReactNode | undefined;\n description?: ReactNode | undefined;\n actions?: ReactNode | undefined;\n spacing?: keyof typeof KAESO_SECTION_VARIANTS.spacing | undefined;\n children: ReactNode;\n className?: string | undefined;\n}\n\nexport const Section = /* @__PURE__ */ forwardRef<HTMLElement, SectionProps>(function Section({ title, description, actions, spacing = \"default\", children, className }, ref) {\n return (\n <section ref={ref} className={cn(KAESO_SECTION_VARIANTS.spacing[spacing].classes, className)}>\n {(title || actions) && (\n <header className=\"mb-16 flex flex-wrap items-end justify-between gap-x-16 gap-y-12\">\n <div className=\"flex min-w-0 flex-col gap-2\">\n {title && <h2 className=\"text-title-sm font-semibold text-fg\">{title}</h2>}\n {description && <p className=\"max-w-prose text-small text-fg-secondary\">{description}</p>}\n </div>\n {actions && <div className=\"flex shrink-0 items-center gap-8\">{actions}</div>}\n </header>\n )}\n {children}\n </section>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Section.displayName = \"Section\";\n\nexport const SplitView = /* @__PURE__ */ forwardRef<HTMLDivElement, { children: ReactNode; aside: ReactNode; className?: string | undefined }>(function SplitView(\n { children, aside, className },\n ref,\n) {\n return (\n <div ref={ref} className={cn(\"grid grid-cols-1 lg:grid-cols-aside\", className)}>\n <div className=\"min-w-0 lg:pr-32\">{children}</div>\n <aside className=\"mt-32 min-w-0 lg:mt-0 lg:pl-32 lg:hairline-l\">\n <div className=\"flex flex-col gap-32 lg:sticky lg:top-16\">{aside}</div>\n </aside>\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") SplitView.displayName = \"SplitView\";\n\nexport const AuthLayout = /* @__PURE__ */ forwardRef<\n HTMLDivElement,\n { title: ReactNode; description?: ReactNode | undefined; children: ReactNode; footer?: ReactNode | undefined; className?: string | undefined }\n>(function AuthLayout({ title, description, children, footer, className }, ref) {\n return (\n <div ref={ref} className={cn(\"relative flex min-h-dvh flex-col items-center bg-panel px-16 py-64 text-fg\", className)}>\n <div className=\"absolute top-0 left-0 mt-8 flex h-52 items-center px-16 sm:px-28\">\n <NavWordmark />\n </div>\n <div className=\"flex w-full max-w-auth flex-1 flex-col justify-center\">\n <h1 className=\"text-center text-title-lg font-semibold text-fg text-balance\">{title}</h1>\n {description && <p className=\"mt-8 text-center text-body-lg font-regular text-fg-secondary text-pretty\">{description}</p>}\n <div className=\"mt-24 flex flex-col gap-16\">{children}</div>\n </div>\n {footer && <div className=\"mt-48 text-small text-fg-tertiary\">{footer}</div>}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") AuthLayout.displayName = \"AuthLayout\";\n"],"mappings":";;;;;;AAIA,IAAaC,IAAyB,EACpC,SAAS;CACP,SAAS,EAAE,SAAS,mBAAmB;CACvC,MAAM,EAAE,SAAS,GAAG;AACtB,EACF,GACaC,IAAiC,EAAE,SAAS,UAAU,GAWtDC,IAA0B,kBAAsC,SAAiB,EAAE,UAAO,gBAAa,YAAS,aAAU,WAAW,aAAU,gBAAa,GAAK;CAC5K,OACE,kBAAC,WAAD;EAAc;EAAK,WAAWH,EAAGC,EAAuB,QAAQG,EAAQ,CAAC,SAASC,CAAS;EAA3F,UAAA,EACIC,KAASC,MACT,kBAAC,UAAD;GAAQ,WAAU;GAAlB,UAAA,CACE,kBAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACGD,KAAS,kBAAC,MAAD;KAAI,WAAU;KAAuC,UAAAA;IAAU,CAAA,GACxEE,KAAe,kBAAC,KAAD;KAAG,WAAU;KAA4C,UAAAA;IAAe,CAAA,CACrF;GACJ,CAAA,GAAAD,KAAW,kBAAC,OAAD;IAAK,WAAU;IAAoC,UAAAA;GAAa,CAAA,CACtE;EAET,CAAA,GAAAE,CACM;;AAEb,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAQ,cAAc;AAEjE,IAAaC,IAA4B,kBAAsG,SAC7I,EAAE,aAAU,UAAO,gBACnB,GACA;CACA,OACE,kBAAC,OAAD;EAAU;EAAK,WAAWV,EAAG,uCAAuCK,CAAS;EAA7E,UAAA,CACE,kBAAC,OAAD;GAAK,WAAU;GAAoB;EAAc,CAAA,GACjD,kBAAC,SAAD;GAAO,WAAU;GACf,UAAA,kBAAC,OAAD;IAAK,WAAU;IAA4C,UAAAM;GAAW,CAAA;EACjE,CAAA,CACJ;;AAET,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAU,cAAc;AAEnE,IAAaC,IAA6B,kBAGxC,SAAoB,EAAE,UAAO,gBAAa,aAAU,WAAQ,gBAAa,GAAK;CAC9E,OACE,kBAAC,OAAD;EAAU;EAAK,WAAWZ,EAAG,8EAA8EK,CAAS;EAApH,UAAA;GACE,kBAAC,OAAD;IAAK,WAAU;IACb,UAAA,kBAACQ,GAAD,CAAc,CAAA;GACX,CAAA;GACL,kBAAC,OAAD;IAAK,WAAU;IAAf,UAAA;KACE,kBAAC,MAAD;MAAI,WAAU;MAAgE,UAAAP;KAAU,CAAA;KACvFE,KAAe,kBAAC,KAAD;MAAG,WAAU;MAA4E,UAAAA;KAAe,CAAA;KACxH,kBAAC,OAAD;MAAK,WAAU;MAA8B;KAAc,CAAA;IACxD;;GACJM,KAAU,kBAAC,OAAD;IAAK,WAAU;IAAqC,UAAAA;GAAY,CAAA;EACxE;;AAET,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAW,cAAc"}
@@ -1,114 +0,0 @@
1
- "use client";
2
- import { t as e } from "./cn-Dj6sRgkF.js";
3
- import { t } from "./use-controllable-B5Fd12Bx.js";
4
- import { t as n } from "./icon-D7ja-_Yk.js";
5
- import { r } from "./tooltip-OcwO0VUT.js";
6
- import { t as i } from "./observe-resize-DhxhmoyB.js";
7
- import { forwardRef as a, useEffect as o, useLayoutEffect as s, useRef as c, useState as l } from "react";
8
- import { jsx as u, jsxs as d } from "react/jsx-runtime";
9
- import { Radio as f } from "@base-ui/react/radio";
10
- import { RadioGroup as p } from "@base-ui/react/radio-group";
11
- //#region src/hooks/use-indicator.ts
12
- function m(e, t, n) {
13
- let [r, a] = l({
14
- x: 0,
15
- y: 0,
16
- w: 0,
17
- h: 0,
18
- ready: !1
19
- }), [c, u] = l(!1);
20
- return o(() => {
21
- if (!r.ready || c) return;
22
- let e = 0, t = !0;
23
- return (document.fonts?.ready ?? Promise.resolve()).then(() => {
24
- t && (e = requestAnimationFrame(() => e = requestAnimationFrame(() => u(!0))));
25
- }), () => {
26
- t = !1, cancelAnimationFrame(e);
27
- };
28
- }, [r.ready, c]), s(() => {
29
- let n = e.current;
30
- if (!n) return;
31
- let r = () => {
32
- let e = n.querySelector(t);
33
- if (!e) return a((e) => ({
34
- ...e,
35
- ready: !1
36
- }));
37
- a({
38
- x: Math.round(e.offsetLeft),
39
- y: Math.round(e.offsetTop),
40
- w: Math.round(e.offsetWidth),
41
- h: Math.round(e.offsetHeight),
42
- ready: !0
43
- });
44
- };
45
- if (r(), typeof ResizeObserver > "u") return;
46
- let o = !0, s = i([n, ...n.querySelectorAll(":scope > *")], r);
47
- return document.fonts?.ready.then(() => {
48
- o && r();
49
- }), () => {
50
- o = !1, s();
51
- };
52
- }, [
53
- e,
54
- t,
55
- n
56
- ]), {
57
- ...r,
58
- animate: c
59
- };
60
- }
61
- //#endregion
62
- //#region src/components/segmented/segmented.tsx
63
- var h = { size: {
64
- sm: { classes: "h-32 p-2 gap-2" },
65
- md: { classes: "h-36 p-2 gap-2" }
66
- } }, g = { size: "md" }, _ = {
67
- sm: "h-28 px-10 text-body",
68
- md: "h-32 px-12 text-body"
69
- }, v = {
70
- sm: "w-32 px-0",
71
- md: "w-36 px-0"
72
- }, y = /* @__PURE__ */ a(function({ options: i, value: a, defaultValue: o, onValueChange: s, size: l = "md", disabled: g, fullWidth: y, className: b, "aria-label": x, "data-force": S }, C) {
73
- let [w, T] = t(a, o ?? i[0]?.value ?? "", s), E = c(null), D = m(E, "[data-checked]", `${w}|${i.length}|${l}`);
74
- return /* @__PURE__ */ d(p, {
75
- ref: (e) => {
76
- E.current = e, typeof C == "function" ? C(e) : C && (C.current = e);
77
- },
78
- value: w,
79
- onValueChange: (e) => T(String(e)),
80
- ...g === void 0 ? {} : { disabled: g },
81
- "aria-label": x,
82
- ...S ? { "data-force": S } : {},
83
- className: e("relative isolate inline-flex items-center rounded-pill bg-fill-1", h.size[l].classes, y && "flex w-full", g && "opacity-40", b),
84
- children: [/* @__PURE__ */ u("span", {
85
- "aria-hidden": !0,
86
- className: e("absolute top-0 left-0 -z-10 rounded-pill bg-raised shadow-segment", D.animate && "indicator-motion", !D.ready && "opacity-0"),
87
- style: {
88
- transform: `translate(${D.x}px, ${D.y}px)`,
89
- width: D.w,
90
- height: D.h
91
- }
92
- }), i.map((t) => {
93
- let i = t.icon && !t.label, a = /* @__PURE__ */ d(f.Root, {
94
- value: t.value,
95
- ...t.disabled ? { disabled: !0 } : {},
96
- ...i && t["aria-label"] ? { "aria-label": t["aria-label"] } : {},
97
- className: e("relative inline-flex cursor-pointer items-center justify-center gap-6 rounded-pill font-medium whitespace-nowrap text-fg-secondary transition-control focus-ring tap-target", "hover:text-fg checked:text-fg disabled:cursor-not-allowed disabled:text-fg-disabled", _[l], i && v[l], y && "flex-1"),
98
- children: [t.icon && /* @__PURE__ */ u(n, {
99
- icon: t.icon,
100
- size: "sm"
101
- }), t.label]
102
- }, t.value);
103
- return i && t["aria-label"] ? /* @__PURE__ */ u(r, {
104
- content: t["aria-label"],
105
- children: a
106
- }, t.value) : a;
107
- })]
108
- });
109
- });
110
- process.env.NODE_ENV !== "production" && (y.displayName = "Segmented");
111
- //#endregion
112
- export { h as n, y as r, g as t };
113
-
114
- //# sourceMappingURL=segmented-CErcoxwi.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"segmented-CErcoxwi.js","names":["BaseRadioGroup","BaseRadio","cn","Icon","observeResize","useIndicator","box","setBox","useState","animate","setAnimate","useEffect","raf","live","useLayoutEffect","root","container","measure","el","selector","b","stop","layout","KAESO_SEGMENTED_VARIANTS","KAESO_SEGMENTED_DEFAULT_VARIANTS","ITEM","ITEM_ICON","Segmented","ariaLabel","force","current","setCurrent","useControllable","value","defaultValue","options","onValueChange","track","useRef","ind","size","RadioGroup","ref","v","disabled","fullWidth","className","iconOnly","o","item","Radio","Tooltip"],"sources":["../../src/hooks/use-indicator.ts","../../src/components/segmented/segmented.tsx"],"sourcesContent":["import { useEffect, useLayoutEffect, useState, type RefObject } from \"react\";\nimport { observeResize } from \"../utils/observe-resize.js\";\n\nexport function useIndicator(\n container: RefObject<HTMLElement | null>,\n selector: string,\n layout: string,\n): { x: number; y: number; w: number; h: number; ready: boolean; animate: boolean } {\n const [box, setBox] = useState({ x: 0, y: 0, w: 0, h: 0, ready: false });\n const [animate, setAnimate] = useState(false);\n useEffect(() => {\n if (!box.ready || animate) return;\n let raf = 0;\n let live = true;\n void (document.fonts?.ready ?? Promise.resolve()).then(() => {\n if (live) raf = requestAnimationFrame(() => (raf = requestAnimationFrame(() => setAnimate(true))));\n });\n return () => {\n live = false;\n cancelAnimationFrame(raf);\n };\n }, [box.ready, animate]);\n useLayoutEffect(() => {\n const root = container.current;\n if (!root) return;\n const measure = () => {\n const el = root.querySelector<HTMLElement>(selector);\n if (!el) return setBox((b) => ({ ...b, ready: false }));\n setBox({ x: Math.round(el.offsetLeft), y: Math.round(el.offsetTop), w: Math.round(el.offsetWidth), h: Math.round(el.offsetHeight), ready: true });\n };\n measure();\n if (typeof ResizeObserver === \"undefined\") return;\n let live = true;\n const stop = observeResize([root, ...root.querySelectorAll(\":scope > *\")], measure);\n void document.fonts?.ready.then(() => {\n if (live) measure();\n });\n return () => {\n live = false;\n stop();\n };\n }, [container, selector, layout]);\n return { ...box, animate };\n}\n","import { forwardRef, useRef, type ReactNode } from \"react\";\nimport { RadioGroup as BaseRadioGroup } from \"@base-ui/react/radio-group\";\nimport { Radio as BaseRadio } from \"@base-ui/react/radio\";\nimport { cn } from \"../../utils/cn.js\";\nimport { useControllable } from \"../../utils/use-controllable.js\";\nimport { useIndicator } from \"../../hooks/use-indicator.js\";\nimport { Icon, type IconData } from \"../icon/icon.js\";\nimport { Tooltip } from \"../tooltip/tooltip.js\";\n\nexport const KAESO_SEGMENTED_VARIANTS = {\n size: {\n sm: { classes: \"h-32 p-2 gap-2\" },\n md: { classes: \"h-36 p-2 gap-2\" },\n },\n} as const;\nexport const KAESO_SEGMENTED_DEFAULT_VARIANTS = { size: \"md\" } as const;\n\nconst ITEM = { sm: \"h-28 px-10 text-body\", md: \"h-32 px-12 text-body\" } as const;\nconst ITEM_ICON = { sm: \"w-32 px-0\", md: \"w-36 px-0\" } as const;\n\nexport interface SegmentedOption {\n value: string;\n label?: ReactNode | undefined;\n icon?: IconData | undefined;\n \"aria-label\"?: string | undefined;\n disabled?: boolean | undefined;\n}\n\nexport interface SegmentedProps {\n options: SegmentedOption[];\n value?: string | undefined;\n defaultValue?: string | undefined;\n onValueChange?: ((value: string) => void) | undefined;\n size?: keyof typeof KAESO_SEGMENTED_VARIANTS.size | undefined;\n disabled?: boolean | undefined;\n fullWidth?: boolean | undefined;\n \"aria-label\": string;\n className?: string | undefined;\n \"data-force\"?: string | undefined;\n}\n\nexport const Segmented = /* @__PURE__ */ forwardRef<HTMLDivElement, SegmentedProps>(function Segmented(\n { options, value, defaultValue, onValueChange, size = \"md\", disabled, fullWidth, className, \"aria-label\": ariaLabel, \"data-force\": force },\n ref,\n) {\n const [current, setCurrent] = useControllable(value, defaultValue ?? options[0]?.value ?? \"\", onValueChange);\n const track = useRef<HTMLDivElement | null>(null);\n const ind = useIndicator(track, \"[data-checked]\", `${current}|${options.length}|${size}`);\n return (\n <BaseRadioGroup\n ref={(el: HTMLDivElement | null) => {\n track.current = el;\n if (typeof ref === \"function\") ref(el);\n else if (ref) ref.current = el;\n }}\n value={current}\n onValueChange={(v: unknown) => setCurrent(String(v))}\n {...(disabled !== undefined ? { disabled } : {})}\n aria-label={ariaLabel}\n {...(force ? { \"data-force\": force } : {})}\n className={cn(\n \"relative isolate inline-flex items-center rounded-pill bg-fill-1\",\n KAESO_SEGMENTED_VARIANTS.size[size].classes,\n fullWidth && \"flex w-full\",\n disabled && \"opacity-40\",\n className,\n )}\n >\n <span\n aria-hidden\n className={cn(\"absolute top-0 left-0 -z-10 rounded-pill bg-raised shadow-segment\", ind.animate && \"indicator-motion\", !ind.ready && \"opacity-0\")}\n style={{ transform: `translate(${ind.x}px, ${ind.y}px)`, width: ind.w, height: ind.h }}\n />\n {options.map((o) => {\n const iconOnly = o.icon && !o.label;\n const item = (\n <BaseRadio.Root\n key={o.value}\n value={o.value}\n {...(o.disabled ? { disabled: true } : {})}\n {...(iconOnly && o[\"aria-label\"] ? { \"aria-label\": o[\"aria-label\"] } : {})}\n className={cn(\n \"relative inline-flex cursor-pointer items-center justify-center gap-6 rounded-pill font-medium whitespace-nowrap text-fg-secondary transition-control focus-ring tap-target\",\n \"hover:text-fg checked:text-fg disabled:cursor-not-allowed disabled:text-fg-disabled\",\n ITEM[size],\n iconOnly && ITEM_ICON[size],\n fullWidth && \"flex-1\",\n )}\n >\n {o.icon && <Icon icon={o.icon} size=\"sm\" />}\n {o.label}\n </BaseRadio.Root>\n );\n return iconOnly && o[\"aria-label\"] ? (\n <Tooltip key={o.value} content={o[\"aria-label\"]}>\n {item}\n </Tooltip>\n ) : (\n item\n );\n })}\n </BaseRadioGroup>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Segmented.displayName = \"Segmented\";\n"],"mappings":"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"}