@lidofinance/lido-app-ui 1.13.0 → 1.14.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 (516) hide show
  1. package/README.md +85 -19
  2. package/dist/README.md +85 -19
  3. package/dist/cjs/accordion/Accordion.cjs +1 -0
  4. package/dist/cjs/accordion/Accordion.cjs.map +1 -1
  5. package/dist/cjs/badge/Badge.cjs +1 -0
  6. package/dist/cjs/badge/Badge.cjs.map +1 -1
  7. package/dist/cjs/banner/Banner.cjs +1 -0
  8. package/dist/cjs/banner/Banner.cjs.map +1 -1
  9. package/dist/cjs/breadcrumbs/Breadcrumbs.cjs +55 -26
  10. package/dist/cjs/breadcrumbs/Breadcrumbs.cjs.map +1 -1
  11. package/dist/cjs/breadcrumbs/Breadcrumbs.module.css.cjs +1 -1
  12. package/dist/cjs/button/Button.cjs +14 -23
  13. package/dist/cjs/button/Button.cjs.map +1 -1
  14. package/dist/cjs/button/ButtonContent.cjs +50 -0
  15. package/dist/cjs/button/ButtonContent.cjs.map +1 -0
  16. package/dist/cjs/button/LinkButton.cjs +46 -0
  17. package/dist/cjs/button/LinkButton.cjs.map +1 -0
  18. package/dist/cjs/card/Card.cjs +1 -0
  19. package/dist/cjs/card/Card.cjs.map +1 -1
  20. package/dist/cjs/checkbox/Checkbox.cjs +1 -0
  21. package/dist/cjs/checkbox/Checkbox.cjs.map +1 -1
  22. package/dist/cjs/counter/Counter.cjs +6 -2
  23. package/dist/cjs/counter/Counter.cjs.map +1 -1
  24. package/dist/cjs/counter/CounterSlot.cjs +19 -2
  25. package/dist/cjs/counter/CounterSlot.cjs.map +1 -1
  26. package/dist/cjs/counter/CounterSlot.module.css.cjs +1 -1
  27. package/dist/cjs/data-list/DataList.cjs +1 -0
  28. package/dist/cjs/data-list/DataList.cjs.map +1 -1
  29. package/dist/cjs/data-list/DataListRow.cjs +2 -0
  30. package/dist/cjs/data-list/DataListRow.cjs.map +1 -1
  31. package/dist/cjs/disclaimer/Disclaimer.cjs +10 -3
  32. package/dist/cjs/disclaimer/Disclaimer.cjs.map +1 -1
  33. package/dist/cjs/divider/Divider.cjs +5 -0
  34. package/dist/cjs/divider/Divider.cjs.map +1 -1
  35. package/dist/cjs/error-page/ErrorPage.cjs +14 -7
  36. package/dist/cjs/error-page/ErrorPage.cjs.map +1 -1
  37. package/dist/cjs/footer/Footer.cjs +10 -2
  38. package/dist/cjs/footer/Footer.cjs.map +1 -1
  39. package/dist/cjs/grid/Grid.cjs +7 -3
  40. package/dist/cjs/grid/Grid.cjs.map +1 -1
  41. package/dist/cjs/grid/Grid.module.css.cjs +1 -1
  42. package/dist/cjs/grid/GridItem.cjs +2 -0
  43. package/dist/cjs/grid/GridItem.cjs.map +1 -1
  44. package/dist/cjs/header/Header.cjs +10 -2
  45. package/dist/cjs/header/Header.cjs.map +1 -1
  46. package/dist/cjs/header/HeaderNav.cjs +33 -21
  47. package/dist/cjs/header/HeaderNav.cjs.map +1 -1
  48. package/dist/cjs/header/HeaderNav.module.css.cjs +1 -1
  49. package/dist/cjs/hidden/Hidden.cjs +10 -4
  50. package/dist/cjs/hidden/Hidden.cjs.map +1 -1
  51. package/dist/cjs/hooks/Portal.cjs +14 -11
  52. package/dist/cjs/hooks/Portal.cjs.map +1 -1
  53. package/dist/cjs/hooks/useBodyScrollLock.cjs +49 -13
  54. package/dist/cjs/hooks/useBodyScrollLock.cjs.map +1 -1
  55. package/dist/cjs/hooks/useEdgeFade.cjs +60 -0
  56. package/dist/cjs/hooks/useEdgeFade.cjs.map +1 -0
  57. package/dist/cjs/hooks/useEscape.cjs +8 -5
  58. package/dist/cjs/hooks/useEscape.cjs.map +1 -1
  59. package/dist/cjs/hooks/useFocusTrap.cjs +61 -24
  60. package/dist/cjs/hooks/useFocusTrap.cjs.map +1 -1
  61. package/dist/cjs/hooks/useHideOthers.cjs +51 -0
  62. package/dist/cjs/hooks/useHideOthers.cjs.map +1 -0
  63. package/dist/cjs/hooks/useOutsideClick.cjs +31 -4
  64. package/dist/cjs/hooks/useOutsideClick.cjs.map +1 -1
  65. package/dist/cjs/icon-button/IconButton.cjs +4 -0
  66. package/dist/cjs/icon-button/IconButton.cjs.map +1 -1
  67. package/dist/cjs/icons/TokenIcon.cjs +2 -0
  68. package/dist/cjs/icons/TokenIcon.cjs.map +1 -1
  69. package/dist/cjs/identicon/Identicon.cjs +2 -0
  70. package/dist/cjs/identicon/Identicon.cjs.map +1 -1
  71. package/dist/cjs/index.cjs +32 -4
  72. package/dist/cjs/index.cjs.map +1 -1
  73. package/dist/cjs/index.css +12 -4
  74. package/dist/cjs/input/Input.cjs +1 -0
  75. package/dist/cjs/input/Input.cjs.map +1 -1
  76. package/dist/cjs/link-provider/Anchor.cjs +23 -2
  77. package/dist/cjs/link-provider/Anchor.cjs.map +1 -1
  78. package/dist/cjs/link-provider/LinkProvider.cjs +1 -1
  79. package/dist/cjs/link-provider/LinkProvider.cjs.map +1 -1
  80. package/dist/cjs/logo/Logo.cjs +8 -0
  81. package/dist/cjs/logo/Logo.cjs.map +1 -1
  82. package/dist/cjs/message-box/MessageBox.cjs +1 -0
  83. package/dist/cjs/message-box/MessageBox.cjs.map +1 -1
  84. package/dist/cjs/modal/Modal.cjs +71 -9
  85. package/dist/cjs/modal/Modal.cjs.map +1 -1
  86. package/dist/cjs/nav-link/NavLink.cjs +6 -4
  87. package/dist/cjs/nav-link/NavLink.cjs.map +1 -1
  88. package/dist/cjs/notification/Notification.cjs +12 -6
  89. package/dist/cjs/notification/Notification.cjs.map +1 -1
  90. package/dist/cjs/page-layout/Layout.cjs +25 -0
  91. package/dist/cjs/page-layout/Layout.cjs.map +1 -0
  92. package/dist/cjs/page-layout/Layout.module.css.cjs +6 -0
  93. package/dist/cjs/page-layout/Layout.module.css.cjs.map +1 -0
  94. package/dist/cjs/page-layout/Main.cjs +29 -0
  95. package/dist/cjs/page-layout/Main.cjs.map +1 -0
  96. package/dist/cjs/page-layout/Main.module.css.cjs +6 -0
  97. package/dist/cjs/page-layout/Main.module.css.cjs.map +1 -0
  98. package/dist/cjs/page-layout/PageContent.cjs +22 -0
  99. package/dist/cjs/page-layout/PageContent.cjs.map +1 -0
  100. package/dist/cjs/page-layout/PageContent.module.css.cjs +6 -0
  101. package/dist/cjs/page-layout/PageContent.module.css.cjs.map +1 -0
  102. package/dist/cjs/pagination/Pagination.cjs +11 -6
  103. package/dist/cjs/pagination/Pagination.cjs.map +1 -1
  104. package/dist/cjs/popover/Popover.cjs +71 -15
  105. package/dist/cjs/popover/Popover.cjs.map +1 -1
  106. package/dist/cjs/radio-button/RadioButton.cjs +1 -0
  107. package/dist/cjs/radio-button/RadioButton.cjs.map +1 -1
  108. package/dist/cjs/rich-input/RichInput.cjs +18 -39
  109. package/dist/cjs/rich-input/RichInput.cjs.map +1 -1
  110. package/dist/cjs/rich-input/RichInput.module.css.cjs +1 -1
  111. package/dist/cjs/section-title/SectionTitle.cjs +1 -0
  112. package/dist/cjs/section-title/SectionTitle.cjs.map +1 -1
  113. package/dist/cjs/segmented-control/SegmentedControl.cjs +1 -0
  114. package/dist/cjs/segmented-control/SegmentedControl.cjs.map +1 -1
  115. package/dist/cjs/segmented-control/SegmentedControlCard.cjs +1 -0
  116. package/dist/cjs/segmented-control/SegmentedControlCard.cjs.map +1 -1
  117. package/dist/cjs/sidebar/Sidebar.cjs +11 -4
  118. package/dist/cjs/sidebar/Sidebar.cjs.map +1 -1
  119. package/dist/cjs/sidebar/SidebarToggle.cjs +1 -1
  120. package/dist/cjs/sidebar/SidebarToggle.cjs.map +1 -1
  121. package/dist/cjs/skeleton/Skeleton.cjs +18 -20
  122. package/dist/cjs/skeleton/Skeleton.cjs.map +1 -1
  123. package/dist/cjs/skip-link/SkipLink.cjs +52 -0
  124. package/dist/cjs/skip-link/SkipLink.cjs.map +1 -0
  125. package/dist/cjs/skip-link/SkipLink.module.css.cjs +6 -0
  126. package/dist/cjs/skip-link/SkipLink.module.css.cjs.map +1 -0
  127. package/dist/cjs/slider/Slider.cjs +1 -0
  128. package/dist/cjs/slider/Slider.cjs.map +1 -1
  129. package/dist/cjs/small-card/SmallCard.cjs +6 -2
  130. package/dist/cjs/small-card/SmallCard.cjs.map +1 -1
  131. package/dist/cjs/stack/Stack.cjs +27 -7
  132. package/dist/cjs/stack/Stack.cjs.map +1 -1
  133. package/dist/cjs/stack/Stack.module.css.cjs +1 -1
  134. package/dist/cjs/stat-item/StatItem.cjs +1 -0
  135. package/dist/cjs/stat-item/StatItem.cjs.map +1 -1
  136. package/dist/cjs/switch/Switch.cjs +1 -0
  137. package/dist/cjs/switch/Switch.cjs.map +1 -1
  138. package/dist/cjs/tabs/Tabs.cjs +1 -0
  139. package/dist/cjs/tabs/Tabs.cjs.map +1 -1
  140. package/dist/cjs/tag/Tag.cjs +73 -8
  141. package/dist/cjs/tag/Tag.cjs.map +1 -1
  142. package/dist/cjs/tag/Tag.module.css.cjs +1 -1
  143. package/dist/cjs/text-link/TextLink.cjs +10 -13
  144. package/dist/cjs/text-link/TextLink.cjs.map +1 -1
  145. package/dist/cjs/text-link/TextLink.module.css.cjs +1 -1
  146. package/dist/cjs/theme-switcher/ThemeSwitcher.cjs +13 -5
  147. package/dist/cjs/theme-switcher/ThemeSwitcher.cjs.map +1 -1
  148. package/dist/cjs/theme-switcher/ThemeSwitcher.module.css.cjs +6 -0
  149. package/dist/cjs/theme-switcher/ThemeSwitcher.module.css.cjs.map +1 -0
  150. package/dist/cjs/token-amount/TokenAmount.cjs +1 -0
  151. package/dist/cjs/token-amount/TokenAmount.cjs.map +1 -1
  152. package/dist/cjs/token-selector/TokenSelector.cjs +56 -64
  153. package/dist/cjs/token-selector/TokenSelector.cjs.map +1 -1
  154. package/dist/cjs/tooltip/Tooltip.cjs +42 -27
  155. package/dist/cjs/tooltip/Tooltip.cjs.map +1 -1
  156. package/dist/cjs/tx-status/TxStatus.cjs +2 -0
  157. package/dist/cjs/tx-status/TxStatus.cjs.map +1 -1
  158. package/dist/cjs/typography/Typography.cjs +2 -0
  159. package/dist/cjs/typography/Typography.cjs.map +1 -1
  160. package/dist/cjs/utils/ActionElement.cjs +2 -13
  161. package/dist/cjs/utils/ActionElement.cjs.map +1 -1
  162. package/dist/cjs/utils/breakpoints.cjs +26 -0
  163. package/dist/cjs/utils/breakpoints.cjs.map +1 -0
  164. package/dist/cjs/utils/responsive.cjs +19 -30
  165. package/dist/cjs/utils/responsive.cjs.map +1 -1
  166. package/dist/esm/accordion/Accordion.mjs +1 -0
  167. package/dist/esm/accordion/Accordion.mjs.map +1 -1
  168. package/dist/esm/badge/Badge.mjs +1 -0
  169. package/dist/esm/badge/Badge.mjs.map +1 -1
  170. package/dist/esm/banner/Banner.mjs +1 -0
  171. package/dist/esm/banner/Banner.mjs.map +1 -1
  172. package/dist/esm/breadcrumbs/Breadcrumbs.mjs +56 -27
  173. package/dist/esm/breadcrumbs/Breadcrumbs.mjs.map +1 -1
  174. package/dist/esm/breadcrumbs/Breadcrumbs.module.css.mjs +1 -1
  175. package/dist/esm/button/Button.mjs +15 -24
  176. package/dist/esm/button/Button.mjs.map +1 -1
  177. package/dist/esm/button/ButtonContent.mjs +45 -0
  178. package/dist/esm/button/ButtonContent.mjs.map +1 -0
  179. package/dist/esm/button/LinkButton.mjs +42 -0
  180. package/dist/esm/button/LinkButton.mjs.map +1 -0
  181. package/dist/esm/card/Card.mjs +1 -0
  182. package/dist/esm/card/Card.mjs.map +1 -1
  183. package/dist/esm/checkbox/Checkbox.mjs +1 -0
  184. package/dist/esm/checkbox/Checkbox.mjs.map +1 -1
  185. package/dist/esm/counter/Counter.mjs +6 -2
  186. package/dist/esm/counter/Counter.mjs.map +1 -1
  187. package/dist/esm/counter/CounterSlot.mjs +19 -3
  188. package/dist/esm/counter/CounterSlot.mjs.map +1 -1
  189. package/dist/esm/counter/CounterSlot.module.css.mjs +1 -1
  190. package/dist/esm/data-list/DataList.mjs +1 -0
  191. package/dist/esm/data-list/DataList.mjs.map +1 -1
  192. package/dist/esm/data-list/DataListRow.mjs +2 -0
  193. package/dist/esm/data-list/DataListRow.mjs.map +1 -1
  194. package/dist/esm/disclaimer/Disclaimer.mjs +10 -3
  195. package/dist/esm/disclaimer/Disclaimer.mjs.map +1 -1
  196. package/dist/esm/divider/Divider.mjs +5 -0
  197. package/dist/esm/divider/Divider.mjs.map +1 -1
  198. package/dist/esm/error-page/ErrorPage.mjs +14 -7
  199. package/dist/esm/error-page/ErrorPage.mjs.map +1 -1
  200. package/dist/esm/footer/Footer.mjs +10 -2
  201. package/dist/esm/footer/Footer.mjs.map +1 -1
  202. package/dist/esm/grid/Grid.mjs +8 -4
  203. package/dist/esm/grid/Grid.mjs.map +1 -1
  204. package/dist/esm/grid/Grid.module.css.mjs +1 -1
  205. package/dist/esm/grid/GridItem.mjs +2 -0
  206. package/dist/esm/grid/GridItem.mjs.map +1 -1
  207. package/dist/esm/header/Header.mjs +10 -2
  208. package/dist/esm/header/Header.mjs.map +1 -1
  209. package/dist/esm/header/HeaderNav.mjs +34 -22
  210. package/dist/esm/header/HeaderNav.mjs.map +1 -1
  211. package/dist/esm/header/HeaderNav.module.css.mjs +1 -1
  212. package/dist/esm/hidden/Hidden.mjs +10 -4
  213. package/dist/esm/hidden/Hidden.mjs.map +1 -1
  214. package/dist/esm/hooks/Portal.mjs +16 -13
  215. package/dist/esm/hooks/Portal.mjs.map +1 -1
  216. package/dist/esm/hooks/useBodyScrollLock.mjs +49 -13
  217. package/dist/esm/hooks/useBodyScrollLock.mjs.map +1 -1
  218. package/dist/esm/hooks/useEdgeFade.mjs +56 -0
  219. package/dist/esm/hooks/useEdgeFade.mjs.map +1 -0
  220. package/dist/esm/hooks/useEscape.mjs +8 -5
  221. package/dist/esm/hooks/useEscape.mjs.map +1 -1
  222. package/dist/esm/hooks/useFocusTrap.mjs +61 -24
  223. package/dist/esm/hooks/useFocusTrap.mjs.map +1 -1
  224. package/dist/esm/hooks/useHideOthers.mjs +47 -0
  225. package/dist/esm/hooks/useHideOthers.mjs.map +1 -0
  226. package/dist/esm/hooks/useOutsideClick.mjs +31 -4
  227. package/dist/esm/hooks/useOutsideClick.mjs.map +1 -1
  228. package/dist/esm/icon-button/IconButton.mjs +4 -0
  229. package/dist/esm/icon-button/IconButton.mjs.map +1 -1
  230. package/dist/esm/icons/TokenIcon.mjs +2 -0
  231. package/dist/esm/icons/TokenIcon.mjs.map +1 -1
  232. package/dist/esm/identicon/Identicon.mjs +2 -0
  233. package/dist/esm/identicon/Identicon.mjs.map +1 -1
  234. package/dist/esm/index.css +12 -4
  235. package/dist/esm/index.mjs +13 -1
  236. package/dist/esm/index.mjs.map +1 -1
  237. package/dist/esm/input/Input.mjs +1 -0
  238. package/dist/esm/input/Input.mjs.map +1 -1
  239. package/dist/esm/link-provider/Anchor.mjs +23 -2
  240. package/dist/esm/link-provider/Anchor.mjs.map +1 -1
  241. package/dist/esm/link-provider/LinkProvider.mjs +1 -1
  242. package/dist/esm/link-provider/LinkProvider.mjs.map +1 -1
  243. package/dist/esm/logo/Logo.mjs +9 -1
  244. package/dist/esm/logo/Logo.mjs.map +1 -1
  245. package/dist/esm/message-box/MessageBox.mjs +1 -0
  246. package/dist/esm/message-box/MessageBox.mjs.map +1 -1
  247. package/dist/esm/modal/Modal.mjs +72 -11
  248. package/dist/esm/modal/Modal.mjs.map +1 -1
  249. package/dist/esm/nav-link/NavLink.mjs +6 -4
  250. package/dist/esm/nav-link/NavLink.mjs.map +1 -1
  251. package/dist/esm/notification/Notification.mjs +13 -7
  252. package/dist/esm/notification/Notification.mjs.map +1 -1
  253. package/dist/esm/page-layout/Layout.mjs +21 -0
  254. package/dist/esm/page-layout/Layout.mjs.map +1 -0
  255. package/dist/esm/page-layout/Layout.module.css.mjs +4 -0
  256. package/dist/esm/page-layout/Layout.module.css.mjs.map +1 -0
  257. package/dist/esm/page-layout/Main.mjs +24 -0
  258. package/dist/esm/page-layout/Main.mjs.map +1 -0
  259. package/dist/esm/page-layout/Main.module.css.mjs +4 -0
  260. package/dist/esm/page-layout/Main.module.css.mjs.map +1 -0
  261. package/dist/esm/page-layout/PageContent.mjs +18 -0
  262. package/dist/esm/page-layout/PageContent.mjs.map +1 -0
  263. package/dist/esm/page-layout/PageContent.module.css.mjs +4 -0
  264. package/dist/esm/page-layout/PageContent.module.css.mjs.map +1 -0
  265. package/dist/esm/pagination/Pagination.mjs +12 -7
  266. package/dist/esm/pagination/Pagination.mjs.map +1 -1
  267. package/dist/esm/popover/Popover.mjs +72 -16
  268. package/dist/esm/popover/Popover.mjs.map +1 -1
  269. package/dist/esm/radio-button/RadioButton.mjs +1 -0
  270. package/dist/esm/radio-button/RadioButton.mjs.map +1 -1
  271. package/dist/esm/rich-input/RichInput.mjs +19 -40
  272. package/dist/esm/rich-input/RichInput.mjs.map +1 -1
  273. package/dist/esm/rich-input/RichInput.module.css.mjs +1 -1
  274. package/dist/esm/section-title/SectionTitle.mjs +1 -0
  275. package/dist/esm/section-title/SectionTitle.mjs.map +1 -1
  276. package/dist/esm/segmented-control/SegmentedControl.mjs +1 -0
  277. package/dist/esm/segmented-control/SegmentedControl.mjs.map +1 -1
  278. package/dist/esm/segmented-control/SegmentedControlCard.mjs +1 -0
  279. package/dist/esm/segmented-control/SegmentedControlCard.mjs.map +1 -1
  280. package/dist/esm/sidebar/Sidebar.mjs +11 -4
  281. package/dist/esm/sidebar/Sidebar.mjs.map +1 -1
  282. package/dist/esm/sidebar/SidebarToggle.mjs +1 -1
  283. package/dist/esm/sidebar/SidebarToggle.mjs.map +1 -1
  284. package/dist/esm/skeleton/Skeleton.mjs +18 -20
  285. package/dist/esm/skeleton/Skeleton.mjs.map +1 -1
  286. package/dist/esm/skip-link/SkipLink.mjs +48 -0
  287. package/dist/esm/skip-link/SkipLink.mjs.map +1 -0
  288. package/dist/esm/skip-link/SkipLink.module.css.mjs +4 -0
  289. package/dist/esm/skip-link/SkipLink.module.css.mjs.map +1 -0
  290. package/dist/esm/slider/Slider.mjs +1 -0
  291. package/dist/esm/slider/Slider.mjs.map +1 -1
  292. package/dist/esm/small-card/SmallCard.mjs +6 -2
  293. package/dist/esm/small-card/SmallCard.mjs.map +1 -1
  294. package/dist/esm/stack/Stack.mjs +28 -9
  295. package/dist/esm/stack/Stack.mjs.map +1 -1
  296. package/dist/esm/stack/Stack.module.css.mjs +1 -1
  297. package/dist/esm/stat-item/StatItem.mjs +1 -0
  298. package/dist/esm/stat-item/StatItem.mjs.map +1 -1
  299. package/dist/esm/switch/Switch.mjs +1 -0
  300. package/dist/esm/switch/Switch.mjs.map +1 -1
  301. package/dist/esm/tabs/Tabs.mjs +1 -0
  302. package/dist/esm/tabs/Tabs.mjs.map +1 -1
  303. package/dist/esm/tag/Tag.mjs +74 -9
  304. package/dist/esm/tag/Tag.mjs.map +1 -1
  305. package/dist/esm/tag/Tag.module.css.mjs +1 -1
  306. package/dist/esm/text-link/TextLink.mjs +10 -13
  307. package/dist/esm/text-link/TextLink.mjs.map +1 -1
  308. package/dist/esm/text-link/TextLink.module.css.mjs +1 -1
  309. package/dist/esm/theme-switcher/ThemeSwitcher.mjs +14 -6
  310. package/dist/esm/theme-switcher/ThemeSwitcher.mjs.map +1 -1
  311. package/dist/esm/theme-switcher/ThemeSwitcher.module.css.mjs +4 -0
  312. package/dist/esm/theme-switcher/ThemeSwitcher.module.css.mjs.map +1 -0
  313. package/dist/esm/token-amount/TokenAmount.mjs +1 -0
  314. package/dist/esm/token-amount/TokenAmount.mjs.map +1 -1
  315. package/dist/esm/token-selector/TokenSelector.mjs +58 -66
  316. package/dist/esm/token-selector/TokenSelector.mjs.map +1 -1
  317. package/dist/esm/tooltip/Tooltip.mjs +42 -27
  318. package/dist/esm/tooltip/Tooltip.mjs.map +1 -1
  319. package/dist/esm/tx-status/TxStatus.mjs +2 -0
  320. package/dist/esm/tx-status/TxStatus.mjs.map +1 -1
  321. package/dist/esm/typography/Typography.mjs +2 -0
  322. package/dist/esm/typography/Typography.mjs.map +1 -1
  323. package/dist/esm/utils/ActionElement.mjs +2 -13
  324. package/dist/esm/utils/ActionElement.mjs.map +1 -1
  325. package/dist/esm/utils/breakpoints.mjs +19 -0
  326. package/dist/esm/utils/breakpoints.mjs.map +1 -0
  327. package/dist/esm/utils/responsive.mjs +17 -27
  328. package/dist/esm/utils/responsive.mjs.map +1 -1
  329. package/dist/index.css +12 -4
  330. package/dist/styles/breakpoints.css +16 -12
  331. package/dist/styles/typography-mixins.css +8 -0
  332. package/dist/types/accordion/Accordion.d.ts +3 -0
  333. package/dist/types/accordion/Accordion.d.ts.map +1 -1
  334. package/dist/types/badge/Badge.d.ts +1 -0
  335. package/dist/types/badge/Badge.d.ts.map +1 -1
  336. package/dist/types/banner/Banner.d.ts +1 -0
  337. package/dist/types/banner/Banner.d.ts.map +1 -1
  338. package/dist/types/breadcrumbs/Breadcrumbs.d.ts +17 -1
  339. package/dist/types/breadcrumbs/Breadcrumbs.d.ts.map +1 -1
  340. package/dist/types/breadcrumbs/index.d.ts +1 -1
  341. package/dist/types/breadcrumbs/index.d.ts.map +1 -1
  342. package/dist/types/button/Button.d.ts +6 -26
  343. package/dist/types/button/Button.d.ts.map +1 -1
  344. package/dist/types/button/ButtonContent.d.ts +10 -0
  345. package/dist/types/button/ButtonContent.d.ts.map +1 -0
  346. package/dist/types/button/LinkButton.d.ts +10 -0
  347. package/dist/types/button/LinkButton.d.ts.map +1 -0
  348. package/dist/types/button/index.d.ts +2 -0
  349. package/dist/types/button/index.d.ts.map +1 -1
  350. package/dist/types/button/types.d.ts +26 -0
  351. package/dist/types/button/types.d.ts.map +1 -0
  352. package/dist/types/card/Card.d.ts +1 -0
  353. package/dist/types/card/Card.d.ts.map +1 -1
  354. package/dist/types/checkbox/Checkbox.d.ts +3 -0
  355. package/dist/types/checkbox/Checkbox.d.ts.map +1 -1
  356. package/dist/types/colors/colorTokens.d.ts.map +1 -1
  357. package/dist/types/counter/Counter.d.ts +6 -2
  358. package/dist/types/counter/Counter.d.ts.map +1 -1
  359. package/dist/types/counter/CounterSlot.d.ts +3 -0
  360. package/dist/types/counter/CounterSlot.d.ts.map +1 -1
  361. package/dist/types/data-list/DataList.d.ts +1 -0
  362. package/dist/types/data-list/DataList.d.ts.map +1 -1
  363. package/dist/types/data-list/DataListRow.d.ts +1 -0
  364. package/dist/types/data-list/DataListRow.d.ts.map +1 -1
  365. package/dist/types/disclaimer/Disclaimer.d.ts +9 -2
  366. package/dist/types/disclaimer/Disclaimer.d.ts.map +1 -1
  367. package/dist/types/divider/Divider.d.ts +5 -0
  368. package/dist/types/divider/Divider.d.ts.map +1 -1
  369. package/dist/types/divider/index.d.ts +1 -1
  370. package/dist/types/divider/index.d.ts.map +1 -1
  371. package/dist/types/error-page/ErrorPage.d.ts +17 -4
  372. package/dist/types/error-page/ErrorPage.d.ts.map +1 -1
  373. package/dist/types/footer/Footer.d.ts +17 -2
  374. package/dist/types/footer/Footer.d.ts.map +1 -1
  375. package/dist/types/footer/index.d.ts +1 -1
  376. package/dist/types/footer/index.d.ts.map +1 -1
  377. package/dist/types/grid/Grid.d.ts +21 -22
  378. package/dist/types/grid/Grid.d.ts.map +1 -1
  379. package/dist/types/grid/GridItem.d.ts +14 -10
  380. package/dist/types/grid/GridItem.d.ts.map +1 -1
  381. package/dist/types/grid/index.d.ts +2 -2
  382. package/dist/types/grid/index.d.ts.map +1 -1
  383. package/dist/types/header/Header.d.ts +15 -2
  384. package/dist/types/header/Header.d.ts.map +1 -1
  385. package/dist/types/header/HeaderNav.d.ts +10 -2
  386. package/dist/types/header/HeaderNav.d.ts.map +1 -1
  387. package/dist/types/header/index.d.ts +2 -2
  388. package/dist/types/header/index.d.ts.map +1 -1
  389. package/dist/types/hidden/Hidden.d.ts +20 -6
  390. package/dist/types/hidden/Hidden.d.ts.map +1 -1
  391. package/dist/types/hidden/index.d.ts +1 -1
  392. package/dist/types/hidden/index.d.ts.map +1 -1
  393. package/dist/types/hooks/Portal.d.ts +2 -5
  394. package/dist/types/hooks/Portal.d.ts.map +1 -1
  395. package/dist/types/hooks/index.d.ts +2 -0
  396. package/dist/types/hooks/index.d.ts.map +1 -1
  397. package/dist/types/hooks/useBodyScrollLock.d.ts +4 -2
  398. package/dist/types/hooks/useBodyScrollLock.d.ts.map +1 -1
  399. package/dist/types/hooks/useEdgeFade.d.ts +7 -0
  400. package/dist/types/hooks/useEdgeFade.d.ts.map +1 -0
  401. package/dist/types/hooks/useEscape.d.ts +4 -2
  402. package/dist/types/hooks/useEscape.d.ts.map +1 -1
  403. package/dist/types/hooks/useFocusTrap.d.ts +7 -3
  404. package/dist/types/hooks/useFocusTrap.d.ts.map +1 -1
  405. package/dist/types/hooks/useHideOthers.d.ts +3 -0
  406. package/dist/types/hooks/useHideOthers.d.ts.map +1 -0
  407. package/dist/types/hooks/useOutsideClick.d.ts +4 -2
  408. package/dist/types/hooks/useOutsideClick.d.ts.map +1 -1
  409. package/dist/types/icon-button/IconButton.d.ts +15 -2
  410. package/dist/types/icon-button/IconButton.d.ts.map +1 -1
  411. package/dist/types/icons/TokenIcon.d.ts +1 -0
  412. package/dist/types/icons/TokenIcon.d.ts.map +1 -1
  413. package/dist/types/identicon/Identicon.d.ts +5 -0
  414. package/dist/types/identicon/Identicon.d.ts.map +1 -1
  415. package/dist/types/index.d.ts +5 -0
  416. package/dist/types/index.d.ts.map +1 -1
  417. package/dist/types/input/Input.d.ts +1 -0
  418. package/dist/types/input/Input.d.ts.map +1 -1
  419. package/dist/types/link-provider/Anchor.d.ts +17 -1
  420. package/dist/types/link-provider/Anchor.d.ts.map +1 -1
  421. package/dist/types/link-provider/LinkProvider.d.ts +8 -2
  422. package/dist/types/link-provider/LinkProvider.d.ts.map +1 -1
  423. package/dist/types/link-provider/index.d.ts +1 -1
  424. package/dist/types/link-provider/index.d.ts.map +1 -1
  425. package/dist/types/logo/Logo.d.ts +20 -3
  426. package/dist/types/logo/Logo.d.ts.map +1 -1
  427. package/dist/types/logo/index.d.ts +1 -1
  428. package/dist/types/logo/index.d.ts.map +1 -1
  429. package/dist/types/message-box/MessageBox.d.ts +3 -0
  430. package/dist/types/message-box/MessageBox.d.ts.map +1 -1
  431. package/dist/types/modal/Modal.d.ts +21 -3
  432. package/dist/types/modal/Modal.d.ts.map +1 -1
  433. package/dist/types/modal/index.d.ts +2 -2
  434. package/dist/types/modal/index.d.ts.map +1 -1
  435. package/dist/types/nav-link/NavLink.d.ts +17 -0
  436. package/dist/types/nav-link/NavLink.d.ts.map +1 -1
  437. package/dist/types/nav-link/index.d.ts +1 -1
  438. package/dist/types/nav-link/index.d.ts.map +1 -1
  439. package/dist/types/notification/Notification.d.ts +7 -2
  440. package/dist/types/notification/Notification.d.ts.map +1 -1
  441. package/dist/types/page-layout/Layout.d.ts +5 -0
  442. package/dist/types/page-layout/Layout.d.ts.map +1 -0
  443. package/dist/types/page-layout/Main.d.ts +6 -0
  444. package/dist/types/page-layout/Main.d.ts.map +1 -0
  445. package/dist/types/page-layout/PageContent.d.ts +7 -0
  446. package/dist/types/page-layout/PageContent.d.ts.map +1 -0
  447. package/dist/types/page-layout/index.d.ts +7 -0
  448. package/dist/types/page-layout/index.d.ts.map +1 -0
  449. package/dist/types/pagination/Pagination.d.ts +3 -0
  450. package/dist/types/pagination/Pagination.d.ts.map +1 -1
  451. package/dist/types/popover/Popover.d.ts +32 -4
  452. package/dist/types/popover/Popover.d.ts.map +1 -1
  453. package/dist/types/popover/index.d.ts +1 -1
  454. package/dist/types/popover/index.d.ts.map +1 -1
  455. package/dist/types/radio-button/RadioButton.d.ts +3 -0
  456. package/dist/types/radio-button/RadioButton.d.ts.map +1 -1
  457. package/dist/types/rich-input/RichInput.d.ts +8 -1
  458. package/dist/types/rich-input/RichInput.d.ts.map +1 -1
  459. package/dist/types/section-title/SectionTitle.d.ts +1 -0
  460. package/dist/types/section-title/SectionTitle.d.ts.map +1 -1
  461. package/dist/types/segmented-control/SegmentedControl.d.ts +1 -0
  462. package/dist/types/segmented-control/SegmentedControl.d.ts.map +1 -1
  463. package/dist/types/segmented-control/SegmentedControlCard.d.ts +1 -0
  464. package/dist/types/segmented-control/SegmentedControlCard.d.ts.map +1 -1
  465. package/dist/types/sidebar/Sidebar.d.ts +2 -2
  466. package/dist/types/sidebar/Sidebar.d.ts.map +1 -1
  467. package/dist/types/sidebar/SidebarToggle.d.ts +1 -1
  468. package/dist/types/skeleton/Skeleton.d.ts +17 -3
  469. package/dist/types/skeleton/Skeleton.d.ts.map +1 -1
  470. package/dist/types/skip-link/SkipLink.d.ts +11 -0
  471. package/dist/types/skip-link/SkipLink.d.ts.map +1 -0
  472. package/dist/types/skip-link/index.d.ts +3 -0
  473. package/dist/types/skip-link/index.d.ts.map +1 -0
  474. package/dist/types/slider/Slider.d.ts +1 -0
  475. package/dist/types/slider/Slider.d.ts.map +1 -1
  476. package/dist/types/small-card/SmallCard.d.ts +21 -2
  477. package/dist/types/small-card/SmallCard.d.ts.map +1 -1
  478. package/dist/types/stack/Stack.d.ts +24 -15
  479. package/dist/types/stack/Stack.d.ts.map +1 -1
  480. package/dist/types/stack/index.d.ts +1 -1
  481. package/dist/types/stack/index.d.ts.map +1 -1
  482. package/dist/types/stat-item/StatItem.d.ts +6 -0
  483. package/dist/types/stat-item/StatItem.d.ts.map +1 -1
  484. package/dist/types/switch/Switch.d.ts +3 -0
  485. package/dist/types/switch/Switch.d.ts.map +1 -1
  486. package/dist/types/tabs/Tabs.d.ts +1 -0
  487. package/dist/types/tabs/Tabs.d.ts.map +1 -1
  488. package/dist/types/tag/Tag.d.ts +31 -3
  489. package/dist/types/tag/Tag.d.ts.map +1 -1
  490. package/dist/types/text-link/TextLink.d.ts +25 -2
  491. package/dist/types/text-link/TextLink.d.ts.map +1 -1
  492. package/dist/types/text-link/index.d.ts +1 -1
  493. package/dist/types/text-link/index.d.ts.map +1 -1
  494. package/dist/types/theme-switcher/ThemeSwitcher.d.ts +9 -3
  495. package/dist/types/theme-switcher/ThemeSwitcher.d.ts.map +1 -1
  496. package/dist/types/token-amount/TokenAmount.d.ts +1 -0
  497. package/dist/types/token-amount/TokenAmount.d.ts.map +1 -1
  498. package/dist/types/token-selector/TokenSelector.d.ts +5 -1
  499. package/dist/types/token-selector/TokenSelector.d.ts.map +1 -1
  500. package/dist/types/tooltip/Tooltip.d.ts +2 -0
  501. package/dist/types/tooltip/Tooltip.d.ts.map +1 -1
  502. package/dist/types/tx-status/TxStatus.d.ts +3 -0
  503. package/dist/types/tx-status/TxStatus.d.ts.map +1 -1
  504. package/dist/types/typography/Typography.d.ts +4 -0
  505. package/dist/types/typography/Typography.d.ts.map +1 -1
  506. package/dist/types/utils/ActionElement.d.ts +4 -4
  507. package/dist/types/utils/ActionElement.d.ts.map +1 -1
  508. package/dist/types/utils/breakpoints.d.ts +16 -0
  509. package/dist/types/utils/breakpoints.d.ts.map +1 -0
  510. package/dist/types/utils/index.d.ts +5 -2
  511. package/dist/types/utils/index.d.ts.map +1 -1
  512. package/dist/types/utils/polymorphic.d.ts +15 -0
  513. package/dist/types/utils/polymorphic.d.ts.map +1 -0
  514. package/dist/types/utils/responsive.d.ts +29 -14
  515. package/dist/types/utils/responsive.d.ts.map +1 -1
  516. package/package.json +6 -2
