@lidofinance/lido-app-ui 1.9.0 → 1.10.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 (278) hide show
  1. package/README.md +30 -1
  2. package/dist/README.md +30 -1
  3. package/dist/cjs/breadcrumbs/Breadcrumbs.cjs +92 -0
  4. package/dist/cjs/breadcrumbs/Breadcrumbs.cjs.map +1 -0
  5. package/dist/cjs/breadcrumbs/Breadcrumbs.module.css.cjs +6 -0
  6. package/dist/cjs/breadcrumbs/Breadcrumbs.module.css.cjs.map +1 -0
  7. package/dist/cjs/divider/Divider.cjs +26 -0
  8. package/dist/cjs/divider/Divider.cjs.map +1 -0
  9. package/dist/cjs/divider/Divider.module.css.cjs +6 -0
  10. package/dist/cjs/divider/Divider.module.css.cjs.map +1 -0
  11. package/dist/cjs/grid/Grid.cjs +47 -0
  12. package/dist/cjs/grid/Grid.cjs.map +1 -0
  13. package/dist/cjs/grid/Grid.module.css.cjs +6 -0
  14. package/dist/cjs/grid/Grid.module.css.cjs.map +1 -0
  15. package/dist/cjs/grid/GridItem.cjs +39 -0
  16. package/dist/cjs/grid/GridItem.cjs.map +1 -0
  17. package/dist/cjs/grid/GridItem.module.css.cjs +6 -0
  18. package/dist/cjs/grid/GridItem.module.css.cjs.map +1 -0
  19. package/dist/cjs/header/Header.cjs +31 -0
  20. package/dist/cjs/header/Header.cjs.map +1 -0
  21. package/dist/cjs/header/Header.module.css.cjs +6 -0
  22. package/dist/cjs/header/Header.module.css.cjs.map +1 -0
  23. package/dist/cjs/header/HeaderNav.cjs +69 -0
  24. package/dist/cjs/header/HeaderNav.cjs.map +1 -0
  25. package/dist/cjs/header/HeaderNav.module.css.cjs +6 -0
  26. package/dist/cjs/header/HeaderNav.module.css.cjs.map +1 -0
  27. package/dist/cjs/hidden/Hidden.cjs +25 -0
  28. package/dist/cjs/hidden/Hidden.cjs.map +1 -0
  29. package/dist/cjs/hidden/Hidden.module.css.cjs +6 -0
  30. package/dist/cjs/hidden/Hidden.module.css.cjs.map +1 -0
  31. package/dist/cjs/hooks/Portal.cjs +57 -0
  32. package/dist/cjs/hooks/Portal.cjs.map +1 -0
  33. package/dist/cjs/hooks/overlayStack.cjs +26 -0
  34. package/dist/cjs/hooks/overlayStack.cjs.map +1 -0
  35. package/dist/cjs/hooks/useBodyScrollLock.cjs +50 -0
  36. package/dist/cjs/hooks/useBodyScrollLock.cjs.map +1 -0
  37. package/dist/cjs/hooks/useEscape.cjs +25 -0
  38. package/dist/cjs/hooks/useEscape.cjs.map +1 -0
  39. package/dist/cjs/hooks/useFocusTrap.cjs +66 -0
  40. package/dist/cjs/hooks/useFocusTrap.cjs.map +1 -0
  41. package/dist/cjs/hooks/useIsomorphicLayoutEffect.cjs +10 -0
  42. package/dist/cjs/hooks/useIsomorphicLayoutEffect.cjs.map +1 -0
  43. package/dist/cjs/hooks/useOutsideClick.cjs +15 -13
  44. package/dist/cjs/hooks/useOutsideClick.cjs.map +1 -1
  45. package/dist/cjs/icon-button/IconButton.cjs +5 -2
  46. package/dist/cjs/icon-button/IconButton.cjs.map +1 -1
  47. package/dist/cjs/icon-button/IconButton.module.css.cjs +1 -1
  48. package/dist/cjs/index.cjs +26 -0
  49. package/dist/cjs/index.cjs.map +1 -1
  50. package/dist/cjs/index.css +3 -3
  51. package/dist/cjs/link-provider/Anchor.cjs +48 -0
  52. package/dist/cjs/link-provider/Anchor.cjs.map +1 -0
  53. package/dist/cjs/link-provider/LinkProvider.cjs +29 -0
  54. package/dist/cjs/link-provider/LinkProvider.cjs.map +1 -0
  55. package/dist/cjs/logo/Logo.cjs +84 -0
  56. package/dist/cjs/logo/Logo.cjs.map +1 -0
  57. package/dist/cjs/logo/Logo.module.css.cjs +6 -0
  58. package/dist/cjs/logo/Logo.module.css.cjs.map +1 -0
  59. package/dist/cjs/modal/Modal.cjs +36 -29
  60. package/dist/cjs/modal/Modal.cjs.map +1 -1
  61. package/dist/cjs/nav-link/NavLink.cjs +44 -0
  62. package/dist/cjs/nav-link/NavLink.cjs.map +1 -0
  63. package/dist/cjs/nav-link/NavLink.module.css.cjs +6 -0
  64. package/dist/cjs/nav-link/NavLink.module.css.cjs.map +1 -0
  65. package/dist/cjs/notification/Notification.cjs +20 -4
  66. package/dist/cjs/notification/Notification.cjs.map +1 -1
  67. package/dist/cjs/notification/Notification.module.css.cjs +1 -1
  68. package/dist/cjs/popover/Popover.cjs +136 -0
  69. package/dist/cjs/popover/Popover.cjs.map +1 -0
  70. package/dist/cjs/popover/Popover.module.css.cjs +6 -0
  71. package/dist/cjs/popover/Popover.module.css.cjs.map +1 -0
  72. package/dist/cjs/segmented-control/SegmentedControl.cjs +2 -1
  73. package/dist/cjs/segmented-control/SegmentedControl.cjs.map +1 -1
  74. package/dist/cjs/segmented-control/SegmentedControlCard.cjs +2 -1
  75. package/dist/cjs/segmented-control/SegmentedControlCard.cjs.map +1 -1
  76. package/dist/cjs/small-card/SmallCard.cjs +2 -1
  77. package/dist/cjs/small-card/SmallCard.cjs.map +1 -1
  78. package/dist/cjs/stack/Stack.cjs +41 -0
  79. package/dist/cjs/stack/Stack.cjs.map +1 -0
  80. package/dist/cjs/stack/Stack.module.css.cjs +6 -0
  81. package/dist/cjs/stack/Stack.module.css.cjs.map +1 -0
  82. package/dist/cjs/tabs/Tabs.cjs +2 -1
  83. package/dist/cjs/tabs/Tabs.cjs.map +1 -1
  84. package/dist/cjs/text-link/TextLink.cjs +2 -1
  85. package/dist/cjs/text-link/TextLink.cjs.map +1 -1
  86. package/dist/cjs/theme-switcher/ThemeSwitcher.cjs +39 -0
  87. package/dist/cjs/theme-switcher/ThemeSwitcher.cjs.map +1 -0
  88. package/dist/cjs/token-selector/TokenSelector.cjs +3 -3
  89. package/dist/cjs/token-selector/TokenSelector.cjs.map +1 -1
  90. package/dist/cjs/tooltip/Tooltip.cjs +2 -1
  91. package/dist/cjs/tooltip/Tooltip.cjs.map +1 -1
  92. package/dist/cjs/utils/ActionElement.cjs +41 -0
  93. package/dist/cjs/utils/ActionElement.cjs.map +1 -0
  94. package/dist/cjs/utils/responsive.cjs +67 -0
  95. package/dist/cjs/utils/responsive.cjs.map +1 -0
  96. package/dist/esm/breadcrumbs/Breadcrumbs.mjs +88 -0
  97. package/dist/esm/breadcrumbs/Breadcrumbs.mjs.map +1 -0
  98. package/dist/esm/breadcrumbs/Breadcrumbs.module.css.mjs +4 -0
  99. package/dist/esm/breadcrumbs/Breadcrumbs.module.css.mjs.map +1 -0
  100. package/dist/esm/divider/Divider.mjs +22 -0
  101. package/dist/esm/divider/Divider.mjs.map +1 -0
  102. package/dist/esm/divider/Divider.module.css.mjs +4 -0
  103. package/dist/esm/divider/Divider.module.css.mjs.map +1 -0
  104. package/dist/esm/grid/Grid.mjs +43 -0
  105. package/dist/esm/grid/Grid.mjs.map +1 -0
  106. package/dist/esm/grid/Grid.module.css.mjs +4 -0
  107. package/dist/esm/grid/Grid.module.css.mjs.map +1 -0
  108. package/dist/esm/grid/GridItem.mjs +35 -0
  109. package/dist/esm/grid/GridItem.mjs.map +1 -0
  110. package/dist/esm/grid/GridItem.module.css.mjs +4 -0
  111. package/dist/esm/grid/GridItem.module.css.mjs.map +1 -0
  112. package/dist/esm/header/Header.mjs +27 -0
  113. package/dist/esm/header/Header.mjs.map +1 -0
  114. package/dist/esm/header/Header.module.css.mjs +4 -0
  115. package/dist/esm/header/Header.module.css.mjs.map +1 -0
  116. package/dist/esm/header/HeaderNav.mjs +65 -0
  117. package/dist/esm/header/HeaderNav.mjs.map +1 -0
  118. package/dist/esm/header/HeaderNav.module.css.mjs +4 -0
  119. package/dist/esm/header/HeaderNav.module.css.mjs.map +1 -0
  120. package/dist/esm/hidden/Hidden.mjs +21 -0
  121. package/dist/esm/hidden/Hidden.mjs.map +1 -0
  122. package/dist/esm/hidden/Hidden.module.css.mjs +4 -0
  123. package/dist/esm/hidden/Hidden.module.css.mjs.map +1 -0
  124. package/dist/esm/hooks/Portal.mjs +53 -0
  125. package/dist/esm/hooks/Portal.mjs.map +1 -0
  126. package/dist/esm/hooks/overlayStack.mjs +22 -0
  127. package/dist/esm/hooks/overlayStack.mjs.map +1 -0
  128. package/dist/esm/hooks/useBodyScrollLock.mjs +46 -0
  129. package/dist/esm/hooks/useBodyScrollLock.mjs.map +1 -0
  130. package/dist/esm/hooks/useEscape.mjs +21 -0
  131. package/dist/esm/hooks/useEscape.mjs.map +1 -0
  132. package/dist/esm/hooks/useFocusTrap.mjs +62 -0
  133. package/dist/esm/hooks/useFocusTrap.mjs.map +1 -0
  134. package/dist/esm/hooks/useIsomorphicLayoutEffect.mjs +6 -0
  135. package/dist/esm/hooks/useIsomorphicLayoutEffect.mjs.map +1 -0
  136. package/dist/esm/hooks/useOutsideClick.mjs +16 -14
  137. package/dist/esm/hooks/useOutsideClick.mjs.map +1 -1
  138. package/dist/esm/icon-button/IconButton.mjs +5 -2
  139. package/dist/esm/icon-button/IconButton.mjs.map +1 -1
  140. package/dist/esm/icon-button/IconButton.module.css.mjs +1 -1
  141. package/dist/esm/index.css +3 -3
  142. package/dist/esm/index.mjs +13 -0
  143. package/dist/esm/index.mjs.map +1 -1
  144. package/dist/esm/link-provider/Anchor.mjs +44 -0
  145. package/dist/esm/link-provider/Anchor.mjs.map +1 -0
  146. package/dist/esm/link-provider/LinkProvider.mjs +24 -0
  147. package/dist/esm/link-provider/LinkProvider.mjs.map +1 -0
  148. package/dist/esm/logo/Logo.mjs +80 -0
  149. package/dist/esm/logo/Logo.mjs.map +1 -0
  150. package/dist/esm/logo/Logo.module.css.mjs +4 -0
  151. package/dist/esm/logo/Logo.module.css.mjs.map +1 -0
  152. package/dist/esm/modal/Modal.mjs +38 -31
  153. package/dist/esm/modal/Modal.mjs.map +1 -1
  154. package/dist/esm/nav-link/NavLink.mjs +40 -0
  155. package/dist/esm/nav-link/NavLink.mjs.map +1 -0
  156. package/dist/esm/nav-link/NavLink.module.css.mjs +4 -0
  157. package/dist/esm/nav-link/NavLink.module.css.mjs.map +1 -0
  158. package/dist/esm/notification/Notification.mjs +20 -4
  159. package/dist/esm/notification/Notification.mjs.map +1 -1
  160. package/dist/esm/notification/Notification.module.css.mjs +1 -1
  161. package/dist/esm/popover/Popover.mjs +132 -0
  162. package/dist/esm/popover/Popover.mjs.map +1 -0
  163. package/dist/esm/popover/Popover.module.css.mjs +4 -0
  164. package/dist/esm/popover/Popover.module.css.mjs.map +1 -0
  165. package/dist/esm/segmented-control/SegmentedControl.mjs +3 -2
  166. package/dist/esm/segmented-control/SegmentedControl.mjs.map +1 -1
  167. package/dist/esm/segmented-control/SegmentedControlCard.mjs +3 -2
  168. package/dist/esm/segmented-control/SegmentedControlCard.mjs.map +1 -1
  169. package/dist/esm/small-card/SmallCard.mjs +2 -1
  170. package/dist/esm/small-card/SmallCard.mjs.map +1 -1
  171. package/dist/esm/stack/Stack.mjs +37 -0
  172. package/dist/esm/stack/Stack.mjs.map +1 -0
  173. package/dist/esm/stack/Stack.module.css.mjs +4 -0
  174. package/dist/esm/stack/Stack.module.css.mjs.map +1 -0
  175. package/dist/esm/tabs/Tabs.mjs +3 -2
  176. package/dist/esm/tabs/Tabs.mjs.map +1 -1
  177. package/dist/esm/text-link/TextLink.mjs +2 -1
  178. package/dist/esm/text-link/TextLink.mjs.map +1 -1
  179. package/dist/esm/theme-switcher/ThemeSwitcher.mjs +35 -0
  180. package/dist/esm/theme-switcher/ThemeSwitcher.mjs.map +1 -0
  181. package/dist/esm/token-selector/TokenSelector.mjs +3 -3
  182. package/dist/esm/token-selector/TokenSelector.mjs.map +1 -1
  183. package/dist/esm/tooltip/Tooltip.mjs +3 -2
  184. package/dist/esm/tooltip/Tooltip.mjs.map +1 -1
  185. package/dist/esm/utils/ActionElement.mjs +37 -0
  186. package/dist/esm/utils/ActionElement.mjs.map +1 -0
  187. package/dist/esm/utils/responsive.mjs +58 -0
  188. package/dist/esm/utils/responsive.mjs.map +1 -0
  189. package/dist/index.css +3 -3
  190. package/dist/styles/breakpoints.css +6 -0
  191. package/dist/types/breadcrumbs/Breadcrumbs.d.ts +11 -0
  192. package/dist/types/breadcrumbs/Breadcrumbs.d.ts.map +1 -0
  193. package/dist/types/breadcrumbs/index.d.ts +3 -0
  194. package/dist/types/breadcrumbs/index.d.ts.map +1 -0
  195. package/dist/types/colors/colorTokens.d.ts.map +1 -1
  196. package/dist/types/divider/Divider.d.ts +10 -0
  197. package/dist/types/divider/Divider.d.ts.map +1 -0
  198. package/dist/types/divider/index.d.ts +3 -0
  199. package/dist/types/divider/index.d.ts.map +1 -0
  200. package/dist/types/grid/Grid.d.ts +31 -0
  201. package/dist/types/grid/Grid.d.ts.map +1 -0
  202. package/dist/types/grid/GridItem.d.ts +16 -0
  203. package/dist/types/grid/GridItem.d.ts.map +1 -0
  204. package/dist/types/grid/index.d.ts +5 -0
  205. package/dist/types/grid/index.d.ts.map +1 -0
  206. package/dist/types/header/Header.d.ts +9 -0
  207. package/dist/types/header/Header.d.ts.map +1 -0
  208. package/dist/types/header/HeaderNav.d.ts +4 -0
  209. package/dist/types/header/HeaderNav.d.ts.map +1 -0
  210. package/dist/types/header/index.d.ts +5 -0
  211. package/dist/types/header/index.d.ts.map +1 -0
  212. package/dist/types/hidden/Hidden.d.ts +11 -0
  213. package/dist/types/hidden/Hidden.d.ts.map +1 -0
  214. package/dist/types/hidden/index.d.ts +3 -0
  215. package/dist/types/hidden/index.d.ts.map +1 -0
  216. package/dist/types/hooks/Portal.d.ts +12 -0
  217. package/dist/types/hooks/Portal.d.ts.map +1 -0
  218. package/dist/types/hooks/index.d.ts +9 -0
  219. package/dist/types/hooks/index.d.ts.map +1 -0
  220. package/dist/types/hooks/overlayStack.d.ts +7 -0
  221. package/dist/types/hooks/overlayStack.d.ts.map +1 -0
  222. package/dist/types/hooks/useBodyScrollLock.d.ts +3 -0
  223. package/dist/types/hooks/useBodyScrollLock.d.ts.map +1 -0
  224. package/dist/types/hooks/useEscape.d.ts +3 -0
  225. package/dist/types/hooks/useEscape.d.ts.map +1 -0
  226. package/dist/types/hooks/useFocusTrap.d.ts +10 -0
  227. package/dist/types/hooks/useFocusTrap.d.ts.map +1 -0
  228. package/dist/types/hooks/useIsomorphicLayoutEffect.d.ts +3 -0
  229. package/dist/types/hooks/useIsomorphicLayoutEffect.d.ts.map +1 -0
  230. package/dist/types/hooks/useOutsideClick.d.ts +2 -2
  231. package/dist/types/hooks/useOutsideClick.d.ts.map +1 -1
  232. package/dist/types/icon-button/IconButton.d.ts +11 -3
  233. package/dist/types/icon-button/IconButton.d.ts.map +1 -1
  234. package/dist/types/index.d.ts +12 -0
  235. package/dist/types/index.d.ts.map +1 -1
  236. package/dist/types/link-provider/Anchor.d.ts +4 -0
  237. package/dist/types/link-provider/Anchor.d.ts.map +1 -0
  238. package/dist/types/link-provider/LinkProvider.d.ts +17 -0
  239. package/dist/types/link-provider/LinkProvider.d.ts.map +1 -0
  240. package/dist/types/link-provider/index.d.ts +3 -0
  241. package/dist/types/link-provider/index.d.ts.map +1 -0
  242. package/dist/types/logo/Logo.d.ts +13 -0
  243. package/dist/types/logo/Logo.d.ts.map +1 -0
  244. package/dist/types/logo/index.d.ts +3 -0
  245. package/dist/types/logo/index.d.ts.map +1 -0
  246. package/dist/types/modal/Modal.d.ts +23 -1
  247. package/dist/types/modal/Modal.d.ts.map +1 -1
  248. package/dist/types/nav-link/NavLink.d.ts +12 -0
  249. package/dist/types/nav-link/NavLink.d.ts.map +1 -0
  250. package/dist/types/nav-link/index.d.ts +3 -0
  251. package/dist/types/nav-link/index.d.ts.map +1 -0
  252. package/dist/types/notification/Notification.d.ts +15 -2
  253. package/dist/types/notification/Notification.d.ts.map +1 -1
  254. package/dist/types/popover/Popover.d.ts +21 -0
  255. package/dist/types/popover/Popover.d.ts.map +1 -0
  256. package/dist/types/popover/index.d.ts +3 -0
  257. package/dist/types/popover/index.d.ts.map +1 -0
  258. package/dist/types/segmented-control/SegmentedControl.d.ts.map +1 -1
  259. package/dist/types/segmented-control/SegmentedControlCard.d.ts.map +1 -1
  260. package/dist/types/small-card/SmallCard.d.ts.map +1 -1
  261. package/dist/types/stack/Stack.d.ts +25 -0
  262. package/dist/types/stack/Stack.d.ts.map +1 -0
  263. package/dist/types/stack/index.d.ts +3 -0
  264. package/dist/types/stack/index.d.ts.map +1 -0
  265. package/dist/types/tabs/Tabs.d.ts.map +1 -1
  266. package/dist/types/text-link/TextLink.d.ts.map +1 -1
  267. package/dist/types/theme-switcher/ThemeSwitcher.d.ts +5 -0
  268. package/dist/types/theme-switcher/ThemeSwitcher.d.ts.map +1 -0
  269. package/dist/types/theme-switcher/index.d.ts +3 -0
  270. package/dist/types/theme-switcher/index.d.ts.map +1 -0
  271. package/dist/types/tooltip/Tooltip.d.ts.map +1 -1
  272. package/dist/types/utils/ActionElement.d.ts +10 -0
  273. package/dist/types/utils/ActionElement.d.ts.map +1 -0
  274. package/dist/types/utils/index.d.ts +5 -0
  275. package/dist/types/utils/index.d.ts.map +1 -0
  276. package/dist/types/utils/responsive.d.ts +27 -0
  277. package/dist/types/utils/responsive.d.ts.map +1 -0
  278. package/package.json +2 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ActionElement.cjs","sources":["../../../src/utils/ActionElement.tsx"],"sourcesContent":["import {\n forwardRef,\n type AnchorHTMLAttributes,\n type ButtonHTMLAttributes,\n type ForwardedRef,\n} from 'react'\n\nimport { Anchor } from '../link-provider/Anchor'\n\nexport type ActionElementProps =\n | (AnchorHTMLAttributes<HTMLAnchorElement> & {\n href: string\n disabled?: boolean\n })\n | (ButtonHTMLAttributes<HTMLButtonElement> & { href?: undefined })\n\n/** Renders `<a>` when `href` is set, otherwise `<button type='button'>`. */\nexport const ActionElement = forwardRef<\n HTMLAnchorElement | HTMLButtonElement,\n ActionElementProps\n>((props, ref) => {\n if (props.href !== undefined) {\n const { href, disabled, onClick, tabIndex, ...rest } = props\n return (\n <Anchor\n ref={ref as ForwardedRef<HTMLAnchorElement>}\n {...rest}\n href={disabled ? undefined : href}\n aria-disabled={disabled ? 'true' : rest['aria-disabled']}\n tabIndex={disabled ? -1 : tabIndex}\n onClick={disabled ? undefined : onClick}\n />\n )\n }\n\n const { type = 'button', ...rest } = props\n return (\n <button\n ref={ref as ForwardedRef<HTMLButtonElement>}\n type={type}\n {...rest}\n />\n )\n})\n\nActionElement.displayName = 'ActionElement'\n"],"names":["ActionElement","forwardRef","props","ref","href","undefined","disabled","onClick","tabIndex","rest","_jsx","Anchor","type","displayName"],"mappings":";;;;;;;;AAgBA;AACO,MAAMA,aAAa,gBAAGC,gBAAU,CAGrC,CAACC,KAAK,EAAEC,GAAG,KAAK;AAChB,EAAA,IAAID,KAAK,CAACE,IAAI,KAAKC,SAAS,EAAE;IAC5B,MAAM;MAAED,IAAI;MAAEE,QAAQ;MAAEC,OAAO;MAAEC,QAAQ;MAAE,GAAGC,IAAAA;AAAK,KAAC,GAAGP,KAAK,CAAA;IAC5D,oBACEQ,cAAA,CAACC,aAAM,EAAA;AACLR,MAAAA,GAAG,EAAEA,GAAuC;AAAA,MAAA,GACxCM,IAAI;AACRL,MAAAA,IAAI,EAAEE,QAAQ,GAAGD,SAAS,GAAGD,IAAK;AAClC,MAAA,eAAA,EAAeE,QAAQ,GAAG,MAAM,GAAGG,IAAI,CAAC,eAAe,CAAE;AACzDD,MAAAA,QAAQ,EAAEF,QAAQ,GAAG,CAAC,CAAC,GAAGE,QAAS;AACnCD,MAAAA,OAAO,EAAED,QAAQ,GAAGD,SAAS,GAAGE,OAAAA;AAAQ,KACzC,CAAC,CAAA;AAEN,GAAA;EAEA,MAAM;AAAEK,IAAAA,IAAI,GAAG,QAAQ;IAAE,GAAGH,IAAAA;AAAK,GAAC,GAAGP,KAAK,CAAA;AAC1C,EAAA,oBACEQ,cAAA,CAAA,QAAA,EAAA;AACEP,IAAAA,GAAG,EAAEA,GAAuC;AAC5CS,IAAAA,IAAI,EAAEA,IAAK;IAAA,GACPH,IAAAA;AAAI,GACT,CAAC,CAAA;AAEN,CAAC,EAAC;AAEFT,aAAa,CAACa,WAAW,GAAG,eAAe;;;;"}
