@logicplanes/kaeso-ui 0.2.2 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (346) 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 +983 -96
  5. package/ai/component-registry.md +218 -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-Chd8l9Rf.js} +2 -2
  104. package/dist/chunks/{release-art-DEc9HNa6.js.map → release-art-Chd8l9Rf.js.map} +1 -1
  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/select/docs.d.ts +0 -2
  301. package/dist/types/components/select/option-checkbox.d.ts +1 -0
  302. package/dist/types/components/sidebar/sidebar.d.ts +1 -0
  303. package/dist/types/components/stat/docs.d.ts +1 -0
  304. package/dist/types/components/stat/stat.d.ts +1 -0
  305. package/dist/types/format/index.d.ts +6 -0
  306. package/dist/types/index.d.ts +1 -0
  307. package/dist/types/utils/index.d.ts +1 -1
  308. package/dist/types/utils/inset.d.ts +5 -0
  309. package/dist/types/utils/over-sheet.d.ts +1 -0
  310. package/dist/types/utils/restore-focus.d.ts +1 -1
  311. package/dist/utils.js +4 -4
  312. package/foundations/layout.md +45 -0
  313. package/foundations/writing.md +1 -0
  314. package/package.json +2 -2
  315. package/dist/chunks/app-frame-BXh-06HL.js +0 -214
  316. package/dist/chunks/app-frame-BXh-06HL.js.map +0 -1
  317. package/dist/chunks/cn-CidVUKMm.js.map +0 -1
  318. package/dist/chunks/code-block-DxtladFW.js.map +0 -1
  319. package/dist/chunks/collapsible-Cw_1aem5.js.map +0 -1
  320. package/dist/chunks/combobox-D30Wt11R.js +0 -291
  321. package/dist/chunks/combobox-D30Wt11R.js.map +0 -1
  322. package/dist/chunks/core-K960A4OT.js.map +0 -1
  323. package/dist/chunks/de-CTAo4KL7.js.map +0 -1
  324. package/dist/chunks/dialog-LNKgPEsV.js +0 -319
  325. package/dist/chunks/dialog-LNKgPEsV.js.map +0 -1
  326. package/dist/chunks/field-d8V94bvZ.js.map +0 -1
  327. package/dist/chunks/field-press-DwzBFafd.js +0 -10
  328. package/dist/chunks/field-press-DwzBFafd.js.map +0 -1
  329. package/dist/chunks/identity-BtZC_d_Q.js +0 -342
  330. package/dist/chunks/identity-BtZC_d_Q.js.map +0 -1
  331. package/dist/chunks/input-group-CYA1MEoZ.js.map +0 -1
  332. package/dist/chunks/inset-BLMdxX4I.js.map +0 -1
  333. package/dist/chunks/list-CzaiyNja.js +0 -483
  334. package/dist/chunks/list-CzaiyNja.js.map +0 -1
  335. package/dist/chunks/nav-sheet-BIErlV74.js +0 -58
  336. package/dist/chunks/nav-sheet-BIErlV74.js.map +0 -1
  337. package/dist/chunks/range-popup-DGOnGGag.js +0 -111
  338. package/dist/chunks/range-popup-DGOnGGag.js.map +0 -1
  339. package/dist/chunks/resize-motion-CMaidkwe.js.map +0 -1
  340. package/dist/chunks/rights-BbiJ0AJB.js.map +0 -1
  341. package/dist/chunks/select-Bc4kRiSG.js.map +0 -1
  342. package/dist/chunks/sidebar-5IA18LuP.js.map +0 -1
  343. package/dist/chunks/textarea-Cj8iR82R.js.map +0 -1
  344. package/dist/chunks/virtual-rows-BZe49bKi.js.map +0 -1
  345. package/dist/chunks/zh-CN-C7GmVswt.js.map +0 -1
  346. package/dist/components/charts/timeseries.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"release-art-DEc9HNa6.js","names":["cn","RELEASE_ART_STYLES","RELEASE_ART_VIEW","U","CLEAR","hash","h","i","text","random","a","seed","t","isReleaseArtSpec","value","v","art","randomReleaseArt","pick","n","next","nextReleaseArt","recent","previous","styles","p","s","palettes","seeds","list","releaseArtFor","round","node","children","open","x","c","y","clearEdge","dy","masked","primitive","out","kind","ink","accent","fill","bauhaus","taken","key","col","row","blocked","bigs","b","size","attempt","free","j","density","albers","margin","lo","hi","x0","levels","order","l","bands","diag","rects","w","widths","offset","angle","stripes","clip","r","cx","cy","waves","lines","top","gapY","peak","spread","base","bumps","ripple","start","raw","env","fine","max","lift","line","truchet","stroke","inner","paths","cols","rows","d","clearance","best","arcs","anchors","spots","placed","band","room","count","hollow","GOLDEN","phyllotaxis","step","arms","banded","reach","tone","gcd","spiro","radius","big","small","layers","pen","k","extent","turns","steps","points","scale","STYLE","paletteOf","spec","releaseArtText","drawReleaseArt","options","between","int","palette","place","ground","colors","prefix","canvas","name","mask","drawn","font","KEEP_CAMEL","attrName","m","escapeXml","serializeArt","attrs","KAESO_RELEASE_ART_VARIANTS","KAESO_RELEASE_ART_DEFAULT_VARIANTS","toElement","createElement","ReleaseArt","shape","useId","useMemo","className","label","eyebrow","title","releaseArtSvg"],"sources":["../../src/components/release-art/drawing.ts","../../src/components/release-art/release-art.tsx"],"sourcesContent":["import { art, font } from \"@logicplanes/kaeso-tokens\";\n\nexport const RELEASE_ART_STYLES = [\"bauhaus\", \"albers\", \"stripes\", \"waves\", \"truchet\", \"arcs\", \"phyllotaxis\", \"spiro\"] as const;\nexport type ReleaseArtStyle = (typeof RELEASE_ART_STYLES)[number];\n\nexport interface ReleaseArtSpec {\n version: 1;\n seed: number;\n style: ReleaseArtStyle;\n palette: number;\n}\n\nexport interface ArtNode {\n tag: string;\n attrs: Record<string, string | number>;\n children?: ArtNode[] | undefined;\n text?: string | undefined;\n}\n\nexport const RELEASE_ART_VIEW = { banner: { w: 640, h: 360 }, wide: { w: 840, h: 360 } } as const;\nexport type ReleaseArtShape = keyof typeof RELEASE_ART_VIEW;\n\nconst U = 40;\nconst CLEAR = { rx: U * 7.5, ry: U * 7.5 };\n\nfunction hash(text: string): number {\n let h = 2166136261;\n for (let i = 0; i < text.length; i++) {\n h ^= text.charCodeAt(i);\n h = Math.imul(h, 16777619);\n }\n return h >>> 0;\n}\n\nfunction random(seed: number): () => number {\n let a = seed >>> 0;\n return () => {\n a = (a + 0x6d2b79f5) >>> 0;\n let t = a;\n t = Math.imul(t ^ (t >>> 15), t | 1);\n t ^= t + Math.imul(t ^ (t >>> 7), t | 61);\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n };\n}\n\nexport function isReleaseArtSpec(value: unknown): value is ReleaseArtSpec {\n if (typeof value !== \"object\" || value === null) return false;\n const v = value as Record<string, unknown>;\n return (\n v.version === 1 &&\n typeof v.seed === \"number\" &&\n Number.isInteger(v.seed) &&\n v.seed >= 0 &&\n v.seed <= 0xffffffff &&\n typeof v.style === \"string\" &&\n (RELEASE_ART_STYLES as readonly string[]).includes(v.style) &&\n typeof v.palette === \"number\" &&\n Number.isInteger(v.palette) &&\n v.palette >= 0 &&\n v.palette < art.palettes.length\n );\n}\n\nexport function randomReleaseArt(next: () => number = Math.random): ReleaseArtSpec {\n const pick = (n: number) => Math.min(n - 1, Math.floor(next() * n));\n return {\n version: 1,\n seed: Math.min(0xffffffff, Math.floor(next() * 0x100000000)),\n style: RELEASE_ART_STYLES[pick(RELEASE_ART_STYLES.length)] ?? \"bauhaus\",\n palette: pick(art.palettes.length),\n };\n}\n\nexport function nextReleaseArt(previous: readonly ReleaseArtSpec[], next: () => number = Math.random): ReleaseArtSpec {\n const recent = previous.slice(-3);\n const styles = RELEASE_ART_STYLES.filter((s) => !recent.some((p) => p.style === s));\n const palettes = art.palettes.map((_, i) => i).filter((i) => !previous.slice(-4).some((p) => p.palette === i));\n const seeds = new Set(previous.map((p) => p.seed));\n const pick = <T>(list: readonly T[]) => list[Math.min(list.length - 1, Math.floor(next() * list.length))];\n let seed = Math.min(0xffffffff, Math.floor(next() * 0x100000000));\n while (seeds.has(seed)) seed = (seed + 1) >>> 0;\n return { version: 1, seed, style: pick(styles) ?? \"bauhaus\", palette: pick(palettes) ?? 0 };\n}\n\nexport function releaseArtFor(text: string): ReleaseArtSpec {\n const seed = hash(text);\n return {\n version: 1,\n seed,\n style: RELEASE_ART_STYLES[seed % RELEASE_ART_STYLES.length] ?? \"bauhaus\",\n palette: (seed >>> 8) % art.palettes.length,\n };\n}\n\nconst round = (n: number) => Math.round(n * 100) / 100;\nconst node = (tag: string, attrs: ArtNode[\"attrs\"], children?: ArtNode[]): ArtNode => (children ? { tag, attrs, children } : { tag, attrs });\n\ninterface Canvas {\n w: number;\n h: number;\n cols: number;\n rows: number;\n next: () => number;\n between: (lo: number, hi: number) => number;\n int: (lo: number, hi: number) => number;\n chance: (p: number) => boolean;\n ground: string;\n color: (i: number) => string;\n id: (name: string) => string;\n}\n\nconst open = (c: Canvas, x: number, y: number) => (x / CLEAR.rx) ** 2 + ((c.h - y) / CLEAR.ry) ** 2 < 1;\nconst clearEdge = (c: Canvas, y: number) => {\n const dy = (c.h - y) / CLEAR.ry;\n return dy >= 1 ? 0 : CLEAR.rx * Math.sqrt(1 - dy * dy);\n};\nconst masked = (c: Canvas, children: ArtNode[]) => node(\"g\", { mask: `url(#${c.id(\"clear\")})` }, children);\n\nfunction primitive(c: Canvas, x: number, y: number, s: number, fill: string, accent: string): ArtNode[] {\n const out: ArtNode[] = [];\n const kind = c.int(0, 7);\n const t = `rotate(${c.int(0, 3) * 90} ${round(x + s / 2)} ${round(y + s / 2)})`;\n if (c.chance(0.55)) out.push(node(\"rect\", { x, y, width: s, height: s, fill }));\n const ink = out.length ? accent : fill;\n switch (kind) {\n case 0:\n out.push(node(\"path\", { d: `M${x} ${y}L${x + s} ${y}A${s} ${s} 0 0 1 ${x} ${y + s}Z`, fill: ink, transform: t }));\n break;\n case 1:\n out.push(node(\"path\", { d: `M${x} ${y + s}A${s / 2} ${s / 2} 0 0 1 ${x + s} ${y + s}Z`, fill: ink, transform: t }));\n break;\n case 2:\n out.push(node(\"circle\", { cx: x + s / 2, cy: y + s / 2, r: s / 2, fill: ink }));\n break;\n case 3:\n out.push(node(\"path\", { d: `M${x} ${y}L${x + s} ${y + s}L${x} ${y + s}Z`, fill: ink, transform: t }));\n break;\n case 4:\n out.push(node(\"circle\", { cx: x + s / 2, cy: y + s / 2, r: s / 4, fill: ink }));\n break;\n case 5:\n for (let i = 0; i < 3; i++) out.push(node(\"rect\", { x: x + (i * s) / 3, y, width: s / 6, height: s, fill: ink, transform: t }));\n break;\n case 6:\n out.push(node(\"path\", { d: `M${x} ${y}L${x + s} ${y}L${x + s / 2} ${y + s / 2}Z`, fill: ink, transform: t }));\n out.push(node(\"path\", { d: `M${x} ${y + s}L${x + s} ${y + s}L${x + s / 2} ${y + s / 2}Z`, fill: ink, transform: t }));\n break;\n default:\n out.push(node(\"path\", { d: `M${x} ${y}A${s} ${s} 0 0 1 ${x + s} ${y + s}L${x} ${y + s}Z`, fill: ink, transform: t }));\n }\n return out;\n}\n\nfunction bauhaus(c: Canvas): ArtNode[] {\n const taken = new Set<string>();\n const key = (col: number, row: number) => `${col},${row}`;\n const blocked = (col: number, row: number) => open(c, col * U, (row + 1) * U);\n const out: ArtNode[] = [];\n const bigs = c.int(2, 4);\n for (let b = 0; b < bigs; b++) {\n const size = c.int(2, 3);\n for (let attempt = 0; attempt < 20; attempt++) {\n const col = c.int(0, c.cols - size);\n const row = c.int(0, c.rows - size);\n let free = true;\n for (let i = 0; i < size && free; i++) for (let j = 0; j < size && free; j++) free = !taken.has(key(col + i, row + j)) && !blocked(col + i, row + j);\n if (!free) continue;\n for (let i = 0; i < size; i++) for (let j = 0; j < size; j++) taken.add(key(col + i, row + j));\n const a = c.int(0, 3);\n out.push(...primitive(c, col * U, row * U, size * U, c.color(a), c.color(a + c.int(1, 3))));\n break;\n }\n }\n const density = c.between(0.55, 0.85);\n for (let col = 0; col < c.cols; col++) {\n for (let row = 0; row < c.rows; row++) {\n if (taken.has(key(col, row)) || blocked(col, row) || !c.chance(density)) continue;\n const a = c.int(0, 3);\n out.push(...primitive(c, col * U, row * U, U, c.color(a), c.color(a + c.int(1, 3))));\n }\n }\n return out;\n}\n\nfunction albers(c: Canvas): ArtNode[] {\n const side = U * 6;\n const margin = (c.h - side) / 2;\n const lo = CLEAR.rx - U / 2;\n const hi = c.w - margin - side;\n const x0 = lo + Math.round((c.next() * Math.max(0, hi - lo)) / (U / 2)) * (U / 2);\n const unit = side / 20;\n const levels = c.int(3, 4);\n const order = [0, 1, 2, 3];\n for (let i = order.length - 1; i > 0; i--) {\n const j = Math.floor(c.next() * (i + 1));\n [order[i], order[j]] = [order[j] ?? j, order[i] ?? i];\n }\n return Array.from({ length: levels }, (_, l) =>\n node(\"rect\", { x: x0 + 2 * unit * l, y: margin + 3 * unit * l, width: side - 4 * unit * l, height: side - 4 * unit * l, fill: c.color(order[l] ?? l) }),\n );\n}\n\nfunction bands(c: Canvas, angle: number, widths: number[], offset: number): ArtNode {\n const diag = Math.hypot(c.w, c.h);\n const rects: ArtNode[] = [];\n let x = -diag;\n let i = 0;\n while (x < diag) {\n const w = widths[i % widths.length] ?? U;\n rects.push(node(\"rect\", { x: round(x), y: round(-diag), width: w, height: round(diag * 2), fill: c.color(i + offset) }));\n x += w;\n i += 1;\n }\n return node(\"g\", { transform: `translate(${c.w / 2} ${c.h / 2}) rotate(${angle})` }, rects);\n}\n\nfunction stripes(c: Canvas): ArtNode[] {\n const angle = [0, 90, 45, -45, 30, -60][c.int(0, 5)] ?? 0;\n const widths = Array.from({ length: c.int(5, 9) }, () => (U / 2) * c.int(1, 5));\n const clip = c.id(\"disc\");\n const r = U * c.int(2, 3) + U / 2;\n const cx = U * c.int(Math.ceil((CLEAR.rx + r) / U), c.cols - 2);\n const cy = U * c.int(3, c.rows - 3);\n return [\n node(\"defs\", {}, [node(\"clipPath\", { id: clip }, [node(\"circle\", { cx, cy, r })])]),\n masked(c, [bands(c, angle, widths, 0)]),\n node(\"g\", { clipPath: `url(#${clip})` }, [node(\"rect\", { width: c.w, height: c.h, fill: c.ground }), bands(c, angle + 90, widths, 1)]),\n ];\n}\n\nfunction waves(c: Canvas): ArtNode[] {\n const out: ArtNode[] = [];\n const lines = c.int(14, 18);\n const top = U * 2.5;\n const bottom = c.h - U;\n const gapY = (bottom - top) / (lines - 1);\n const peak = c.w * c.between(0.58, 0.74);\n const spread = c.w * c.between(0.09, 0.14);\n const accent = c.chance(0.6) ? c.int(2, lines - 3) : -1;\n for (let i = 0; i < lines; i++) {\n const base = top + i * gapY;\n const bumps = Array.from({ length: c.int(3, 5) }, () => ({ x: peak + c.between(-1.2, 1.2) * spread, h: c.between(0.3, 1), s: c.between(9, 22) }));\n const ripple = [c.between(0, 6.28), c.between(0, 6.28)];\n const start = Math.max(U, Math.ceil((clearEdge(c, base) + U / 2) / 4) * 4);\n const raw: [number, number][] = [];\n for (let x = start; x <= c.w - U; x += 4) {\n const env = Math.exp(-((x - peak) ** 2) / (2 * spread * spread));\n let y = 0;\n for (const b of bumps) y += b.h * Math.exp(-((x - b.x) ** 2) / (2 * b.s * b.s));\n const fine = Math.sin(x * 0.21 + (ripple[0] ?? 0)) * 0.6 + Math.sin(x * 0.53 + (ripple[1] ?? 0)) * 0.4;\n raw.push([x, y * env + fine * 0.04 * (0.15 + env)]);\n }\n const max = Math.max(...raw.map(([, y]) => y), 0.001);\n const lift = Math.min(gapY * c.between(2.4, 4.4), base - U);\n const line = `M${raw.map(([x, y]) => `${x} ${round(base - (y / max) * lift)}`).join(\"L\")}`;\n out.push(node(\"path\", { d: `${line}L${c.w - U} ${round(base + gapY)}L${start} ${round(base + gapY)}Z`, fill: c.ground }));\n out.push(\n node(\"path\", { d: line, fill: \"none\", stroke: i === accent ? c.color(1) : c.color(0), strokeWidth: 2, strokeLinejoin: \"round\", strokeLinecap: \"round\" }),\n );\n }\n return out;\n}\n\nfunction truchet(c: Canvas): ArtNode[] {\n const t = U * 2;\n const h = t / 2;\n const stroke = round(t * c.between(0.2, 0.3));\n const inner = c.chance(0.5);\n const paths: ArtNode[] = [];\n const cols = Math.ceil(c.w / t);\n const rows = Math.ceil(c.h / t);\n for (let col = 0; col < cols; col++) {\n for (let r = 0; r < rows; r++) {\n const x = col * t;\n const y = c.h - (r + 1) * t;\n if (open(c, x, y + t)) continue;\n const d = c.chance(0.5)\n ? `M${x + h} ${y}A${h} ${h} 0 0 1 ${x} ${y + h}M${x + t} ${y + h}A${h} ${h} 0 0 0 ${x + h} ${y + t}`\n : `M${x + h} ${y}A${h} ${h} 0 0 0 ${x + t} ${y + h}M${x} ${y + h}A${h} ${h} 0 0 1 ${x + h} ${y + t}`;\n paths.push(node(\"path\", { d }));\n }\n }\n const out = [node(\"g\", { fill: \"none\", stroke: c.color(0), strokeWidth: stroke }, paths)];\n if (inner) out.push(node(\"g\", { fill: \"none\", stroke: c.color(1), strokeWidth: round(stroke * 0.34) }, paths));\n return out;\n}\n\nfunction clearance(c: Canvas, cx: number, cy: number): number {\n let best = Infinity;\n for (let i = 0; i <= 90; i++) {\n const a = (i / 90) * (Math.PI / 2);\n best = Math.min(best, Math.hypot(cx - CLEAR.rx * Math.cos(a), cy - (c.h - CLEAR.ry * Math.sin(a))));\n }\n return open(c, cx, cy) ? 0 : best;\n}\n\nfunction arcs(c: Canvas): ArtNode[] {\n const out: ArtNode[] = [];\n const anchors = c.int(2, 3);\n const spots: [number, number][] = [\n [U * c.int(4, c.cols - 2), 0],\n [U * c.int(11, c.cols - 1), c.h],\n [c.w, U * c.int(2, c.rows - 2)],\n [c.w, 0],\n [c.w, c.h],\n [0, 0],\n ];\n for (let i = spots.length - 1; i > 0; i--) {\n const j = Math.floor(c.next() * (i + 1));\n [spots[i], spots[j]] = [spots[j] ?? [c.w, 0], spots[i] ?? [c.w, 0]];\n }\n let placed = 0;\n for (const [cx, cy] of spots) {\n if (placed === anchors) break;\n const band = (U / 2) * c.int(1, 2);\n const room = Math.floor((clearance(c, cx, cy) - U / 2) / band);\n const count = Math.min(room, c.int(4, 10));\n if (count < 3) continue;\n const offset = c.int(0, 3);\n const hollow = c.chance(0.4);\n for (let i = count; i >= 1; i--) out.push(node(\"circle\", { cx, cy, r: i * band, fill: i === 1 && hollow ? c.ground : c.color(i + offset) }));\n placed += 1;\n }\n return out;\n}\n\nconst GOLDEN = 2.399963229728653;\n\nfunction phyllotaxis(c: Canvas): ArtNode[] {\n const out: ArtNode[] = [];\n const cx = c.w - c.h / 2 - U * c.int(0, 2);\n const cy = c.h / 2 + U * c.int(-1, 1);\n const step = c.between(11, 14);\n const arms = [8, 13, 21][c.int(0, 2)] ?? 13;\n const banded = c.chance(0.35);\n const reach = Math.hypot(c.w, c.h);\n for (let i = 1; ; i++) {\n const r = step * Math.sqrt(i);\n if (r > reach) break;\n const x = cx + r * Math.cos(i * GOLDEN);\n const y = cy + r * Math.sin(i * GOLDEN);\n const size = step * (0.3 + 0.12 * Math.min(1, r / (c.h / 2)));\n if (x < -size || x > c.w + size || y < -size || y > c.h + size) continue;\n if (open(c, x, y) || clearance(c, x, y) < size + U / 4) continue;\n const tone = banded ? Math.floor(r / (U * 1.5)) % 4 : Math.floor(((i % arms) / arms) * 4);\n out.push(node(\"circle\", { cx: round(x), cy: round(y), r: round(size), fill: c.color(tone) }));\n }\n return out;\n}\n\nfunction gcd(a: number, b: number): number {\n return b ? gcd(b, a % b) : a;\n}\n\nfunction spiro(c: Canvas): ArtNode[] {\n const out: ArtNode[] = [];\n const cx = c.w - c.h / 2;\n const cy = c.h / 2;\n const radius = c.h / 2 - U;\n const big = c.int(7, 13);\n let small = c.int(2, big - 2);\n while (gcd(big, small) !== 1) small = c.int(2, big - 2);\n const layers = c.chance(0.5) ? 2 : 1;\n for (let l = 0; l < layers; l++) {\n const pen = small * c.between(0.75, 1.05);\n const k = (big - small) / small;\n const extent = big - small + pen;\n const turns = small / gcd(big, small);\n const steps = turns * 360;\n const points: string[] = [];\n const scale = (radius * (l === 0 ? 1 : c.between(0.4, 0.55))) / extent;\n for (let i = 0; i <= steps; i++) {\n const a = (i / steps) * turns * Math.PI * 2;\n const x = (big - small) * Math.cos(a) + pen * Math.cos(k * a);\n const y = (big - small) * Math.sin(a) - pen * Math.sin(k * a);\n points.push(`${round(cx + x * scale)} ${round(cy + y * scale)}`);\n }\n const d = `M${points.join(\"L\")}Z`;\n out.push(node(\"path\", { d, fill: c.color(l), fillRule: \"evenodd\" }));\n }\n return out;\n}\n\nconst STYLE = { bauhaus, albers, stripes, waves, truchet, arcs, phyllotaxis, spiro } as const;\n\nexport interface DrawOptions {\n shape?: ReleaseArtShape | undefined;\n title?: string | undefined;\n eyebrow?: string | undefined;\n idPrefix?: string | undefined;\n}\n\nconst paletteOf = (spec: ReleaseArtSpec) => art.palettes[spec.palette % art.palettes.length] ?? art.palettes[0];\n\nexport function releaseArtText(spec: ReleaseArtSpec) {\n return { color: art.grounds[paletteOf(spec).ground].text, eyebrow: { x: U, bottom: 96 }, title: { x: U - 2, bottom: U } };\n}\n\nexport function drawReleaseArt(spec: ReleaseArtSpec, options: DrawOptions = {}): ArtNode {\n const { w, h } = RELEASE_ART_VIEW[options.shape ?? \"banner\"];\n const next = random(spec.seed);\n const between = (lo: number, hi: number) => lo + next() * (hi - lo);\n const int = (lo: number, hi: number) => Math.min(hi, lo + Math.floor(next() * (hi - lo + 1)));\n const palette = paletteOf(spec);\n const place = releaseArtText(spec);\n const ground = art.grounds[palette.ground];\n const colors: string[] = [...palette.colors];\n for (let i = colors.length - 1; i > 0; i--) {\n const j = Math.floor(next() * (i + 1));\n [colors[i], colors[j]] = [colors[j] ?? ground.text, colors[i] ?? ground.text];\n }\n const prefix = options.idPrefix ?? \"art\";\n const canvas: Canvas = {\n w,\n h,\n cols: w / U,\n rows: h / U,\n next,\n between,\n int,\n chance: (p) => next() < p,\n ground: ground.fill,\n color: (i) => colors[((i % colors.length) + colors.length) % colors.length] ?? ground.text,\n id: (name) => `${prefix}-${name}`,\n };\n const mask = canvas.id(\"clear\");\n const drawn = STYLE[spec.style](canvas);\n const text: ArtNode[] = [];\n if (options.eyebrow)\n text.push({\n tag: \"text\",\n attrs: {\n x: place.eyebrow.x,\n y: h - place.eyebrow.bottom,\n fill: place.color,\n fillOpacity: 0.7,\n fontSize: 16,\n fontWeight: 500,\n letterSpacing: 0.1,\n fontFamily: font.sans,\n },\n text: options.eyebrow,\n });\n if (options.title)\n text.push({\n tag: \"text\",\n attrs: { x: place.title.x, y: h - place.title.bottom, fill: place.color, fontSize: 52, fontWeight: 600, letterSpacing: -1.5, fontFamily: font.sans },\n text: options.title,\n });\n return node(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", viewBox: `0 0 ${w} ${h}` }, [\n node(\"defs\", {}, [\n node(\"mask\", { id: mask, maskUnits: \"userSpaceOnUse\", x: 0, y: 0, width: w, height: h }, [\n node(\"rect\", { width: w, height: h, fill: \"white\" }),\n node(\"ellipse\", { cx: 0, cy: h, rx: CLEAR.rx, ry: CLEAR.ry, fill: \"black\" }),\n ]),\n ]),\n node(\"rect\", { width: w, height: h, fill: ground.fill }),\n ...drawn,\n ...text,\n ]);\n}\n\nconst KEEP_CAMEL = new Set([\"viewBox\", \"maskUnits\"]);\nconst attrName = (name: string) => (KEEP_CAMEL.has(name) ? name : name.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`));\nconst escapeXml = (text: string) => text.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\");\n\nexport function serializeArt(n: ArtNode): string {\n const attrs = Object.entries(n.attrs)\n .map(([k, v]) => ` ${attrName(k)}=\"${escapeXml(String(v))}\"`)\n .join(\"\");\n const inner = n.text !== undefined ? escapeXml(n.text) : (n.children ?? []).map(serializeArt).join(\"\");\n return inner ? `<${n.tag}${attrs}>${inner}</${n.tag}>` : `<${n.tag}${attrs}/>`;\n}\n","import { createElement, forwardRef, useId, useMemo, type ReactNode } from \"react\";\nimport { font } from \"@logicplanes/kaeso-tokens\";\nimport { cn } from \"../../utils/cn.js\";\nimport { drawReleaseArt, releaseArtFor, releaseArtText, serializeArt, RELEASE_ART_VIEW, type ArtNode, type ReleaseArtSpec } from \"./drawing.js\";\n\nexport { RELEASE_ART_STYLES, isReleaseArtSpec, nextReleaseArt, randomReleaseArt, releaseArtFor, type ReleaseArtSpec, type ReleaseArtStyle } from \"./drawing.js\";\n\nexport const KAESO_RELEASE_ART_VARIANTS = {\n shape: {\n banner: { classes: \"aspect-video\" },\n wide: { classes: \"aspect-21/9\" },\n },\n} as const;\nexport const KAESO_RELEASE_ART_DEFAULT_VARIANTS = { shape: \"banner\" } as const;\n\nexport interface ReleaseArtProps {\n seed: string;\n label: string;\n art?: ReleaseArtSpec | undefined;\n title?: ReactNode | undefined;\n eyebrow?: ReactNode | undefined;\n shape?: keyof typeof KAESO_RELEASE_ART_VARIANTS.shape | undefined;\n className?: string | undefined;\n}\n\nfunction toElement(n: ArtNode, key: number): ReactNode {\n return createElement(n.tag, { ...n.attrs, key }, n.text ?? n.children?.map(toElement));\n}\n\nexport const ReleaseArt = /* @__PURE__ */ forwardRef<SVGSVGElement, ReleaseArtProps>(function ReleaseArt(\n { seed, label, art, title, eyebrow, shape = \"banner\", className },\n ref,\n) {\n const { w, h } = RELEASE_ART_VIEW[shape];\n const prefix = `art${useId().replace(/[^a-zA-Z0-9]/g, \"\")}`;\n const spec = art ?? releaseArtFor(seed);\n const drawn = useMemo(() => drawReleaseArt(spec, { shape, idPrefix: prefix }), [spec, shape, prefix]);\n const text = releaseArtText(spec);\n return (\n <span className={cn(\"relative block w-full\", className)}>\n <svg\n ref={ref}\n viewBox={`0 0 ${w} ${h}`}\n role=\"img\"\n aria-label={label}\n preserveAspectRatio=\"xMidYMid slice\"\n className={cn(\"block w-full overflow-hidden rounded-well\", KAESO_RELEASE_ART_VARIANTS.shape[shape].classes)}\n >\n {drawn.children?.map(toElement)}\n {eyebrow && (\n <text\n x={text.eyebrow.x}\n y={h - text.eyebrow.bottom}\n fill={text.color}\n fillOpacity={0.7}\n fontSize={16}\n fontWeight={500}\n letterSpacing={0.1}\n fontFamily={font.sans}\n >\n {eyebrow}\n </text>\n )}\n {title && (\n <text x={text.title.x} y={h - text.title.bottom} fill={text.color} fontSize={52} fontWeight={600} letterSpacing={-1.5} fontFamily={font.sans}>\n {title}\n </text>\n )}\n </svg>\n <span aria-hidden className=\"pointer-events-none absolute inset-0 rounded-well shadow-ring\" />\n </span>\n );\n});\nif (process.env.NODE_ENV !== \"production\") ReleaseArt.displayName = \"ReleaseArt\";\n\nexport interface ReleaseArtSvgOptions {\n seed: string;\n label: string;\n art?: ReleaseArtSpec | undefined;\n title?: string | undefined;\n eyebrow?: string | undefined;\n shape?: keyof typeof KAESO_RELEASE_ART_VARIANTS.shape | undefined;\n}\n\nexport function releaseArtSvg({ seed, label, art, title, eyebrow, shape = \"banner\" }: ReleaseArtSvgOptions): string {\n const { w, h } = RELEASE_ART_VIEW[shape];\n const drawn = drawReleaseArt(art ?? releaseArtFor(seed), { shape, title, eyebrow, idPrefix: \"art\" });\n return serializeArt({ ...drawn, attrs: { ...drawn.attrs, width: w * 2, height: h * 2, role: \"img\", ariaLabel: label } });\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"release-art-Chd8l9Rf.js","names":["cn","RELEASE_ART_STYLES","RELEASE_ART_VIEW","U","CLEAR","hash","h","i","text","random","a","seed","t","isReleaseArtSpec","value","v","art","randomReleaseArt","pick","n","next","nextReleaseArt","recent","previous","styles","p","s","palettes","seeds","list","releaseArtFor","round","node","children","open","x","c","y","clearEdge","dy","masked","primitive","out","kind","ink","accent","fill","bauhaus","taken","key","col","row","blocked","bigs","b","size","attempt","free","j","density","albers","margin","lo","hi","x0","levels","order","l","bands","diag","rects","w","widths","offset","angle","stripes","clip","r","cx","cy","waves","lines","top","gapY","peak","spread","base","bumps","ripple","start","raw","env","fine","max","lift","line","truchet","stroke","inner","paths","cols","rows","d","clearance","best","arcs","anchors","spots","placed","band","room","count","hollow","GOLDEN","phyllotaxis","step","arms","banded","reach","tone","gcd","spiro","radius","big","small","layers","pen","k","extent","turns","steps","points","scale","STYLE","paletteOf","spec","releaseArtText","drawReleaseArt","options","between","int","palette","place","ground","colors","prefix","canvas","name","mask","drawn","font","KEEP_CAMEL","attrName","m","escapeXml","serializeArt","attrs","KAESO_RELEASE_ART_VARIANTS","KAESO_RELEASE_ART_DEFAULT_VARIANTS","toElement","createElement","ReleaseArt","shape","useId","useMemo","className","label","eyebrow","title","releaseArtSvg"],"sources":["../../src/components/release-art/drawing.ts","../../src/components/release-art/release-art.tsx"],"sourcesContent":["import { art, font } from \"@logicplanes/kaeso-tokens\";\n\nexport const RELEASE_ART_STYLES = [\"bauhaus\", \"albers\", \"stripes\", \"waves\", \"truchet\", \"arcs\", \"phyllotaxis\", \"spiro\"] as const;\nexport type ReleaseArtStyle = (typeof RELEASE_ART_STYLES)[number];\n\nexport interface ReleaseArtSpec {\n version: 1;\n seed: number;\n style: ReleaseArtStyle;\n palette: number;\n}\n\nexport interface ArtNode {\n tag: string;\n attrs: Record<string, string | number>;\n children?: ArtNode[] | undefined;\n text?: string | undefined;\n}\n\nexport const RELEASE_ART_VIEW = { banner: { w: 640, h: 360 }, wide: { w: 840, h: 360 } } as const;\nexport type ReleaseArtShape = keyof typeof RELEASE_ART_VIEW;\n\nconst U = 40;\nconst CLEAR = { rx: U * 7.5, ry: U * 7.5 };\n\nfunction hash(text: string): number {\n let h = 2166136261;\n for (let i = 0; i < text.length; i++) {\n h ^= text.charCodeAt(i);\n h = Math.imul(h, 16777619);\n }\n return h >>> 0;\n}\n\nfunction random(seed: number): () => number {\n let a = seed >>> 0;\n return () => {\n a = (a + 0x6d2b79f5) >>> 0;\n let t = a;\n t = Math.imul(t ^ (t >>> 15), t | 1);\n t ^= t + Math.imul(t ^ (t >>> 7), t | 61);\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n };\n}\n\nexport function isReleaseArtSpec(value: unknown): value is ReleaseArtSpec {\n if (typeof value !== \"object\" || value === null) return false;\n const v = value as Record<string, unknown>;\n return (\n v.version === 1 &&\n typeof v.seed === \"number\" &&\n Number.isInteger(v.seed) &&\n v.seed >= 0 &&\n v.seed <= 0xffffffff &&\n typeof v.style === \"string\" &&\n (RELEASE_ART_STYLES as readonly string[]).includes(v.style) &&\n typeof v.palette === \"number\" &&\n Number.isInteger(v.palette) &&\n v.palette >= 0 &&\n v.palette < art.palettes.length\n );\n}\n\nexport function randomReleaseArt(next: () => number = Math.random): ReleaseArtSpec {\n const pick = (n: number) => Math.min(n - 1, Math.floor(next() * n));\n return {\n version: 1,\n seed: Math.min(0xffffffff, Math.floor(next() * 0x100000000)),\n style: RELEASE_ART_STYLES[pick(RELEASE_ART_STYLES.length)] ?? \"bauhaus\",\n palette: pick(art.palettes.length),\n };\n}\n\nexport function nextReleaseArt(previous: readonly ReleaseArtSpec[], next: () => number = Math.random): ReleaseArtSpec {\n const recent = previous.slice(-3);\n const styles = RELEASE_ART_STYLES.filter((s) => !recent.some((p) => p.style === s));\n const palettes = art.palettes.map((_, i) => i).filter((i) => !previous.slice(-4).some((p) => p.palette === i));\n const seeds = new Set(previous.map((p) => p.seed));\n const pick = <T>(list: readonly T[]) => list[Math.min(list.length - 1, Math.floor(next() * list.length))];\n let seed = Math.min(0xffffffff, Math.floor(next() * 0x100000000));\n while (seeds.has(seed)) seed = (seed + 1) >>> 0;\n return { version: 1, seed, style: pick(styles) ?? \"bauhaus\", palette: pick(palettes) ?? 0 };\n}\n\nexport function releaseArtFor(text: string): ReleaseArtSpec {\n const seed = hash(text);\n return {\n version: 1,\n seed,\n style: RELEASE_ART_STYLES[seed % RELEASE_ART_STYLES.length] ?? \"bauhaus\",\n palette: (seed >>> 8) % art.palettes.length,\n };\n}\n\nconst round = (n: number) => Math.round(n * 100) / 100;\nconst node = (tag: string, attrs: ArtNode[\"attrs\"], children?: ArtNode[]): ArtNode => (children ? { tag, attrs, children } : { tag, attrs });\n\ninterface Canvas {\n w: number;\n h: number;\n cols: number;\n rows: number;\n next: () => number;\n between: (lo: number, hi: number) => number;\n int: (lo: number, hi: number) => number;\n chance: (p: number) => boolean;\n ground: string;\n color: (i: number) => string;\n id: (name: string) => string;\n}\n\nconst open = (c: Canvas, x: number, y: number) => (x / CLEAR.rx) ** 2 + ((c.h - y) / CLEAR.ry) ** 2 < 1;\nconst clearEdge = (c: Canvas, y: number) => {\n const dy = (c.h - y) / CLEAR.ry;\n return dy >= 1 ? 0 : CLEAR.rx * Math.sqrt(1 - dy * dy);\n};\nconst masked = (c: Canvas, children: ArtNode[]) => node(\"g\", { mask: `url(#${c.id(\"clear\")})` }, children);\n\nfunction primitive(c: Canvas, x: number, y: number, s: number, fill: string, accent: string): ArtNode[] {\n const out: ArtNode[] = [];\n const kind = c.int(0, 7);\n const t = `rotate(${c.int(0, 3) * 90} ${round(x + s / 2)} ${round(y + s / 2)})`;\n if (c.chance(0.55)) out.push(node(\"rect\", { x, y, width: s, height: s, fill }));\n const ink = out.length ? accent : fill;\n switch (kind) {\n case 0:\n out.push(node(\"path\", { d: `M${x} ${y}L${x + s} ${y}A${s} ${s} 0 0 1 ${x} ${y + s}Z`, fill: ink, transform: t }));\n break;\n case 1:\n out.push(node(\"path\", { d: `M${x} ${y + s}A${s / 2} ${s / 2} 0 0 1 ${x + s} ${y + s}Z`, fill: ink, transform: t }));\n break;\n case 2:\n out.push(node(\"circle\", { cx: x + s / 2, cy: y + s / 2, r: s / 2, fill: ink }));\n break;\n case 3:\n out.push(node(\"path\", { d: `M${x} ${y}L${x + s} ${y + s}L${x} ${y + s}Z`, fill: ink, transform: t }));\n break;\n case 4:\n out.push(node(\"circle\", { cx: x + s / 2, cy: y + s / 2, r: s / 4, fill: ink }));\n break;\n case 5:\n for (let i = 0; i < 3; i++) out.push(node(\"rect\", { x: x + (i * s) / 3, y, width: s / 6, height: s, fill: ink, transform: t }));\n break;\n case 6:\n out.push(node(\"path\", { d: `M${x} ${y}L${x + s} ${y}L${x + s / 2} ${y + s / 2}Z`, fill: ink, transform: t }));\n out.push(node(\"path\", { d: `M${x} ${y + s}L${x + s} ${y + s}L${x + s / 2} ${y + s / 2}Z`, fill: ink, transform: t }));\n break;\n default:\n out.push(node(\"path\", { d: `M${x} ${y}A${s} ${s} 0 0 1 ${x + s} ${y + s}L${x} ${y + s}Z`, fill: ink, transform: t }));\n }\n return out;\n}\n\nfunction bauhaus(c: Canvas): ArtNode[] {\n const taken = new Set<string>();\n const key = (col: number, row: number) => `${col},${row}`;\n const blocked = (col: number, row: number) => open(c, col * U, (row + 1) * U);\n const out: ArtNode[] = [];\n const bigs = c.int(2, 4);\n for (let b = 0; b < bigs; b++) {\n const size = c.int(2, 3);\n for (let attempt = 0; attempt < 20; attempt++) {\n const col = c.int(0, c.cols - size);\n const row = c.int(0, c.rows - size);\n let free = true;\n for (let i = 0; i < size && free; i++) for (let j = 0; j < size && free; j++) free = !taken.has(key(col + i, row + j)) && !blocked(col + i, row + j);\n if (!free) continue;\n for (let i = 0; i < size; i++) for (let j = 0; j < size; j++) taken.add(key(col + i, row + j));\n const a = c.int(0, 3);\n out.push(...primitive(c, col * U, row * U, size * U, c.color(a), c.color(a + c.int(1, 3))));\n break;\n }\n }\n const density = c.between(0.55, 0.85);\n for (let col = 0; col < c.cols; col++) {\n for (let row = 0; row < c.rows; row++) {\n if (taken.has(key(col, row)) || blocked(col, row) || !c.chance(density)) continue;\n const a = c.int(0, 3);\n out.push(...primitive(c, col * U, row * U, U, c.color(a), c.color(a + c.int(1, 3))));\n }\n }\n return out;\n}\n\nfunction albers(c: Canvas): ArtNode[] {\n const side = U * 6;\n const margin = (c.h - side) / 2;\n const lo = CLEAR.rx - U / 2;\n const hi = c.w - margin - side;\n const x0 = lo + Math.round((c.next() * Math.max(0, hi - lo)) / (U / 2)) * (U / 2);\n const unit = side / 20;\n const levels = c.int(3, 4);\n const order = [0, 1, 2, 3];\n for (let i = order.length - 1; i > 0; i--) {\n const j = Math.floor(c.next() * (i + 1));\n [order[i], order[j]] = [order[j] ?? j, order[i] ?? i];\n }\n return Array.from({ length: levels }, (_, l) =>\n node(\"rect\", { x: x0 + 2 * unit * l, y: margin + 3 * unit * l, width: side - 4 * unit * l, height: side - 4 * unit * l, fill: c.color(order[l] ?? l) }),\n );\n}\n\nfunction bands(c: Canvas, angle: number, widths: number[], offset: number): ArtNode {\n const diag = Math.hypot(c.w, c.h);\n const rects: ArtNode[] = [];\n let x = -diag;\n let i = 0;\n while (x < diag) {\n const w = widths[i % widths.length] ?? U;\n rects.push(node(\"rect\", { x: round(x), y: round(-diag), width: w, height: round(diag * 2), fill: c.color(i + offset) }));\n x += w;\n i += 1;\n }\n return node(\"g\", { transform: `translate(${c.w / 2} ${c.h / 2}) rotate(${angle})` }, rects);\n}\n\nfunction stripes(c: Canvas): ArtNode[] {\n const angle = [0, 90, 45, -45, 30, -60][c.int(0, 5)] ?? 0;\n const widths = Array.from({ length: c.int(5, 9) }, () => (U / 2) * c.int(1, 5));\n const clip = c.id(\"disc\");\n const r = U * c.int(2, 3) + U / 2;\n const cx = U * c.int(Math.ceil((CLEAR.rx + r) / U), c.cols - 2);\n const cy = U * c.int(3, c.rows - 3);\n return [\n node(\"defs\", {}, [node(\"clipPath\", { id: clip }, [node(\"circle\", { cx, cy, r })])]),\n masked(c, [bands(c, angle, widths, 0)]),\n node(\"g\", { clipPath: `url(#${clip})` }, [node(\"rect\", { width: c.w, height: c.h, fill: c.ground }), bands(c, angle + 90, widths, 1)]),\n ];\n}\n\nfunction waves(c: Canvas): ArtNode[] {\n const out: ArtNode[] = [];\n const lines = c.int(14, 18);\n const top = U * 2.5;\n const bottom = c.h - U;\n const gapY = (bottom - top) / (lines - 1);\n const peak = c.w * c.between(0.58, 0.74);\n const spread = c.w * c.between(0.09, 0.14);\n const accent = c.chance(0.6) ? c.int(2, lines - 3) : -1;\n for (let i = 0; i < lines; i++) {\n const base = top + i * gapY;\n const bumps = Array.from({ length: c.int(3, 5) }, () => ({ x: peak + c.between(-1.2, 1.2) * spread, h: c.between(0.3, 1), s: c.between(9, 22) }));\n const ripple = [c.between(0, 6.28), c.between(0, 6.28)];\n const start = Math.max(U, Math.ceil((clearEdge(c, base) + U / 2) / 4) * 4);\n const raw: [number, number][] = [];\n for (let x = start; x <= c.w - U; x += 4) {\n const env = Math.exp(-((x - peak) ** 2) / (2 * spread * spread));\n let y = 0;\n for (const b of bumps) y += b.h * Math.exp(-((x - b.x) ** 2) / (2 * b.s * b.s));\n const fine = Math.sin(x * 0.21 + (ripple[0] ?? 0)) * 0.6 + Math.sin(x * 0.53 + (ripple[1] ?? 0)) * 0.4;\n raw.push([x, y * env + fine * 0.04 * (0.15 + env)]);\n }\n const max = Math.max(...raw.map(([, y]) => y), 0.001);\n const lift = Math.min(gapY * c.between(2.4, 4.4), base - U);\n const line = `M${raw.map(([x, y]) => `${x} ${round(base - (y / max) * lift)}`).join(\"L\")}`;\n out.push(node(\"path\", { d: `${line}L${c.w - U} ${round(base + gapY)}L${start} ${round(base + gapY)}Z`, fill: c.ground }));\n out.push(\n node(\"path\", { d: line, fill: \"none\", stroke: i === accent ? c.color(1) : c.color(0), strokeWidth: 2, strokeLinejoin: \"round\", strokeLinecap: \"round\" }),\n );\n }\n return out;\n}\n\nfunction truchet(c: Canvas): ArtNode[] {\n const t = U * 2;\n const h = t / 2;\n const stroke = round(t * c.between(0.2, 0.3));\n const inner = c.chance(0.5);\n const paths: ArtNode[] = [];\n const cols = Math.ceil(c.w / t);\n const rows = Math.ceil(c.h / t);\n for (let col = 0; col < cols; col++) {\n for (let r = 0; r < rows; r++) {\n const x = col * t;\n const y = c.h - (r + 1) * t;\n if (open(c, x, y + t)) continue;\n const d = c.chance(0.5)\n ? `M${x + h} ${y}A${h} ${h} 0 0 1 ${x} ${y + h}M${x + t} ${y + h}A${h} ${h} 0 0 0 ${x + h} ${y + t}`\n : `M${x + h} ${y}A${h} ${h} 0 0 0 ${x + t} ${y + h}M${x} ${y + h}A${h} ${h} 0 0 1 ${x + h} ${y + t}`;\n paths.push(node(\"path\", { d }));\n }\n }\n const out = [node(\"g\", { fill: \"none\", stroke: c.color(0), strokeWidth: stroke }, paths)];\n if (inner) out.push(node(\"g\", { fill: \"none\", stroke: c.color(1), strokeWidth: round(stroke * 0.34) }, paths));\n return out;\n}\n\nfunction clearance(c: Canvas, cx: number, cy: number): number {\n let best = Infinity;\n for (let i = 0; i <= 90; i++) {\n const a = (i / 90) * (Math.PI / 2);\n best = Math.min(best, Math.hypot(cx - CLEAR.rx * Math.cos(a), cy - (c.h - CLEAR.ry * Math.sin(a))));\n }\n return open(c, cx, cy) ? 0 : best;\n}\n\nfunction arcs(c: Canvas): ArtNode[] {\n const out: ArtNode[] = [];\n const anchors = c.int(2, 3);\n const spots: [number, number][] = [\n [U * c.int(4, c.cols - 2), 0],\n [U * c.int(11, c.cols - 1), c.h],\n [c.w, U * c.int(2, c.rows - 2)],\n [c.w, 0],\n [c.w, c.h],\n [0, 0],\n ];\n for (let i = spots.length - 1; i > 0; i--) {\n const j = Math.floor(c.next() * (i + 1));\n [spots[i], spots[j]] = [spots[j] ?? [c.w, 0], spots[i] ?? [c.w, 0]];\n }\n let placed = 0;\n for (const [cx, cy] of spots) {\n if (placed === anchors) break;\n const band = (U / 2) * c.int(1, 2);\n const room = Math.floor((clearance(c, cx, cy) - U / 2) / band);\n const count = Math.min(room, c.int(4, 10));\n if (count < 3) continue;\n const offset = c.int(0, 3);\n const hollow = c.chance(0.4);\n for (let i = count; i >= 1; i--) out.push(node(\"circle\", { cx, cy, r: i * band, fill: i === 1 && hollow ? c.ground : c.color(i + offset) }));\n placed += 1;\n }\n return out;\n}\n\nconst GOLDEN = 2.399963229728653;\n\nfunction phyllotaxis(c: Canvas): ArtNode[] {\n const out: ArtNode[] = [];\n const cx = c.w - c.h / 2 - U * c.int(0, 2);\n const cy = c.h / 2 + U * c.int(-1, 1);\n const step = c.between(11, 14);\n const arms = [8, 13, 21][c.int(0, 2)] ?? 13;\n const banded = c.chance(0.35);\n const reach = Math.hypot(c.w, c.h);\n for (let i = 1; ; i++) {\n const r = step * Math.sqrt(i);\n if (r > reach) break;\n const x = cx + r * Math.cos(i * GOLDEN);\n const y = cy + r * Math.sin(i * GOLDEN);\n const size = step * (0.3 + 0.12 * Math.min(1, r / (c.h / 2)));\n if (x < -size || x > c.w + size || y < -size || y > c.h + size) continue;\n if (open(c, x, y) || clearance(c, x, y) < size + U / 4) continue;\n const tone = banded ? Math.floor(r / (U * 1.5)) % 4 : Math.floor(((i % arms) / arms) * 4);\n out.push(node(\"circle\", { cx: round(x), cy: round(y), r: round(size), fill: c.color(tone) }));\n }\n return out;\n}\n\nfunction gcd(a: number, b: number): number {\n return b ? gcd(b, a % b) : a;\n}\n\nfunction spiro(c: Canvas): ArtNode[] {\n const out: ArtNode[] = [];\n const cx = c.w - c.h / 2;\n const cy = c.h / 2;\n const radius = c.h / 2 - U;\n const big = c.int(7, 13);\n let small = c.int(2, big - 2);\n while (gcd(big, small) !== 1) small = c.int(2, big - 2);\n const layers = c.chance(0.5) ? 2 : 1;\n for (let l = 0; l < layers; l++) {\n const pen = small * c.between(0.75, 1.05);\n const k = (big - small) / small;\n const extent = big - small + pen;\n const turns = small / gcd(big, small);\n const steps = turns * 360;\n const points: string[] = [];\n const scale = (radius * (l === 0 ? 1 : c.between(0.4, 0.55))) / extent;\n for (let i = 0; i <= steps; i++) {\n const a = (i / steps) * turns * Math.PI * 2;\n const x = (big - small) * Math.cos(a) + pen * Math.cos(k * a);\n const y = (big - small) * Math.sin(a) - pen * Math.sin(k * a);\n points.push(`${round(cx + x * scale)} ${round(cy + y * scale)}`);\n }\n const d = `M${points.join(\"L\")}Z`;\n out.push(node(\"path\", { d, fill: c.color(l), fillRule: \"evenodd\" }));\n }\n return out;\n}\n\nconst STYLE = { bauhaus, albers, stripes, waves, truchet, arcs, phyllotaxis, spiro } as const;\n\nexport interface DrawOptions {\n shape?: ReleaseArtShape | undefined;\n title?: string | undefined;\n eyebrow?: string | undefined;\n idPrefix?: string | undefined;\n}\n\nconst paletteOf = (spec: ReleaseArtSpec) => art.palettes[spec.palette % art.palettes.length] ?? art.palettes[0];\n\nexport function releaseArtText(spec: ReleaseArtSpec) {\n return { color: art.grounds[paletteOf(spec).ground].text, eyebrow: { x: U, bottom: 96 }, title: { x: U - 2, bottom: U } };\n}\n\nexport function drawReleaseArt(spec: ReleaseArtSpec, options: DrawOptions = {}): ArtNode {\n const { w, h } = RELEASE_ART_VIEW[options.shape ?? \"banner\"];\n const next = random(spec.seed);\n const between = (lo: number, hi: number) => lo + next() * (hi - lo);\n const int = (lo: number, hi: number) => Math.min(hi, lo + Math.floor(next() * (hi - lo + 1)));\n const palette = paletteOf(spec);\n const place = releaseArtText(spec);\n const ground = art.grounds[palette.ground];\n const colors: string[] = [...palette.colors];\n for (let i = colors.length - 1; i > 0; i--) {\n const j = Math.floor(next() * (i + 1));\n [colors[i], colors[j]] = [colors[j] ?? ground.text, colors[i] ?? ground.text];\n }\n const prefix = options.idPrefix ?? \"art\";\n const canvas: Canvas = {\n w,\n h,\n cols: w / U,\n rows: h / U,\n next,\n between,\n int,\n chance: (p) => next() < p,\n ground: ground.fill,\n color: (i) => colors[((i % colors.length) + colors.length) % colors.length] ?? ground.text,\n id: (name) => `${prefix}-${name}`,\n };\n const mask = canvas.id(\"clear\");\n const drawn = STYLE[spec.style](canvas);\n const text: ArtNode[] = [];\n if (options.eyebrow)\n text.push({\n tag: \"text\",\n attrs: {\n x: place.eyebrow.x,\n y: h - place.eyebrow.bottom,\n fill: place.color,\n fillOpacity: 0.7,\n fontSize: 16,\n fontWeight: 500,\n letterSpacing: 0.1,\n fontFamily: font.sans,\n },\n text: options.eyebrow,\n });\n if (options.title)\n text.push({\n tag: \"text\",\n attrs: { x: place.title.x, y: h - place.title.bottom, fill: place.color, fontSize: 52, fontWeight: 600, letterSpacing: -1.5, fontFamily: font.sans },\n text: options.title,\n });\n return node(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", viewBox: `0 0 ${w} ${h}` }, [\n node(\"defs\", {}, [\n node(\"mask\", { id: mask, maskUnits: \"userSpaceOnUse\", x: 0, y: 0, width: w, height: h }, [\n node(\"rect\", { width: w, height: h, fill: \"white\" }),\n node(\"ellipse\", { cx: 0, cy: h, rx: CLEAR.rx, ry: CLEAR.ry, fill: \"black\" }),\n ]),\n ]),\n node(\"rect\", { width: w, height: h, fill: ground.fill }),\n ...drawn,\n ...text,\n ]);\n}\n\nconst KEEP_CAMEL = new Set([\"viewBox\", \"maskUnits\"]);\nconst attrName = (name: string) => (KEEP_CAMEL.has(name) ? name : name.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`));\nconst escapeXml = (text: string) => text.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\");\n\nexport function serializeArt(n: ArtNode): string {\n const attrs = Object.entries(n.attrs)\n .map(([k, v]) => ` ${attrName(k)}=\"${escapeXml(String(v))}\"`)\n .join(\"\");\n const inner = n.text !== undefined ? escapeXml(n.text) : (n.children ?? []).map(serializeArt).join(\"\");\n return inner ? `<${n.tag}${attrs}>${inner}</${n.tag}>` : `<${n.tag}${attrs}/>`;\n}\n","import { createElement, forwardRef, useId, useMemo, type ReactNode } from \"react\";\nimport { font } from \"@logicplanes/kaeso-tokens\";\nimport { cn } from \"../../utils/cn.js\";\nimport { drawReleaseArt, releaseArtFor, releaseArtText, serializeArt, RELEASE_ART_VIEW, type ArtNode, type ReleaseArtSpec } from \"./drawing.js\";\n\nexport { RELEASE_ART_STYLES, isReleaseArtSpec, nextReleaseArt, randomReleaseArt, releaseArtFor, type ReleaseArtSpec, type ReleaseArtStyle } from \"./drawing.js\";\n\nexport const KAESO_RELEASE_ART_VARIANTS = {\n shape: {\n banner: { classes: \"aspect-video\" },\n wide: { classes: \"aspect-21/9\" },\n },\n} as const;\nexport const KAESO_RELEASE_ART_DEFAULT_VARIANTS = { shape: \"banner\" } as const;\n\nexport interface ReleaseArtProps {\n seed: string;\n label: string;\n art?: ReleaseArtSpec | undefined;\n title?: ReactNode | undefined;\n eyebrow?: ReactNode | undefined;\n shape?: keyof typeof KAESO_RELEASE_ART_VARIANTS.shape | undefined;\n className?: string | undefined;\n}\n\nfunction toElement(n: ArtNode, key: number): ReactNode {\n return createElement(n.tag, { ...n.attrs, key }, n.text ?? n.children?.map(toElement));\n}\n\nexport const ReleaseArt = /* @__PURE__ */ forwardRef<SVGSVGElement, ReleaseArtProps>(function ReleaseArt(\n { seed, label, art, title, eyebrow, shape = \"banner\", className },\n ref,\n) {\n const { w, h } = RELEASE_ART_VIEW[shape];\n const prefix = `art${useId().replace(/[^a-zA-Z0-9]/g, \"\")}`;\n const spec = art ?? releaseArtFor(seed);\n const drawn = useMemo(() => drawReleaseArt(spec, { shape, idPrefix: prefix }), [spec, shape, prefix]);\n const text = releaseArtText(spec);\n return (\n <span className={cn(\"relative block w-full\", className)}>\n <svg\n ref={ref}\n viewBox={`0 0 ${w} ${h}`}\n role=\"img\"\n aria-label={label}\n preserveAspectRatio=\"xMidYMid slice\"\n className={cn(\"block w-full overflow-hidden rounded-well\", KAESO_RELEASE_ART_VARIANTS.shape[shape].classes)}\n >\n {drawn.children?.map(toElement)}\n {eyebrow && (\n <text\n x={text.eyebrow.x}\n y={h - text.eyebrow.bottom}\n fill={text.color}\n fillOpacity={0.7}\n fontSize={16}\n fontWeight={500}\n letterSpacing={0.1}\n fontFamily={font.sans}\n >\n {eyebrow}\n </text>\n )}\n {title && (\n <text x={text.title.x} y={h - text.title.bottom} fill={text.color} fontSize={52} fontWeight={600} letterSpacing={-1.5} fontFamily={font.sans}>\n {title}\n </text>\n )}\n </svg>\n <span aria-hidden className=\"pointer-events-none absolute inset-0 rounded-well shadow-ring\" />\n </span>\n );\n});\nif (process.env.NODE_ENV !== \"production\") ReleaseArt.displayName = \"ReleaseArt\";\n\nexport interface ReleaseArtSvgOptions {\n seed: string;\n label: string;\n art?: ReleaseArtSpec | undefined;\n title?: string | undefined;\n eyebrow?: string | undefined;\n shape?: keyof typeof KAESO_RELEASE_ART_VARIANTS.shape | undefined;\n}\n\nexport function releaseArtSvg({ seed, label, art, title, eyebrow, shape = \"banner\" }: ReleaseArtSvgOptions): string {\n const { w, h } = RELEASE_ART_VIEW[shape];\n const drawn = drawReleaseArt(art ?? releaseArtFor(seed), { shape, title, eyebrow, idPrefix: \"art\" });\n return serializeArt({ ...drawn, attrs: { ...drawn.attrs, width: w * 2, height: h * 2, role: \"img\", ariaLabel: label } });\n}\n"],"mappings":"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"}
@@ -6,18 +6,22 @@ function s() {
6
6
  let e = document.activeElement;
7
7
  return e instanceof HTMLElement && e !== document.body ? e : null;
8
8
  }
9
- function c(e, t = () => !0) {
9
+ function c() {
10
+ let e = s()?.closest("[role=dialog], [role=alertdialog]");
11
+ return e === null || !!e?.hasAttribute("data-open");
12
+ }
13
+ function l(e, t = () => !0) {
10
14
  let n = a(null), r = a(!1);
11
15
  return e && !r.current && (n.current = s()), e !== void 0 && (r.current = e), {
12
16
  initialFocus: () => t(),
13
- finalFocus: () => e !== void 0 && n.current?.isConnected ? n.current : !0
17
+ finalFocus: () => e !== void 0 && n.current?.isConnected ? n.current : !c()
14
18
  };
15
19
  }
16
20
  //#endregion
17
21
  //#region src/utils/dialog-scope.ts
18
- var l = /* @__PURE__ */ e(null);
19
- function u(e) {
20
- let i = t(l), a = r();
22
+ var u = /* @__PURE__ */ e(null);
23
+ function d(e) {
24
+ let i = t(u), a = r();
21
25
  return n(() => {
22
26
  e && i?.showing(a);
23
27
  }, [
@@ -28,7 +32,7 @@ function u(e) {
28
32
  e || i?.hidden(a);
29
33
  };
30
34
  }
31
- function d(e) {
35
+ function f(e) {
32
36
  let [t, n] = o({
33
37
  open: e,
34
38
  session: 0
@@ -40,24 +44,24 @@ function d(e) {
40
44
  }
41
45
  //#endregion
42
46
  //#region src/utils/resize-motion.ts
43
- var f = (e) => parseFloat(e) || 0, p = (e) => f(e) * (/\ds\s*$/.test(e) ? 1e3 : 1), m = (e) => {
47
+ var p = (e) => parseFloat(e) || 0, m = (e) => p(e) * (/\ds\s*$/.test(e) ? 1e3 : 1), h = (e) => {
44
48
  let t = getComputedStyle(e);
45
49
  return {
46
- w: f(t.width),
47
- h: f(t.height)
50
+ w: p(t.width),
51
+ h: p(t.height)
48
52
  };
49
- }, h = (e, t) => Math.abs(e.h - t.h) < .5 && Math.abs(e.w - t.w) < .5, g = () => `${window.innerWidth}x${window.innerHeight}`, _ = () => !!window.matchMedia?.("(prefers-reduced-motion: reduce)").matches, v = (e) => [...document.querySelectorAll("[data-side][data-align]")].some((t) => !e.contains(t) && t.getClientRects().length > 0 && t.querySelector("[role=listbox], [role=menu]")), y = (e) => e.hasAttribute("data-dialog-body");
50
- function b(e) {
53
+ }, g = (e, t) => Math.abs(e.h - t.h) < .5 && Math.abs(e.w - t.w) < .5, _ = () => `${window.innerWidth}x${window.innerHeight}`, v = () => !!window.matchMedia?.("(prefers-reduced-motion: reduce)").matches, y = (e) => [...document.querySelectorAll("[data-side][data-align]")].some((t) => !e.contains(t) && t.getClientRects().length > 0 && t.querySelector("[role=listbox], [role=menu]")), b = (e) => e.hasAttribute("data-dialog-body");
54
+ function x(e) {
51
55
  let t = [...e.children], n = t.length === 1 ? t[0] : void 0;
52
- return n && !y(n) ? b(n) : t.flatMap((e) => y(e) ? [...e.children] : [e]);
56
+ return n && !b(n) ? x(n) : t.flatMap((e) => b(e) ? [...e.children] : [e]);
53
57
  }
54
- function x(e, t) {
58
+ function S(e, t) {
55
59
  let n = a(t), r = a(null);
56
60
  i(() => {
57
61
  n.current = t, r.current?.();
58
62
  }), i(() => {
59
63
  if (!e || typeof ResizeObserver > "u") return;
60
- let t = null, i = g(), a = null, o = null, s = /* @__PURE__ */ new Set(), c = () => {
64
+ let t = null, i = _(), a = null, o = null, s = /* @__PURE__ */ new Set(), c = () => {
61
65
  a?.cancel(), a = null, e.removeAttribute("data-resizing");
62
66
  for (let t of e.querySelectorAll("[data-resize-clip]")) t.removeAttribute("data-resize-clip");
63
67
  }, l = (t, r, i, s, l) => {
@@ -77,25 +81,25 @@ function x(e, t) {
77
81
  a === u && (c(), n.current?.());
78
82
  };
79
83
  }, u = () => {
80
- let r = a, s = Number(r?.currentTime ?? 0), u = r ? m(e) : t;
84
+ let r = a, s = Number(r?.currentTime ?? 0), u = r ? h(e) : t;
81
85
  c();
82
- let d = m(e), f = getComputedStyle(e), y = p(f.getPropertyValue("--k-duration-dialog")), b = f.getPropertyValue("--k-ease-standard").trim() || "ease-out";
83
- if (r && o && t && h(d, t)) return l(o, d, y, b, s);
86
+ let d = h(e), f = getComputedStyle(e), p = m(f.getPropertyValue("--k-duration-dialog")), b = f.getPropertyValue("--k-ease-standard").trim() || "ease-out";
87
+ if (r && o && t && g(d, t)) return l(o, d, p, b, s);
84
88
  t = d;
85
- let x = i !== (i = g());
86
- !u || h(u, d) || x || !y || _() || v(e) || typeof e.animate != "function" || e.matches("[data-ending-style], [data-closed]") ? n.current?.() : l(u, d, y, b, 0);
89
+ let x = i !== (i = _());
90
+ !u || g(u, d) || x || !p || v() || y(e) || typeof e.animate != "function" || e.matches("[data-ending-style], [data-closed]") ? n.current?.() : l(u, d, p, b, 0);
87
91
  }, d = new ResizeObserver(u);
88
92
  return r.current = () => {
89
- let n = new Set(b(e)), r = !1;
93
+ let n = new Set(x(e)), r = !1;
90
94
  for (let e of s) n.has(e) || (d.unobserve(e), s.delete(e), r = !0);
91
95
  for (let e of n) s.has(e) || (d.observe(e), s.add(e));
92
- (r || !a && t && !h(m(e), t)) && u();
96
+ (r || !a && t && !g(h(e), t)) && u();
93
97
  }, r.current(), () => {
94
98
  r.current = null, d.disconnect(), c();
95
99
  };
96
100
  }, [e]);
97
101
  }
98
102
  //#endregion
99
- export { c as a, u as i, l as n, d as r, x as t };
103
+ export { l as a, d as i, u as n, f as r, S as t };
100
104
 
101
- //# sourceMappingURL=resize-motion-CMaidkwe.js.map
105
+ //# sourceMappingURL=resize-motion-BWGMchyP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resize-motion-BWGMchyP.js","names":["focused","a","focusedElsewhere","layer","useRestoreFocus","opener","useRef","wasOpen","open","first","DialogScopeContext","useScopedDialog","scope","use","id","useId","useEffect","settled","useOpenSession","seen","setSeen","useState","px","v","ms","sizeOf","s","box","near","b","viewport","reducedMotion","anchoredList","p","isBody","el","resizeSources","kids","only","c","useResizeMotion","onSettle","sync","useLayoutEffect","size","view","motion","origin","watched","stop","body","play","run","from","to","at","change","running","style","duration","easing","resized","observer","now","gone"],"sources":["../../src/utils/restore-focus.ts","../../src/utils/dialog-scope.ts","../../src/utils/resize-motion.ts"],"sourcesContent":["import { useRef } from \"react\";\n\nfunction focused(): HTMLElement | null {\n if (typeof document === \"undefined\") return null;\n const a = document.activeElement;\n return a instanceof HTMLElement && a !== document.body ? a : null;\n}\n\nfunction focusedElsewhere(): boolean {\n const layer = focused()?.closest(\"[role=dialog], [role=alertdialog]\");\n return layer === null || !!layer?.hasAttribute(\"data-open\");\n}\n\nexport function useRestoreFocus(open: boolean | undefined, first: () => HTMLElement | boolean = () => true) {\n const opener = useRef<HTMLElement | null>(null);\n const wasOpen = useRef(false);\n if (open && !wasOpen.current) opener.current = focused();\n if (open !== undefined) wasOpen.current = open;\n return {\n initialFocus: () => first(),\n finalFocus: () => {\n if (open !== undefined && opener.current?.isConnected) return opener.current;\n return !focusedElsewhere();\n },\n };\n}\n","import { createContext, use, useEffect, useId, useState } from \"react\";\n\nexport interface DialogScopeTracker {\n showing: (id: string) => void;\n hidden: (id: string) => void;\n}\n\nexport const DialogScopeContext = /* @__PURE__ */ createContext<DialogScopeTracker | null>(null);\n\nexport function useScopedDialog(open: boolean | undefined): (open: boolean) => void {\n const scope = use(DialogScopeContext);\n const id = useId();\n useEffect(() => {\n if (open) scope?.showing(id);\n }, [scope, id, open]);\n useEffect(() => () => scope?.hidden(id), [scope, id]);\n return (settled: boolean) => {\n if (!settled) scope?.hidden(id);\n };\n}\n\nexport function useOpenSession(open: boolean): number {\n const [seen, setSeen] = useState({ open, session: 0 });\n if (seen.open !== open) setSeen({ open, session: open ? seen.session + 1 : seen.session });\n return seen.session;\n}\n","import { useLayoutEffect, useRef } from \"react\";\n\ninterface Size {\n w: number;\n h: number;\n}\n\nconst px = (v: string) => parseFloat(v) || 0;\nconst ms = (v: string) => px(v) * (/\\ds\\s*$/.test(v) ? 1000 : 1);\nconst sizeOf = (box: HTMLElement): Size => {\n const s = getComputedStyle(box);\n return { w: px(s.width), h: px(s.height) };\n};\nconst near = (a: Size, b: Size) => Math.abs(a.h - b.h) < 0.5 && Math.abs(a.w - b.w) < 0.5;\nconst viewport = () => `${window.innerWidth}x${window.innerHeight}`;\nconst reducedMotion = () => !!window.matchMedia?.(\"(prefers-reduced-motion: reduce)\").matches;\nconst anchoredList = (box: HTMLElement) =>\n [...document.querySelectorAll(\"[data-side][data-align]\")].some(\n (p) => !box.contains(p) && p.getClientRects().length > 0 && p.querySelector(\"[role=listbox], [role=menu]\"),\n );\nconst isBody = (el: Element) => el.hasAttribute(\"data-dialog-body\");\n\nexport function resizeSources(box: Element): Element[] {\n const kids = [...box.children];\n const only = kids.length === 1 ? kids[0] : undefined;\n if (only && !isBody(only)) return resizeSources(only);\n return kids.flatMap((c) => (isBody(c) ? [...c.children] : [c]));\n}\n\nexport function useResizeMotion(box: HTMLElement | null, onSettle?: (() => void) | undefined) {\n const settled = useRef(onSettle);\n const sync = useRef<(() => void) | null>(null);\n useLayoutEffect(() => {\n settled.current = onSettle;\n sync.current?.();\n });\n useLayoutEffect(() => {\n if (!box || typeof ResizeObserver === \"undefined\") return;\n let size: Size | null = null;\n let view = viewport();\n let motion: Animation | null = null;\n let origin: Size | null = null;\n const watched = new Set<Element>();\n const stop = () => {\n motion?.cancel();\n motion = null;\n box.removeAttribute(\"data-resizing\");\n for (const body of box.querySelectorAll(\"[data-resize-clip]\")) body.removeAttribute(\"data-resize-clip\");\n };\n const play = (from: Size, to: Size, duration: number, easing: string, at: number) => {\n for (const body of box.querySelectorAll<HTMLElement>(\"[data-dialog-body]\"))\n if (body.scrollHeight <= body.clientHeight) body.setAttribute(\"data-resize-clip\", \"\");\n box.setAttribute(\"data-resizing\", \"\");\n const run = box.animate(\n [\n { width: `${from.w}px`, height: `${from.h}px` },\n { width: `${to.w}px`, height: `${to.h}px` },\n ],\n { duration, easing },\n );\n run.currentTime = at;\n motion = run;\n origin = from;\n run.onfinish = () => {\n if (motion !== run) return;\n stop();\n settled.current?.();\n };\n };\n const change = () => {\n const running = motion;\n const at = Number(running?.currentTime ?? 0);\n const from = running ? sizeOf(box) : size;\n stop();\n const to = sizeOf(box);\n const style = getComputedStyle(box);\n const duration = ms(style.getPropertyValue(\"--k-duration-dialog\"));\n const easing = style.getPropertyValue(\"--k-ease-standard\").trim() || \"ease-out\";\n if (running && origin && size && near(to, size)) return play(origin, to, duration, easing, at);\n size = to;\n const resized = view !== (view = viewport());\n if (\n !from ||\n near(from, to) ||\n resized ||\n !duration ||\n reducedMotion() ||\n anchoredList(box) ||\n typeof box.animate !== \"function\" ||\n box.matches(\"[data-ending-style], [data-closed]\")\n ) {\n settled.current?.();\n return;\n }\n play(from, to, duration, easing, 0);\n };\n const observer = new ResizeObserver(change);\n sync.current = () => {\n const now = new Set(resizeSources(box));\n let gone = false;\n for (const el of watched) {\n if (now.has(el)) continue;\n observer.unobserve(el);\n watched.delete(el);\n gone = true;\n }\n for (const el of now) {\n if (watched.has(el)) continue;\n observer.observe(el);\n watched.add(el);\n }\n if (gone || (!motion && size && !near(sizeOf(box), size))) change();\n };\n sync.current();\n return () => {\n sync.current = null;\n observer.disconnect();\n stop();\n };\n }, [box]);\n}\n"],"mappings":"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"}
@@ -1,13 +1,13 @@
1
1
  "use client";
2
- import { t as e } from "./cn-CidVUKMm.js";
2
+ import { t as e } from "./cn-DUDmdLpZ.js";
3
3
  import { i as t } from "./context-BELWW79w.js";
4
- import { t as n } from "./icon-CeNQtobn.js";
5
- import { r } from "./tooltip-DEbCCsru.js";
6
- import { i } from "./input-CNTfI6YE.js";
7
- import { n as a } from "./checkbox-BgRdbfCE.js";
8
- import { r as o } from "./combobox-D30Wt11R.js";
9
- import { t as s } from "./empty-DIbBpytW.js";
10
- import { t as c } from "./badge-Dkyhs0_j.js";
4
+ import { t as n } from "./icon-BqujXDUc.js";
5
+ import { r } from "./tooltip-S1DmyLVl.js";
6
+ import { i } from "./input-B0wtkcNh.js";
7
+ import { n as a } from "./checkbox-C5yvSS7O.js";
8
+ import { r as o } from "./combobox-DqtzsAKG.js";
9
+ import { t as s } from "./empty-YXmSkKzR.js";
10
+ import { t as c } from "./badge-wUHlj7m3.js";
11
11
  import { forwardRef as l, useEffect as u, useId as d, useMemo as f, useRef as p, useState as m } from "react";
12
12
  import { jsx as h, jsxs as g } from "react/jsx-runtime";
13
13
  import { Alert02Icon as _, MinusSignIcon as v, Tick02Icon as y } from "@hugeicons/core-free-icons";
@@ -126,7 +126,7 @@ var T = (e, ...t) => t.some((t) => t?.toLowerCase().includes(e)), E = /* @__PURE
126
126
  "aria-labelledby": n,
127
127
  className: "flex min-w-0 flex-col",
128
128
  children: [/* @__PURE__ */ g("div", {
129
- className: "flex items-start gap-12 pb-4",
129
+ className: "flex items-start gap-12 px-12 pb-4",
130
130
  children: [!c && /* @__PURE__ */ h("span", {
131
131
  className: "flex h-20 items-center",
132
132
  children: /* @__PURE__ */ h(a, {
@@ -244,7 +244,7 @@ function D({ right: i, readOnly: s, query: l, hasOrigin: u, originText: f, names
244
244
  ]
245
245
  });
246
246
  if (s) return /* @__PURE__ */ g("div", {
247
- className: "-mx-8 flex min-h-52 items-start gap-12 px-8 py-8",
247
+ className: "flex min-h-52 items-start gap-12 px-12 py-8",
248
248
  children: [/* @__PURE__ */ h("span", {
249
249
  className: "flex h-20 w-18 shrink-0 items-center justify-center",
250
250
  children: /* @__PURE__ */ h(n, {
@@ -256,7 +256,7 @@ function D({ right: i, readOnly: s, query: l, hasOrigin: u, originText: f, names
256
256
  }), O]
257
257
  });
258
258
  let k = /* @__PURE__ */ g("label", {
259
- className: e("-mx-8 flex min-h-52 cursor-pointer items-start gap-12 rounded-item px-8 py-8 transition-control hover:bg-fill-1", b && "bg-fill-2 hover:bg-fill-2", i.disabled && "cursor-not-allowed"),
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
260
  children: [/* @__PURE__ */ h("span", {
261
261
  className: "flex h-20 items-center",
262
262
  children: /* @__PURE__ */ h(a, {
@@ -276,4 +276,4 @@ function D({ right: i, readOnly: s, query: l, hasOrigin: u, originText: f, names
276
276
  //#endregion
277
277
  export { b as a, x as i, S as n, E as r, C as t };
278
278
 
279
- //# sourceMappingURL=rights-BbiJ0AJB.js.map
279
+ //# sourceMappingURL=rights-hMoaFasn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rights-hMoaFasn.js","names":["__icon_Alert02Icon","__icon_Tick02Icon","__icon_MinusSignIcon","cn","useUiText","Icon","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","SearchInput","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,SAAgBU,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,IAAI9B,EAAU,GACd,CAACoC,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,WAAWjB,EAAG,2CAA2CsE,CAAS;EATpE,UAAA;GAWGC,KACC,kBAACC,GAAD;IACE,WAAU;IACV,cAAYzC,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,IAAMgB,IAAY,GAAG1B,EAAO,IAAI2B,KAC1BC,IAAehD,EAAE,OAAO,QAAQ,MAAMjB,EAAE,OAAO,CAAC,CAAC,QACjDkE,IAAajD,EAAE,OAAO,QAAQ,MAAM,CAACjB,EAAE,QAAQ,GAC/CmE,IAAQD,EAAW,SAAS,KAAKA,EAAW,OAAO,MAAMlE,EAAE,OAAO,GAClEoE,IAASF,EAAW,MAAM,MAAMlE,EAAE,OAAO;IAC/C,OACE,kBAAC,WAAD;KAAuB,mBAAiB+D;KAAW,WAAU;KAA7D,UAAA,CACE,kBAAC,OAAD;MAAK,WAAU;MAAf,UAAA,CACG,CAACM,KACA,kBAAC,QAAD;OAAM,WAAU;OACd,UAAA,kBAAC5E,GAAD;QACE,cACE+B,IACIH,EAAE,kCAAkC,gCAAgC,EAAE,OAAOJ,EAAE,MAAM,CAAC,IACtFI,EAAE,6BAA6B,0BAA0B,EAAE,OAAOJ,EAAE,MAAM,CAAC;QAEjF,SAASkD;QACT,eAAeC,KAAU,CAACD;QAC1B,UAAUD,EAAW,WAAW;QAChC,uBAAuBlB,EAAMrC,EAAaE,GAAKI,EAAE,QAAQ,CAACkD,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,UAAA9C,EAAE;QACC,CAAA,GACN,kBAAC,QAAD;SAAM,WAAU;SACb,UAAAI,EAAE,+BAA+B,wBAAwB;UAAE,SAAS4C;UAAc,OAAOhD,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,kBAACqD,GAAD;MAEE,OAAOtE;MACP,UAAU,CAAC,CAACqE;MACZ,OAAO7C;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,SAASwC,EAAS,EAChB,OAAOtE,GACP,aACA,UACA,cACA,eACA,UACA,cACA,YACA,eAWC;CACD,IAAMqB,IAAI9B,EAAU,GACdgF,IAASjC,EAAM,GACfkC,IAASlC,EAAM,GACfmC,IAAOzE,EAAE,SAASA,EAAE,MACpB0E,IAAQL,IAAW,CAAC,KAAKrE,EAAE,YAAY,CAAC,EAAA,CAAG,QAAQ,MAAM,CAAC0C,EAAU,IAAIhC,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM+B,EAAM,IAAI/B,CAAC,KAAKA,CAAC,GACxGiE,IACJ,kBAAC,QAAD;EAAM,WAAU;EAAhB,UAAA;GACE,kBAAC,QAAD;IAAM,WAAU;IAAhB,UAAA;KACE,kBAAC,QAAD;MACE,IAAIH;MACJ,WAAWlF,EACT,2BACAU,EAAE,QAAQ,0BAA0B,mBACpCqE,KAAY,CAACrE,EAAE,UAAU,qBAAqB,SAChD;MAEA,UAAA,kBAACN,GAAD;OAAW,MAAM+E;OAAa;MAAQ,CAAA;KAClC,CAAA;KACLzE,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,WAAWV,EAAG,8BAA8BU,EAAE,QAAQ,SAAS,MAAM;MACzE,UAAA,kBAAC4E,GAAD;OAAS,SAASvD,EAAE,8BAA8B,4CAA4C;OAC5F,UAAA,kBAAC,QAAD;QAAM,UAAU;QAAG,WAAU;QAC3B,UAAA,kBAAC7B,GAAD;SAAM,MAAML;SAAoB,MAAK;SAAK,OAAOkC,EAAE,0BAA0B,WAAW;QAAI,CAAA;OACxF,CAAA;MACC,CAAA;KACL,CAAA;KAEPyD,KAAa,CAACT,KACb,kBAAC,QAAD;MACE,WAAW/E,EACT,6EACAU,EAAE,QAAQ,SAAS,QACnBkB,EAA6B,OAAOlB,EAAE,UAAU,OAAO,CAAC,OAC1D;MAEC,UAAA6C,EAAW7C,EAAE,UAAU;KACpB,CAAA;IAEJ;;GACN,kBAAC,QAAD;IAAM,IAAIuE;IAAQ,WAAWjF,EAAG,0BAA0B+E,KAAY,CAACrE,EAAE,UAAU,qBAAqB,mBAAmB;IACxH,UAAAA,EAAE;GACC,CAAA;GACL0E,EAAM,SAAS,KACd,kBAAC,QAAD;IAAM,WAAU;IACb,UAAArD,EAAE,sBAAsB,kBAAkB,EAAE,QAAQqD,EAAM,KAAKrD,EAAE,8BAA8B,IAAI,CAAC,EAAE,CAAC;GACpG,CAAA;GAEPgD,KAAYrE,EAAE,WAAW,CAAC,CAACA,EAAE,SAAS,UACrC,kBAAC,QAAD;IAAM,WAAU;IACb,UAAAA,EAAE,QAAQ,KAAK,MACd+E,EAAE,SACA,kBAACH,GAAD;KAAuB,SAASG,EAAE;KAChC,UAAA,kBAACnF,GAAD;MAAO,UAAU;MAAG,WAAU;MAC3B,UAAAmF,EAAE;KACE,CAAA;IACA,GAJKA,EAAE,KAIP,IAET,kBAACnF,GAAD,EAAA,UAAsBmF,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,MAAMQ,EAAE,UAAUZ,IAAoBC;IACtC,MAAK;IACL,WAAWW,EAAE,UAAU,YAAY;IACnC,OAAOA,EAAE,UAAUqB,EAAE,wBAAwB,SAAS,IAAIA,EAAE,2BAA2B,aAAa;GACrG,CAAA;EACG,CAAA,GACLsD,CACE;;CAIT,IAAMO,IACJ,kBAAC,SAAD;EACE,WAAW5F,EACT,8GACA0C,KAAW,6BACXhC,EAAE,YAAY,oBAChB;EALF,UAAA,CAOE,kBAAC,QAAD;GAAM,WAAU;GACd,UAAA,kBAACP,GAAD;IAAa,SAASO,EAAE;IAAS,UAAUA,EAAE;IAAU,iBAAiBmF;IAAU,mBAAiBX;IAAQ,oBAAkBD;GAAS,CAAA;EAClI,CAAA,GACLI,CACI;;CAET,OAAO3E,EAAE,YAAYA,EAAE,iBAAiB,kBAAC4E,GAAD;EAAS,SAAS5E,EAAE;EAAiB,UAAAkF;CAAa,CAAA,IAAIA;AAChG"}
@@ -1,6 +1,6 @@
1
1
  "use client";
2
- import { t as e } from "./cn-CidVUKMm.js";
3
- import { t } from "./nav-wordmark-DLkItdvo.js";
2
+ import { t as e } from "./cn-DUDmdLpZ.js";
3
+ import { t } from "./nav-wordmark-DmbT1Aiw.js";
4
4
  import { forwardRef as n } from "react";
5
5
  import { jsx as r, jsxs as i } from "react/jsx-runtime";
6
6
  //#region src/components/section/section.tsx
@@ -53,7 +53,7 @@ var l = /* @__PURE__ */ n(function({ title: n, description: a, children: o, foot
53
53
  className: e("relative flex min-h-dvh flex-col items-center bg-panel px-16 py-64 text-fg", c),
54
54
  children: [
55
55
  /* @__PURE__ */ r("div", {
56
- className: "absolute top-0 left-0 mt-8 flex h-52 items-center px-28",
56
+ className: "absolute top-0 left-0 mt-8 flex h-52 items-center px-16 sm:px-28",
57
57
  children: /* @__PURE__ */ r(t, {})
58
58
  }),
59
59
  /* @__PURE__ */ i("div", {
@@ -84,4 +84,4 @@ process.env.NODE_ENV !== "production" && (l.displayName = "AuthLayout");
84
84
  //#endregion
85
85
  export { c as a, s as i, o as n, a as r, l as t };
86
86
 
87
- //# sourceMappingURL=section-DzOLLN1p.js.map
87
+ //# sourceMappingURL=section-BsET7Fo-.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"section-DzOLLN1p.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-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
+ {"version":3,"file":"section-BsET7Fo-.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,8 +1,8 @@
1
1
  "use client";
2
- import { t as e } from "./cn-CidVUKMm.js";
2
+ import { t as e } from "./cn-DUDmdLpZ.js";
3
3
  import { t } from "./use-controllable-B5Fd12Bx.js";
4
- import { t as n } from "./icon-CeNQtobn.js";
5
- import { r } from "./tooltip-DEbCCsru.js";
4
+ import { t as n } from "./icon-BqujXDUc.js";
5
+ import { r } from "./tooltip-S1DmyLVl.js";
6
6
  import { t as i } from "./observe-resize-DhxhmoyB.js";
7
7
  import { forwardRef as a, useEffect as o, useLayoutEffect as s, useRef as c, useState as l } from "react";
8
8
  import { jsx as u, jsxs as d } from "react/jsx-runtime";
@@ -111,4 +111,4 @@ process.env.NODE_ENV !== "production" && (y.displayName = "Segmented");
111
111
  //#endregion
112
112
  export { h as n, y as r, g as t };
113
113
 
114
- //# sourceMappingURL=segmented-MrinfDL8.js.map
114
+ //# sourceMappingURL=segmented-DXKVF-nY.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"segmented-MrinfDL8.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 {...(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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"}
1
+ {"version":3,"file":"segmented-DXKVF-nY.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 {...(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":";;;;;;;;;;;AAGA,SAAgBK,EACd,GACA,GACA,GACkF;CAClF,IAAM,CAACC,GAAKC,KAAUC,EAAS;EAAE,GAAG;EAAG,GAAG;EAAG,GAAG;EAAG,GAAG;EAAG,OAAO;CAAM,CAAC,GACjE,CAACC,GAASC,KAAcF,EAAS,EAAK;CAiC5C,OAhCAG,QAAgB;EACd,IAAI,CAACL,EAAI,SAASG,GAAS;EAC3B,IAAIG,IAAM,GACNC,IAAO;EAIX,QAHM,SAAS,OAAO,SAAS,QAAQ,QAAQ,EAAA,CAAG,WAAW;GAC3D,AAAIA,MAAM,IAAM,4BAA6B,IAAM,4BAA4BH,EAAW,EAAI,CAAC,CAAE;EACnG,CAAC,SACY;GAEX,AADA,IAAO,IACP,qBAAqBE,CAAG;EAC1B;CACF,GAAG,CAACN,EAAI,OAAOG,CAAO,CAAC,GACvBK,QAAsB;EACpB,IAAMC,IAAOC,EAAU;EACvB,IAAI,CAACD,GAAM;EACX,IAAME,UAAgB;GACpB,IAAMC,IAAKH,EAAK,cAA2BI,CAAQ;GACnD,IAAI,CAACD,GAAI,OAAOX,GAAQ,OAAO;IAAE,GAAGa;IAAG,OAAO;GAAM,EAAE;GACtD,EAAO;IAAE,GAAG,KAAK,MAAMF,EAAG,UAAU;IAAG,GAAG,KAAK,MAAMA,EAAG,SAAS;IAAG,GAAG,KAAK,MAAMA,EAAG,WAAW;IAAG,GAAG,KAAK,MAAMA,EAAG,YAAY;IAAG,OAAO;GAAK,CAAC;EAClJ;EAEA,IADAD,EAAQ,GACJ,OAAO,iBAAmB,KAAa;EAC3C,IAAIJ,IAAO,IACLQ,IAAOjB,EAAc,CAACW,GAAM,GAAGA,EAAK,iBAAiB,YAAY,CAAC,GAAGE,CAAO;EAIlF,OAHA,SAAc,OAAO,MAAM,WAAW;GACpC,AAAIJ,KAAMI,EAAQ;EACpB,CAAC,SACY;GAEX,AADA,IAAO,IACPI,EAAK;EACP;CACF,GAAG;EAACL;EAAWG;EAAUG;CAAM,CAAC,GACzB;EAAE,GAAGhB;EAAK;CAAQ;AAC3B;;;AClCA,IAAaiB,IAA2B,EACtC,MAAM;CACJ,IAAI,EAAE,SAAS,iBAAiB;CAChC,IAAI,EAAE,SAAS,iBAAiB;AAClC,EACF,GACaC,IAAmC,EAAE,MAAM,KAAK,GAEvDC,IAAO;CAAE,IAAI;CAAwB,IAAI;AAAuB,GAChEC,IAAY;CAAE,IAAI;CAAa,IAAI;AAAY,GAuBxCC,IAA4B,kBAA2C,SAClF,EAAE,YAAS,UAAO,iBAAc,kBAAe,UAAO,MAAM,aAAU,cAAW,cAAW,cAAcC,GAAW,cAAcC,KACnI,GACA;CACA,IAAM,CAACC,GAASC,KAAcC,EAAgBC,GAAOC,KAAgBC,EAAQ,EAAE,EAAE,SAAS,IAAIC,CAAa,GACrGC,IAAQC,EAA8B,IAAI,GAC1CC,IAAMlC,EAAagC,GAAO,kBAAkB,GAAGP,EAAQ,GAAGK,EAAQ,OAAO,GAAGK,GAAM;CACxF,OACE,kBAACxC,GAAD;EACE,MAAM,MAA8B;GAElC,AADA,EAAM,UAAUkB,GACZ,OAAOwB,KAAQ,aAAYA,EAAIxB,CAAE,IAC5BwB,MAAK,EAAI,UAAUxB;EAC9B;EACA,OAAOY;EACP,gBAAgB,MAAeC,EAAW,OAAOY,CAAC,CAAC;EACnD,GAAKC,MAAa,KAAA,IAA2B,CAAC,IAAhB,EAAE,YAAS;EACzC,cAAYhB;EACZ,GAAKC,IAAQ,EAAE,cAAcA,EAAM,IAAI,CAAC;EACxC,WAAW3B,EACT,oEACAqB,EAAyB,KAAKiB,EAAK,CAAC,SACpCK,KAAa,eACbD,KAAY,cACZE,CACF;EAjBF,UAAA,CAmBE,kBAAC,QAAD;GACE,eAAA;GACA,WAAW5C,EAAG,qEAAqEqC,EAAI,WAAW,oBAAoB,CAACA,EAAI,SAAS,WAAW;GAC/I,OAAO;IAAE,WAAW,aAAaA,EAAI,EAAE,MAAMA,EAAI,EAAE;IAAM,OAAOA,EAAI;IAAG,QAAQA,EAAI;GAAE;EACtF,CAAA,GACAJ,EAAQ,KAAK,MAAM;GAClB,IAAMY,IAAWC,EAAE,QAAQ,CAACA,EAAE,OACxBC,IACJ,kBAAChD,EAAU,MAAX;IAEE,OAAO+C,EAAE;IACT,GAAKA,EAAE,WAAW,EAAE,UAAU,GAAK,IAAI,CAAC;IACxC,GAAKA,EAAE,gBAAgB,EAAE,cAAcA,EAAE,cAAc,IAAI,CAAC;IAC5D,WAAW9C,EACT,+KACA,uFACAuB,EAAKe,IACLO,KAAYrB,EAAUc,IACtBK,KAAa,QACf;IAXF,UAAA,CAaGG,EAAE,QAAQ,kBAAC7C,GAAD;KAAM,MAAM6C,EAAE;KAAM,MAAK;IAAM,CAAA,GACzCA,EAAE,KACW;GAdT,GAAAA,EAAE,KAcO;GAElB,OAAOD,KAAYC,EAAE,gBACnB,kBAACG,GAAD;IAAuB,SAASH,EAAE;IAC/B,UAAAC;GACM,GAFKD,EAAE,KAEP,IAETC;EAEJ,CAAC,CACa;;AAEpB,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAU,cAAc"}