@@ -2,29 +2,37 @@
2
2
 
3
3
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
4
 
5
+ const react = require('react');
5
6
  const cn = require('classnames');
6
7
  const Footer_module = require('./Footer.module.css.cjs');
7
8
  const jsxRuntime = require('react/jsx-runtime');
8
9
 
9
- const Footer = _ref => {
10
+ /** App footer shell with page background, top border and page gutters. */
11
+ const Footer = /*#__PURE__*/react.forwardRef((_ref, ref) => {
10
12
  let {
11
13
  children,
12
14
  aside,
13
15
  className,
16
+ dataTestId,
14
17
  ...rest
15
18
  } = _ref;
16
19
  return /*#__PURE__*/jsxRuntime.jsxs("footer", {
20
+ ref: ref,
17
21
  className: cn(Footer_module.footer, className),
22
+ "data-testid": dataTestId?.root,
18
23
  ...rest,
19
24
  children: [/*#__PURE__*/jsxRuntime.jsx("div", {
20
25
  className: Footer_module.content,
26
+ "data-testid": dataTestId?.content,
21
27
  children: children
22
28
  }), aside != null ? /*#__PURE__*/jsxRuntime.jsx("div", {
23
29
  className: Footer_module.aside,
30
+ "data-testid": dataTestId?.aside,
24
31
  children: aside
25
32
  }) : null]
26
33
  });
27
- };
34
+ });
35
+ Footer.displayName = 'Footer';
28
36
 