@@ -0,0 +1,67 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+
5
+ const breakpoints = ['lg', 'ml', 'md', 'sm', 'xs', 'xxs'];
6
+ const capitalize = value => value.charAt(0).toUpperCase() + value.slice(1);
7
+ const spaceToCss = space => `${space}px`;
8
+ const toKebab = value => value.replace(/[A-Z]/g, char => `-${char.toLowerCase()}`);
9
+
10
+ /**
11
+ * Turns a responsive prop into inline `--local-<prop>[-<bp>]` vars plus the
12
+ * `<prop><Bp>` module classes that gate them; the base var is read by the root class.
13
+ */
14
+ const getResponsiveProps = (prop, value, toCss, styles) => {
15
+ const style = {};
16
+ const className = [];
17
+ const values = typeof value === 'object' && value !== null ? value : {
18
+ base: value
19
+ };
20
+ const varName = `--local-${toKebab(prop)}`;
21
+ if (values.base !== undefined) style[varName] = toCss(values.base);
22
+ for (const bp of breakpoints) {
23
+ const item = values[bp];
24
+ if (item === undefined) continue;
25
+ style[`${varName}-${bp}`] = toCss(item);
26
+ const cls = styles[`${prop}${capitalize(bp)}`];
27
+ if (cls) className.push(cls);
28
+ }
29
+ return {
30
+ style: style,
31
+ className
32
+ };
33
+ };
34
+ const toObject = value => typeof value === 'object' && value !== null ? value : {
35
+ base: value
36
+ };
37
+
38
+ /** Merges per key; `b` wins over `a`. */
39
+ const mergeResponsive = (a, b) => {
40
+ if (a === undefined && b === undefined) return undefined;
41
+ return {
42
+ ...(a === undefined ? {} : toObject(a)),
43
+ ...(b === undefined ? {} : toObject(b))
44
+ };
45
+ };
46
+
47
+ /** Turns a responsive prop into inline `--local-<prop>[-<bp>]` vars, for roots that declare a per-breakpoint fallback chain. */
48
+ const responsiveVars = (prop, value, toCss) => {
49
+ if (value === undefined) return {};
50
+ const values = toObject(value);
51
+ const varName = `--local-${toKebab(prop)}`;
52
+ const style = {};
53
+ if (values.base !== undefined) style[varName] = toCss(values.base);
54
+ for (const bp of breakpoints) {
55
+ const item = values[bp];
56
+ if (item !== undefined) style[`${varName}-${bp}`] = toCss(item);
57
+ }
58
+ return style;
59
+ };
60
+
61
+ exports.breakpoints = breakpoints;
62
+ exports.capitalize = capitalize;
63
+ exports.getResponsiveProps = getResponsiveProps;
64
+ exports.mergeResponsive = mergeResponsive;
65
+ exports.responsiveVars = responsiveVars;
66
+ exports.spaceToCss = spaceToCss;
67
+ //# sourceMappingURL=responsive.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"responsive.cjs","sources":["../../../src/utils/responsive.ts"],"sourcesContent":["import type { CSSProperties } from 'react'\n\nexport const breakpoints = ['lg', 'ml', 'md', 'sm', 'xs', 'xxs'] as const\nexport type Breakpoint = (typeof breakpoints)[number]\n\ntype ResponsiveObject<T> = { base?: T } & Partial<Record<Breakpoint, T>>\n\n/** Desktop-first: `base` applies everywhere, breakpoint keys apply at that width and below. */\nexport type Responsive<T> = T | ResponsiveObject<T>\n\n/** Spacing scale in px. */\nexport const spaces = [0, 2, 4, 8, 12, 16, 20, 24, 32, 40, 52] as const\nexport type Space = (typeof spaces)[number]\n\nexport const capitalize = (value: string) =>\n value.charAt(0).toUpperCase() + value.slice(1)\n\nexport const spaceToCss = (space: Space) => `${space}px`\n\nconst toKebab = (value: string) =>\n value.replace(/[A-Z]/g, (char) => `-${char.toLowerCase()}`)\n\n/**\n * Turns a responsive prop into inline `--local-<prop>[-<bp>]` vars plus the\n * `<prop><Bp>` module classes that gate them; the base var is read by the root class.\n */\nexport const getResponsiveProps = <T>(\n prop: string,\n value: Responsive<T> | undefined,\n toCss: (value: T) => string,\n styles: Record<string, string>,\n) => {\n const style: Record<string, string> = {}\n const className: string[] = []\n\n const values = (\n typeof value === 'object' && value !== null ? value : { base: value }\n ) as ResponsiveObject<T>\n const varName = `--local-${toKebab(prop)}`\n\n if (values.base !== undefined) style[varName] = toCss(values.base)\n\n for (const bp of breakpoints) {\n const item = values[bp]\n if (item === undefined) continue\n style[`${varName}-${bp}`] = toCss(item)\n const cls = styles[`${prop}${capitalize(bp)}`]\n if (cls) className.push(cls)\n }\n\n return { style: style as CSSProperties, className }\n}\n\nconst toObject = <T>(value: Responsive<T>) =>\n (typeof value === 'object' && value !== null\n ? value\n : { base: value }) as ResponsiveObject<T>\n\n/** Merges per key; `b` wins over `a`. */\nexport const mergeResponsive = <T>(\n a?: Responsive<T>,\n b?: Responsive<T>,\n): Responsive<T> | undefined => {\n if (a === undefined && b === undefined) return undefined\n return {\n ...(a === undefined ? {} : toObject(a)),\n ...(b === undefined ? {} : toObject(b)),\n }\n}\n\n/** Turns a responsive prop into inline `--local-<prop>[-<bp>]` vars, for roots that declare a per-breakpoint fallback chain. */\nexport const responsiveVars = <T>(\n prop: string,\n value: Responsive<T> | undefined,\n toCss: (value: T) => string,\n): CSSProperties => {\n if (value === undefined) return {}\n\n const values = toObject(value)\n const varName = `--local-${toKebab(prop)}`\n const style: Record<string, string> = {}\n\n if (values.base !== undefined) style[varName] = toCss(values.base)\n\n for (const bp of breakpoints) {\n const item = values[bp]\n if (item !== undefined) style[`${varName}-${bp}`] = toCss(item)\n }\n\n return style as CSSProperties\n}\n"],"names":["breakpoints","capitalize","value","charAt","toUpperCase","slice","spaceToCss","space","toKebab","replace","char","toLowerCase","getResponsiveProps","prop","toCss","styles","style","className","values","base","varName","undefined","bp","item","cls","push","toObject","mergeResponsive","a","b","responsiveVars"],"mappings":";;;;AAEaA,MAAAA,WAAW,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAU;AAYlE,MAAMC,UAAU,GAAIC,KAAa,IACtCA,KAAK,CAACC,MAAM,CAAC,CAAC,CAAC,CAACC,WAAW,EAAE,GAAGF,KAAK,CAACG,KAAK,CAAC,CAAC,EAAC;MAEnCC,UAAU,GAAIC,KAAY,IAAK,CAAA,EAAGA,KAAK,CAAI,EAAA,EAAA;AAExD,MAAMC,OAAO,GAAIN,KAAa,IAC5BA,KAAK,CAACO,OAAO,CAAC,QAAQ,EAAGC,IAAI,IAAK,IAAIA,IAAI,CAACC,WAAW,EAAE,EAAE,CAAC,CAAA;;AAE7D;AACA;AACA;AACA;AACO,MAAMC,kBAAkB,GAAGA,CAChCC,IAAY,EACZX,KAAgC,EAChCY,KAA2B,EAC3BC,MAA8B,KAC3B;EACH,MAAMC,KAA6B,GAAG,EAAE,CAAA;EACxC,MAAMC,SAAmB,GAAG,EAAE,CAAA;AAE9B,EAAA,MAAMC,MAAM,GACV,OAAOhB,KAAK,KAAK,QAAQ,IAAIA,KAAK,KAAK,IAAI,GAAGA,KAAK,GAAG;AAAEiB,IAAAA,IAAI,EAAEjB,KAAAA;GACxC,CAAA;AACxB,EAAA,MAAMkB,OAAO,GAAG,CAAA,QAAA,EAAWZ,OAAO,CAACK,IAAI,CAAC,CAAE,CAAA,CAAA;AAE1C,EAAA,IAAIK,MAAM,CAACC,IAAI,KAAKE,SAAS,EAAEL,KAAK,CAACI,OAAO,CAAC,GAAGN,KAAK,CAACI,MAAM,CAACC,IAAI,CAAC,CAAA;AAElE,EAAA,KAAK,MAAMG,EAAE,IAAItB,WAAW,EAAE;AAC5B,IAAA,MAAMuB,IAAI,GAAGL,MAAM,CAACI,EAAE,CAAC,CAAA;IACvB,IAAIC,IAAI,KAAKF,SAAS,EAAE,SAAA;IACxBL,KAAK,CAAC,CAAGI,EAAAA,OAAO,CAAIE,CAAAA,EAAAA,EAAE,CAAE,CAAA,CAAC,GAAGR,KAAK,CAACS,IAAI,CAAC,CAAA;AACvC,IAAA,MAAMC,GAAG,GAAGT,MAAM,CAAC,CAAGF,EAAAA,IAAI,CAAGZ,EAAAA,UAAU,CAACqB,EAAE,CAAC,CAAA,CAAE,CAAC,CAAA;AAC9C,IAAA,IAAIE,GAAG,EAAEP,SAAS,CAACQ,IAAI,CAACD,GAAG,CAAC,CAAA;AAC9B,GAAA;EAEA,OAAO;AAAER,IAAAA,KAAK,EAAEA,KAAsB;AAAEC,IAAAA,SAAAA;GAAW,CAAA;AACrD,EAAC;AAED,MAAMS,QAAQ,GAAOxB,KAAoB,IACtC,OAAOA,KAAK,KAAK,QAAQ,IAAIA,KAAK,KAAK,IAAI,GACxCA,KAAK,GACL;AAAEiB,EAAAA,IAAI,EAAEjB,KAAAA;AAAM,CAAyB,CAAA;;AAE7C;MACayB,eAAe,GAAGA,CAC7BC,CAAiB,EACjBC,CAAiB,KACa;EAC9B,IAAID,CAAC,KAAKP,SAAS,IAAIQ,CAAC,KAAKR,SAAS,EAAE,OAAOA,SAAS,CAAA;EACxD,OAAO;IACL,IAAIO,CAAC,KAAKP,SAAS,GAAG,EAAE,GAAGK,QAAQ,CAACE,CAAC,CAAC,CAAC;IACvC,IAAIC,CAAC,KAAKR,SAAS,GAAG,EAAE,GAAGK,QAAQ,CAACG,CAAC,CAAC,CAAA;GACvC,CAAA;AACH,EAAC;;AAED;AACO,MAAMC,cAAc,GAAGA,CAC5BjB,IAAY,EACZX,KAAgC,EAChCY,KAA2B,KACT;AAClB,EAAA,IAAIZ,KAAK,KAAKmB,SAAS,EAAE,OAAO,EAAE,CAAA;AAElC,EAAA,MAAMH,MAAM,GAAGQ,QAAQ,CAACxB,KAAK,CAAC,CAAA;AAC9B,EAAA,MAAMkB,OAAO,GAAG,CAAA,QAAA,EAAWZ,OAAO,CAACK,IAAI,CAAC,CAAE,CAAA,CAAA;EAC1C,MAAMG,KAA6B,GAAG,EAAE,CAAA;AAExC,EAAA,IAAIE,MAAM,CAACC,IAAI,KAAKE,SAAS,EAAEL,KAAK,CAACI,OAAO,CAAC,GAAGN,KAAK,CAACI,MAAM,CAACC,IAAI,CAAC,CAAA;AAElE,EAAA,KAAK,MAAMG,EAAE,IAAItB,WAAW,EAAE;AAC5B,IAAA,MAAMuB,IAAI,GAAGL,MAAM,CAACI,EAAE,CAAC,CAAA;AACvB,IAAA,IAAIC,IAAI,KAAKF,SAAS,EAAEL,KAAK,CAAC,CAAGI,EAAAA,OAAO,CAAIE,CAAAA,EAAAA,EAAE,EAAE,CAAC,GAAGR,KAAK,CAACS,IAAI,CAAC,CAAA;AACjE,GAAA;AAEA,EAAA,OAAOP,KAAK,CAAA;AACd;;;;;;;;;"}
@@ -0,0 +1,88 @@
1
+ import { useRef, useLayoutEffect, useEffect } from 'react';
2
+ import cn from 'classnames';
3
+ import styles from './Breadcrumbs.module.css.mjs';
4
+ import { jsx, jsxs } from 'react/jsx-runtime';
5
+ import { ActionElement } from '../utils/ActionElement.mjs';
6
+ import { IconChevronRight } from '../icons/components/base/IconChevronRight.mjs';
7
+
8
+ const syncFade = list => {
9
+ list.toggleAttribute('data-fade-start', list.scrollLeft > 0);
10
+ list.toggleAttribute('data-fade-end', list.scrollLeft < list.scrollWidth - list.clientWidth - 1);
11
+ };
12
+ const syncTitle = e => {
13
+ const el = e.target.closest('[data-label]');
14
+ if (!el) return;
15
+ if (el.scrollWidth > el.clientWidth) el.setAttribute('title', el.textContent ?? '');else el.removeAttribute('title');
16
+ };
17
+ const Breadcrumbs = _ref => {
18
+ let {
19
+ items,
20
+ className,
21
+ ...rest
22
+ } = _ref;
23
+ const listRef = useRef(null);
24
+ useLayoutEffect(() => {
25
+ const list = listRef.current;
26
+ if (!list) return;
27
+ list.scrollLeft = list.scrollWidth;
28
+ syncFade(list);
29
+ }, [items]);
30
+ useEffect(() => {
31
+ const list = listRef.current;
32
+ if (!list || typeof ResizeObserver === 'undefined') return;
33
+ const observer = new ResizeObserver(() => syncFade(list));
34
+ observer.observe(list);
35
+ return () => observer.disconnect();
36
+ }, []);
37
+ return /*#__PURE__*/jsx("nav", {
38
+ "aria-label": "Breadcrumb",
39
+ className: cn(styles.nav, className),
40
+ ...rest,
41
+ children: /*#__PURE__*/jsx("ol", {
42
+ ref: listRef,
43
+ className: styles.list,
44
+ onScroll: e => syncFade(e.currentTarget),
45
+ onPointerOver: syncTitle,
46
+ children: items.map((_ref2, index) => {
47
+ let {
48
+ label,
49
+ ...itemProps
50
+ } = _ref2;
51
+ const labelAttrs = itemProps.title === undefined ? {
52
+ 'data-label': ''
53
+ } : {};
54
+ if (index === items.length - 1) {
55
+ return /*#__PURE__*/jsx("li", {
56
+ className: styles.item,
57
+ children: /*#__PURE__*/jsx("span", {
58
+ "aria-current": "page",
59
+ className: cn(styles.label, styles.current),
60
+ ...labelAttrs,
61
+ children: label
62
+ })
63
+ }, index);
64
+ }
65
+ const interactive = itemProps.href !== undefined || itemProps.onClick !== undefined;
66
+ return /*#__PURE__*/jsxs("li", {
67
+ className: styles.item,
68
+ children: [interactive ? /*#__PURE__*/jsx(ActionElement, {
69
+ ...itemProps,
70
+ ...labelAttrs,
71
+ className: cn(styles.label, styles.link, itemProps.className),
72
+ children: label
73
+ }) : /*#__PURE__*/jsx("span", {
74
+ className: styles.label,
75
+ ...labelAttrs,
76
+ children: label
77
+ }), /*#__PURE__*/jsx(IconChevronRight, {
78
+ className: styles.separator,
79
+ "aria-hidden": "true"
80
+ })]
81
+ }, index);
82
+ })
83
+ })
84
+ });
85
+ };
86
+
87
+ export { Breadcrumbs };
88
+ //# sourceMappingURL=Breadcrumbs.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Breadcrumbs.mjs","sources":["../../../src/breadcrumbs/Breadcrumbs.tsx"],"sourcesContent":["import { useEffect, useLayoutEffect, useRef } from 'react'\nimport type { HTMLAttributes, PointerEvent, ReactNode } from 'react'\n\nimport cn from 'classnames'\n\nimport { IconChevronRight } from '../icons'\nimport { ActionElement, type ActionElementProps } from '../utils'\nimport styles from './Breadcrumbs.module.css'\n\nexport type BreadcrumbItem = ActionElementProps & {\n label: ReactNode\n children?: never\n}\n\nexport type BreadcrumbsProps = HTMLAttributes<HTMLElement> & {\n items: BreadcrumbItem[]\n}\n\nconst syncFade = (list: HTMLElement) => {\n list.toggleAttribute('data-fade-start', list.scrollLeft > 0)\n list.toggleAttribute(\n 'data-fade-end',\n list.scrollLeft < list.scrollWidth - list.clientWidth - 1,\n )\n}\n\nconst syncTitle = (e: PointerEvent<HTMLElement>) => {\n const el = (e.target as Element).closest('[data-label]')\n if (!el) return\n if (el.scrollWidth > el.clientWidth)\n el.setAttribute('title', el.textContent ?? '')\n else el.removeAttribute('title')\n}\n\nexport const Breadcrumbs = ({\n items,\n className,\n ...rest\n}: BreadcrumbsProps) => {\n const listRef = useRef<HTMLOListElement>(null)\n\n useLayoutEffect(() => {\n const list = listRef.current\n if (!list) return\n list.scrollLeft = list.scrollWidth\n syncFade(list)\n }, [items])\n\n useEffect(() => {\n const list = listRef.current\n if (!list || typeof ResizeObserver === 'undefined') return\n const observer = new ResizeObserver(() => syncFade(list))\n observer.observe(list)\n return () => observer.disconnect()\n }, [])\n\n return (\n <nav\n aria-label='Breadcrumb'\n className={cn(styles.nav, className)}\n {...rest}\n >\n <ol\n ref={listRef}\n className={styles.list}\n onScroll={(e) => syncFade(e.currentTarget)}\n onPointerOver={syncTitle}\n >\n {items.map(({ label, ...itemProps }, index) => {\n const labelAttrs =\n itemProps.title === undefined ? { 'data-label': '' } : {}\n if (index === items.length - 1) {\n return (\n <li key={index} className={styles.item}>\n <span\n aria-current='page'\n className={cn(styles.label, styles.current)}\n {...labelAttrs}\n >\n {label}\n </span>\n </li>\n )\n }\n const interactive =\n itemProps.href !== undefined || itemProps.onClick !== undefined\n return (\n <li key={index} className={styles.item}>\n {interactive ? (\n <ActionElement\n {...itemProps}\n {...labelAttrs}\n className={cn(styles.label, styles.link, itemProps.className)}\n >\n {label}\n </ActionElement>\n ) : (\n <span className={styles.label} {...labelAttrs}>\n {label}\n </span>\n )}\n <IconChevronRight\n className={styles.separator}\n aria-hidden='true'\n />\n </li>\n )\n })}\n </ol>\n </nav>\n )\n}\n"],"names":["syncFade","list","toggleAttribute","scrollLeft","scrollWidth","clientWidth","syncTitle","e","el","target","closest","setAttribute","textContent","removeAttribute","Breadcrumbs","_ref","items","className","rest","listRef","useRef","useLayoutEffect","current","useEffect","ResizeObserver","observer","observe","disconnect","_jsx","cn","styles","nav","children","ref","onScroll","currentTarget","onPointerOver","map","_ref2","index","label","itemProps","labelAttrs","title","undefined","length","item","interactive","href","onClick","_jsxs","ActionElement","link","IconChevronRight","separator"],"mappings":";;;;;;;AAkBA,MAAMA,QAAQ,GAAIC,IAAiB,IAAK;EACtCA,IAAI,CAACC,eAAe,CAAC,iBAAiB,EAAED,IAAI,CAACE,UAAU,GAAG,CAAC,CAAC,CAAA;AAC5DF,EAAAA,IAAI,CAACC,eAAe,CAClB,eAAe,EACfD,IAAI,CAACE,UAAU,GAAGF,IAAI,CAACG,WAAW,GAAGH,IAAI,CAACI,WAAW,GAAG,CAC1D,CAAC,CAAA;AACH,CAAC,CAAA;AAED,MAAMC,SAAS,GAAIC,CAA4B,IAAK;EAClD,MAAMC,EAAE,GAAID,CAAC,CAACE,MAAM,CAAaC,OAAO,CAAC,cAAc,CAAC,CAAA;EACxD,IAAI,CAACF,EAAE,EAAE,OAAA;EACT,IAAIA,EAAE,CAACJ,WAAW,GAAGI,EAAE,CAACH,WAAW,EACjCG,EAAE,CAACG,YAAY,CAAC,OAAO,EAAEH,EAAE,CAACI,WAAW,IAAI,EAAE,CAAC,CAC3CJ,KAAAA,EAAE,CAACK,eAAe,CAAC,OAAO,CAAC,CAAA;AAClC,CAAC,CAAA;AAEYC,MAAAA,WAAW,GAAGC,IAAA,IAIH;EAAA,IAJI;IAC1BC,KAAK;IACLC,SAAS;IACT,GAAGC,IAAAA;AACa,GAAC,GAAAH,IAAA,CAAA;AACjB,EAAA,MAAMI,OAAO,GAAGC,MAAM,CAAmB,IAAI,CAAC,CAAA;AAE9CC,EAAAA,eAAe,CAAC,MAAM;AACpB,IAAA,MAAMpB,IAAI,GAAGkB,OAAO,CAACG,OAAO,CAAA;IAC5B,IAAI,CAACrB,IAAI,EAAE,OAAA;AACXA,IAAAA,IAAI,CAACE,UAAU,GAAGF,IAAI,CAACG,WAAW,CAAA;IAClCJ,QAAQ,CAACC,IAAI,CAAC,CAAA;AAChB,GAAC,EAAE,CAACe,KAAK,CAAC,CAAC,CAAA;AAEXO,EAAAA,SAAS,CAAC,MAAM;AACd,IAAA,MAAMtB,IAAI,GAAGkB,OAAO,CAACG,OAAO,CAAA;AAC5B,IAAA,IAAI,CAACrB,IAAI,IAAI,OAAOuB,cAAc,KAAK,WAAW,EAAE,OAAA;IACpD,MAAMC,QAAQ,GAAG,IAAID,cAAc,CAAC,MAAMxB,QAAQ,CAACC,IAAI,CAAC,CAAC,CAAA;AACzDwB,IAAAA,QAAQ,CAACC,OAAO,CAACzB,IAAI,CAAC,CAAA;AACtB,IAAA,OAAO,MAAMwB,QAAQ,CAACE,UAAU,EAAE,CAAA;GACnC,EAAE,EAAE,CAAC,CAAA;AAEN,EAAA,oBACEC,GAAA,CAAA,KAAA,EAAA;AACE,IAAA,YAAA,EAAW,YAAY;IACvBX,SAAS,EAAEY,EAAE,CAACC,MAAM,CAACC,GAAG,EAAEd,SAAS,CAAE;AAAA,IAAA,GACjCC,IAAI;AAAAc,IAAAA,QAAA,eAERJ,GAAA,CAAA,IAAA,EAAA;AACEK,MAAAA,GAAG,EAAEd,OAAQ;MACbF,SAAS,EAAEa,MAAM,CAAC7B,IAAK;MACvBiC,QAAQ,EAAG3B,CAAC,IAAKP,QAAQ,CAACO,CAAC,CAAC4B,aAAa,CAAE;AAC3CC,MAAAA,aAAa,EAAE9B,SAAU;MAAA0B,QAAA,EAExBhB,KAAK,CAACqB,GAAG,CAAC,CAAAC,KAAA,EAA0BC,KAAK,KAAK;QAAA,IAAnC;UAAEC,KAAK;UAAE,GAAGC,SAAAA;AAAU,SAAC,GAAAH,KAAA,CAAA;AACjC,QAAA,MAAMI,UAAU,GACdD,SAAS,CAACE,KAAK,KAAKC,SAAS,GAAG;AAAE,UAAA,YAAY,EAAE,EAAA;SAAI,GAAG,EAAE,CAAA;AAC3D,QAAA,IAAIL,KAAK,KAAKvB,KAAK,CAAC6B,MAAM,GAAG,CAAC,EAAE;AAC9B,UAAA,oBACEjB,GAAA,CAAA,IAAA,EAAA;YAAgBX,SAAS,EAAEa,MAAM,CAACgB,IAAK;AAAAd,YAAAA,QAAA,eACrCJ,GAAA,CAAA,MAAA,EAAA;AACE,cAAA,cAAA,EAAa,MAAM;cACnBX,SAAS,EAAEY,EAAE,CAACC,MAAM,CAACU,KAAK,EAAEV,MAAM,CAACR,OAAO,CAAE;AAAA,cAAA,GACxCoB,UAAU;AAAAV,cAAAA,QAAA,EAEbQ,KAAAA;aACG,CAAA;AAAC,WAAA,EAPAD,KAQL,CAAC,CAAA;AAET,SAAA;AACA,QAAA,MAAMQ,WAAW,GACfN,SAAS,CAACO,IAAI,KAAKJ,SAAS,IAAIH,SAAS,CAACQ,OAAO,KAAKL,SAAS,CAAA;AACjE,QAAA,oBACEM,IAAA,CAAA,IAAA,EAAA;UAAgBjC,SAAS,EAAEa,MAAM,CAACgB,IAAK;AAAAd,UAAAA,QAAA,EACpCe,CAAAA,WAAW,gBACVnB,GAAA,CAACuB,aAAa,EAAA;AAAA,YAAA,GACRV,SAAS;AAAA,YAAA,GACTC,UAAU;AACdzB,YAAAA,SAAS,EAAEY,EAAE,CAACC,MAAM,CAACU,KAAK,EAAEV,MAAM,CAACsB,IAAI,EAAEX,SAAS,CAACxB,SAAS,CAAE;AAAAe,YAAAA,QAAA,EAE7DQ,KAAAA;WACY,CAAC,gBAEhBZ,GAAA,CAAA,MAAA,EAAA;YAAMX,SAAS,EAAEa,MAAM,CAACU,KAAM;AAAA,YAAA,GAAKE,UAAU;AAAAV,YAAAA,QAAA,EAC1CQ,KAAAA;AAAK,WACF,CACP,eACDZ,GAAA,CAACyB,gBAAgB,EAAA;YACfpC,SAAS,EAAEa,MAAM,CAACwB,SAAU;YAC5B,aAAY,EAAA,MAAA;AAAM,WACnB,CAAC,CAAA;AAAA,SAAA,EAjBKf,KAkBL,CAAC,CAAA;OAER,CAAA;KACC,CAAA;AAAC,GACF,CAAC,CAAA;AAEV;;;;"}
@@ -0,0 +1,4 @@
1
+ const styles = {"nav":"Breadcrumbs-module_nav__cDuA5","list":"Breadcrumbs-module_list__A6dlB","item":"Breadcrumbs-module_item__3t-Zj","label":"Breadcrumbs-module_label__gVU35","link":"Breadcrumbs-module_link__KJ87-","current":"Breadcrumbs-module_current__XK0a2","separator":"Breadcrumbs-module_separator__k-Tmd"};
2
+
3
+ export { styles as default };
4
+ //# sourceMappingURL=Breadcrumbs.module.css.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Breadcrumbs.module.css.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -0,0 +1,22 @@
1
+ import { forwardRef } from 'react';
2
+ import cn from 'classnames';
3
+ import styles from './Divider.module.css.mjs';
4
+ import { jsx } from 'react/jsx-runtime';
5
+
6
+ /** Visual-only 1px line in the default border color; stretches along the cross axis of a flex parent. Pass role='separator' for semantics. */
7
+ const Divider = /*#__PURE__*/forwardRef((_ref, ref) => {
8
+ let {
9
+ orientation = 'horizontal',
10
+ className,
11
+ ...rest
12
+ } = _ref;
13
+ return /*#__PURE__*/jsx("div", {
14
+ ref: ref,
15
+ className: cn(styles.root, styles[orientation], className),
16
+ ...rest
17
+ });
18
+ });
19
+ Divider.displayName = 'Divider';
20
+
21
+ export { Divider };
22
+ //# sourceMappingURL=Divider.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Divider.mjs","sources":["../../../src/divider/Divider.tsx"],"sourcesContent":["import { forwardRef, type HTMLAttributes } from 'react'\n\nimport cn from 'classnames'\n\nimport styles from './Divider.module.css'\n\nexport type DividerOrientation = 'horizontal' | 'vertical'\n\nexport type DividerProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {\n orientation?: DividerOrientation\n}\n\n/** Visual-only 1px line in the default border color; stretches along the cross axis of a flex parent. Pass role='separator' for semantics. */\nexport const Divider = forwardRef<HTMLDivElement, DividerProps>(\n ({ orientation = 'horizontal', className, ...rest }, ref) => (\n <div\n ref={ref}\n className={cn(styles.root, styles[orientation], className)}\n {...rest}\n />\n ),\n)\n\nDivider.displayName = 'Divider'\n"],"names":["Divider","forwardRef","_ref","ref","orientation","className","rest","_jsx","cn","styles","root","displayName"],"mappings":";;;;;AAYA;AACO,MAAMA,OAAO,gBAAGC,UAAU,CAC/B,CAAAC,IAAA,EAAqDC,GAAG,KAAA;EAAA,IAAvD;AAAEC,IAAAA,WAAW,GAAG,YAAY;IAAEC,SAAS;IAAE,GAAGC,IAAAA;AAAK,GAAC,GAAAJ,IAAA,CAAA;AAAA,EAAA,oBACjDK,GAAA,CAAA,KAAA,EAAA;AACEJ,IAAAA,GAAG,EAAEA,GAAI;AACTE,IAAAA,SAAS,EAAEG,EAAE,CAACC,MAAM,CAACC,IAAI,EAAED,MAAM,CAACL,WAAW,CAAC,EAAEC,SAAS,CAAE;IAAA,GACvDC,IAAAA;AAAI,GACT,CAAC,CAAA;AAAA,CAEN,EAAC;AAEDN,OAAO,CAACW,WAAW,GAAG,SAAS;;;;"}
@@ -0,0 +1,4 @@
1
+ const styles = {"root":"Divider-module_root__SVXVb","horizontal":"Divider-module_horizontal__1RnR-","vertical":"Divider-module_vertical__pIPZy"};
2
+
3
+ export { styles as default };
4
+ //# sourceMappingURL=Divider.module.css.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Divider.module.css.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -0,0 +1,43 @@
1
+ import { forwardRef } from 'react';
2
+ import cn from 'classnames';
3
+ import styles from './Grid.module.css.mjs';
4
+ import { jsx } from 'react/jsx-runtime';
5
+ import { responsiveVars, mergeResponsive, capitalize, spaceToCss } from '../utils/responsive.mjs';
6
+
7
+ const columnsToCss = columns => typeof columns === 'number' ? `repeat(${columns}, minmax(0, 1fr))` : columns;
8
+
9
+ /** CSS grid container with equal, templated or auto-fit columns and a spacing scale. */
10
+ const Grid = /*#__PURE__*/forwardRef((_ref, ref) => {
11
+ let {
12
+ as: Component = 'div',
13
+ columns,
14
+ minItemWidth,
15
+ gap,
16
+ rowGap,
17
+ columnGap,
18
+ align,
19
+ className,
20
+ style,
21
+ ...rest
22
+ } = _ref;
23
+ const minWidth = typeof minItemWidth === 'number' ? `${minItemWidth}px` : minItemWidth;
24
+ const template = minItemWidth !== undefined ? `repeat(auto-fit, minmax(min(${minWidth}, 100%), 1fr))` : columns;
25
+ const vars = {
26
+ ...responsiveVars('columns', template, columnsToCss),
27
+ ...responsiveVars('rowGap', mergeResponsive(gap, rowGap), spaceToCss),
28
+ ...responsiveVars('columnGap', mergeResponsive(gap, columnGap), spaceToCss)
29
+ };
30
+ return /*#__PURE__*/jsx(Component, {
31
+ ref: ref,
32
+ className: cn(styles.root, align && styles[`align${capitalize(align)}`], className),
33
+ style: {
34
+ ...vars,
35
+ ...style
36
+ },
37
+ ...rest
38
+ });
39
+ });
40
+ Grid.displayName = 'Grid';
41
+
42
+ export { Grid };
43
+ //# sourceMappingURL=Grid.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Grid.mjs","sources":["../../../src/grid/Grid.tsx"],"sourcesContent":["import { forwardRef, type ElementType, type HTMLAttributes } from 'react'\n\nimport cn from 'classnames'\n\nimport {\n capitalize,\n mergeResponsive,\n responsiveVars,\n spaceToCss,\n type Responsive,\n type Space,\n} from '../utils'\nimport styles from './Grid.module.css'\n\nexport type GridAlign = 'start' | 'center' | 'end' | 'stretch'\n\nexport type GridProps = HTMLAttributes<HTMLElement> & {\n as?: ElementType\n /** A number makes equal columns; a string is used as raw `grid-template-columns`. */\n columns?: Responsive<number | string>\n /** Auto-fit columns of at least this width (number = px). Takes precedence over `columns`. */\n minItemWidth?: number | string\n gap?: Responsive<Space>\n /** Overrides `gap` for rows, per breakpoint. */\n rowGap?: Responsive<Space>\n /** Overrides `gap` for columns, per breakpoint. */\n columnGap?: Responsive<Space>\n align?: GridAlign\n}\n\nconst columnsToCss = (columns: number | string) =>\n typeof columns === 'number' ? `repeat(${columns}, minmax(0, 1fr))` : columns\n\n/** CSS grid container with equal, templated or auto-fit columns and a spacing scale. */\nexport const Grid = forwardRef<HTMLElement, GridProps>(\n (\n {\n as: Component = 'div',\n columns,\n minItemWidth,\n gap,\n rowGap,\n columnGap,\n align,\n className,\n style,\n ...rest\n },\n ref,\n ) => {\n const minWidth =\n typeof minItemWidth === 'number' ? `${minItemWidth}px` : minItemWidth\n const template =\n minItemWidth !== undefined\n ? `repeat(auto-fit, minmax(min(${minWidth}, 100%), 1fr))`\n : columns\n\n const vars = {\n ...responsiveVars('columns', template, columnsToCss),\n ...responsiveVars('rowGap', mergeResponsive(gap, rowGap), spaceToCss),\n ...responsiveVars(\n 'columnGap',\n mergeResponsive(gap, columnGap),\n spaceToCss,\n ),\n }\n\n return (\n <Component\n ref={ref}\n className={cn(\n styles.root,\n align && styles[`align${capitalize(align)}`],\n className,\n )}\n style={{ ...vars, ...style }}\n {...rest}\n />\n )\n },\n)\n\nGrid.displayName = 'Grid'\n"],"names":["columnsToCss","columns","Grid","forwardRef","_ref","ref","as","Component","minItemWidth","gap","rowGap","columnGap","align","className","style","rest","minWidth","template","undefined","vars","responsiveVars","mergeResponsive","spaceToCss","_jsx","cn","styles","root","capitalize","displayName"],"mappings":";;;;;;AA8BA,MAAMA,YAAY,GAAIC,OAAwB,IAC5C,OAAOA,OAAO,KAAK,QAAQ,GAAG,CAAA,OAAA,EAAUA,OAAO,CAAA,iBAAA,CAAmB,GAAGA,OAAO,CAAA;;AAE9E;AACO,MAAMC,IAAI,gBAAGC,UAAU,CAC5B,CAAAC,IAAA,EAaEC,GAAG,KACA;EAAA,IAbH;IACEC,EAAE,EAAEC,SAAS,GAAG,KAAK;IACrBN,OAAO;IACPO,YAAY;IACZC,GAAG;IACHC,MAAM;IACNC,SAAS;IACTC,KAAK;IACLC,SAAS;IACTC,KAAK;IACL,GAAGC,IAAAA;AACL,GAAC,GAAAX,IAAA,CAAA;EAGD,MAAMY,QAAQ,GACZ,OAAOR,YAAY,KAAK,QAAQ,GAAG,CAAGA,EAAAA,YAAY,CAAI,EAAA,CAAA,GAAGA,YAAY,CAAA;EACvE,MAAMS,QAAQ,GACZT,YAAY,KAAKU,SAAS,GACtB,CAA+BF,4BAAAA,EAAAA,QAAQ,CAAgB,cAAA,CAAA,GACvDf,OAAO,CAAA;AAEb,EAAA,MAAMkB,IAAI,GAAG;AACX,IAAA,GAAGC,cAAc,CAAC,SAAS,EAAEH,QAAQ,EAAEjB,YAAY,CAAC;AACpD,IAAA,GAAGoB,cAAc,CAAC,QAAQ,EAAEC,eAAe,CAACZ,GAAG,EAAEC,MAAM,CAAC,EAAEY,UAAU,CAAC;IACrE,GAAGF,cAAc,CACf,WAAW,EACXC,eAAe,CAACZ,GAAG,EAAEE,SAAS,CAAC,EAC/BW,UACF,CAAA;GACD,CAAA;EAED,oBACEC,GAAA,CAAChB,SAAS,EAAA;AACRF,IAAAA,GAAG,EAAEA,GAAI;IACTQ,SAAS,EAAEW,EAAE,CACXC,MAAM,CAACC,IAAI,EACXd,KAAK,IAAIa,MAAM,CAAC,CAAQE,KAAAA,EAAAA,UAAU,CAACf,KAAK,CAAC,EAAE,CAAC,EAC5CC,SACF,CAAE;AACFC,IAAAA,KAAK,EAAE;AAAE,MAAA,GAAGK,IAAI;MAAE,GAAGL,KAAAA;KAAQ;IAAA,GACzBC,IAAAA;AAAI,GACT,CAAC,CAAA;AAEN,CACF,EAAC;AAEDb,IAAI,CAAC0B,WAAW,GAAG,MAAM;;;;"}
@@ -0,0 +1,4 @@
1
+ const styles = {"root":"Grid-module_root__WQ5eA","alignStart":"Grid-module_alignStart__tJzED","alignCenter":"Grid-module_alignCenter__Br-nr","alignEnd":"Grid-module_alignEnd__oWTV-","alignStretch":"Grid-module_alignStretch__v1rgi"};
2
+
3
+ export { styles as default };
4
+ //# sourceMappingURL=Grid.module.css.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Grid.module.css.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -0,0 +1,35 @@
1
+ import { forwardRef } from 'react';
2
+ import cn from 'classnames';
3
+ import styles from './GridItem.module.css.mjs';
4
+ import { jsx } from 'react/jsx-runtime';
5
+ import { responsiveVars } from '../utils/responsive.mjs';
6
+
7
+ const spanToCss = span => span === 'full' ? '1 / -1' : `span ${span} / span ${span}`;
8
+
9
+ /** Grid child that can span columns or sit in a named area. */
10
+ const GridItem = /*#__PURE__*/forwardRef((_ref, ref) => {
11
+ let {
12
+ as: Component = 'div',
13
+ span,
14
+ area,
15
+ className,
16
+ style,
17
+ ...rest
18
+ } = _ref;
19
+ return /*#__PURE__*/jsx(Component, {
20
+ ref: ref,
21
+ className: cn(styles.root, className),
22
+ style: {
23
+ ...responsiveVars('span', span, spanToCss),
24
+ ...(area !== undefined && {
25
+ gridArea: area
26
+ }),
27
+ ...style
28
+ },
29
+ ...rest
30
+ });
31
+ });
32
+ GridItem.displayName = 'GridItem';
33
+
34
+ export { GridItem };
35
+ //# sourceMappingURL=GridItem.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GridItem.mjs","sources":["../../../src/grid/GridItem.tsx"],"sourcesContent":["import { forwardRef, type ElementType, type HTMLAttributes } from 'react'\n\nimport cn from 'classnames'\n\nimport { responsiveVars, type Responsive } from '../utils'\nimport styles from './GridItem.module.css'\n\nexport type GridItemProps = HTMLAttributes<HTMLElement> & {\n as?: ElementType\n /** Number of columns to span; `'full'` spans every column. */\n span?: Responsive<number | 'full'>\n area?: string\n}\n\nconst spanToCss = (span: number | 'full') =>\n span === 'full' ? '1 / -1' : `span ${span} / span ${span}`\n\n/** Grid child that can span columns or sit in a named area. */\nexport const GridItem = forwardRef<HTMLElement, GridItemProps>(\n ({ as: Component = 'div', span, area, className, style, ...rest }, ref) => {\n return (\n <Component\n ref={ref}\n className={cn(styles.root, className)}\n style={{\n ...responsiveVars('span', span, spanToCss),\n ...(area !== undefined && { gridArea: area }),\n ...style,\n }}\n {...rest}\n />\n )\n },\n)\n\nGridItem.displayName = 'GridItem'\n"],"names":["spanToCss","span","GridItem","forwardRef","_ref","ref","as","Component","area","className","style","rest","_jsx","cn","styles","root","responsiveVars","undefined","gridArea","displayName"],"mappings":";;;;;;AAcA,MAAMA,SAAS,GAAIC,IAAqB,IACtCA,IAAI,KAAK,MAAM,GAAG,QAAQ,GAAG,CAAA,KAAA,EAAQA,IAAI,CAAA,QAAA,EAAWA,IAAI,CAAE,CAAA,CAAA;;AAE5D;AACO,MAAMC,QAAQ,gBAAGC,UAAU,CAChC,CAAAC,IAAA,EAAmEC,GAAG,KAAK;EAAA,IAA1E;IAAEC,EAAE,EAAEC,SAAS,GAAG,KAAK;IAAEN,IAAI;IAAEO,IAAI;IAAEC,SAAS;IAAEC,KAAK;IAAE,GAAGC,IAAAA;AAAK,GAAC,GAAAP,IAAA,CAAA;EAC/D,oBACEQ,GAAA,CAACL,SAAS,EAAA;AACRF,IAAAA,GAAG,EAAEA,GAAI;IACTI,SAAS,EAAEI,EAAE,CAACC,MAAM,CAACC,IAAI,EAAEN,SAAS,CAAE;AACtCC,IAAAA,KAAK,EAAE;AACL,MAAA,GAAGM,cAAc,CAAC,MAAM,EAAEf,IAAI,EAAED,SAAS,CAAC;MAC1C,IAAIQ,IAAI,KAAKS,SAAS,IAAI;AAAEC,QAAAA,QAAQ,EAAEV,IAAAA;AAAK,OAAC,CAAC;MAC7C,GAAGE,KAAAA;KACH;IAAA,GACEC,IAAAA;AAAI,GACT,CAAC,CAAA;AAEN,CACF,EAAC;AAEDT,QAAQ,CAACiB,WAAW,GAAG,UAAU;;;;"}
@@ -0,0 +1,4 @@
1
+ const styles = {"root":"GridItem-module_root__Jj7cu"};
2
+
3
+ export { styles as default };
4
+ //# sourceMappingURL=GridItem.module.css.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GridItem.module.css.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -0,0 +1,27 @@
1
+ import cn from 'classnames';
2
+ import styles from './Header.module.css.mjs';
3
+ import { jsxs, jsx } from 'react/jsx-runtime';
4
+
5
+ const Header = _ref => {
6
+ let {
7
+ children,
8
+ actions,
9
+ sticky,
10
+ className,
11
+ ...rest
12
+ } = _ref;
13
+ return /*#__PURE__*/jsxs("header", {
14
+ className: cn(styles.header, sticky && styles.sticky, className),
15
+ ...rest,
16
+ children: [/*#__PURE__*/jsx("div", {
17
+ className: styles.content,
18
+ children: children
19
+ }), actions != null ? /*#__PURE__*/jsx("div", {
20
+ className: styles.actions,
21
+ children: actions
22
+ }) : null]
23
+ });
24
+ };
25
+
26
+ export { Header };
27
+ //# sourceMappingURL=Header.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Header.mjs","sources":["../../../src/header/Header.tsx"],"sourcesContent":["import type { ComponentPropsWithoutRef, ReactNode } from 'react'\n\nimport cn from 'classnames'\n\nimport styles from './Header.module.css'\n\nexport type HeaderProps = ComponentPropsWithoutRef<'header'> & {\n /** Right control group. */\n actions?: ReactNode\n /** Sticks to the top of the viewport while scrolling. */\n sticky?: boolean\n}\n\nexport const Header = ({\n children,\n actions,\n sticky,\n className,\n ...rest\n}: HeaderProps) => (\n <header\n className={cn(styles.header, sticky && styles.sticky, className)}\n {...rest}\n >\n <div className={styles.content}>{children}</div>\n {actions != null ? <div className={styles.actions}>{actions}</div> : null}\n </header>\n)\n"],"names":["Header","_ref","children","actions","sticky","className","rest","_jsxs","cn","styles","header","_jsx","content"],"mappings":";;;;AAaO,MAAMA,MAAM,GAAGC,IAAA,IAAA;EAAA,IAAC;IACrBC,QAAQ;IACRC,OAAO;IACPC,MAAM;IACNC,SAAS;IACT,GAAGC,IAAAA;AACQ,GAAC,GAAAL,IAAA,CAAA;AAAA,EAAA,oBACZM,IAAA,CAAA,QAAA,EAAA;AACEF,IAAAA,SAAS,EAAEG,EAAE,CAACC,MAAM,CAACC,MAAM,EAAEN,MAAM,IAAIK,MAAM,CAACL,MAAM,EAAEC,SAAS,CAAE;AAAA,IAAA,GAC7DC,IAAI;AAAAJ,IAAAA,QAAA,gBAERS,GAAA,CAAA,KAAA,EAAA;MAAKN,SAAS,EAAEI,MAAM,CAACG,OAAQ;AAAAV,MAAAA,QAAA,EAAEA,QAAAA;AAAQ,KAAM,CAAC,EAC/CC,OAAO,IAAI,IAAI,gBAAGQ,GAAA,CAAA,KAAA,EAAA;MAAKN,SAAS,EAAEI,MAAM,CAACN,OAAQ;AAAAD,MAAAA,QAAA,EAAEC,OAAAA;KAAa,CAAC,GAAG,IAAI,CAAA;AAAA,GACnE,CAAC,CAAA;AAAA;;;;"}
@@ -0,0 +1,4 @@
1
+ const styles = {"header":"Header-module_header__BlKE6","sticky":"Header-module_sticky__ftIiS","content":"Header-module_content__P2dip","actions":"Header-module_actions__iRAGS"};
2
+
3
+ export { styles as default };
4
+ //# sourceMappingURL=Header.module.css.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Header.module.css.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -0,0 +1,65 @@
1
+ import { forwardRef, useRef, useCallback, useEffect } from 'react';
2
+ import cn from 'classnames';
3
+ import styles from './HeaderNav.module.css.mjs';
4
+ import { jsx } from 'react/jsx-runtime';
5
+
6
+ const syncFade = nav => {
7
+ nav.toggleAttribute('data-fade-start', nav.scrollLeft > 0);
8
+ nav.toggleAttribute('data-fade-end', nav.scrollLeft < nav.scrollWidth - nav.clientWidth - 1);
9
+ };
10
+ const scrollActiveIntoView = nav => {
11
+ const active = nav.querySelector("[aria-current='page']");
12
+ if (!active) return;
13
+ const navRect = nav.getBoundingClientRect();
14
+ const activeRect = active.getBoundingClientRect();
15
+ nav.scrollLeft += activeRect.left - navRect.left - (nav.clientWidth - activeRect.width) / 2;
16
+ };
17
+ const HeaderNav = /*#__PURE__*/forwardRef((_ref, ref) => {
18
+ let {
19
+ 'aria-label': ariaLabel = 'Main',
20
+ className,
21
+ onScroll,
22
+ ...rest
23
+ } = _ref;
24
+ const navRef = useRef(null);
25
+ const setRef = useCallback(node => {
26
+ navRef.current = node;
27
+ if (typeof ref === 'function') ref(node);else if (ref) ref.current = node;
28
+ }, [ref]);
29
+ useEffect(() => {
30
+ const nav = navRef.current;
31
+ if (!nav) return;
32
+ const sync = () => {
33
+ scrollActiveIntoView(nav);
34
+ syncFade(nav);
35
+ };
36
+ sync();
37
+ const mutations = typeof MutationObserver === 'undefined' ? null : new MutationObserver(sync);
38
+ mutations?.observe(nav, {
39
+ childList: true,
40
+ subtree: true,
41
+ attributes: true,
42
+ attributeFilter: ['aria-current']
43
+ });
44
+ const resizes = typeof ResizeObserver === 'undefined' ? null : new ResizeObserver(() => syncFade(nav));
45
+ resizes?.observe(nav);
46
+ return () => {
47
+ mutations?.disconnect();
48
+ resizes?.disconnect();
49
+ };
50
+ }, []);
51
+ return /*#__PURE__*/jsx("nav", {
52
+ ref: setRef,
53
+ "aria-label": ariaLabel,
54
+ className: cn(styles.nav, className),
55
+ onScroll: e => {
56
+ syncFade(e.currentTarget);
57
+ onScroll?.(e);
58
+ },
59
+ ...rest
60
+ });
61
+ });
62
+ HeaderNav.displayName = 'HeaderNav';
63
+
64
+ export { HeaderNav };
65
+ //# sourceMappingURL=HeaderNav.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HeaderNav.mjs","sources":["../../../src/header/HeaderNav.tsx"],"sourcesContent":["import { forwardRef, useCallback, useEffect, useRef } from 'react'\nimport type { ComponentPropsWithoutRef } from 'react'\n\nimport cn from 'classnames'\n\nimport styles from './HeaderNav.module.css'\n\nexport type HeaderNavProps = ComponentPropsWithoutRef<'nav'>\n\nconst syncFade = (nav: HTMLElement) => {\n nav.toggleAttribute('data-fade-start', nav.scrollLeft > 0)\n nav.toggleAttribute(\n 'data-fade-end',\n nav.scrollLeft < nav.scrollWidth - nav.clientWidth - 1,\n )\n}\n\nconst scrollActiveIntoView = (nav: HTMLElement) => {\n const active = nav.querySelector<HTMLElement>(\"[aria-current='page']\")\n if (!active) return\n const navRect = nav.getBoundingClientRect()\n const activeRect = active.getBoundingClientRect()\n nav.scrollLeft +=\n activeRect.left - navRect.left - (nav.clientWidth - activeRect.width) / 2\n}\n\nexport const HeaderNav = forwardRef<HTMLElement, HeaderNavProps>(\n ({ 'aria-label': ariaLabel = 'Main', className, onScroll, ...rest }, ref) => {\n const navRef = useRef<HTMLElement | null>(null)\n\n const setRef = useCallback(\n (node: HTMLElement | null) => {\n navRef.current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) ref.current = node\n },\n [ref],\n )\n\n useEffect(() => {\n const nav = navRef.current\n if (!nav) return\n const sync = () => {\n scrollActiveIntoView(nav)\n syncFade(nav)\n }\n sync()\n const mutations =\n typeof MutationObserver === 'undefined'\n ? null\n : new MutationObserver(sync)\n mutations?.observe(nav, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['aria-current'],\n })\n const resizes =\n typeof ResizeObserver === 'undefined'\n ? null\n : new ResizeObserver(() => syncFade(nav))\n resizes?.observe(nav)\n return () => {\n mutations?.disconnect()\n resizes?.disconnect()\n }\n }, [])\n\n return (\n <nav\n ref={setRef}\n aria-label={ariaLabel}\n className={cn(styles.nav, className)}\n onScroll={(e) => {\n syncFade(e.currentTarget)\n onScroll?.(e)\n }}\n {...rest}\n />\n )\n },\n)\n\nHeaderNav.displayName = 'HeaderNav'\n"],"names":["syncFade","nav","toggleAttribute","scrollLeft","scrollWidth","clientWidth","scrollActiveIntoView","active","querySelector","navRect","getBoundingClientRect","activeRect","left","width","HeaderNav","forwardRef","_ref","ref","ariaLabel","className","onScroll","rest","navRef","useRef","setRef","useCallback","node","current","useEffect","sync","mutations","MutationObserver","observe","childList","subtree","attributes","attributeFilter","resizes","ResizeObserver","disconnect","_jsx","cn","styles","e","currentTarget","displayName"],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ const styles = {"nav":"HeaderNav-module_nav__YxWpA"};
2
+
3
+ export { styles as default };
4
+ //# sourceMappingURL=HeaderNav.module.css.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HeaderNav.module.css.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -0,0 +1,21 @@
1
+ import cn from 'classnames';
2
+ import styles from './Hidden.module.css.mjs';
3
+ import { jsx } from 'react/jsx-runtime';
4
+ import { capitalize } from '../utils/responsive.mjs';
5
+
6
+ /** CSS-only responsive visibility, safe for SSR. Wrapper is `display: contents` while visible. */
7
+ const Hidden = _ref => {
8
+ let {
9
+ below,
10
+ above,
11
+ className,
12
+ ...rest
13
+ } = _ref;
14
+ return /*#__PURE__*/jsx("div", {
15
+ className: cn(styles.root, below && styles[`below${capitalize(below)}`], above && styles[`above${capitalize(above)}`], className),
16
+ ...rest
17
+ });
18
+ };
19
+
20
+ export { Hidden };
21
+ //# sourceMappingURL=Hidden.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Hidden.mjs","sources":["../../../src/hidden/Hidden.tsx"],"sourcesContent":["import type { HTMLAttributes } from 'react'\n\nimport cn from 'classnames'\n\nimport { capitalize, type Breakpoint } from '../utils'\nimport styles from './Hidden.module.css'\n\nexport type HiddenProps = HTMLAttributes<HTMLDivElement> & {\n /** Hides at this breakpoint's width and below. */\n below?: Breakpoint\n /** Hides at widths above this breakpoint. */\n above?: Breakpoint\n}\n\n/** CSS-only responsive visibility, safe for SSR. Wrapper is `display: contents` while visible. */\nexport const Hidden = ({ below, above, className, ...rest }: HiddenProps) => (\n <div\n className={cn(\n styles.root,\n below && styles[`below${capitalize(below)}`],\n above && styles[`above${capitalize(above)}`],\n className,\n )}\n {...rest}\n />\n)\n"],"names":["Hidden","_ref","below","above","className","rest","_jsx","cn","styles","root","capitalize"],"mappings":";;;;;AAcA;AACO,MAAMA,MAAM,GAAGC,IAAA,IAAA;EAAA,IAAC;IAAEC,KAAK;IAAEC,KAAK;IAAEC,SAAS;IAAE,GAAGC,IAAAA;AAAkB,GAAC,GAAAJ,IAAA,CAAA;AAAA,EAAA,oBACtEK,GAAA,CAAA,KAAA,EAAA;AACEF,IAAAA,SAAS,EAAEG,EAAE,CACXC,MAAM,CAACC,IAAI,EACXP,KAAK,IAAIM,MAAM,CAAC,CAAQE,KAAAA,EAAAA,UAAU,CAACR,KAAK,CAAC,CAAE,CAAA,CAAC,EAC5CC,KAAK,IAAIK,MAAM,CAAC,CAAQE,KAAAA,EAAAA,UAAU,CAACP,KAAK,CAAC,CAAA,CAAE,CAAC,EAC5CC,SACF,CAAE;IAAA,GACEC,IAAAA;AAAI,GACT,CAAC,CAAA;AAAA;;;;"}
@@ -0,0 +1,4 @@
1
+ const styles = {"root":"Hidden-module_root__9hkfD","belowLg":"Hidden-module_belowLg__zbI6R","belowMl":"Hidden-module_belowMl__vJPhT","belowMd":"Hidden-module_belowMd__lVH9f","belowSm":"Hidden-module_belowSm__cnb9B","belowXs":"Hidden-module_belowXs__ipzM-","belowXxs":"Hidden-module_belowXxs__BkbGR","aboveLg":"Hidden-module_aboveLg__G7kJk","aboveMl":"Hidden-module_aboveMl__QadhV","aboveMd":"Hidden-module_aboveMd__1yfOJ","aboveSm":"Hidden-module_aboveSm__6-6D8","aboveXs":"Hidden-module_aboveXs__TxT4e","aboveXxs":"Hidden-module_aboveXxs__gRrwE"};
2
+
3
+ export { styles as default };
4
+ //# sourceMappingURL=Hidden.module.css.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Hidden.module.css.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -0,0 +1,53 @@
1
+ import { useRef, useState, useEffect } from 'react';
2
+ import { createPortal } from 'react-dom';
3
+ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
4
+
5
+ const THEME_ATTR = 'data-lido-theme';
6
+
7
+ /**
8
+ * Renders `null` until mounted so SSR and first client render match.
9
+ * Without `container`, mirrors the nearest `data-lido-theme` scope onto the portal root so tokens still resolve.
10
+ */
11
+ const Portal = _ref => {
12
+ let {
13
+ children,
14
+ container
15
+ } = _ref;
16
+ const markerRef = useRef(null);
17
+ const [target, setTarget] = useState(null);
18
+ useEffect(() => {
19
+ if (container) {
20
+ setTarget(container);
21
+ return;
22
+ }
23
+ const scope = markerRef.current?.closest(`[${THEME_ATTR}]`);
24
+ if (!scope || scope === document.documentElement) {
25
+ setTarget(document.body);
26
+ return;
27
+ }
28
+ const root = document.createElement('div');
29
+ root.style.display = 'contents';
30
+ const sync = () => root.setAttribute(THEME_ATTR, scope.getAttribute(THEME_ATTR) ?? '');
31
+ sync();
32
+ document.body.appendChild(root);
33
+ const observer = new MutationObserver(sync);
34
+ observer.observe(scope, {
35
+ attributes: true,
36
+ attributeFilter: [THEME_ATTR]
37
+ });
38
+ setTarget(root);
39
+ return () => {
40
+ observer.disconnect();
41
+ root.remove();
42
+ };
43
+ }, [container]);
44
+ return /*#__PURE__*/jsxs(Fragment, {
45
+ children: [/*#__PURE__*/jsx("span", {
46
+ ref: markerRef,
47
+ hidden: true
48
+ }), target ? /*#__PURE__*/createPortal(children, target) : null]
49
+ });
50
+ };
51
+
52
+ export { Portal };
53
+ //# sourceMappingURL=Portal.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Portal.mjs","sources":["../../../src/hooks/Portal.tsx"],"sourcesContent":["import { useEffect, useRef, useState, type ReactNode } from 'react'\nimport { createPortal } from 'react-dom'\n\nexport type PortalProps = {\n children?: ReactNode\n /** Defaults to `document.body`. */\n container?: Element | null\n}\n\nconst THEME_ATTR = 'data-lido-theme'\n\n/**\n * Renders `null` until mounted so SSR and first client render match.\n * Without `container`, mirrors the nearest `data-lido-theme` scope onto the portal root so tokens still resolve.\n */\nexport const Portal = ({ children, container }: PortalProps) => {\n const markerRef = useRef<HTMLSpanElement>(null)\n const [target, setTarget] = useState<Element | null>(null)\n\n useEffect(() => {\n if (container) {\n setTarget(container)\n return\n }\n const scope = markerRef.current?.closest(`[${THEME_ATTR}]`)\n if (!scope || scope === document.documentElement) {\n setTarget(document.body)\n return\n }\n\n const root = document.createElement('div')\n root.style.display = 'contents'\n const sync = () =>\n root.setAttribute(THEME_ATTR, scope.getAttribute(THEME_ATTR) ?? '')\n sync()\n document.body.appendChild(root)\n const observer = new MutationObserver(sync)\n observer.observe(scope, { attributes: true, attributeFilter: [THEME_ATTR] })\n setTarget(root)\n return () => {\n observer.disconnect()\n root.remove()\n }\n }, [container])\n\n return (\n <>\n <span ref={markerRef} hidden />\n {target ? createPortal(children, target) : null}\n </>\n )\n}\n"],"names":["THEME_ATTR","Portal","_ref","children","container","markerRef","useRef","target","setTarget","useState","useEffect","scope","current","closest","document","documentElement","body","root","createElement","style","display","sync","setAttribute","getAttribute","appendChild","observer","MutationObserver","observe","attributes","attributeFilter","disconnect","remove","_jsxs","_Fragment","_jsx","ref","hidden","createPortal"],"mappings":";;;;AASA,MAAMA,UAAU,GAAG,iBAAiB,CAAA;;AAEpC;AACA;AACA;AACA;AACaC,MAAAA,MAAM,GAAGC,IAAA,IAA0C;EAAA,IAAzC;IAAEC,QAAQ;AAAEC,IAAAA,SAAAA;AAAuB,GAAC,GAAAF,IAAA,CAAA;AACzD,EAAA,MAAMG,SAAS,GAAGC,MAAM,CAAkB,IAAI,CAAC,CAAA;EAC/C,MAAM,CAACC,MAAM,EAAEC,SAAS,CAAC,GAAGC,QAAQ,CAAiB,IAAI,CAAC,CAAA;AAE1DC,EAAAA,SAAS,CAAC,MAAM;AACd,IAAA,IAAIN,SAAS,EAAE;MACbI,SAAS,CAACJ,SAAS,CAAC,CAAA;AACpB,MAAA,OAAA;AACF,KAAA;IACA,MAAMO,KAAK,GAAGN,SAAS,CAACO,OAAO,EAAEC,OAAO,CAAC,CAAA,CAAA,EAAIb,UAAU,CAAA,CAAA,CAAG,CAAC,CAAA;IAC3D,IAAI,CAACW,KAAK,IAAIA,KAAK,KAAKG,QAAQ,CAACC,eAAe,EAAE;AAChDP,MAAAA,SAAS,CAACM,QAAQ,CAACE,IAAI,CAAC,CAAA;AACxB,MAAA,OAAA;AACF,KAAA;AAEA,IAAA,MAAMC,IAAI,GAAGH,QAAQ,CAACI,aAAa,CAAC,KAAK,CAAC,CAAA;AAC1CD,IAAAA,IAAI,CAACE,KAAK,CAACC,OAAO,GAAG,UAAU,CAAA;AAC/B,IAAA,MAAMC,IAAI,GAAGA,MACXJ,IAAI,CAACK,YAAY,CAACtB,UAAU,EAAEW,KAAK,CAACY,YAAY,CAACvB,UAAU,CAAC,IAAI,EAAE,CAAC,CAAA;AACrEqB,IAAAA,IAAI,EAAE,CAAA;AACNP,IAAAA,QAAQ,CAACE,IAAI,CAACQ,WAAW,CAACP,IAAI,CAAC,CAAA;AAC/B,IAAA,MAAMQ,QAAQ,GAAG,IAAIC,gBAAgB,CAACL,IAAI,CAAC,CAAA;AAC3CI,IAAAA,QAAQ,CAACE,OAAO,CAAChB,KAAK,EAAE;AAAEiB,MAAAA,UAAU,EAAE,IAAI;MAAEC,eAAe,EAAE,CAAC7B,UAAU,CAAA;AAAE,KAAC,CAAC,CAAA;IAC5EQ,SAAS,CAACS,IAAI,CAAC,CAAA;AACf,IAAA,OAAO,MAAM;MACXQ,QAAQ,CAACK,UAAU,EAAE,CAAA;MACrBb,IAAI,CAACc,MAAM,EAAE,CAAA;KACd,CAAA;AACH,GAAC,EAAE,CAAC3B,SAAS,CAAC,CAAC,CAAA;EAEf,oBACE4B,IAAA,CAAAC,QAAA,EAAA;AAAA9B,IAAAA,QAAA,gBACE+B,GAAA,CAAA,MAAA,EAAA;AAAMC,MAAAA,GAAG,EAAE9B,SAAU;MAAC+B,MAAM,EAAA,IAAA;KAAE,CAAC,EAC9B7B,MAAM,gBAAG8B,YAAY,CAAClC,QAAQ,EAAEI,MAAM,CAAC,GAAG,IAAI,CAAA;AAAA,GAC/C,CAAC,CAAA;AAEP;;;;"}
@@ -0,0 +1,22 @@
1
+ /** Each layer gets a document listener for `type` that only fires while it's the newest layer in its stack. */
2
+ const createLayerStack = function (type) {
3
+ let {
4
+ capture = false
5
+ } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
6
+ const layers = [];
7
+ return onEvent => {
8
+ const layer = {};
9
+ layers.push(layer);
10
+ const listener = event => {
11
+ if (layers[layers.length - 1] === layer) onEvent(event);
12
+ };
13
+ document.addEventListener(type, listener, capture);
14
+ return () => {
15
+ document.removeEventListener(type, listener, capture);
16
+ layers.splice(layers.indexOf(layer), 1);
17
+ };
18
+ };
19
+ };
20
+
21
+ export { createLayerStack };
22
+ //# sourceMappingURL=overlayStack.mjs.map