@kismet-ux/constellation 1.9.0 → 1.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (412) hide show
  1. package/dist/brand/Logo/logo.css +4 -1
  2. package/dist/form/Checkbox/checkbox.css +48 -34
  3. package/dist/form/Checkbox/checkbox.d.ts +5 -0
  4. package/dist/form/Checkbox/checkbox.d.ts.map +1 -1
  5. package/dist/form/Checkbox/checkbox.js +6 -55
  6. package/dist/form/Checkbox/checkbox.js.map +1 -1
  7. package/dist/form/Checkbox/checkbox.module.scss.js +1 -1
  8. package/dist/form/Combobox/combobox.css +35 -0
  9. package/dist/form/Combobox/combobox.d.ts +41 -0
  10. package/dist/form/Combobox/combobox.d.ts.map +1 -0
  11. package/dist/form/Combobox/combobox.js +152 -0
  12. package/dist/form/Combobox/combobox.js.map +1 -0
  13. package/dist/form/Combobox/combobox.module.scss.js +6 -0
  14. package/dist/form/Combobox/combobox.module.scss.js.map +1 -0
  15. package/dist/form/Combobox/index.d.ts +2 -0
  16. package/dist/form/Combobox/index.d.ts.map +1 -0
  17. package/dist/form/DatePicker/date-picker.d.ts.map +1 -1
  18. package/dist/form/DatePicker/date-picker.js +5 -53
  19. package/dist/form/DatePicker/date-picker.js.map +1 -1
  20. package/dist/form/Input/input.css +12 -0
  21. package/dist/form/Input/input.d.ts +1 -1
  22. package/dist/form/Input/input.d.ts.map +1 -1
  23. package/dist/form/Input/input.js +23 -3
  24. package/dist/form/Input/input.js.map +1 -1
  25. package/dist/form/Select/select.css +46 -2
  26. package/dist/form/Select/select.d.ts +31 -3
  27. package/dist/form/Select/select.d.ts.map +1 -1
  28. package/dist/form/Select/select.js +35 -21
  29. package/dist/form/Select/select.js.map +1 -1
  30. package/dist/form/Select/select.module.scss.js +2 -2
  31. package/dist/form/index.d.ts +1 -0
  32. package/dist/form/index.d.ts.map +1 -1
  33. package/dist/form.d.ts +1 -1
  34. package/dist/form.js +2 -1
  35. package/dist/form.js.map +1 -1
  36. package/dist/hooks/index.d.ts +1 -0
  37. package/dist/hooks/index.d.ts.map +1 -1
  38. package/dist/hooks/layout/index.d.ts +1 -0
  39. package/dist/hooks/layout/index.d.ts.map +1 -1
  40. package/dist/hooks/layout/use-flip.d.ts +37 -0
  41. package/dist/hooks/layout/use-flip.d.ts.map +1 -0
  42. package/dist/hooks/layout/use-flip.js +128 -0
  43. package/dist/hooks/layout/use-flip.js.map +1 -0
  44. package/dist/hooks/use-motion.d.ts +30 -0
  45. package/dist/hooks/use-motion.d.ts.map +1 -0
  46. package/dist/hooks/use-motion.js +93 -0
  47. package/dist/hooks/use-motion.js.map +1 -0
  48. package/dist/index-2nHZOukj.d.ts +200 -0
  49. package/dist/index-3Ui8TAHy.d.ts +200 -0
  50. package/dist/index-59JuNTZm.d.ts +537 -0
  51. package/dist/index-5QXWn0de.d.ts +200 -0
  52. package/dist/index-98ozinMf.d.ts +498 -0
  53. package/dist/index-Ah3YQTri.d.ts +566 -0
  54. package/dist/index-As2iBOIu.d.ts +527 -0
  55. package/dist/index-B1Vw0zoR.d.ts +566 -0
  56. package/dist/index-B25sLBMr.d.ts +498 -0
  57. package/dist/index-B4B8aA9X.d.ts +272 -0
  58. package/dist/index-B97hn7Xp.d.ts +514 -0
  59. package/dist/index-B9B7JjTb.d.ts +204 -0
  60. package/dist/index-BFWt_pYt.d.ts +566 -0
  61. package/dist/index-BFZp_Pu6.d.ts +566 -0
  62. package/dist/index-BGL4DvKQ.d.ts +293 -0
  63. package/dist/index-BGP_J4I2.d.ts +498 -0
  64. package/dist/index-BHhoIUD_.d.ts +354 -0
  65. package/dist/index-BI0iaWmp.d.ts +222 -0
  66. package/dist/index-BMSRpHb6.d.ts +273 -0
  67. package/dist/index-BRQWKmfq.d.ts +566 -0
  68. package/dist/index-BTARYt96.d.ts +537 -0
  69. package/dist/index-BTrpuZdU.d.ts +566 -0
  70. package/dist/index-BWTwKQsp.d.ts +354 -0
  71. package/dist/index-B_05Skyi.d.ts +566 -0
  72. package/dist/index-BcQqBGNu.d.ts +200 -0
  73. package/dist/index-Be23E9xD.d.ts +298 -0
  74. package/dist/index-Bf44Z8ak.d.ts +514 -0
  75. package/dist/index-Bg42sKjg.d.ts +498 -0
  76. package/dist/index-Bg_0OPMx.d.ts +566 -0
  77. package/dist/index-BgjRk9l7.d.ts +537 -0
  78. package/dist/index-BhLEMn3N.d.ts +537 -0
  79. package/dist/index-BiqECuUj.d.ts +204 -0
  80. package/dist/index-BjUQiAs1.d.ts +130 -0
  81. package/dist/index-BlKqvax0.d.ts +204 -0
  82. package/dist/index-Bnb0JFqx.d.ts +514 -0
  83. package/dist/index-BpSD6t7A.d.ts +566 -0
  84. package/dist/index-BpxKwrv_.d.ts +537 -0
  85. package/dist/index-Brh7JZAQ.d.ts +514 -0
  86. package/dist/index-BxBAq63A.d.ts +354 -0
  87. package/dist/index-C-n7hM4G.d.ts +354 -0
  88. package/dist/index-C0wKb28S.d.ts +514 -0
  89. package/dist/index-C129uthr.d.ts +566 -0
  90. package/dist/index-C1ef0QtQ.d.ts +204 -0
  91. package/dist/index-C4BACHGE.d.ts +272 -0
  92. package/dist/index-C5JU8WTE.d.ts +514 -0
  93. package/dist/index-C63UYi-T.d.ts +195 -0
  94. package/dist/index-C8LoYkC7.d.ts +250 -0
  95. package/dist/index-C9-ECLyr.d.ts +566 -0
  96. package/dist/index-C9B1F-mr.d.ts +293 -0
  97. package/dist/index-CAVmbwa8.d.ts +514 -0
  98. package/dist/index-CBz-v5eM.d.ts +184 -0
  99. package/dist/index-CCpdo0n4.d.ts +130 -0
  100. package/dist/index-CDC_ZncW.d.ts +566 -0
  101. package/dist/index-CFQj-KtR.d.ts +184 -0
  102. package/dist/index-CFaxW5hv.d.ts +184 -0
  103. package/dist/index-CG9DKbG9.d.ts +498 -0
  104. package/dist/index-CGhG7YeI.d.ts +354 -0
  105. package/dist/index-CHC6kRbR.d.ts +537 -0
  106. package/dist/index-CH_q-5fk.d.ts +537 -0
  107. package/dist/index-CIK_SmBm.d.ts +200 -0
  108. package/dist/index-CJ1KPFOf.d.ts +537 -0
  109. package/dist/index-CJ5FEGRG.d.ts +537 -0
  110. package/dist/index-CKX2VNKk.d.ts +240 -0
  111. package/dist/index-CL7kYZ90.d.ts +231 -0
  112. package/dist/index-CNl03fCW.d.ts +498 -0
  113. package/dist/index-CO8Jq0pz.d.ts +298 -0
  114. package/dist/index-CQ-aS-rp.d.ts +566 -0
  115. package/dist/index-CQjzBv4q.d.ts +537 -0
  116. package/dist/index-CRVO4SlF.d.ts +537 -0
  117. package/dist/index-CSQFy2xe.d.ts +195 -0
  118. package/dist/index-CWM2ewRz.d.ts +566 -0
  119. package/dist/index-CY6Xq36O.d.ts +204 -0
  120. package/dist/index-CYGOs6JT.d.ts +273 -0
  121. package/dist/index-CYPFkjfk.d.ts +204 -0
  122. package/dist/index-C_hJJ1fH.d.ts +527 -0
  123. package/dist/index-CcM-XHTL.d.ts +273 -0
  124. package/dist/index-CdGF_eEO.d.ts +514 -0
  125. package/dist/index-CdJTE9Lh.d.ts +566 -0
  126. package/dist/index-CdOt-pqR.d.ts +537 -0
  127. package/dist/index-CgeR_2Gi.d.ts +220 -0
  128. package/dist/index-CjUoZbDi.d.ts +354 -0
  129. package/dist/index-CjV6KsFc.d.ts +263 -0
  130. package/dist/index-Ck8LtgBW.d.ts +557 -0
  131. package/dist/index-Cknm9FUU.d.ts +299 -0
  132. package/dist/index-Clv3CnXv.d.ts +184 -0
  133. package/dist/index-Cm4wnJ29.d.ts +514 -0
  134. package/dist/index-Cmz3q-CI.d.ts +273 -0
  135. package/dist/index-CnMBzCft.d.ts +514 -0
  136. package/dist/index-CnVW0FnZ.d.ts +272 -0
  137. package/dist/index-CpIHT-uo.d.ts +231 -0
  138. package/dist/index-CtBEDM0b.d.ts +514 -0
  139. package/dist/index-CtVSiQeY.d.ts +130 -0
  140. package/dist/index-Cu107rOs.d.ts +293 -0
  141. package/dist/index-CxyTd3Ag.d.ts +354 -0
  142. package/dist/index-CywSNvOU.d.ts +200 -0
  143. package/dist/index-CzJL7Lro.d.ts +566 -0
  144. package/dist/index-CzJnKY3r.d.ts +272 -0
  145. package/dist/index-D-R9eOxe.d.ts +354 -0
  146. package/dist/index-D-hdgIbs.d.ts +273 -0
  147. package/dist/index-D-slQ9w4.d.ts +537 -0
  148. package/dist/index-D0jdNDaH.d.ts +204 -0
  149. package/dist/index-D1ir--Li.d.ts +566 -0
  150. package/dist/index-D29_-MCZ.d.ts +354 -0
  151. package/dist/index-D2glATpo.d.ts +273 -0
  152. package/dist/index-D3J_UMR7.d.ts +566 -0
  153. package/dist/index-D6ATtbor.d.ts +298 -0
  154. package/dist/index-D6HktSlo.d.ts +514 -0
  155. package/dist/index-DB4UBCvy.d.ts +537 -0
  156. package/dist/index-DBd0PU9y.d.ts +222 -0
  157. package/dist/index-DE2Nm-iT.d.ts +354 -0
  158. package/dist/index-DEeJuuvm.d.ts +231 -0
  159. package/dist/index-DHhzBSfL.d.ts +498 -0
  160. package/dist/index-DKpWNCb6.d.ts +204 -0
  161. package/dist/index-DMewi97i.d.ts +566 -0
  162. package/dist/index-DN0gtpck.d.ts +354 -0
  163. package/dist/index-DO23vZ-R.d.ts +514 -0
  164. package/dist/index-DTb2-z6E.d.ts +130 -0
  165. package/dist/index-DV-CN7c0.d.ts +231 -0
  166. package/dist/index-DWgCs62z.d.ts +566 -0
  167. package/dist/index-D_6Qu6ia.d.ts +200 -0
  168. package/dist/index-D_vn8O-I.d.ts +293 -0
  169. package/dist/index-Daq4m4Rf.d.ts +514 -0
  170. package/dist/index-Db6cXpr6.d.ts +537 -0
  171. package/dist/index-DbZ1s2E-.d.ts +514 -0
  172. package/dist/index-DbevJPuY.d.ts +354 -0
  173. package/dist/index-DepmPwP7.d.ts +537 -0
  174. package/dist/index-DfnTWQCz.d.ts +514 -0
  175. package/dist/index-Dfu8WhiS.d.ts +273 -0
  176. package/dist/index-DggMYd7c.d.ts +298 -0
  177. package/dist/index-DhS2nQjt.d.ts +200 -0
  178. package/dist/index-Dn3bC8Ki.d.ts +222 -0
  179. package/dist/index-Dn9bGZvU.d.ts +195 -0
  180. package/dist/index-DnDt7A4Y.d.ts +354 -0
  181. package/dist/index-DpdYKBP2.d.ts +498 -0
  182. package/dist/index-DunP9qIK.d.ts +537 -0
  183. package/dist/index-DxO6-qt5.d.ts +498 -0
  184. package/dist/index-ESQ8WM_8.d.ts +130 -0
  185. package/dist/index-GVz409cm.d.ts +222 -0
  186. package/dist/index-HAx-aLZ0.d.ts +273 -0
  187. package/dist/index-Iuzs6nt9.d.ts +498 -0
  188. package/dist/index-LnEpnlTq.d.ts +566 -0
  189. package/dist/index-Mm1i2OdU.d.ts +537 -0
  190. package/dist/index-P0oxVi77.d.ts +537 -0
  191. package/dist/index-Q5JuPFoN.d.ts +293 -0
  192. package/dist/index-RJviLtvo.d.ts +566 -0
  193. package/dist/index-SnQCbfte.d.ts +498 -0
  194. package/dist/index-Th9It0ZT.d.ts +354 -0
  195. package/dist/index-UHHmyQM5.d.ts +272 -0
  196. package/dist/index-VyGmJYQZ.d.ts +537 -0
  197. package/dist/index-WYH70le_.d.ts +195 -0
  198. package/dist/index-Wj9RYtTX.d.ts +273 -0
  199. package/dist/index-Y-wMZeUG.d.ts +298 -0
  200. package/dist/index-Zo2rSdXz.d.ts +273 -0
  201. package/dist/index-ZwpWgV4n.d.ts +272 -0
  202. package/dist/index-_oZ4knIl.d.ts +272 -0
  203. package/dist/index-an222nAK.d.ts +354 -0
  204. package/dist/index-daV0QTe0.d.ts +537 -0
  205. package/dist/index-eGZu2HLC.d.ts +231 -0
  206. package/dist/index-eswPA0Un.d.ts +204 -0
  207. package/dist/index-gf6-wf_1.d.ts +566 -0
  208. package/dist/index-hdVr9Wrv.d.ts +566 -0
  209. package/dist/index-iygiXYw2.d.ts +537 -0
  210. package/dist/index-jR29ZGLD.d.ts +514 -0
  211. package/dist/index-kHgI28TP.d.ts +272 -0
  212. package/dist/index-lY4_UCOs.d.ts +566 -0
  213. package/dist/index-miXK87yJ.d.ts +231 -0
  214. package/dist/index-mwbGtZkk.d.ts +273 -0
  215. package/dist/index-ru2DFXcm.d.ts +195 -0
  216. package/dist/index-uj1ll_u-.d.ts +204 -0
  217. package/dist/index-vfq-aH7U.d.ts +537 -0
  218. package/dist/index-xqUz9XjP.d.ts +537 -0
  219. package/dist/index.css +74 -18
  220. package/dist/index.d.ts +121 -13
  221. package/dist/index.js +34 -28
  222. package/dist/index.js.map +1 -1
  223. package/dist/internal/use-scroll-lock.d.ts +15 -0
  224. package/dist/internal/use-scroll-lock.d.ts.map +1 -1
  225. package/dist/internal/use-scroll-lock.js +26 -8
  226. package/dist/internal/use-scroll-lock.js.map +1 -1
  227. package/dist/layout/AppContent/app-content.css +1 -1
  228. package/dist/layout/AppContentBands/app-content-bands.css +21 -0
  229. package/dist/layout/AppContentBands/app-content-bands.d.ts +26 -0
  230. package/dist/layout/AppContentBands/app-content-bands.d.ts.map +1 -0
  231. package/dist/layout/AppContentBands/app-content-bands.js +65 -0
  232. package/dist/layout/AppContentBands/app-content-bands.js.map +1 -0
  233. package/dist/layout/AppContentBands/app-content-bands.module.scss.js +6 -0
  234. package/dist/layout/AppContentBands/app-content-bands.module.scss.js.map +1 -0
  235. package/dist/layout/AppContentBands/index.d.ts +2 -0
  236. package/dist/layout/AppContentBands/index.d.ts.map +1 -0
  237. package/dist/layout/AppContentFooter/app-content-footer.css +9 -0
  238. package/dist/layout/AppContentFooter/app-content-footer.d.ts +38 -0
  239. package/dist/layout/AppContentFooter/app-content-footer.d.ts.map +1 -0
  240. package/dist/layout/AppContentFooter/app-content-footer.js +42 -0
  241. package/dist/layout/AppContentFooter/app-content-footer.js.map +1 -0
  242. package/dist/layout/AppContentFooter/app-content-footer.module.scss.js +6 -0
  243. package/dist/layout/AppContentFooter/app-content-footer.module.scss.js.map +1 -0
  244. package/dist/layout/AppContentFooter/index.d.ts +2 -0
  245. package/dist/layout/AppContentFooter/index.d.ts.map +1 -0
  246. package/dist/layout/AppContentMain/app-content-main.css +6 -0
  247. package/dist/layout/AppContentMain/app-content-main.d.ts +37 -0
  248. package/dist/layout/AppContentMain/app-content-main.d.ts.map +1 -0
  249. package/dist/layout/AppContentMain/app-content-main.js +41 -0
  250. package/dist/layout/AppContentMain/app-content-main.js.map +1 -0
  251. package/dist/layout/AppContentMain/app-content-main.module.scss.js +6 -0
  252. package/dist/layout/AppContentMain/app-content-main.module.scss.js.map +1 -0
  253. package/dist/layout/AppContentMain/index.d.ts +2 -0
  254. package/dist/layout/AppContentMain/index.d.ts.map +1 -0
  255. package/dist/layout/AppFooter/app-footer.js +1 -1
  256. package/dist/layout/AppSidebar/app-sidebar.js +2 -2
  257. package/dist/layout/AppSidebar/app-sidebar.js.map +1 -1
  258. package/dist/layout/AppSidebarHeader/app-sidebar-header.css +2 -3
  259. package/dist/layout/AppSidebarHeader/app-sidebar-header.d.ts +10 -2
  260. package/dist/layout/AppSidebarHeader/app-sidebar-header.d.ts.map +1 -1
  261. package/dist/layout/AppSidebarHeader/app-sidebar-header.js +12 -32
  262. package/dist/layout/AppSidebarHeader/app-sidebar-header.js.map +1 -1
  263. package/dist/layout/Collapse/collapse.css +4 -1
  264. package/dist/layout/Column/column.css +6 -0
  265. package/dist/layout/Column/column.d.ts.map +1 -1
  266. package/dist/layout/Column/column.js +3 -1
  267. package/dist/layout/Column/column.js.map +1 -1
  268. package/dist/layout/Column/column.module.scss.js +1 -1
  269. package/dist/layout/Container/container.css +42 -0
  270. package/dist/layout/Container/container.d.ts.map +1 -1
  271. package/dist/layout/Container/container.js +37 -9
  272. package/dist/layout/Container/container.js.map +1 -1
  273. package/dist/layout/Container/container.module.scss.js +1 -1
  274. package/dist/layout/Grid/grid.css +28 -0
  275. package/dist/layout/Grid/grid.d.ts.map +1 -1
  276. package/dist/layout/Grid/grid.js +40 -4
  277. package/dist/layout/Grid/grid.js.map +1 -1
  278. package/dist/layout/Grid/grid.module.scss.js +1 -1
  279. package/dist/layout/Row/row.css +42 -0
  280. package/dist/layout/Row/row.d.ts.map +1 -1
  281. package/dist/layout/Row/row.js +5 -3
  282. package/dist/layout/Row/row.js.map +1 -1
  283. package/dist/layout/Row/row.module.scss.js +1 -1
  284. package/dist/layout/Sidebar/sidebar.css +4 -2
  285. package/dist/layout/Sidebar/sidebar.js +1 -1
  286. package/dist/layout/index.d.ts +2 -0
  287. package/dist/layout/index.d.ts.map +1 -1
  288. package/dist/layout.d.ts +4 -4
  289. package/dist/layout.js +2 -0
  290. package/dist/layout.js.map +1 -1
  291. package/dist/nav-user-CilmWvtr.d.ts +52 -0
  292. package/dist/navigation/DropdownMenu/dropdown-menu.d.ts.map +1 -1
  293. package/dist/navigation/DropdownMenu/dropdown-menu.js +1 -1
  294. package/dist/navigation/DropdownMenu/dropdown-menu.js.map +1 -1
  295. package/dist/navigation/NavUser/nav-user.js +2 -2
  296. package/dist/navigation/Sheet/sheet.css +40 -6
  297. package/dist/navigation/Sheet/sheet.d.ts +22 -0
  298. package/dist/navigation/Sheet/sheet.d.ts.map +1 -1
  299. package/dist/navigation/Sheet/sheet.js +5 -30
  300. package/dist/navigation/Sheet/sheet.js.map +1 -1
  301. package/dist/navigation/Sheet/sheet.module.scss.js +1 -1
  302. package/dist/navigation.d.ts +24 -2
  303. package/dist/row-CuhTBQhK.d.ts +21 -0
  304. package/dist/settings/AppearanceDropdown/appearance-dropdown.js +1 -1
  305. package/dist/settings/AppearanceTabs/appearance-tabs.js +2 -27
  306. package/dist/settings/AppearanceTabs/appearance-tabs.js.map +1 -1
  307. package/dist/tokens.css +59 -17
  308. package/dist/tooltip-1qYeAGE9.d.ts +45 -0
  309. package/dist/tooltip-3IOkYFQ-.d.ts +45 -0
  310. package/dist/tooltip-540OmbEG.d.ts +46 -0
  311. package/dist/tooltip-91Nq_Hl8.d.ts +46 -0
  312. package/dist/tooltip-B56sWYK0.d.ts +46 -0
  313. package/dist/tooltip-BIrIF-4z.d.ts +45 -0
  314. package/dist/tooltip-BOipKW5l.d.ts +46 -0
  315. package/dist/tooltip-BPC0RH8i.d.ts +46 -0
  316. package/dist/tooltip-BST1BOCn.d.ts +45 -0
  317. package/dist/tooltip-BhuxNQwX.d.ts +45 -0
  318. package/dist/tooltip-BpAJwi3K.d.ts +46 -0
  319. package/dist/tooltip-C0LBu2Iu.d.ts +45 -0
  320. package/dist/tooltip-C1ZwALiG.d.ts +45 -0
  321. package/dist/tooltip-C55-HA0w.d.ts +45 -0
  322. package/dist/tooltip-CHn6WuDv.d.ts +46 -0
  323. package/dist/tooltip-CNjH7zKO.d.ts +45 -0
  324. package/dist/tooltip-CSBby1OT.d.ts +45 -0
  325. package/dist/tooltip-CXFRzR0L.d.ts +45 -0
  326. package/dist/tooltip-ChpsbkOU.d.ts +46 -0
  327. package/dist/tooltip-CspTy2ZW.d.ts +46 -0
  328. package/dist/tooltip-CvComAZD.d.ts +46 -0
  329. package/dist/tooltip-D19vhhRn.d.ts +45 -0
  330. package/dist/tooltip-D32S1g-7.d.ts +46 -0
  331. package/dist/tooltip-DAvBN683.d.ts +45 -0
  332. package/dist/tooltip-DQz4_i4m.d.ts +45 -0
  333. package/dist/tooltip-DVYPUAb1.d.ts +46 -0
  334. package/dist/tooltip-DXoSckt9.d.ts +46 -0
  335. package/dist/tooltip-Dtoq3bn_.d.ts +46 -0
  336. package/dist/tooltip-DxO_DWMO.d.ts +46 -0
  337. package/dist/tooltip-DxdGb3dX.d.ts +45 -0
  338. package/dist/tooltip-DzAzC0d7.d.ts +45 -0
  339. package/dist/tooltip-Lk4RpuSh.d.ts +45 -0
  340. package/dist/tooltip-ReFyHDhU.d.ts +45 -0
  341. package/dist/tooltip-_wdlSYAb.d.ts +46 -0
  342. package/dist/tooltip-nKcM19C9.d.ts +45 -0
  343. package/dist/types/layout/container.d.ts +28 -1
  344. package/dist/types/layout/container.d.ts.map +1 -1
  345. package/dist/types/layout/grid.d.ts +42 -0
  346. package/dist/types/layout/grid.d.ts.map +1 -1
  347. package/dist/types/layout/row.d.ts +7 -0
  348. package/dist/types/layout/row.d.ts.map +1 -1
  349. package/dist/types/navigation.d.ts +11 -0
  350. package/dist/types/navigation.d.ts.map +1 -1
  351. package/dist/typography/Typography/typography-variants.d.ts +3 -0
  352. package/dist/typography/Typography/typography-variants.d.ts.map +1 -1
  353. package/dist/typography/Typography/typography-variants.js +25 -0
  354. package/dist/typography/Typography/typography-variants.js.map +1 -1
  355. package/dist/typography/Typography/typography.css +105 -41
  356. package/dist/typography/Typography/typography.d.ts +20 -0
  357. package/dist/typography/Typography/typography.d.ts.map +1 -1
  358. package/dist/typography/Typography/typography.js +11 -2
  359. package/dist/typography/Typography/typography.js.map +1 -1
  360. package/dist/typography/Typography/typography.module.scss.js +1 -1
  361. package/dist/typography-CTGVc_Gg.d.ts +41 -0
  362. package/dist/typography.d.ts +2 -2
  363. package/dist/ui/Alert/alert-provider.d.ts.map +1 -1
  364. package/dist/ui/Alert/alert-provider.js +1 -1
  365. package/dist/ui/Alert/alert-provider.js.map +1 -1
  366. package/dist/ui/Button/button-variants.d.ts +1 -0
  367. package/dist/ui/Button/button-variants.d.ts.map +1 -1
  368. package/dist/ui/Button/button-variants.js +3 -0
  369. package/dist/ui/Button/button-variants.js.map +1 -1
  370. package/dist/ui/Button/button.css +68 -14
  371. package/dist/ui/Button/button.d.ts.map +1 -1
  372. package/dist/ui/Button/button.js +2 -2
  373. package/dist/ui/Button/button.js.map +1 -1
  374. package/dist/ui/Button/button.module.scss.js +1 -1
  375. package/dist/ui/Chip/chip.css +32 -11
  376. package/dist/ui/Chip/chip.d.ts +16 -0
  377. package/dist/ui/Chip/chip.d.ts.map +1 -1
  378. package/dist/ui/Chip/chip.js +4 -2
  379. package/dist/ui/Chip/chip.js.map +1 -1
  380. package/dist/ui/CodeBlock/code-block.css +8 -3
  381. package/dist/ui/Dialog/dialog.css +70 -0
  382. package/dist/ui/Dialog/dialog.d.ts +45 -2
  383. package/dist/ui/Dialog/dialog.d.ts.map +1 -1
  384. package/dist/ui/Dialog/dialog.js +256 -7
  385. package/dist/ui/Dialog/dialog.js.map +1 -1
  386. package/dist/ui/Dialog/dialog.module.scss.js +1 -1
  387. package/dist/ui/Icon/icon.css +14 -7
  388. package/dist/ui/ProgressBar/progress-bar.css +10 -3
  389. package/dist/ui/StatCard/stat-card.css +13 -0
  390. package/dist/ui/StatCard/stat-card.d.ts +9 -0
  391. package/dist/ui/StatCard/stat-card.d.ts.map +1 -1
  392. package/dist/ui/StatCard/stat-card.js +2 -2
  393. package/dist/ui/StatCard/stat-card.js.map +1 -1
  394. package/dist/ui/StatusDot/status-dot.css +4 -1
  395. package/dist/ui/StepProgress/step-progress.css +12 -4
  396. package/dist/ui/Switch/switch.css +6 -2
  397. package/dist/ui/Tooltip/tooltip.d.ts.map +1 -1
  398. package/dist/ui/Tooltip/tooltip.js +1 -1
  399. package/dist/ui/Tooltip/tooltip.js.map +1 -1
  400. package/dist/ui.d.ts +3 -3
  401. package/dist/user/UserInfo/user-info.js +1 -1
  402. package/dist/utils/index.d.ts +1 -0
  403. package/dist/utils/index.d.ts.map +1 -1
  404. package/dist/utils/portal.d.ts +34 -0
  405. package/dist/utils/portal.d.ts.map +1 -0
  406. package/dist/utils/portal.js +40 -0
  407. package/dist/utils/portal.js.map +1 -0
  408. package/dist/utils.d.ts +35 -1
  409. package/dist/utils.js +1 -0
  410. package/dist/utils.js.map +1 -1
  411. package/package.json +4 -3
  412. package/src/styles/_mixins.scss +30 -0