29
37
  exports.Footer = Footer;
30
38
  //# sourceMappingURL=Footer.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Footer.cjs","sources":["../../../src/footer/Footer.tsx"],"sourcesContent":["import type { ComponentPropsWithoutRef, ReactNode } from 'react'\n\nimport cn from 'classnames'\n\nimport styles from './Footer.module.css'\n\nexport type FooterProps = ComponentPropsWithoutRef<'footer'> & {\n /** Right slot, e.g. version tag. */\n aside?: ReactNode\n}\n\nexport const Footer = ({\n children,\n aside,\n className,\n ...rest\n}: FooterProps) => (\n <footer className={cn(styles.footer, className)} {...rest}>\n <div className={styles.content}>{children}</div>\n {aside != null ? <div className={styles.aside}>{aside}</div> : null}\n </footer>\n)\n"],"names":["Footer","_ref","children","aside","className","rest","_jsxs","cn","styles","footer","_jsx","content"],"mappings":";;;;;;;;AAWO,MAAMA,MAAM,GAAGC,IAAA,IAAA;EAAA,IAAC;IACrBC,QAAQ;IACRC,KAAK;IACLC,SAAS;IACT,GAAGC,IAAAA;AACQ,GAAC,GAAAJ,IAAA,CAAA;AAAA,EAAA,oBACZK,eAAA,CAAA,QAAA,EAAA;IAAQF,SAAS,EAAEG,EAAE,CAACC,aAAM,CAACC,MAAM,EAAEL,SAAS,CAAE;AAAA,IAAA,GAAKC,IAAI;AAAAH,IAAAA,QAAA,gBACvDQ,cAAA,CAAA,KAAA,EAAA;MAAKN,SAAS,EAAEI,aAAM,CAACG,OAAQ;AAAAT,MAAAA,QAAA,EAAEA,QAAAA;AAAQ,KAAM,CAAC,EAC/CC,KAAK,IAAI,IAAI,gBAAGO,cAAA,CAAA,KAAA,EAAA;MAAKN,SAAS,EAAEI,aAAM,CAACL,KAAM;AAAAD,MAAAA,QAAA,EAAEC,KAAAA;KAAW,CAAC,GAAG,IAAI,CAAA;AAAA,GAC7D,CAAC,CAAA;AAAA;;;;"}