@@ -0,0 +1,65 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import cn from 'clsx';
3
+ import * as React from 'react';
4
+ import s from './app-content-bands.module.scss.js';
5
+
6
+ /**
7
+ * Publish the band's height on the content area, as a CSS custom property.
8
+ *
9
+ * Anything else that sticks to the top of the same scrollport has to clear the
10
+ * header, and its height is not a constant — it grows with a wrapped toolbar,
11
+ * an error line, an environment banner. So it is measured and written where
12
+ * CSS can read it: `--app-content-header-height`, on the nearest content area
13
+ * (or the document, if the band is used outside one).
14
+ *
15
+ * This is the one part of a sticky band that cannot be CSS: a rendered height
16
+ * is a number the stylesheet has no way to ask for.
17
+ */
18
+ function usePublishedHeight(ref, property, enabled) {
19
+ React.useLayoutEffect(() => {
20
+ const el = ref.current;
21
+ if (!el || !enabled)
22
+ return undefined;
23
+ const target = el.closest('[data-slot="app-content"]') ??
24
+ document.documentElement;
25
+ const write = () => {
26
+ target.style.setProperty(property, `${el.getBoundingClientRect().height}px`);
27
+ };
28
+ write();
29
+ const observer = new ResizeObserver(write);
30
+ observer.observe(el);
31
+ return () => {
32
+ observer.disconnect();
33
+ target.style.removeProperty(property);
34
+ };
35
+ }, [ref, property, enabled]);
36
+ }
37
+ /**
38
+ * The band at the top of a content area, pinned while the page scrolls.
39
+ *
40
+ * Opaque on purpose: it paints over the content passing beneath it, and a
41
+ * translucent one shows the list sliding through the title.
42
+ */
43
+ function AppContentHeader({ children, className, el, sticky = true, ...props }) {
44
+ const ref = React.useRef(null);
45
+ usePublishedHeight(ref, '--app-content-header-height', sticky);
46
+ const El = (el ?? 'header');
47
+ return (jsx(El, { ref: ref, "data-slot": 'app-content-header', className: cn(s['app-content-header'], !sticky && s['band-static'], className), ...props, children: children }));
48
+ }
49
+ /**
50
+ * The band at the foot of a content area — a search field, a toolbar, the
51
+ * action that commits the page.
52
+ *
53
+ * Sticky, not fixed: fixed is measured against the viewport, so in an app with
54
+ * a sidebar the band runs underneath it and has to be inset by hand for every
55
+ * layout the sidebar can be in. Sticky is measured against this content area,
56
+ * which is where it belongs, and it costs real space at the end of the scroll
57
+ * instead of needing the page padded to clear it.
58
+ */
59
+ function AppContentFooter({ children, className, el, ...props }) {
60
+ const El = (el ?? 'footer');
61
+ return (jsx(El, { "data-slot": 'app-content-footer', className: cn(s['app-content-footer'], className), ...props, children: children }));
62
+ }
63
+
64
+ export { AppContentFooter, AppContentHeader };
65
+ //# sourceMappingURL=app-content-bands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-content-bands.js","sources":["../../../src/layout/AppContentBands/app-content-bands.tsx"],"sourcesContent":["import cn from 'clsx';\nimport * as React from 'react';\nimport s from './app-content-bands.module.scss';\n\nexport interface AppContentBandProps extends React.HTMLAttributes<HTMLDivElement> {\n /** The element to render. Defaults to `header` / `footer` respectively. */\n el?: React.ElementType<React.HTMLAttributes<HTMLDivElement>>;\n}\n\n/*\n * The header measures itself, so its element has to accept a ref — which the\n * bare `ElementType` union does not promise (it spans every tag, including the\n * ones whose ref is not an HTMLElement).\n */\ntype BandElement = React.ElementType<\n React.HTMLAttributes<HTMLElement> & { ref?: React.Ref<HTMLElement> }\n>;\n\n/**\n * Publish the band's height on the content area, as a CSS custom property.\n *\n * Anything else that sticks to the top of the same scrollport has to clear the\n * header, and its height is not a constant — it grows with a wrapped toolbar,\n * an error line, an environment banner. So it is measured and written where\n * CSS can read it: `--app-content-header-height`, on the nearest content area\n * (or the document, if the band is used outside one).\n *\n * This is the one part of a sticky band that cannot be CSS: a rendered height\n * is a number the stylesheet has no way to ask for.\n */\nfunction usePublishedHeight(\n ref: React.RefObject<HTMLElement | null>,\n property: string,\n enabled: boolean,\n) {\n React.useLayoutEffect(() => {\n const el = ref.current;\n if (!el || !enabled) return undefined;\n\n const target =\n (el.closest('[data-slot=\"app-content\"]') as HTMLElement | null) ??\n document.documentElement;\n\n const write = () => {\n target.style.setProperty(property, `${el.getBoundingClientRect().height}px`);\n };\n\n write();\n const observer = new ResizeObserver(write);\n observer.observe(el);\n return () => {\n observer.disconnect();\n target.style.removeProperty(property);\n };\n }, [ref, property, enabled]);\n}\n\n/**\n * The band at the top of a content area, pinned while the page scrolls.\n *\n * Opaque on purpose: it paints over the content passing beneath it, and a\n * translucent one shows the list sliding through the title.\n */\nexport function AppContentHeader({\n children, className, el, sticky = true, ...props\n}: AppContentBandProps & { sticky?: boolean }) {\n const ref = React.useRef<HTMLElement>(null);\n usePublishedHeight(ref, '--app-content-header-height', sticky);\n const El = (el ?? 'header') as BandElement;\n\n return (\n <El\n ref={ref}\n data-slot={'app-content-header'}\n className={cn(s['app-content-header'], !sticky && s['band-static'], className)}\n {...props}\n >\n {children}\n </El>\n );\n}\n\n/**\n * The band at the foot of a content area — a search field, a toolbar, the\n * action that commits the page.\n *\n * Sticky, not fixed: fixed is measured against the viewport, so in an app with\n * a sidebar the band runs underneath it and has to be inset by hand for every\n * layout the sidebar can be in. Sticky is measured against this content area,\n * which is where it belongs, and it costs real space at the end of the scroll\n * instead of needing the page padded to clear it.\n */\nexport function AppContentFooter({\n children, className, el, ...props\n}: AppContentBandProps) {\n const El = (el ?? 'footer') as React.ElementType<React.HTMLAttributes<HTMLDivElement>>;\n\n return (\n <El\n data-slot={'app-content-footer'}\n className={cn(s['app-content-footer'], className)}\n {...props}\n >\n {children}\n </El>\n );\n}\n"],"names":["_jsx"],"mappings":";;;;;AAkBA;;;;;;;;;;;AAWG;AACH,SAAS,kBAAkB,CACzB,GAAwC,EACxC,QAAgB,EAChB,OAAgB,EAAA;AAEhB,IAAA,KAAK,CAAC,eAAe,CAAC,MAAK;AACzB,QAAA,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO;AACtB,QAAA,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,SAAS;AAErC,QAAA,MAAM,MAAM,GACT,EAAE,CAAC,OAAO,CAAC,2BAA2B,CAAwB;YAC/D,QAAQ,CAAC,eAAe;QAE1B,MAAM,KAAK,GAAG,MAAK;AACjB,YAAA,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAA,EAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC,MAAM,CAAA,EAAA,CAAI,CAAC;AAC9E,QAAA,CAAC;AAED,QAAA,KAAK,EAAE;AACP,QAAA,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,KAAK,CAAC;AAC1C,QAAA,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;AACpB,QAAA,OAAO,MAAK;YACV,QAAQ,CAAC,UAAU,EAAE;AACrB,YAAA,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC;AACvC,QAAA,CAAC;IACH,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC9B;AAEA;;;;;AAKG;SACa,gBAAgB,CAAC,EAC/B,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,KAAK,EACL,EAAA;IAC3C,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAc,IAAI,CAAC;AAC3C,IAAA,kBAAkB,CAAC,GAAG,EAAE,6BAA6B,EAAE,MAAM,CAAC;AAC9D,IAAA,MAAM,EAAE,IAAI,EAAE,IAAI,QAAQ,CAAgB;AAE1C,IAAA,QACEA,GAAA,CAAC,EAAE,EAAA,EACD,GAAG,EAAE,GAAG,EAAA,WAAA,EACG,oBAAoB,EAC/B,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,oBAAoB,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,aAAa,CAAC,EAAE,SAAS,CAAC,KAC1E,KAAK,EAAA,QAAA,EAER,QAAQ,EAAA,CACN;AAET;AAEA;;;;;;;;;AASG;AACG,SAAU,gBAAgB,CAAC,EAC/B,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,KAAK,EACb,EAAA;AACpB,IAAA,MAAM,EAAE,IAAI,EAAE,IAAI,QAAQ,CAA4D;IAEtF,QACEA,IAAC,EAAE,EAAA,EAAA,WAAA,EACU,oBAAoB,EAC/B,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,oBAAoB,CAAC,EAAE,SAAS,CAAC,EAAA,GAC7C,KAAK,EAAA,QAAA,EAER,QAAQ,EAAA,CACN;AAET;;"}
@@ -0,0 +1,6 @@
1
+ import './app-content-bands.css';
2
+
3
+ var s = {"app-content-header":"app-content-bands-module_app-content-header__BUehL","app-content-footer":"app-content-bands-module_app-content-footer__aQGGo","band-static":"app-content-bands-module_band-static__qgY7r"};
4
+
5
+ export { s as default };
6
+ //# sourceMappingURL=app-content-bands.module.scss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-content-bands.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -0,0 +1,2 @@
1
+ export * from './app-content-bands';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/layout/AppContentBands/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,9 @@
1
+ .app-content-footer-module_app-content-footer__B1kjp {
2
+ backdrop-filter: blur(12px);
3
+ background-color: color-mix(in srgb, var(--background-default) 88%, transparent);
4
+ border-top: 1px solid var(--divider);
5
+ flex: 0 0 auto;
6
+ margin-top: auto;
7
+ padding-bottom: env(safe-area-inset-bottom);
8
+ z-index: var(--z-sticky);
9
+ }
@@ -0,0 +1,38 @@
1
+ import * as React from 'react';
2
+ export interface AppContentFooterProps extends React.HTMLAttributes<HTMLDivElement> {
3
+ /** The element to render. Defaults to `footer`. */
4
+ el?: React.ElementType<React.HTMLAttributes<HTMLDivElement>>;
5
+ }
6
+ /**
7
+ * The band at the foot of a content area — a search field, a toolbar, the
8
+ * action that commits the page.
9
+ *
10
+ * ⚠️ It must be a SIBLING of `AppContentMain`, not a child of it:
11
+ *
12
+ * ```tsx
13
+ * <AppContent>
14
+ * <AppSidebarHeader />
15
+ * <AppContentMain>{page}</AppContentMain>
16
+ * <AppContentFooter>{search}</AppContentFooter>
17
+ * </AppContent>
18
+ * ```
19
+ *
20
+ * Nothing here is pinned. `AppContent` is a full-height column and only the
21
+ * middle band scrolls, so the foot of the column IS the foot of the screen and
22
+ * the band stays there by arithmetic rather than by being told to.
23
+ *
24
+ * It was `position: sticky; bottom: 0` inside the scrolling area, and that
25
+ * cannot work however the offsets are tuned: a sticky element travels only
26
+ * within its containing block, and a band that is the LAST child of the page it
27
+ * scrolls with has nothing below it to travel over. It docked on short pages,
28
+ * where there was no scrolling to survive, and scrolled away on long ones.
29
+ *
30
+ * Fixed positioning is the other wrong answer — it is measured against the
31
+ * viewport, so in an app with a sidebar the band runs underneath it and has to
32
+ * be inset by hand for every state the sidebar can be in.
33
+ *
34
+ * There is no matching header band; the shell's header is already a band of the
35
+ * same column, so it is always in view without being told to be.
36
+ */
37
+ export declare function AppContentFooter({ children, className, el, ...props }: AppContentFooterProps): React.JSX.Element;
38
+ //# sourceMappingURL=app-content-footer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-content-footer.d.ts","sourceRoot":"","sources":["../../../src/layout/AppContentFooter/app-content-footer.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,MAAM,WAAW,qBAAsB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACjF,mDAAmD;IACnD,EAAE,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,CAAC;CAC9D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,qBAAqB,qBAY5F"}
@@ -0,0 +1,42 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import cn from 'clsx';
3
+ import s from './app-content-footer.module.scss.js';
4
+
5
+ /**
6
+ * The band at the foot of a content area — a search field, a toolbar, the
7
+ * action that commits the page.
8
+ *
9
+ * ⚠️ It must be a SIBLING of `AppContentMain`, not a child of it:
10
+ *
11
+ * ```tsx
12
+ * <AppContent>
13
+ * <AppSidebarHeader />
14
+ * <AppContentMain>{page}</AppContentMain>
15
+ * <AppContentFooter>{search}</AppContentFooter>
16
+ * </AppContent>
17
+ * ```
18
+ *
19
+ * Nothing here is pinned. `AppContent` is a full-height column and only the
20
+ * middle band scrolls, so the foot of the column IS the foot of the screen and
21
+ * the band stays there by arithmetic rather than by being told to.
22
+ *
23
+ * It was `position: sticky; bottom: 0` inside the scrolling area, and that
24
+ * cannot work however the offsets are tuned: a sticky element travels only
25
+ * within its containing block, and a band that is the LAST child of the page it
26
+ * scrolls with has nothing below it to travel over. It docked on short pages,
27
+ * where there was no scrolling to survive, and scrolled away on long ones.
28
+ *
29
+ * Fixed positioning is the other wrong answer — it is measured against the
30
+ * viewport, so in an app with a sidebar the band runs underneath it and has to
31
+ * be inset by hand for every state the sidebar can be in.
32
+ *
33
+ * There is no matching header band; the shell's header is already a band of the
34
+ * same column, so it is always in view without being told to be.
35
+ */
36
+ function AppContentFooter({ children, className, el, ...props }) {
37
+ const El = (el ?? 'footer');
38
+ return (jsx(El, { "data-slot": 'app-content-footer', className: cn(s['app-content-footer'], className), ...props, children: children }));
39
+ }
40
+
41
+ export { AppContentFooter };
42
+ //# sourceMappingURL=app-content-footer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-content-footer.js","sources":["../../../src/layout/AppContentFooter/app-content-footer.tsx"],"sourcesContent":["import cn from 'clsx';\nimport * as React from 'react';\nimport s from './app-content-footer.module.scss';\n\nexport interface AppContentFooterProps extends React.HTMLAttributes<HTMLDivElement> {\n /** The element to render. Defaults to `footer`. */\n el?: React.ElementType<React.HTMLAttributes<HTMLDivElement>>;\n}\n\n/**\n * The band at the foot of a content area — a search field, a toolbar, the\n * action that commits the page.\n *\n * ⚠️ It must be a SIBLING of `AppContentMain`, not a child of it:\n *\n * ```tsx\n * <AppContent>\n * <AppSidebarHeader />\n * <AppContentMain>{page}</AppContentMain>\n * <AppContentFooter>{search}</AppContentFooter>\n * </AppContent>\n * ```\n *\n * Nothing here is pinned. `AppContent` is a full-height column and only the\n * middle band scrolls, so the foot of the column IS the foot of the screen and\n * the band stays there by arithmetic rather than by being told to.\n *\n * It was `position: sticky; bottom: 0` inside the scrolling area, and that\n * cannot work however the offsets are tuned: a sticky element travels only\n * within its containing block, and a band that is the LAST child of the page it\n * scrolls with has nothing below it to travel over. It docked on short pages,\n * where there was no scrolling to survive, and scrolled away on long ones.\n *\n * Fixed positioning is the other wrong answer — it is measured against the\n * viewport, so in an app with a sidebar the band runs underneath it and has to\n * be inset by hand for every state the sidebar can be in.\n *\n * There is no matching header band; the shell's header is already a band of the\n * same column, so it is always in view without being told to be.\n */\nexport function AppContentFooter({ children, className, el, ...props }: AppContentFooterProps) {\n const El = (el ?? 'footer') as React.ElementType<React.HTMLAttributes<HTMLDivElement>>;\n\n return (\n <El\n data-slot={'app-content-footer'}\n className={cn(s['app-content-footer'], className)}\n {...props}\n >\n {children}\n </El>\n );\n}\n"],"names":["_jsx"],"mappings":";;;;AASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BG;AACG,SAAU,gBAAgB,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,KAAK,EAAyB,EAAA;AAC3F,IAAA,MAAM,EAAE,IAAI,EAAE,IAAI,QAAQ,CAA4D;IAEtF,QACEA,IAAC,EAAE,EAAA,EAAA,WAAA,EACU,oBAAoB,EAC/B,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,oBAAoB,CAAC,EAAE,SAAS,CAAC,EAAA,GAC7C,KAAK,EAAA,QAAA,EAER,QAAQ,EAAA,CACN;AAET;;"}
@@ -0,0 +1,6 @@
1
+ import './app-content-footer.css';
2
+
3
+ var s = {"app-content-footer":"app-content-footer-module_app-content-footer__B1kjp"};
4
+
5
+ export { s as default };
6
+ //# sourceMappingURL=app-content-footer.module.scss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-content-footer.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -0,0 +1,2 @@
1
+ export * from './app-content-footer';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/layout/AppContentFooter/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,6 @@
1
+ .app-content-main-module_app-content-main__5IeB4 {
2
+ flex: 1 1 auto;
3
+ min-height: 0;
4
+ overflow-x: hidden;
5
+ overflow-y: auto;
6
+ }
@@ -0,0 +1,37 @@
1
+ import * as React from 'react';
2
+ export interface AppContentMainProps extends React.HTMLAttributes<HTMLElement> {
3
+ /** The element to render. Defaults to `main`. */
4
+ el?: React.ElementType<React.HTMLAttributes<HTMLElement>>;
5
+ }
6
+ /**
7
+ * The scrolling middle band of a content area.
8
+ *
9
+ * `AppContent` is a column of exactly three bands — header, this, footer — and
10
+ * this is the only one that scrolls. It takes whatever height the other two
11
+ * leave and scrolls inside itself, so the bands above and below it are always
12
+ * on screen without being pinned there.
13
+ *
14
+ * That is why the footer does not need to be sticky, and why a page must not
15
+ * put its footer INSIDE this band hoping `position: sticky; bottom: 0` will
16
+ * dock it. A sticky element can only travel within its containing block, and a
17
+ * band that is the last child of the thing it scrolls in has no room below it
18
+ * to travel — it looks docked on a short page (where nothing scrolls anyway)
19
+ * and scrolls away on a long one, which is the case it was added for.
20
+ *
21
+ * The composition, and the only one that docks a footer:
22
+ *
23
+ * ```tsx
24
+ * <AppContent>
25
+ * <AppSidebarHeader />
26
+ * <AppContentMain>{page}</AppContentMain>
27
+ * <AppContentFooter>{search}</AppContentFooter>
28
+ * </AppContent>
29
+ * ```
30
+ *
31
+ * A sticky band INSIDE the page still works, and now pins to this element
32
+ * rather than to the window — but note that sticky offsets are measured from
33
+ * the scroller's PADDING edge, so a band meant to sit flush against the top of
34
+ * the scrollport has to offset by this element's own padding.
35
+ */
36
+ export declare function AppContentMain({ children, className, el, ...props }: AppContentMainProps): React.JSX.Element;
37
+ //# sourceMappingURL=app-content-main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-content-main.d.ts","sourceRoot":"","sources":["../../../src/layout/AppContentMain/app-content-main.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,MAAM,WAAW,mBAAoB,SAAQ,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC;IAC5E,iDAAiD;IACjD,EAAE,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC;CAC3D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,cAAc,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,mBAAmB,qBAQxF"}
@@ -0,0 +1,41 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import cn from 'clsx';
3
+ import s from './app-content-main.module.scss.js';
4
+
5
+ /**
6
+ * The scrolling middle band of a content area.
7
+ *
8
+ * `AppContent` is a column of exactly three bands — header, this, footer — and
9
+ * this is the only one that scrolls. It takes whatever height the other two
10
+ * leave and scrolls inside itself, so the bands above and below it are always
11
+ * on screen without being pinned there.
12
+ *
13
+ * That is why the footer does not need to be sticky, and why a page must not
14
+ * put its footer INSIDE this band hoping `position: sticky; bottom: 0` will
15
+ * dock it. A sticky element can only travel within its containing block, and a
16
+ * band that is the last child of the thing it scrolls in has no room below it
17
+ * to travel — it looks docked on a short page (where nothing scrolls anyway)
18
+ * and scrolls away on a long one, which is the case it was added for.
19
+ *
20
+ * The composition, and the only one that docks a footer:
21
+ *
22
+ * ```tsx
23
+ * <AppContent>
24
+ * <AppSidebarHeader />
25
+ * <AppContentMain>{page}</AppContentMain>
26
+ * <AppContentFooter>{search}</AppContentFooter>
27
+ * </AppContent>
28
+ * ```
29
+ *
30
+ * A sticky band INSIDE the page still works, and now pins to this element
31
+ * rather than to the window — but note that sticky offsets are measured from
32
+ * the scroller's PADDING edge, so a band meant to sit flush against the top of
33
+ * the scrollport has to offset by this element's own padding.
34
+ */
35
+ function AppContentMain({ children, className, el, ...props }) {
36
+ const El = (el ?? 'main');
37
+ return (jsx(El, { "data-slot": 'app-content-main', className: cn(s['app-content-main'], className), ...props, children: children }));
38
+ }
39
+
40
+ export { AppContentMain };
41
+ //# sourceMappingURL=app-content-main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-content-main.js","sources":["../../../src/layout/AppContentMain/app-content-main.tsx"],"sourcesContent":["import cn from 'clsx';\nimport * as React from 'react';\nimport s from './app-content-main.module.scss';\n\nexport interface AppContentMainProps extends React.HTMLAttributes<HTMLElement> {\n /** The element to render. Defaults to `main`. */\n el?: React.ElementType<React.HTMLAttributes<HTMLElement>>;\n}\n\n/**\n * The scrolling middle band of a content area.\n *\n * `AppContent` is a column of exactly three bands — header, this, footer — and\n * this is the only one that scrolls. It takes whatever height the other two\n * leave and scrolls inside itself, so the bands above and below it are always\n * on screen without being pinned there.\n *\n * That is why the footer does not need to be sticky, and why a page must not\n * put its footer INSIDE this band hoping `position: sticky; bottom: 0` will\n * dock it. A sticky element can only travel within its containing block, and a\n * band that is the last child of the thing it scrolls in has no room below it\n * to travel — it looks docked on a short page (where nothing scrolls anyway)\n * and scrolls away on a long one, which is the case it was added for.\n *\n * The composition, and the only one that docks a footer:\n *\n * ```tsx\n * <AppContent>\n * <AppSidebarHeader />\n * <AppContentMain>{page}</AppContentMain>\n * <AppContentFooter>{search}</AppContentFooter>\n * </AppContent>\n * ```\n *\n * A sticky band INSIDE the page still works, and now pins to this element\n * rather than to the window — but note that sticky offsets are measured from\n * the scroller's PADDING edge, so a band meant to sit flush against the top of\n * the scrollport has to offset by this element's own padding.\n */\nexport function AppContentMain({ children, className, el, ...props }: AppContentMainProps) {\n const El = (el ?? 'main') as React.ElementType<React.HTMLAttributes<HTMLElement>>;\n\n return (\n <El data-slot={'app-content-main'} className={cn(s['app-content-main'], className)} {...props}>\n {children}\n </El>\n );\n}\n"],"names":["_jsx"],"mappings":";;;;AASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BG;AACG,SAAU,cAAc,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,KAAK,EAAuB,EAAA;AACvF,IAAA,MAAM,EAAE,IAAI,EAAE,IAAI,MAAM,CAAyD;IAEjF,QACEA,IAAC,EAAE,EAAA,EAAA,WAAA,EAAY,kBAAkB,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,EAAE,SAAS,CAAC,EAAA,GAAM,KAAK,EAAA,QAAA,EAC1F,QAAQ,EAAA,CACN;AAET;;"}
@@ -0,0 +1,6 @@
1
+ import './app-content-main.css';
2
+
3
+ var s = {"app-content-main":"app-content-main-module_app-content-main__5IeB4"};
4
+
5
+ export { s as default };
6
+ //# sourceMappingURL=app-content-main.module.scss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-content-main.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -0,0 +1,2 @@
1
+ export * from './app-content-main';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/layout/AppContentMain/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import * as React from 'react';
2
3
  import { useSidebar } from '../../hooks/layout/use-sidebar.js';