1
+ {"version":3,"file":"Footer.cjs","sources":["../../../src/footer/Footer.tsx"],"sourcesContent":["import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from 'react'\n\nimport cn from 'classnames'\n\nimport styles from './Footer.module.css'\n\nexport type FooterDataTestId = {\n root?: string\n content?: string\n aside?: string\n}\n\nexport type FooterProps = ComponentPropsWithoutRef<'footer'> & {\n /** Left row of links or text; wraps. */\n children?: ReactNode\n /** Right slot, e.g. version tag. */\n aside?: ReactNode\n dataTestId?: FooterDataTestId\n}\n\n/** App footer shell with page background, top border and page gutters. */\nexport const Footer = forwardRef<HTMLElement, FooterProps>(\n ({ children, aside, className, dataTestId, ...rest }, ref) => (\n <footer\n ref={ref}\n className={cn(styles.footer, className)}\n data-testid={dataTestId?.root}\n {...rest}\n >\n <div className={styles.content} data-testid={dataTestId?.content}>\n {children}\n </div>\n {aside != null ? (\n <div className={styles.aside} data-testid={dataTestId?.aside}>\n {aside}\n </div>\n ) : null}\n </footer>\n ),\n)\n\nFooter.displayName = 'Footer'\n"],"names":["Footer","forwardRef","_ref","ref","children","aside","className","dataTestId","rest","_jsxs","cn","styles","footer","root","_jsx","content","displayName"],"mappings":";;;;;;;;;AAwBA;AACO,MAAMA,MAAM,gBAAGC,gBAAU,CAC9B,CAAAC,IAAA,EAAsDC,GAAG,KAAA;EAAA,IAAxD;IAAEC,QAAQ;IAAEC,KAAK;IAAEC,SAAS;IAAEC,UAAU;IAAE,GAAGC,IAAAA;AAAK,GAAC,GAAAN,IAAA,CAAA;AAAA,EAAA,oBAClDO,eAAA,CAAA,QAAA,EAAA;AACEN,IAAAA,GAAG,EAAEA,GAAI;IACTG,SAAS,EAAEI,EAAE,CAACC,aAAM,CAACC,MAAM,EAAEN,SAAS,CAAE;IACxC,aAAaC,EAAAA,UAAU,EAAEM,IAAK;AAAA,IAAA,GAC1BL,IAAI;AAAAJ,IAAAA,QAAA,gBAERU,cAAA,CAAA,KAAA,EAAA;MAAKR,SAAS,EAAEK,aAAM,CAACI,OAAQ;MAAC,aAAaR,EAAAA,UAAU,EAAEQ,OAAQ;AAAAX,MAAAA,QAAA,EAC9DA,QAAAA;AAAQ,KACN,CAAC,EACLC,KAAK,IAAI,IAAI,gBACZS,cAAA,CAAA,KAAA,EAAA;MAAKR,SAAS,EAAEK,aAAM,CAACN,KAAM;MAAC,aAAaE,EAAAA,UAAU,EAAEF,KAAM;AAAAD,MAAAA,QAAA,EAC1DC,KAAAA;KACE,CAAC,GACJ,IAAI,CAAA;AAAA,GACF,CAAC,CAAA;AAAA,CAEb,EAAC;AAEDL,MAAM,CAACgB,WAAW,GAAG,QAAQ;;;;"}
@@ -4,13 +4,14 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
4
 