3
4
  import '../../ui/Alert/alert-context.js';
4
- import * as React from 'react';
5
5
  import '../../ui/Table/table-sort-context.js';
6
6
  import { Row } from '../Row/row.js';
7
7
  import { Link } from '../../navigation/Link/link.js';
@@ -1,7 +1,7 @@
1
1
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
+ import 'react';
2
3
  import { useSidebar } from '../../hooks/layout/use-sidebar.js';
3
4
  import '../../ui/Alert/alert-context.js';
4
- import 'react';
5
5
  import '../../ui/Table/table-sort-context.js';
6
6
  import { useMobileNavigation } from '../../hooks/use-mobile-navigation.js';
7
7
  import { useRouterAdapter } from '../../navigation/Router/router-context.js';
@@ -61,7 +61,7 @@ function AppSidebar({ logo, homeHref = '/dashboard', currentPath = '', linkCompo
61
61
  return (jsxs(Fragment, { children: [jsxs(Sidebar, { "data-slot": 'app-sidebar', collapsible: 'icon', variant: 'inset', children: [jsx(SidebarHeader, { children: jsx(SidebarMenu, { children: jsx(SidebarMenuItem, { children: jsx(SidebarMenuButton, { size: 'lg', asChild: true, children: LinkComp ? (jsx(LinkComp, { href: homeHref, onClick: handleNavigation, children: logo })) : (jsx("a", { href: homeHref, onClick: handleNavigation, children: logo })) }) }) }) }), jsx(SidebarContent, { children: sections.map(section => (jsxs(SidebarGroup, { children: [jsx(SidebarGroupLabel, { children: section.label }), jsx(SidebarMenu, { children: section.items.map(item => {
62
62
  const isActive = item.href === bestMatch;
63
63
  if (section.renderItem) {
64
- return (jsx(SidebarMenuItem, { children: section.renderItem(item, { isActive }) }, item.title));
64
+ return (jsx(SidebarMenuItem, { children: section.renderItem(item, { isActive, onNavigate: handleNavigation }) }, item.title));
65
65
  }
66
66
  return (jsx(SidebarMenuItem, { children: jsx(SidebarMenuButton, { asChild: true, isActive: isActive, tooltip: { children: item.title }, children: jsx(NavLink, { item: item, linkComponent: LinkComp, onNavigate: handleNavigation }) }) }, item.title));
67
67
  }) })] }, section.label))) }), footerItems?.length ? (jsxs(Fragment, { children: [footerSeparator && jsx(Separator, {}), jsx(SidebarFooter, { children: jsx(SidebarMenu, { children: footerItems.map(item => (jsx(SidebarMenuItem, { children: jsx(SidebarMenuButton, { asChild: true, isActive: item.href === bestMatch, tooltip: { children: item.title }, children: jsx(NavLink, { item: item, linkComponent: LinkComp, onNavigate: handleNavigation }) }) }, item.title))) }) })] })) : null] }), children] }));
@@ -1 +1 @@
1
- {"version":3,"file":"app-sidebar.js","sources":["../../../src/layout/AppSidebar/app-sidebar.tsx"],"sourcesContent":["import { useSidebar } from '@constellation/hooks';\nimport { useMobileNavigation } from '@constellation/hooks/use-mobile-navigation';\nimport { useRouterAdapter } from '@constellation/navigation/Router';\nimport { type SidebarNavItem, type SidebarSection } from '@constellation/types';\nimport { Separator } from '@constellation/ui/Separator';\nimport * as React from 'react';\nimport { flushSync } from 'react-dom';\nimport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n} from '../Sidebar';\n\nexport interface AppSidebarProps {\n logo: React.ReactNode;\n homeHref?: string;\n currentPath?: string;\n linkComponent?: React.ElementType;\n sections: SidebarSection[];\n footerItems?: SidebarNavItem[];\n footerSeparator?: boolean;\n children?: React.ReactNode;\n}\n\ntype NavLinkProps = {\n item: SidebarNavItem;\n linkComponent?: React.ElementType;\n onNavigate?: (event: React.MouseEvent<HTMLAnchorElement>) => void;\n} & React.AnchorHTMLAttributes<HTMLAnchorElement>;\n\nfunction NavLink({ item, linkComponent: LinkComp, onNavigate, onClick, ...props }: NavLinkProps) {\n const handleClick = (event: React.MouseEvent<HTMLAnchorElement>) => {\n onClick?.(event);\n if (event.defaultPrevented) {\n return;\n }\n\n onNavigate?.(event);\n };\n\n if (item.href.startsWith('http')) {\n return (\n <a\n href={item.href}\n target={'_blank'}\n rel={'noopener noreferrer'}\n onClick={handleClick}\n {...props}\n >\n {item.icon}\n <span>{item.title}</span>\n <span className={'srOnly'}>(opens in new tab)</span>\n </a>\n );\n }\n\n if (!LinkComp) {\n return (\n <a href={item.href} onClick={handleClick} {...props}>\n {item.icon}\n <span>{item.title}</span>\n </a>\n );\n }\n\n return (\n <LinkComp href={item.href} onClick={handleClick} {...props}>\n {item.icon}\n <span>{item.title}</span>\n </LinkComp>\n );\n}\n\nexport function AppSidebar({\n logo,\n homeHref = '/dashboard',\n currentPath = '',\n linkComponent,\n sections,\n footerItems,\n footerSeparator,\n children,\n}: AppSidebarProps) {\n const { isMobile, openMobile, setOpenMobile } = useSidebar();\n // Falls back to the RouterProvider's link component, so configuring the\n // router once upgrades the whole sidebar without threading a prop here.\n const { linkComponent: adapterLink } = useRouterAdapter();\n const LinkComp = linkComponent ?? adapterLink;\n const cleanupMobileNavigation = useMobileNavigation();\n const allHrefs = [\n ...sections.flatMap(s => s.items.map(i => i.href)),\n ...(footerItems ?? []).map(i => i.href),\n ];\n const bestMatch =\n allHrefs\n .filter(\n href =>\n currentPath === href ||\n currentPath.startsWith(href + '/') ||\n currentPath.startsWith(href + '?'),\n )\n .sort((a, b) => b.length - a.length)[0] ?? '';\n\n const handleNavigation = (event: React.MouseEvent<HTMLAnchorElement>) => {\n if (!isMobile || !openMobile || event.button !== 0) {\n return;\n }\n\n if (event.metaKey || event.altKey || event.ctrlKey || event.shiftKey) {\n return;\n }\n\n const currentTarget = event.currentTarget;\n const target = currentTarget.getAttribute('target');\n if ((target && target.toLowerCase() !== '_self') || currentTarget.hasAttribute('download')) {\n return;\n }\n\n flushSync(() => {\n setOpenMobile(false);\n });\n cleanupMobileNavigation();\n };\n\n return (\n <>\n <Sidebar data-slot={'app-sidebar'} collapsible={'icon'} variant={'inset'}>\n <SidebarHeader>\n <SidebarMenu>\n <SidebarMenuItem>\n <SidebarMenuButton size={'lg'} asChild>\n {LinkComp ? (\n <LinkComp href={homeHref} onClick={handleNavigation}>\n {logo}\n </LinkComp>\n ) : (\n <a href={homeHref} onClick={handleNavigation}>\n {logo}\n </a>\n )}\n </SidebarMenuButton>\n </SidebarMenuItem>\n </SidebarMenu>\n </SidebarHeader>\n <SidebarContent>\n {sections.map(section => (\n <SidebarGroup key={section.label}>\n <SidebarGroupLabel>{section.label}</SidebarGroupLabel>\n <SidebarMenu>\n {section.items.map(item => {\n const isActive = item.href === bestMatch;\n\n if (section.renderItem) {\n return (\n <SidebarMenuItem key={item.title}>\n {section.renderItem(item, { isActive })}\n </SidebarMenuItem>\n );\n }\n\n return (\n <SidebarMenuItem key={item.title}>\n <SidebarMenuButton\n asChild\n isActive={isActive}\n tooltip={{ children: item.title }}\n >\n <NavLink\n item={item}\n linkComponent={LinkComp}\n onNavigate={handleNavigation}\n />\n </SidebarMenuButton>\n </SidebarMenuItem>\n );\n })}\n </SidebarMenu>\n </SidebarGroup>\n ))}\n </SidebarContent>\n {footerItems?.length ? (\n <>\n {footerSeparator && <Separator />}\n <SidebarFooter>\n <SidebarMenu>\n {footerItems.map(item => (\n <SidebarMenuItem key={item.title}>\n <SidebarMenuButton\n asChild\n isActive={item.href === bestMatch}\n tooltip={{ children: item.title }}\n >\n <NavLink item={item} linkComponent={LinkComp} onNavigate={handleNavigation} />\n </SidebarMenuButton>\n </SidebarMenuItem>\n ))}\n </SidebarMenu>\n </SidebarFooter>\n </>\n ) : null}\n </Sidebar>\n {children}\n </>\n );\n}\n"],"names":["_jsxs","_jsx","_Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"app-sidebar.js","sources":["../../../src/layout/AppSidebar/app-sidebar.tsx"],"sourcesContent":["import { useSidebar } from '@constellation/hooks';\nimport { useMobileNavigation } from '@constellation/hooks/use-mobile-navigation';\nimport { useRouterAdapter } from '@constellation/navigation/Router';\nimport { type SidebarNavItem, type SidebarSection } from '@constellation/types';\nimport { Separator } from '@constellation/ui/Separator';\nimport * as React from 'react';\nimport { flushSync } from 'react-dom';\nimport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n} from '../Sidebar';\n\nexport interface AppSidebarProps {\n logo: React.ReactNode;\n homeHref?: string;\n currentPath?: string;\n linkComponent?: React.ElementType;\n sections: SidebarSection[];\n footerItems?: SidebarNavItem[];\n footerSeparator?: boolean;\n children?: React.ReactNode;\n}\n\ntype NavLinkProps = {\n item: SidebarNavItem;\n linkComponent?: React.ElementType;\n onNavigate?: (event: React.MouseEvent<HTMLAnchorElement>) => void;\n} & React.AnchorHTMLAttributes<HTMLAnchorElement>;\n\nfunction NavLink({ item, linkComponent: LinkComp, onNavigate, onClick, ...props }: NavLinkProps) {\n const handleClick = (event: React.MouseEvent<HTMLAnchorElement>) => {\n onClick?.(event);\n if (event.defaultPrevented) {\n return;\n }\n\n onNavigate?.(event);\n };\n\n if (item.href.startsWith('http')) {\n return (\n <a\n href={item.href}\n target={'_blank'}\n rel={'noopener noreferrer'}\n onClick={handleClick}\n {...props}\n >\n {item.icon}\n <span>{item.title}</span>\n <span className={'srOnly'}>(opens in new tab)</span>\n </a>\n );\n }\n\n if (!LinkComp) {\n return (\n <a href={item.href} onClick={handleClick} {...props}>\n {item.icon}\n <span>{item.title}</span>\n </a>\n );\n }\n\n return (\n <LinkComp href={item.href} onClick={handleClick} {...props}>\n {item.icon}\n <span>{item.title}</span>\n </LinkComp>\n );\n}\n\nexport function AppSidebar({\n logo,\n homeHref = '/dashboard',\n currentPath = '',\n linkComponent,\n sections,\n footerItems,\n footerSeparator,\n children,\n}: AppSidebarProps) {\n const { isMobile, openMobile, setOpenMobile } = useSidebar();\n // Falls back to the RouterProvider's link component, so configuring the\n // router once upgrades the whole sidebar without threading a prop here.\n const { linkComponent: adapterLink } = useRouterAdapter();\n const LinkComp = linkComponent ?? adapterLink;\n const cleanupMobileNavigation = useMobileNavigation();\n const allHrefs = [\n ...sections.flatMap(s => s.items.map(i => i.href)),\n ...(footerItems ?? []).map(i => i.href),\n ];\n const bestMatch =\n allHrefs\n .filter(\n href =>\n currentPath === href ||\n currentPath.startsWith(href + '/') ||\n currentPath.startsWith(href + '?'),\n )\n .sort((a, b) => b.length - a.length)[0] ?? '';\n\n const handleNavigation = (event: React.MouseEvent<HTMLAnchorElement>) => {\n if (!isMobile || !openMobile || event.button !== 0) {\n return;\n }\n\n if (event.metaKey || event.altKey || event.ctrlKey || event.shiftKey) {\n return;\n }\n\n const currentTarget = event.currentTarget;\n const target = currentTarget.getAttribute('target');\n if ((target && target.toLowerCase() !== '_self') || currentTarget.hasAttribute('download')) {\n return;\n }\n\n flushSync(() => {\n setOpenMobile(false);\n });\n cleanupMobileNavigation();\n };\n\n return (\n <>\n <Sidebar data-slot={'app-sidebar'} collapsible={'icon'} variant={'inset'}>\n <SidebarHeader>\n <SidebarMenu>\n <SidebarMenuItem>\n <SidebarMenuButton size={'lg'} asChild>\n {LinkComp ? (\n <LinkComp href={homeHref} onClick={handleNavigation}>\n {logo}\n </LinkComp>\n ) : (\n <a href={homeHref} onClick={handleNavigation}>\n {logo}\n </a>\n )}\n </SidebarMenuButton>\n </SidebarMenuItem>\n </SidebarMenu>\n </SidebarHeader>\n <SidebarContent>\n {sections.map(section => (\n <SidebarGroup key={section.label}>\n <SidebarGroupLabel>{section.label}</SidebarGroupLabel>\n <SidebarMenu>\n {section.items.map(item => {\n const isActive = item.href === bestMatch;\n\n if (section.renderItem) {\n return (\n <SidebarMenuItem key={item.title}>\n {section.renderItem(item, { isActive, onNavigate: handleNavigation })}\n </SidebarMenuItem>\n );\n }\n\n return (\n <SidebarMenuItem key={item.title}>\n <SidebarMenuButton\n asChild\n isActive={isActive}\n tooltip={{ children: item.title }}\n >\n <NavLink\n item={item}\n linkComponent={LinkComp}\n onNavigate={handleNavigation}\n />\n </SidebarMenuButton>\n </SidebarMenuItem>\n );\n })}\n </SidebarMenu>\n </SidebarGroup>\n ))}\n </SidebarContent>\n {footerItems?.length ? (\n <>\n {footerSeparator && <Separator />}\n <SidebarFooter>\n <SidebarMenu>\n {footerItems.map(item => (\n <SidebarMenuItem key={item.title}>\n <SidebarMenuButton\n asChild\n isActive={item.href === bestMatch}\n tooltip={{ children: item.title }}\n >\n <NavLink item={item} linkComponent={LinkComp} onNavigate={handleNavigation} />\n </SidebarMenuButton>\n </SidebarMenuItem>\n ))}\n </SidebarMenu>\n </SidebarFooter>\n </>\n ) : null}\n </Sidebar>\n {children}\n </>\n );\n}\n"],"names":["_jsxs","_jsx","_Fragment"],"mappings":"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"}
@@ -1,13 +1,12 @@
1
1
  .app-sidebar-header-module_app-sidebar-header__h-3UU {
2
2
  border-bottom: 1px solid var(--sidebar-border);
3
3
  flex-shrink: 0;
4
- height: var(--size-8);
5
- padding: 0 var(--size-1);
4
+ padding: 0 var(--size-0-5);
6
5
  transition: all var(--sidebar-transition-duration) var(--sidebar-transition-ease);
7
6
  }
8
7
  @media (min-width: 769px) {
9
8
  .app-sidebar-header-module_app-sidebar-header__h-3UU {
10
- padding: 0 var(--size-2);
9
+ padding: 0 var(--size-1);
11
10
  }
12
11
  }
13
12
  .app-sidebar-header-module_app-sidebar-header__h-3UU {
@@ -1,7 +1,7 @@
1
1
  import { type NavUserProps } from '@constellation/navigation/NavUser';
2
2
  import { type BreadcrumbItemData } from '@constellation/types';
3
3
  import * as React from 'react';
4
- export interface AppSidebarHeaderProps {
4
+ export interface AppSidebarHeaderProps extends React.HTMLAttributes<HTMLElement> {
5
5
  breadcrumbs?: BreadcrumbItemData[];
6
6
  /** Omit to hide the account menu (e.g. on signed-out chrome). */
7
7
  user?: NavUserProps['user'];
@@ -9,5 +9,13 @@ export interface AppSidebarHeaderProps {
9
9
  /** Extra controls between the appearance toggle and the account menu. */
10
10
  actions?: React.ReactNode;
11
11
  }
12
- export declare function AppSidebarHeader({ breadcrumbs, user, userMenu, actions, }: AppSidebarHeaderProps): React.JSX.Element;
12
+ /**
13
+ * The header band of a content area.
14
+ *
15
+ * `className` and any other DOM props reach the `header` element. They used to
16
+ * be dropped on the floor — the component took four named props and spread
17
+ * nothing — so a caller passing `className` got no error and no class, and
18
+ * spent the difference looking at its own stylesheet.
19
+ */
20
+ export declare function AppSidebarHeader({ breadcrumbs, user, userMenu, actions, className, ...props }: AppSidebarHeaderProps): React.JSX.Element;
13
21
  //# sourceMappingURL=app-sidebar-header.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"app-sidebar-header.d.ts","sourceRoot":"","sources":["../../../src/layout/AppSidebarHeader/app-sidebar-header.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAW,KAAK,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAE/E,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,MAAM,WAAW,qBAAqB;IACpC,WAAW,CAAC,EAAE,kBAAkB,EAAE,CAAC;IACnC,iEAAiE;IACjE,IAAI,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IAC5B,QAAQ,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACtC,yEAAyE;IACzE,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,WAAgB,EAChB,IAAI,EACJ,QAAQ,EACR,OAAO,GACR,EAAE,qBAAqB,qBA0BvB"}
1
+ {"version":3,"file":"app-sidebar-header.d.ts","sourceRoot":"","sources":["../../../src/layout/AppSidebarHeader/app-sidebar-header.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAW,KAAK,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAE/E,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,MAAM,WAAW,qBAAsB,SAAQ,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC;IAC9E,WAAW,CAAC,EAAE,kBAAkB,EAAE,CAAC;IACnC,iEAAiE;IACjE,IAAI,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IAC5B,QAAQ,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACtC,yEAAyE;IACzE,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,WAAgB,EAChB,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,SAAS,EACT,GAAG,KAAK,EACT,EAAE,qBAAqB,qBA4BvB"}
@@ -1,47 +1,27 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import 'react';
2
3
  import { useSidebar } from '../../hooks/layout/use-sidebar.js';
3
4
  import '../../ui/Alert/alert-context.js';
4
- import 'react';
5
5
  import '../../ui/Table/table-sort-context.js';
6
6
  import { Row } from '../Row/row.js';
7
7
  import { SidebarTrigger } from '../Sidebar/sidebar.js';
8
8
  import { Breadcrumbs } from '../../navigation/Breadcrumbs/breadcrumbs.js';
9
9
  import { NavUser } from '../../navigation/NavUser/nav-user.js';
10
- import { AppearanceToggleDropdown } from '../../settings/AppearanceDropdown/appearance-dropdown.js';
11
- import '../../ui/Alert/alert.js';
12
- import 'react-dom';
13
- import '../../ui/Alert/alert.css';
14
- import '../../ui/Avatar/avatar.js';
15
- import '../../ui/Button/button.js';
16
- import '../../ui/Chip/chip.js';
17
- import '../../ui/CodeBlock/code-block.js';
18
10
  import cn from 'clsx';
19
- import '../../ui/DevIndicator/dev-indicator.css';
20
- import '../../ui/Dialog/dialog.js';
21
- import '../../ui/EmptyState/empty-state.js';
22
- import '../../ui/Icon/icon.js';
23
- import '../../ui/List/list.js';
24
- import '../../ui/Pagination/pagination.js';
25
- import '../../ui/ProgressBar/progress-bar.js';
26
- import '../../ui/Separator/separator.js';
27
- import '../../ui/StatCard/stat-card.js';
28
- import '../../ui/StatusDot/status-dot.js';
29
- import '../../ui/StatusDot/status-dot-variants.js';
30
- import '../../ui/StepProgress/step-progress.js';
31
- import '../../ui/Switch/switch.js';
32
- import '../../ui/Table/table.js';
33
- import '../../ui/TableActionCell/table-action-cell.js';
34
- import '../../ui/TableToolbar/table-toolbar.js';
35
- import '../../ui/Toggle/toggle.js';
36
- import '../../ui/ToggleGroup/toggle-group.js';
37
- import '../../ui/Tooltip/tooltip.js';
38
- import 'lucide-react';
39
- import '../../settings/AppearanceTabs/appearance-tabs.css';
40
11
  import s from './app-sidebar-header.module.scss.js';
12
+ import { AppearanceToggleDropdown } from '../../settings/AppearanceDropdown/appearance-dropdown.js';
41
13
 
42
- function AppSidebarHeader({ breadcrumbs = [], user, userMenu, actions, }) {
14
+ /**
15
+ * The header band of a content area.
16
+ *
17
+ * `className` and any other DOM props reach the `header` element. They used to
18
+ * be dropped on the floor — the component took four named props and spread
19
+ * nothing — so a caller passing `className` got no error and no class, and
20
+ * spent the difference looking at its own stylesheet.
21
+ */
22
+ function AppSidebarHeader({ breadcrumbs = [], user, userMenu, actions, className, ...props }) {
43
23
  const { state } = useSidebar();
44
- return (jsxs(Row, { "data-slot": 'app-sidebar-header', el: 'header', align: 'center', gap: 1, justify: 'space-between', className: cn(s['app-sidebar-header'], state === 'collapsed' && s['sidebar-header-collapsed']), children: [jsxs(Row, { gap: 1, children: [jsx(SidebarTrigger, {}), jsx(Breadcrumbs, { breadcrumbs: breadcrumbs })] }), jsxs(Row, { gap: 1, align: 'center', children: [actions, jsx(AppearanceToggleDropdown, {}), user && jsx(NavUser, { user: user, ...userMenu })] })] }));
24
+ return (jsxs(Row, { "data-slot": 'app-sidebar-header', el: 'header', align: 'center', gap: 1, justify: 'space-between', className: cn(s['app-sidebar-header'], state === 'collapsed' && s['sidebar-header-collapsed'], className), ...props, children: [jsxs(Row, { gap: 1, children: [jsx(SidebarTrigger, {}), jsx(Breadcrumbs, { breadcrumbs: breadcrumbs })] }), jsxs(Row, { gap: 1, align: 'center', children: [actions, jsx(AppearanceToggleDropdown, {}), user && jsx(NavUser, { user: user, ...userMenu })] })] }));
45
25
  }
46
26
 
47
27
  export { AppSidebarHeader };
@@ -1 +1 @@
1
- {"version":3,"file":"app-sidebar-header.js","sources":["../../../src/layout/AppSidebarHeader/app-sidebar-header.tsx"],"sourcesContent":["import { useSidebar } from '@constellation/hooks';\nimport { Row } from '@constellation/layout/Row';\nimport { SidebarTrigger } from '@constellation/layout/Sidebar';\nimport { Breadcrumbs } from '@constellation/navigation/Breadcrumbs';\nimport { NavUser, type NavUserProps } from '@constellation/navigation/NavUser';\nimport { AppearanceToggleDropdown } from '@constellation/settings';\nimport { type BreadcrumbItemData } from '@constellation/types';\nimport cn from 'clsx';\nimport * as React from 'react';\nimport s from './app-sidebar-header.module.scss';\n\nexport interface AppSidebarHeaderProps {\n breadcrumbs?: BreadcrumbItemData[];\n /** Omit to hide the account menu (e.g. on signed-out chrome). */\n user?: NavUserProps['user'];\n userMenu?: Omit<NavUserProps, 'user'>;\n /** Extra controls between the appearance toggle and the account menu. */\n actions?: React.ReactNode;\n}\n\nexport function AppSidebarHeader({\n breadcrumbs = [],\n user,\n userMenu,\n actions,\n}: AppSidebarHeaderProps) {\n const { state } = useSidebar();\n\n return (\n <Row\n data-slot={'app-sidebar-header'}\n el={'header'}\n align={'center'}\n gap={1}\n justify={'space-between'}\n className={cn(\n s['app-sidebar-header'],\n state === 'collapsed' && s['sidebar-header-collapsed'],\n )}\n >\n <Row gap={1}>\n <SidebarTrigger />\n <Breadcrumbs breadcrumbs={breadcrumbs} />\n </Row>\n <Row gap={1} align={'center'}>\n {actions}\n <AppearanceToggleDropdown />\n {user && <NavUser user={user} {...userMenu} />}\n </Row>\n </Row>\n );\n}\n"],"names":["_jsxs","_jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoBM,SAAU,gBAAgB,CAAC,EAC/B,WAAW,GAAG,EAAE,EAChB,IAAI,EACJ,QAAQ,EACR,OAAO,GACe,EAAA;AACtB,IAAA,MAAM,EAAE,KAAK,EAAE,GAAG,UAAU,EAAE;IAE9B,QACEA,KAAC,GAAG,EAAA,EAAA,WAAA,EACS,oBAAoB,EAC/B,EAAE,EAAE,QAAQ,EACZ,KAAK,EAAE,QAAQ,EACf,GAAG,EAAE,CAAC,EACN,OAAO,EAAE,eAAe,EACxB,SAAS,EAAE,EAAE,CACX,CAAC,CAAC,oBAAoB,CAAC,EACvB,KAAK,KAAK,WAAW,IAAI,CAAC,CAAC,0BAA0B,CAAC,CACvD,aAEDA,IAAA,CAAC,GAAG,IAAC,GAAG,EAAE,CAAC,EAAA,QAAA,EAAA,CACTC,GAAA,CAAC,cAAc,EAAA,EAAA,CAAG,EAClBA,IAAC,WAAW,EAAA,EAAC,WAAW,EAAE,WAAW,GAAI,CAAA,EAAA,CACrC,EACND,KAAC,GAAG,EAAA,EAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAA,QAAA,EAAA,CACzB,OAAO,EACRC,GAAA,CAAC,wBAAwB,KAAG,EAC3B,IAAI,IAAIA,GAAA,CAAC,OAAO,IAAC,IAAI,EAAE,IAAI,EAAA,GAAM,QAAQ,GAAI,CAAA,EAAA,CAC1C,CAAA,EAAA,CACF;AAEV;;"}
1
+ {"version":3,"file":"app-sidebar-header.js","sources":["../../../src/layout/AppSidebarHeader/app-sidebar-header.tsx"],"sourcesContent":["import { useSidebar } from '@constellation/hooks';\nimport { Row } from '@constellation/layout/Row';\nimport { SidebarTrigger } from '@constellation/layout/Sidebar';\nimport { Breadcrumbs } from '@constellation/navigation/Breadcrumbs';\nimport { NavUser, type NavUserProps } from '@constellation/navigation/NavUser';\nimport { AppearanceToggleDropdown } from '@constellation/settings';\nimport { type BreadcrumbItemData } from '@constellation/types';\nimport cn from 'clsx';\nimport * as React from 'react';\nimport s from './app-sidebar-header.module.scss';\n\nexport interface AppSidebarHeaderProps extends React.HTMLAttributes<HTMLElement> {\n breadcrumbs?: BreadcrumbItemData[];\n /** Omit to hide the account menu (e.g. on signed-out chrome). */\n user?: NavUserProps['user'];\n userMenu?: Omit<NavUserProps, 'user'>;\n /** Extra controls between the appearance toggle and the account menu. */\n actions?: React.ReactNode;\n}\n\n/**\n * The header band of a content area.\n *\n * `className` and any other DOM props reach the `header` element. They used to\n * be dropped on the floor — the component took four named props and spread\n * nothing — so a caller passing `className` got no error and no class, and\n * spent the difference looking at its own stylesheet.\n */\nexport function AppSidebarHeader({\n breadcrumbs = [],\n user,\n userMenu,\n actions,\n className,\n ...props\n}: AppSidebarHeaderProps) {\n const { state } = useSidebar();\n\n return (\n <Row\n data-slot={'app-sidebar-header'}\n el={'header'}\n align={'center'}\n gap={1}\n justify={'space-between'}\n className={cn(\n s['app-sidebar-header'],\n state === 'collapsed' && s['sidebar-header-collapsed'],\n className,\n )}\n {...props}\n >\n <Row gap={1}>\n <SidebarTrigger />\n <Breadcrumbs breadcrumbs={breadcrumbs} />\n </Row>\n <Row gap={1} align={'center'}>\n {actions}\n <AppearanceToggleDropdown />\n {user && <NavUser user={user} {...userMenu} />}\n </Row>\n </Row>\n );\n}\n"],"names":["_jsxs","_jsx"],"mappings":";;;;;;;;;;;;;AAoBA;;;;;;;AAOG;SACa,gBAAgB,CAAC,EAC/B,WAAW,GAAG,EAAE,EAChB,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,SAAS,EACT,GAAG,KAAK,EACc,EAAA;AACtB,IAAA,MAAM,EAAE,KAAK,EAAE,GAAG,UAAU,EAAE;IAE9B,QACEA,KAAC,GAAG,EAAA,EAAA,WAAA,EACS,oBAAoB,EAC/B,EAAE,EAAE,QAAQ,EACZ,KAAK,EAAE,QAAQ,EACf,GAAG,EAAE,CAAC,EACN,OAAO,EAAE,eAAe,EACxB,SAAS,EAAE,EAAE,CACX,CAAC,CAAC,oBAAoB,CAAC,EACvB,KAAK,KAAK,WAAW,IAAI,CAAC,CAAC,0BAA0B,CAAC,EACtD,SAAS,CACV,EAAA,GACG,KAAK,EAAA,QAAA,EAAA,CAETA,IAAA,CAAC,GAAG,EAAA,EAAC,GAAG,EAAE,CAAC,aACTC,GAAA,CAAC,cAAc,KAAG,EAClBA,GAAA,CAAC,WAAW,EAAA,EAAC,WAAW,EAAE,WAAW,EAAA,CAAI,IACrC,EACND,IAAA,CAAC,GAAG,EAAA,EAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAA,QAAA,EAAA,CACzB,OAAO,EACRC,GAAA,CAAC,wBAAwB,EAAA,EAAA,CAAG,EAC3B,IAAI,IAAIA,GAAA,CAAC,OAAO,EAAA,EAAC,IAAI,EAAE,IAAI,EAAA,GAAM,QAAQ,EAAA,CAAI,CAAA,EAAA,CAC1C,CAAA,EAAA,CACF;AAEV;;"}
@@ -13,7 +13,10 @@
13
13
  }
14
14
 
15
15
  @media (prefers-reduced-motion: reduce) {
16
- .collapse-module_collapse__KvKxi {
16
+ :root:not([data-motion=full]) .collapse-module_collapse__KvKxi {
17
17
  transition: none;
18
18
  }
19
+ }
20
+ :root[data-motion=reduced] .collapse-module_collapse__KvKxi {
21
+ transition: none;
19
22
  }
@@ -5,9 +5,15 @@
5
5
  .column-module_column__wLC8A.column-module_gap-0__AAHBe {
6
6
  gap: 0;
7
7
  }
8
+ .column-module_column__wLC8A.column-module_gap-0-5__htvan {
9
+ gap: var(--size-0-5);
10
+ }
8
11
  .column-module_column__wLC8A.column-module_gap-1__uPPtg {
9
12
  gap: var(--size-1);
10
13
  }
14
+ .column-module_column__wLC8A.column-module_gap-1-5__hokuy {
15
+ gap: var(--size-1-5);
16
+ }
11
17
  .column-module_column__wLC8A.column-module_gap-2__sc1tv {
12
18
  gap: var(--size-2);
13
19
  }
@@ -1 +1 @@
1
- {"version":3,"file":"column.d.ts","sourceRoot":"","sources":["../../../src/layout/Column/column.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CA+BxC,CAAC"}
1
+ {"version":3,"file":"column.d.ts","sourceRoot":"","sources":["../../../src/layout/Column/column.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CAiCxC,CAAC"}
@@ -4,7 +4,9 @@ import s from './column.module.scss.js';
4
4
 
5
5
  const Column = ({ children, className, style, el, gap = 0, full = false, fullHeight = false, align, flex, ...props }) => {
6
6
  const Component = (el ?? 'div');
7
- const gapClass = gap ? s[`gap-${gap}`] : undefined;
7
+ // `0.5` -> `gap-0-5`: a dot is not valid in a class name, so the numeric
8
+ // prop is sanitised here rather than making callers write the string.
9
+ const gapClass = gap ? s[`gap-${String(gap).replace('.', '-')}`] : undefined;
8
10
  const flexClass = flex ? s[`flex-${flex}`] : undefined;
9
11
  const rootClassName = cn(className, s.column, gapClass, full && s['full-width'], fullHeight && s.full, align && s[`align-${align}`], flexClass);
10
12
  return (jsx(Component, { "data-slot": 'column', style: style, className: rootClassName, ...props, children: children }));