5
5
  const react = require('react');
6
6
  const cn = require('classnames');
7
+ const Stack = require('../stack/Stack.cjs');
7
8
  const Grid_module = require('./Grid.module.css.cjs');
8
9
  const jsxRuntime = require('react/jsx-runtime');
9
10
  const responsive = require('../utils/responsive.cjs');
10
11
 
11
12
  const columnsToCss = columns => typeof columns === 'number' ? `repeat(${columns}, minmax(0, 1fr))` : columns;
12
13
 
13
- /** CSS grid container with equal, templated or auto-fit columns and a spacing scale. */
14
+ /** CSS grid container; `columns`, `gap` and `align` take a value or a desktop-first per-breakpoint object like `{ base: 4, mdDown: 2 }`. Use `minItemWidth` to adapt to the container width instead of the viewport. */
14
15
  const Grid = /*#__PURE__*/react.forwardRef((_ref, ref) => {
15
16
  let {
16
17
  as: Component = 'div',
@@ -22,6 +23,7 @@ const Grid = /*#__PURE__*/react.forwardRef((_ref, ref) => {
22
23
  align,
23
24
  className,
24
25
  style,
26
+ dataTestId,
25
27
  ...rest
26
28
  } = _ref;
27
29
  const minWidth = typeof minItemWidth === 'number' ? `${minItemWidth}px` : minItemWidth;
@@ -29,15 +31,17 @@ const Grid = /*#__PURE__*/react.forwardRef((_ref, ref) => {
29
31
  const vars = {
30
32
  ...responsive.responsiveVars('columns', template, columnsToCss),
31
33
  ...responsive.responsiveVars('rowGap', responsive.mergeResponsive(gap, rowGap), responsive.spaceToCss),
32
- ...responsive.responsiveVars('columnGap', responsive.mergeResponsive(gap, columnGap), responsive.spaceToCss)
34
+ ...responsive.responsiveVars('columnGap', responsive.mergeResponsive(gap, columnGap), responsive.spaceToCss),
35
+ ...responsive.responsiveVars('align', align, Stack.alignToCss)
33
36
  };
34
37
  return /*#__PURE__*/jsxRuntime.jsx(Component, {
35
38
  ref: ref,
36
- className: cn(Grid_module.root, align && Grid_module[`align${responsive.capitalize(align)}`], className),
39
+ className: cn(Grid_module.root, className),
37
40
  style: {
38
41
  ...vars,
39
42
  ...style
40
43
  },
44
+ "data-testid": dataTestId?.root,
41
45
  ...rest
42
46
  });
43
47
  });
@@ -1 +1 @@
1
- {"version":3,"file":"Grid.cjs","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,gBAAU,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,yBAAc,CAAC,SAAS,EAAEH,QAAQ,EAAEjB,YAAY,CAAC;AACpD,IAAA,GAAGoB,yBAAc,CAAC,QAAQ,EAAEC,0BAAe,CAACZ,GAAG,EAAEC,MAAM,CAAC,EAAEY,qBAAU,CAAC;IACrE,GAAGF,yBAAc,CACf,WAAW,EACXC,0BAAe,CAACZ,GAAG,EAAEE,SAAS,CAAC,EAC/BW,qBACF,CAAA;GACD,CAAA;EAED,oBACEC,cAAA,CAAChB,SAAS,EAAA;AACRF,IAAAA,GAAG,EAAEA,GAAI;IACTQ,SAAS,EAAEW,EAAE,CACXC,WAAM,CAACC,IAAI,EACXd,KAAK,IAAIa,WAAM,CAAC,CAAQE,KAAAA,EAAAA,qBAAU,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;;;;"}
1
+ {"version":3,"file":"Grid.cjs","sources":["../../../src/grid/Grid.tsx"],"sourcesContent":["import { forwardRef, type ElementType, type HTMLAttributes } from 'react'\n\nimport cn from 'classnames'\n\nimport {\n mergeResponsive,\n responsiveVars,\n spaceToCss,\n type PolymorphicComponent,\n type PolymorphicProps,\n type Responsive,\n type Space,\n} from '../utils'\nimport { alignToCss, type StackAlign } from '../stack/Stack'\nimport styles from './Grid.module.css'\n\nexport type GridAlign = Exclude<StackAlign, 'baseline'>\n\nexport type GridDataTestId = { root?: string }\n\ntype GridOwnProps = {\n /** Per-breakpoint, desktop-first (see breakpointWidths); breakpoint keys follow the viewport width. 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). Responds to the Grid's own width, not the viewport; prefer it inside cards, panels and modals. Takes precedence over `columns`. */\n minItemWidth?: number | string\n /** Gap from the spacing scale in px. Per-breakpoint, desktop-first (see breakpointWidths). */\n gap?: Responsive<Space>\n /** Overrides `gap` for rows, merged per breakpoint key: keys you omit keep `gap`'s value. `16` and `{ base: 16 }` are the same. */\n rowGap?: Responsive<Space>\n /** Overrides `gap` for columns, merged per breakpoint key: keys you omit keep `gap`'s value. `16` and `{ base: 16 }` are the same. */\n columnGap?: Responsive<Space>\n /** Cross-axis alignment of items. Per-breakpoint, desktop-first (see breakpointWidths). */\n align?: Responsive<GridAlign | 'baseline'>\n dataTestId?: GridDataTestId\n}\n\ntype GridImplProps = HTMLAttributes<HTMLElement> &\n GridOwnProps & { as?: ElementType }\n\nexport type GridProps<E extends ElementType = never> = [E] extends [never]\n ? GridImplProps\n : PolymorphicProps<E, GridOwnProps>\n\nconst columnsToCss = (columns: number | string) =>\n typeof columns === 'number' ? `repeat(${columns}, minmax(0, 1fr))` : columns\n\n/** CSS grid container; `columns`, `gap` and `align` take a value or a desktop-first per-breakpoint object like `{ base: 4, mdDown: 2 }`. Use `minItemWidth` to adapt to the container width instead of the viewport. */\nexport const Grid = forwardRef<HTMLElement, GridImplProps>(\n (\n {\n as: Component = 'div',\n columns,\n minItemWidth,\n gap,\n rowGap,\n columnGap,\n align,\n className,\n style,\n dataTestId,\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 ...responsiveVars('align', align, alignToCss),\n }\n\n return (\n <Component\n ref={ref}\n className={cn(styles.root, className)}\n style={{ ...vars, ...style }}\n data-testid={dataTestId?.root}\n {...rest}\n />\n )\n },\n) as PolymorphicComponent<'div', GridOwnProps>\n\nGrid.displayName = 'Grid'\n"],"names":["columnsToCss","columns","Grid","forwardRef","_ref","ref","as","Component","minItemWidth","gap","rowGap","columnGap","align","className","style","dataTestId","rest","minWidth","template","undefined","vars","responsiveVars","mergeResponsive","spaceToCss","alignToCss","_jsx","cn","styles","root","displayName"],"mappings":";;;;;;;;;;;AA2CA,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,gBAAU,CAC5B,CAAAC,IAAA,EAcEC,GAAG,KACA;EAAA,IAdH;IACEC,EAAE,EAAEC,SAAS,GAAG,KAAK;IACrBN,OAAO;IACPO,YAAY;IACZC,GAAG;IACHC,MAAM;IACNC,SAAS;IACTC,KAAK;IACLC,SAAS;IACTC,KAAK;IACLC,UAAU;IACV,GAAGC,IAAAA;AACL,GAAC,GAAAZ,IAAA,CAAA;EAGD,MAAMa,QAAQ,GACZ,OAAOT,YAAY,KAAK,QAAQ,GAAG,CAAGA,EAAAA,YAAY,CAAI,EAAA,CAAA,GAAGA,YAAY,CAAA;EACvE,MAAMU,QAAQ,GACZV,YAAY,KAAKW,SAAS,GACtB,CAA+BF,4BAAAA,EAAAA,QAAQ,CAAgB,cAAA,CAAA,GACvDhB,OAAO,CAAA;AAEb,EAAA,MAAMmB,IAAI,GAAG;AACX,IAAA,GAAGC,yBAAc,CAAC,SAAS,EAAEH,QAAQ,EAAElB,YAAY,CAAC;AACpD,IAAA,GAAGqB,yBAAc,CAAC,QAAQ,EAAEC,0BAAe,CAACb,GAAG,EAAEC,MAAM,CAAC,EAAEa,qBAAU,CAAC;AACrE,IAAA,GAAGF,yBAAc,CACf,WAAW,EACXC,0BAAe,CAACb,GAAG,EAAEE,SAAS,CAAC,EAC/BY,qBACF,CAAC;AACD,IAAA,GAAGF,yBAAc,CAAC,OAAO,EAAET,KAAK,EAAEY,gBAAU,CAAA;GAC7C,CAAA;EAED,oBACEC,cAAA,CAAClB,SAAS,EAAA;AACRF,IAAAA,GAAG,EAAEA,GAAI;IACTQ,SAAS,EAAEa,EAAE,CAACC,WAAM,CAACC,IAAI,EAAEf,SAAS,CAAE;AACtCC,IAAAA,KAAK,EAAE;AAAE,MAAA,GAAGM,IAAI;MAAE,GAAGN,KAAAA;KAAQ;IAC7B,aAAaC,EAAAA,UAAU,EAAEa,IAAK;IAAA,GAC1BZ,IAAAA;AAAI,GACT,CAAC,CAAA;AAEN,CACF,EAA8C;AAE9Cd,IAAI,CAAC2B,WAAW,GAAG,MAAM;;;;"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- 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"};
3
+ const styles = {"root":"Grid-module_root__WQ5eA"};
4
4
 
5
5
  module.exports = styles;
6
6
  //# sourceMappingURL=Grid.module.css.cjs.map
@@ -18,6 +18,7 @@ const GridItem = /*#__PURE__*/react.forwardRef((_ref, ref) => {
18
18
  area,
19
19
  className,
20
20
  style,
21
+ dataTestId,
21
22
  ...rest
22
23
  } = _ref;
23
24
  return /*#__PURE__*/jsxRuntime.jsx(Component, {
@@ -30,6 +31,7 @@ const GridItem = /*#__PURE__*/react.forwardRef((_ref, ref) => {
30
31
  }),
31
32
  ...style
32
33
  },
34
+ "data-testid": dataTestId?.root,
33
35
  ...rest
34
36
  });
35
37
  });
@@ -1 +1 @@
1
- {"version":3,"file":"GridItem.cjs","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,gBAAU,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,cAAA,CAACL,SAAS,EAAA;AACRF,IAAAA,GAAG,EAAEA,GAAI;IACTI,SAAS,EAAEI,EAAE,CAACC,eAAM,CAACC,IAAI,EAAEN,SAAS,CAAE;AACtCC,IAAAA,KAAK,EAAE;AACL,MAAA,GAAGM,yBAAc,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;;;;"}
1
+ {"version":3,"file":"GridItem.cjs","sources":["../../../src/grid/GridItem.tsx"],"sourcesContent":["import { forwardRef, type ElementType, type HTMLAttributes } from 'react'\n\nimport cn from 'classnames'\n\nimport {\n responsiveVars,\n type PolymorphicComponent,\n type PolymorphicProps,\n type Responsive,\n} from '../utils'\nimport styles from './GridItem.module.css'\n\nexport type GridItemDataTestId = { root?: string }\n\ntype GridItemOwnProps = {\n /** Per-breakpoint, desktop-first (see breakpointWidths). Number of columns to span; `'full'` spans every column. When Grid `columns` shrinks, make `span` responsive too: a span wider than the current column count adds an empty implicit track, and its gap shortens every other cell. */\n span?: Responsive<number | 'full'>\n /** Places the item in a named `grid-template-areas` area. */\n area?: string\n dataTestId?: GridItemDataTestId\n}\n\ntype GridItemImplProps = HTMLAttributes<HTMLElement> &\n GridItemOwnProps & { as?: ElementType }\n\nexport type GridItemProps<E extends ElementType = never> = [E] extends [never]\n ? GridItemImplProps\n : PolymorphicProps<E, GridItemOwnProps>\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, GridItemImplProps>(\n (\n {\n as: Component = 'div',\n span,\n area,\n className,\n style,\n dataTestId,\n ...rest\n },\n ref,\n ) => {\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 data-testid={dataTestId?.root}\n {...rest}\n />\n )\n },\n) as PolymorphicComponent<'div', GridItemOwnProps>\n\nGridItem.displayName = 'GridItem'\n"],"names":["spanToCss","span","GridItem","forwardRef","_ref","ref","as","Component","area","className","style","dataTestId","rest","_jsx","cn","styles","root","responsiveVars","undefined","gridArea","displayName"],"mappings":";;;;;;;;;;AA6BA,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,gBAAU,CAChC,CAAAC,IAAA,EAUEC,GAAG,KACA;EAAA,IAVH;IACEC,EAAE,EAAEC,SAAS,GAAG,KAAK;IACrBN,IAAI;IACJO,IAAI;IACJC,SAAS;IACTC,KAAK;IACLC,UAAU;IACV,GAAGC,IAAAA;AACL,GAAC,GAAAR,IAAA,CAAA;EAGD,oBACES,cAAA,CAACN,SAAS,EAAA;AACRF,IAAAA,GAAG,EAAEA,GAAI;IACTI,SAAS,EAAEK,EAAE,CAACC,eAAM,CAACC,IAAI,EAAEP,SAAS,CAAE;AACtCC,IAAAA,KAAK,EAAE;AACL,MAAA,GAAGO,yBAAc,CAAC,MAAM,EAAEhB,IAAI,EAAED,SAAS,CAAC;MAC1C,IAAIQ,IAAI,KAAKU,SAAS,IAAI;AAAEC,QAAAA,QAAQ,EAAEX,IAAAA;AAAK,OAAC,CAAC;MAC7C,GAAGE,KAAAA;KACH;IACF,aAAaC,EAAAA,UAAU,EAAEK,IAAK;IAAA,GAC1BJ,IAAAA;AAAI,GACT,CAAC,CAAA;AAEN,CACF,EAAkD;AAElDV,QAAQ,CAACkB,WAAW,GAAG,UAAU;;;;"}
@@ -2,30 +2,38 @@
2
2
 
3
3
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
4
 
5
+ const react = require('react');
5
6
  const cn = require('classnames');
6
7
  const Header_module = require('./Header.module.css.cjs');
7
8
  const jsxRuntime = require('react/jsx-runtime');
8
9
 
9
- const Header = _ref => {
10
+ /** App top bar shell (64px, bottom border, page-gutter padding): `children` fill the left, `actions` sit right. Only the last child shrinks, so put Breadcrumbs or HeaderNav last. `sticky` needs no `overflow: hidden/auto` ancestor and sets `scroll-padding-top` on `html` to `--lido-app-ui-header-height`; your own `html` rule wins. */
11
+ const Header = /*#__PURE__*/react.forwardRef((_ref, ref) => {
10
12
  let {
11
13
  children,
12
14
  actions,
13
15
  sticky,
14
16
  className,
17
+ dataTestId,
15
18
  ...rest
16
19
  } = _ref;
17
20
  return /*#__PURE__*/jsxRuntime.jsxs("header", {
21
+ ref: ref,
18
22
  className: cn(Header_module.header, sticky && Header_module.sticky, className),
23
+ "data-testid": dataTestId?.root,
19
24
  ...rest,
20
25
  children: [/*#__PURE__*/jsxRuntime.jsx("div", {
21
26
  className: Header_module.content,
27
+ "data-testid": dataTestId?.content,
22
28
  children: children
23
29
  }), actions != null ? /*#__PURE__*/jsxRuntime.jsx("div", {
24
30
  className: Header_module.actions,
31
+ "data-testid": dataTestId?.actions,
25
32
  children: actions
26
33
  }) : null]
27
34
  });
28
- };
35
+ });
36
+ Header.displayName = 'Header';
29
37
 
30
38
  exports.Header = Header;
31
39
  //# sourceMappingURL=Header.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Header.cjs","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,eAAA,CAAA,QAAA,EAAA;AACEF,IAAAA,SAAS,EAAEG,EAAE,CAACC,aAAM,CAACC,MAAM,EAAEN,MAAM,IAAIK,aAAM,CAACL,MAAM,EAAEC,SAAS,CAAE;AAAA,IAAA,GAC7DC,IAAI;AAAAJ,IAAAA,QAAA,gBAERS,cAAA,CAAA,KAAA,EAAA;MAAKN,SAAS,EAAEI,aAAM,CAACG,OAAQ;AAAAV,MAAAA,QAAA,EAAEA,QAAAA;AAAQ,KAAM,CAAC,EAC/CC,OAAO,IAAI,IAAI,gBAAGQ,cAAA,CAAA,KAAA,EAAA;MAAKN,SAAS,EAAEI,aAAM,CAACN,OAAQ;AAAAD,MAAAA,QAAA,EAAEC,OAAAA;KAAa,CAAC,GAAG,IAAI,CAAA;AAAA,GACnE,CAAC,CAAA;AAAA;;;;"}
1
+ {"version":3,"file":"Header.cjs","sources":["../../../src/header/Header.tsx"],"sourcesContent":["import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from 'react'\n\nimport cn from 'classnames'\n\nimport styles from './Header.module.css'\n\nexport type HeaderDataTestId = {\n root?: string\n content?: string\n actions?: string\n}\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 dataTestId?: HeaderDataTestId\n}\n\n/** App top bar shell (64px, bottom border, page-gutter padding): `children` fill the left, `actions` sit right. Only the last child shrinks, so put Breadcrumbs or HeaderNav last. `sticky` needs no `overflow: hidden/auto` ancestor and sets `scroll-padding-top` on `html` to `--lido-app-ui-header-height`; your own `html` rule wins. */\nexport const Header = forwardRef<HTMLElement, HeaderProps>(\n ({ children, actions, sticky, className, dataTestId, ...rest }, ref) => (\n <header\n ref={ref}\n className={cn(styles.header, sticky && styles.sticky, className)}\n data-testid={dataTestId?.root}\n {...rest}\n >\n <div className={styles.content} data-testid={dataTestId?.content}>\n {children}\n </div>\n {actions != null ? (\n <div className={styles.actions} data-testid={dataTestId?.actions}>\n {actions}\n </div>\n ) : null}\n </header>\n ),\n)\n\nHeader.displayName = 'Header'\n"],"names":["Header","forwardRef","_ref","ref","children","actions","sticky","className","dataTestId","rest","_jsxs","cn","styles","header","root","_jsx","content","displayName"],"mappings":";;;;;;;;;AAwBA;AACO,MAAMA,MAAM,gBAAGC,gBAAU,CAC9B,CAAAC,IAAA,EAAgEC,GAAG,KAAA;EAAA,IAAlE;IAAEC,QAAQ;IAAEC,OAAO;IAAEC,MAAM;IAAEC,SAAS;IAAEC,UAAU;IAAE,GAAGC,IAAAA;AAAK,GAAC,GAAAP,IAAA,CAAA;AAAA,EAAA,oBAC5DQ,eAAA,CAAA,QAAA,EAAA;AACEP,IAAAA,GAAG,EAAEA,GAAI;AACTI,IAAAA,SAAS,EAAEI,EAAE,CAACC,aAAM,CAACC,MAAM,EAAEP,MAAM,IAAIM,aAAM,CAACN,MAAM,EAAEC,SAAS,CAAE;IACjE,aAAaC,EAAAA,UAAU,EAAEM,IAAK;AAAA,IAAA,GAC1BL,IAAI;AAAAL,IAAAA,QAAA,gBAERW,cAAA,CAAA,KAAA,EAAA;MAAKR,SAAS,EAAEK,aAAM,CAACI,OAAQ;MAAC,aAAaR,EAAAA,UAAU,EAAEQ,OAAQ;AAAAZ,MAAAA,QAAA,EAC9DA,QAAAA;AAAQ,KACN,CAAC,EACLC,OAAO,IAAI,IAAI,gBACdU,cAAA,CAAA,KAAA,EAAA;MAAKR,SAAS,EAAEK,aAAM,CAACP,OAAQ;MAAC,aAAaG,EAAAA,UAAU,EAAEH,OAAQ;AAAAD,MAAAA,QAAA,EAC9DC,OAAAA;KACE,CAAC,GACJ,IAAI,CAAA;AAAA,GACF,CAAC,CAAA;AAAA,CAEb,EAAC;AAEDL,MAAM,CAACiB,WAAW,GAAG,QAAQ;;;;"}
@@ -6,23 +6,25 @@ const react = require('react');
6
6
  const cn = require('classnames');
7
7
  const HeaderNav_module = require('./HeaderNav.module.css.cjs');
8
8
  const jsxRuntime = require('react/jsx-runtime');
9
+ const useEdgeFade = require('../hooks/useEdgeFade.cjs');
10
+ const useIsomorphicLayoutEffect = require('../hooks/useIsomorphicLayoutEffect.cjs');
9
11
 
10
- const syncFade = nav => {
11
- nav.toggleAttribute('data-fade-start', nav.scrollLeft > 0);
12
- nav.toggleAttribute('data-fade-end', nav.scrollLeft < nav.scrollWidth - nav.clientWidth - 1);
13
- };
14
- const scrollActiveIntoView = nav => {
15
- const active = nav.querySelector("[aria-current='page']");
12
+ const ACTIVE = "[aria-current]:not([aria-current='false'], [aria-current=''])";
13
+ const scrollIntoCenter = (nav, active) => {
16
14
  if (!active) return;
17
15
  const navRect = nav.getBoundingClientRect();
18
16
  const activeRect = active.getBoundingClientRect();
19
17
  nav.scrollLeft += activeRect.left - navRect.left - (nav.clientWidth - activeRect.width) / 2;
20
18
  };
19
+
20
+ /** `<nav>` for header links (`aria-label` defaults to `Main`); scrolls with an edge fade when narrow and centers the link with a truthy `aria-current`. */
21
21
  const HeaderNav = /*#__PURE__*/react.forwardRef((_ref, ref) => {
22
22
  let {
23
23
  'aria-label': ariaLabel = 'Main',
24
24
  className,
25
25
  onScroll,
26
+ onFocus,
27
+ dataTestId,
26
28
  ...rest
27
29
  } = _ref;
28
30
  const navRef = react.useRef(null);
@@ -30,36 +32,46 @@ const HeaderNav = /*#__PURE__*/react.forwardRef((_ref, ref) => {
30
32
  navRef.current = node;
31
33
  if (typeof ref === 'function') ref(node);else if (ref) ref.current = node;
32
34
  }, [ref]);
33
- react.useEffect(() => {
35
+ const {
36
+ sync,
37
+ onFocus: revealFocused
38
+ } = useEdgeFade.useEdgeFade(navRef);
39
+ useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(() => {
34
40
  const nav = navRef.current;
35
41
  if (!nav) return;
36
- const sync = () => {
37
- scrollActiveIntoView(nav);
38
- syncFade(nav);
39
- };
42
+ let active = nav.querySelector(ACTIVE);
43
+ scrollIntoCenter(nav, active);
40
44
  sync();
41
- const mutations = typeof MutationObserver === 'undefined' ? null : new MutationObserver(sync);
42
- mutations?.observe(nav, {
45
+ if (typeof MutationObserver === 'undefined') return;
46
+ const mutations = new MutationObserver(() => {
47
+ const next = nav.querySelector(ACTIVE);
48
+ if (next !== active) {
49
+ active = next;
50
+ scrollIntoCenter(nav, next);
51
+ }
52
+ sync();
53
+ });
54
+ mutations.observe(nav, {
43
55
  childList: true,
44
56
  subtree: true,
45
57
  attributes: true,
46
58
  attributeFilter: ['aria-current']
47
59
  });
48
- const resizes = typeof ResizeObserver === 'undefined' ? null : new ResizeObserver(() => syncFade(nav));
49
- resizes?.observe(nav);
50
- return () => {
51
- mutations?.disconnect();
52
- resizes?.disconnect();
53
- };
54
- }, []);
60
+ return () => mutations.disconnect();
61
+ }, [sync]);
55
62
  return /*#__PURE__*/jsxRuntime.jsx("nav", {
56
63
  ref: setRef,
57
64
  "aria-label": ariaLabel,
58
65
  className: cn(HeaderNav_module.nav, className),
59
66
  onScroll: e => {
60
- syncFade(e.currentTarget);
67
+ sync();
61
68
  onScroll?.(e);
62
69
  },
70
+ onFocus: e => {
71
+ revealFocused(e);
72
+ onFocus?.(e);
73
+ },
74
+ "data-testid": dataTestId?.root,
63
75
  ...rest
64
76
  });
65
77
  });
@@ -1 +1 @@
1
- {"version":3,"file":"HeaderNav.cjs","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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"}
1
+ {"version":3,"file":"HeaderNav.cjs","sources":["../../../src/header/HeaderNav.tsx"],"sourcesContent":["import { forwardRef, useCallback, useRef } from 'react'\nimport type { ComponentPropsWithoutRef } from 'react'\n\nimport cn from 'classnames'\n\nimport { useEdgeFade, useIsomorphicLayoutEffect } from '../hooks'\nimport styles from './HeaderNav.module.css'\n\nexport type HeaderNavDataTestId = { root?: string }\n\nexport type HeaderNavProps = ComponentPropsWithoutRef<'nav'> & {\n dataTestId?: HeaderNavDataTestId\n}\n\nconst ACTIVE = \"[aria-current]:not([aria-current='false'], [aria-current=''])\"\n\nconst scrollIntoCenter = (nav: HTMLElement, active: HTMLElement | null) => {\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\n/** `<nav>` for header links (`aria-label` defaults to `Main`); scrolls with an edge fade when narrow and centers the link with a truthy `aria-current`. */\nexport const HeaderNav = forwardRef<HTMLElement, HeaderNavProps>(\n (\n {\n 'aria-label': ariaLabel = 'Main',\n className,\n onScroll,\n onFocus,\n dataTestId,\n ...rest\n },\n ref,\n ) => {\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 const { sync, onFocus: revealFocused } = useEdgeFade(navRef)\n\n useIsomorphicLayoutEffect(() => {\n const nav = navRef.current\n if (!nav) return\n let active = nav.querySelector<HTMLElement>(ACTIVE)\n scrollIntoCenter(nav, active)\n sync()\n if (typeof MutationObserver === 'undefined') return\n const mutations = new MutationObserver(() => {\n const next = nav.querySelector<HTMLElement>(ACTIVE)\n if (next !== active) {\n active = next\n scrollIntoCenter(nav, next)\n }\n sync()\n })\n mutations.observe(nav, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['aria-current'],\n })\n return () => mutations.disconnect()\n }, [sync])\n\n return (\n <nav\n ref={setRef}\n aria-label={ariaLabel}\n className={cn(styles.nav, className)}\n onScroll={(e) => {\n sync()\n onScroll?.(e)\n }}\n onFocus={(e) => {\n revealFocused(e)\n onFocus?.(e)\n }}\n data-testid={dataTestId?.root}\n {...rest}\n />\n )\n },\n)\n\nHeaderNav.displayName = 'HeaderNav'\n"],"names":["ACTIVE","scrollIntoCenter","nav","active","navRect","getBoundingClientRect","activeRect","scrollLeft","left","clientWidth","width","HeaderNav","forwardRef","_ref","ref","ariaLabel","className","onScroll","onFocus","dataTestId","rest","navRef","useRef","setRef","useCallback","node","current","sync","revealFocused","useEdgeFade","useIsomorphicLayoutEffect","querySelector","MutationObserver","mutations","next","observe","childList","subtree","attributes","attributeFilter","disconnect","_jsx","cn","styles","e","root","displayName"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- const styles = {"nav":"HeaderNav-module_nav__YxWpA"};
3
+ const styles = {"nav":"HeaderNav-module_nav__YxWpA ScrollFade-module_scrollFade__bK-Oi"};
4
4
 
5
5
  module.exports = styles;
6
6
  //# sourceMappingURL=HeaderNav.module.css.cjs.map
@@ -2,24 +2,30 @@
2
2
 
3
3
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
4
 
5
+ const react = require('react');
5
6
  const cn = require('classnames');
6
7
  const Hidden_module = require('./Hidden.module.css.cjs');
7
8
  const jsxRuntime = require('react/jsx-runtime');
8
9
  const responsive = require('../utils/responsive.cjs');
9
10
 
10
- /** CSS-only responsive visibility, safe for SSR. Wrapper is `display: contents` while visible. */
11
- const Hidden = _ref => {
11
+ /** CSS-only responsive visibility, safe for SSR. Wrapper is `display: contents` while visible. Inside a `<p>` (Typography `body`, `description`...) children must be phrasing content too: a block child closes the paragraph in server HTML and breaks hydration. */
12
+ const Hidden = /*#__PURE__*/react.forwardRef((_ref, ref) => {
12
13
  let {
14
+ as: Tag = 'span',
13
15
  below,
14
16
  above,
15
17
  className,
18
+ dataTestId,
16
19
  ...rest
17
20
  } = _ref;
18
- return /*#__PURE__*/jsxRuntime.jsx("div", {
21
+ return /*#__PURE__*/jsxRuntime.jsx(Tag, {
22
+ ref: ref,
19
23
  className: cn(Hidden_module.root, below && Hidden_module[`below${responsive.capitalize(below)}`], above && Hidden_module[`above${responsive.capitalize(above)}`], className),
24
+ "data-testid": dataTestId?.root,
20
25
  ...rest
21
26
  });
22
- };
27
+ });
28
+ Hidden.displayName = 'Hidden';
23
29
 
24
30
  exports.Hidden = Hidden;
25
31
  //# sourceMappingURL=Hidden.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Hidden.cjs","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,cAAA,CAAA,KAAA,EAAA;AACEF,IAAAA,SAAS,EAAEG,EAAE,CACXC,aAAM,CAACC,IAAI,EACXP,KAAK,IAAIM,aAAM,CAAC,CAAQE,KAAAA,EAAAA,qBAAU,CAACR,KAAK,CAAC,CAAE,CAAA,CAAC,EAC5CC,KAAK,IAAIK,aAAM,CAAC,CAAQE,KAAAA,EAAAA,qBAAU,CAACP,KAAK,CAAC,CAAA,CAAE,CAAC,EAC5CC,SACF,CAAE;IAAA,GACEC,IAAAA;AAAI,GACT,CAAC,CAAA;AAAA;;;;"}
1
+ {"version":3,"file":"Hidden.cjs","sources":["../../../src/hidden/Hidden.tsx"],"sourcesContent":["import { forwardRef, type ElementType, 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 HiddenDataTestId = { root?: string }\n\nexport type HiddenProps = HTMLAttributes<HTMLElement> & {\n /** Hides below this breakpoint's width. */\n below?: Breakpoint\n /** Hides at this breakpoint's width and above. */\n above?: Breakpoint\n /** Wrapper tag; `span` is valid inside text, use `div` around block content. */\n as?: 'span' | 'div'\n dataTestId?: HiddenDataTestId\n}\n\n/** CSS-only responsive visibility, safe for SSR. Wrapper is `display: contents` while visible. Inside a `<p>` (Typography `body`, `description`...) children must be phrasing content too: a block child closes the paragraph in server HTML and breaks hydration. */\nexport const Hidden = forwardRef<HTMLElement, HiddenProps>(\n (\n {\n as: Tag = 'span' as ElementType,\n below,\n above,\n className,\n dataTestId,\n ...rest\n },\n ref,\n ) => (\n <Tag\n ref={ref}\n className={cn(\n styles.root,\n below && styles[`below${capitalize(below)}`],\n above && styles[`above${capitalize(above)}`],\n className,\n )}\n data-testid={dataTestId?.root}\n {...rest}\n />\n ),\n)\n\nHidden.displayName = 'Hidden'\n"],"names":["Hidden","forwardRef","_ref","ref","as","Tag","below","above","className","dataTestId","rest","_jsx","cn","styles","root","capitalize","displayName"],"mappings":";;;;;;;;;;AAmBA;AACO,MAAMA,MAAM,gBAAGC,gBAAU,CAC9B,CAAAC,IAAA,EASEC,GAAG,KAAA;EAAA,IARH;IACEC,EAAE,EAAEC,GAAG,GAAG,MAAqB;IAC/BC,KAAK;IACLC,KAAK;IACLC,SAAS;IACTC,UAAU;IACV,GAAGC,IAAAA;AACL,GAAC,GAAAR,IAAA,CAAA;EAAA,oBAGDS,cAAA,CAACN,GAAG,EAAA;AACFF,IAAAA,GAAG,EAAEA,GAAI;AACTK,IAAAA,SAAS,EAAEI,EAAE,CACXC,aAAM,CAACC,IAAI,EACXR,KAAK,IAAIO,aAAM,CAAC,CAAQE,KAAAA,EAAAA,qBAAU,CAACT,KAAK,CAAC,CAAE,CAAA,CAAC,EAC5CC,KAAK,IAAIM,aAAM,CAAC,CAAQE,KAAAA,EAAAA,qBAAU,CAACR,KAAK,CAAC,CAAA,CAAE,CAAC,EAC5CC,SACF,CAAE;IACF,aAAaC,EAAAA,UAAU,EAAEK,IAAK;IAAA,GAC1BJ,IAAAA;AAAI,GACT,CAAC,CAAA;AAAA,CAEN,EAAC;AAEDV,MAAM,CAACgB,WAAW,GAAG,QAAQ;;;;"}
@@ -8,10 +8,7 @@ const jsxRuntime = require('react/jsx-runtime');
8
8
 
9
9
  const THEME_ATTR = 'data-lido-theme';
10
10
 
11
- /**
12
- * Renders `null` until mounted so SSR and first client render match.
13
- * Without `container`, mirrors the nearest `data-lido-theme` scope onto the portal root so tokens still resolve.
14
- */
11
+ /** SSR-safe portal into `container` or `document.body`; without `container` a marker span (dropped once resolved) finds the nearest `data-lido-theme` scope to mirror onto the portal root. */
15
12
  const Portal = _ref => {
16
13
  let {
17
14
  children,
@@ -19,12 +16,19 @@ const Portal = _ref => {
19
16
  } = _ref;
20
17
  const markerRef = react.useRef(null);
21
18
  const [target, setTarget] = react.useState(null);
19
+ const [tick, retry] = react.useReducer(n => n + 1, 0);
22
20
  react.useEffect(() => {
23
21
  if (container) {
24
22
  setTarget(container);
25
23
  return;
26
24
  }
27
- const scope = markerRef.current?.closest(`[${THEME_ATTR}]`);
25
+ // Marker is gone after a container -> undefined switch; clear target so it re-renders, then retry.
26
+ if (!markerRef.current) {
27
+ setTarget(null);
28
+ retry();
29
+ return;
30
+ }
31
+ const scope = markerRef.current.closest(`[${THEME_ATTR}]`);
28
32
  if (!scope || scope === document.documentElement) {
29
33
  setTarget(document.body);
30
34
  return;
@@ -44,12 +48,11 @@ const Portal = _ref => {
44
48
  observer.disconnect();
45
49
  root.remove();
46
50
  };
47
- }, [container]);
48
- return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
49
- children: [/*#__PURE__*/jsxRuntime.jsx("span", {
50
- ref: markerRef,
51
- hidden: true
52
- }), target ? /*#__PURE__*/reactDom.createPortal(children, target) : null]
51
+ }, [container, tick]);
52
+ if (target) return /*#__PURE__*/reactDom.createPortal(children, target);
53
+ return container ? null : /*#__PURE__*/jsxRuntime.jsx("span", {
54
+ ref: markerRef,
55
+ hidden: true
53
56
  });
54
57
  };
55
58
 
@@ -1 +1 @@
1
- {"version":3,"file":"Portal.cjs","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,YAAM,CAAkB,IAAI,CAAC,CAAA;EAC/C,MAAM,CAACC,MAAM,EAAEC,SAAS,CAAC,GAAGC,cAAQ,CAAiB,IAAI,CAAC,CAAA;AAE1DC,EAAAA,eAAS,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,eAAA,CAAAC,mBAAA,EAAA;AAAA9B,IAAAA,QAAA,gBACE+B,cAAA,CAAA,MAAA,EAAA;AAAMC,MAAAA,GAAG,EAAE9B,SAAU;MAAC+B,MAAM,EAAA,IAAA;KAAE,CAAC,EAC9B7B,MAAM,gBAAG8B,qBAAY,CAAClC,QAAQ,EAAEI,MAAM,CAAC,GAAG,IAAI,CAAA;AAAA,GAC/C,CAAC,CAAA;AAEP;;;;"}
1
+ {"version":3,"file":"Portal.cjs","sources":["../../../src/hooks/Portal.tsx"],"sourcesContent":["import { useEffect, useReducer, 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/** SSR-safe portal into `container` or `document.body`; without `container` a marker span (dropped once resolved) finds the nearest `data-lido-theme` scope to mirror onto the portal root. */\nexport const Portal = ({ children, container }: PortalProps) => {\n const markerRef = useRef<HTMLSpanElement>(null)\n const [target, setTarget] = useState<Element | null>(null)\n const [tick, retry] = useReducer((n: number) => n + 1, 0)\n\n useEffect(() => {\n if (container) {\n setTarget(container)\n return\n }\n // Marker is gone after a container -> undefined switch; clear target so it re-renders, then retry.\n if (!markerRef.current) {\n setTarget(null)\n retry()\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, tick])\n\n if (target) return createPortal(children, target)\n return container ? null : <span ref={markerRef} hidden />\n}\n"],"names":["THEME_ATTR","Portal","_ref","children","container","markerRef","useRef","target","setTarget","useState","tick","retry","useReducer","n","useEffect","current","scope","closest","document","documentElement","body","root","createElement","style","display","sync","setAttribute","getAttribute","appendChild","observer","MutationObserver","observe","attributes","attributeFilter","disconnect","remove","createPortal","_jsx","ref","hidden"],"mappings":";;;;;;;;AASA,MAAMA,UAAU,GAAG,iBAAiB,CAAA;;AAEpC;AACaC,MAAAA,MAAM,GAAGC,IAAA,IAA0C;EAAA,IAAzC;IAAEC,QAAQ;AAAEC,IAAAA,SAAAA;AAAuB,GAAC,GAAAF,IAAA,CAAA;AACzD,EAAA,MAAMG,SAAS,GAAGC,YAAM,CAAkB,IAAI,CAAC,CAAA;EAC/C,MAAM,CAACC,MAAM,EAAEC,SAAS,CAAC,GAAGC,cAAQ,CAAiB,IAAI,CAAC,CAAA;AAC1D,EAAA,MAAM,CAACC,IAAI,EAAEC,KAAK,CAAC,GAAGC,gBAAU,CAAEC,CAAS,IAAKA,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;AAEzDC,EAAAA,eAAS,CAAC,MAAM;AACd,IAAA,IAAIV,SAAS,EAAE;MACbI,SAAS,CAACJ,SAAS,CAAC,CAAA;AACpB,MAAA,OAAA;AACF,KAAA;AACA;AACA,IAAA,IAAI,CAACC,SAAS,CAACU,OAAO,EAAE;MACtBP,SAAS,CAAC,IAAI,CAAC,CAAA;AACfG,MAAAA,KAAK,EAAE,CAAA;AACP,MAAA,OAAA;AACF,KAAA;IACA,MAAMK,KAAK,GAAGX,SAAS,CAACU,OAAO,CAACE,OAAO,CAAC,CAAA,CAAA,EAAIjB,UAAU,CAAA,CAAA,CAAG,CAAC,CAAA;IAC1D,IAAI,CAACgB,KAAK,IAAIA,KAAK,KAAKE,QAAQ,CAACC,eAAe,EAAE;AAChDX,MAAAA,SAAS,CAACU,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,CAAC1B,UAAU,EAAEgB,KAAK,CAACW,YAAY,CAAC3B,UAAU,CAAC,IAAI,EAAE,CAAC,CAAA;AACrEyB,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,CAACf,KAAK,EAAE;AAAEgB,MAAAA,UAAU,EAAE,IAAI;MAAEC,eAAe,EAAE,CAACjC,UAAU,CAAA;AAAE,KAAC,CAAC,CAAA;IAC5EQ,SAAS,CAACa,IAAI,CAAC,CAAA;AACf,IAAA,OAAO,MAAM;MACXQ,QAAQ,CAACK,UAAU,EAAE,CAAA;MACrBb,IAAI,CAACc,MAAM,EAAE,CAAA;KACd,CAAA;AACH,GAAC,EAAE,CAAC/B,SAAS,EAAEM,IAAI,CAAC,CAAC,CAAA;EAErB,IAAIH,MAAM,EAAE,oBAAO6B,qBAAY,CAACjC,QAAQ,EAAEI,MAAM,CAAC,CAAA;AACjD,EAAA,OAAOH,SAAS,GAAG,IAAI,gBAAGiC,cAAA,CAAA,MAAA,EAAA;AAAMC,IAAAA,GAAG,EAAEjC,SAAU;IAACkC,MAAM,EAAA,IAAA;AAAA,GAAE,CAAC,CAAA;AAC3D;;;;"}
@@ -4,46 +4,82 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
4
 
5
5
  const react = require('react');
6
6
 
7
+ const SCROLLBAR_VAR = '--lido-app-ui-scrollbar-width';
8
+
7
9
  // Ref-counted so stacked overlays only restore on the last unlock.
8
10
  let lockCount = 0;
11
+ const AXES = ['overflow-x', 'overflow-y'];
9
12
  let saved = {
10
- overflow: '',
13
+ scroller: null,
14
+ axes: [],
11
15
  paddingRight: ''
12
16
  };
13
17
  const lock = () => {
14
18
  if (lockCount === 0) {
15
19
  const {
16
20
  body,
17
- documentElement
21
+ documentElement: html
18
22
  } = document;
23
+ // Locking <html> when body is the scroller would detach body's overflow propagation and break sticky headers.
24
+ const scroller = ['auto', 'scroll'].includes(getComputedStyle(html).overflowY) ? html : body;
19
25
  saved = {
20
- overflow: body.style.overflow,
26
+ scroller,
27
+ axes: AXES.map(name => ({
28
+ name,
29
+ value: scroller.style.getPropertyValue(name),
30
+ priority: scroller.style.getPropertyPriority(name)
31
+ })),
21
32
  paddingRight: body.style.paddingRight
22
33
  };
23
- const scrollbarWidth = window.innerWidth - documentElement.clientWidth;
24
- if (scrollbarWidth > 0) {
34
+ const before = body.getBoundingClientRect().width;
35
+ // body's rect updates synchronously after the lock, html.clientWidth doesn't.
36
+ scroller.style.overflow = 'hidden';
37
+ const gained = body.getBoundingClientRect().width - before;
38
+ if (gained > 0) {
25
39
  const current = parseFloat(getComputedStyle(body).paddingRight) || 0;
26
- body.style.paddingRight = `${current + scrollbarWidth}px`;
40
+ body.style.paddingRight = `${current + gained}px`;
41
+ html.style.setProperty(SCROLLBAR_VAR, `${gained}px`);
27
42
  }
28
- body.style.overflow = 'hidden';
29
43
  }
30
44
  lockCount += 1;
31
45
  };
32
46
  const unlock = () => {
33
47
  lockCount -= 1;
34
48
  if (lockCount === 0) {
35
- document.body.style.overflow = saved.overflow;
36
- document.body.style.paddingRight = saved.paddingRight;
49
+ const {
50
+ body,
51
+ documentElement: html
52
+ } = document;
53
+ const {
54
+ scroller,
55
+ axes
56
+ } = saved;
57
+ if (scroller) {
58
+ scroller.style.removeProperty('overflow');
59
+ axes.forEach(_ref => {
60
+ let {
61
+ name,
62
+ value,
63
+ priority
64
+ } = _ref;
65
+ if (value) scroller.style.setProperty(name, value, priority);else scroller.style.removeProperty(name);
66
+ });
67
+ }
68
+ body.style.paddingRight = saved.paddingRight;
69
+ html.style.removeProperty(SCROLLBAR_VAR);
37
70
  }
38
71
  };
39
72
 
40
- /** Locks body scroll while `active`, compensating the scrollbar width. */
41
- const useBodyScrollLock = active => {
73
+ /** Locks page scroll while `enabled`, compensating the scrollbar width and exposing it as `--lido-app-ui-scrollbar-width`. */
74
+ const useBodyScrollLock = function () {
75
+ let {
76
+ enabled = true
77
+ } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
42
78
  react.useEffect(() => {
43
- if (!active) return;
79
+ if (!enabled) return;
44
80
  lock();
45
81
  return unlock;
46
- }, [active]);
82
+ }, [enabled]);
47
83
  };
48
84
 
49
85
  exports.useBodyScrollLock = useBodyScrollLock;