@lidofinance/lido-app-ui 1.12.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 (679) 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/address/Address.cjs +50 -0
  6. package/dist/cjs/address/Address.cjs.map +1 -0
  7. package/dist/cjs/address/Address.module.css.cjs +6 -0
  8. package/dist/cjs/address/Address.module.css.cjs.map +1 -0
  9. package/dist/cjs/address-button/AddressButton.cjs +49 -0
  10. package/dist/cjs/address-button/AddressButton.cjs.map +1 -0
  11. package/dist/cjs/address-button/AddressButton.module.css.cjs +6 -0
  12. package/dist/cjs/address-button/AddressButton.module.css.cjs.map +1 -0
  13. package/dist/cjs/badge/Badge.cjs +1 -0
  14. package/dist/cjs/badge/Badge.cjs.map +1 -1
  15. package/dist/cjs/banner/Banner.cjs +1 -0
  16. package/dist/cjs/banner/Banner.cjs.map +1 -1
  17. package/dist/cjs/breadcrumbs/Breadcrumbs.cjs +55 -26
  18. package/dist/cjs/breadcrumbs/Breadcrumbs.cjs.map +1 -1
  19. package/dist/cjs/breadcrumbs/Breadcrumbs.module.css.cjs +1 -1
  20. package/dist/cjs/button/Button.cjs +15 -24
  21. package/dist/cjs/button/Button.cjs.map +1 -1
  22. package/dist/cjs/button/Button.module.css.cjs +1 -1
  23. package/dist/cjs/button/ButtonContent.cjs +50 -0
  24. package/dist/cjs/button/ButtonContent.cjs.map +1 -0
  25. package/dist/cjs/button/LinkButton.cjs +46 -0
  26. package/dist/cjs/button/LinkButton.cjs.map +1 -0
  27. package/dist/cjs/card/Card.cjs +1 -0
  28. package/dist/cjs/card/Card.cjs.map +1 -1
  29. package/dist/cjs/checkbox/Checkbox.cjs +1 -0
  30. package/dist/cjs/checkbox/Checkbox.cjs.map +1 -1
  31. package/dist/cjs/copy/Copy.cjs +55 -0
  32. package/dist/cjs/copy/Copy.cjs.map +1 -0
  33. package/dist/cjs/copy/Copy.module.css.cjs +6 -0
  34. package/dist/cjs/copy/Copy.module.css.cjs.map +1 -0
  35. package/dist/cjs/copy/useCopy.cjs +33 -0
  36. package/dist/cjs/copy/useCopy.cjs.map +1 -0
  37. package/dist/cjs/counter/Counter.cjs +6 -2
  38. package/dist/cjs/counter/Counter.cjs.map +1 -1
  39. package/dist/cjs/counter/CounterSlot.cjs +19 -2
  40. package/dist/cjs/counter/CounterSlot.cjs.map +1 -1
  41. package/dist/cjs/counter/CounterSlot.module.css.cjs +1 -1
  42. package/dist/cjs/data-list/DataList.cjs +1 -0
  43. package/dist/cjs/data-list/DataList.cjs.map +1 -1
  44. package/dist/cjs/data-list/DataList.module.css.cjs +1 -1
  45. package/dist/cjs/data-list/DataListRow.cjs +7 -12
  46. package/dist/cjs/data-list/DataListRow.cjs.map +1 -1
  47. package/dist/cjs/disclaimer/Disclaimer.cjs +10 -3
  48. package/dist/cjs/disclaimer/Disclaimer.cjs.map +1 -1
  49. package/dist/cjs/divider/Divider.cjs +5 -0
  50. package/dist/cjs/divider/Divider.cjs.map +1 -1
  51. package/dist/cjs/error-page/ErrorPage.cjs +14 -7
  52. package/dist/cjs/error-page/ErrorPage.cjs.map +1 -1
  53. package/dist/cjs/footer/Footer.cjs +10 -2
  54. package/dist/cjs/footer/Footer.cjs.map +1 -1
  55. package/dist/cjs/grid/Grid.cjs +7 -3
  56. package/dist/cjs/grid/Grid.cjs.map +1 -1
  57. package/dist/cjs/grid/Grid.module.css.cjs +1 -1
  58. package/dist/cjs/grid/GridItem.cjs +2 -0
  59. package/dist/cjs/grid/GridItem.cjs.map +1 -1
  60. package/dist/cjs/header/Header.cjs +10 -2
  61. package/dist/cjs/header/Header.cjs.map +1 -1
  62. package/dist/cjs/header/HeaderNav.cjs +33 -21
  63. package/dist/cjs/header/HeaderNav.cjs.map +1 -1
  64. package/dist/cjs/header/HeaderNav.module.css.cjs +1 -1
  65. package/dist/cjs/hex/Hex.cjs +41 -0
  66. package/dist/cjs/hex/Hex.cjs.map +1 -0
  67. package/dist/cjs/hex/Hex.module.css.cjs +6 -0
  68. package/dist/cjs/hex/Hex.module.css.cjs.map +1 -0
  69. package/dist/cjs/hex/trimHex.cjs +15 -0
  70. package/dist/cjs/hex/trimHex.cjs.map +1 -0
  71. package/dist/cjs/hidden/Hidden.cjs +10 -4
  72. package/dist/cjs/hidden/Hidden.cjs.map +1 -1
  73. package/dist/cjs/hooks/Portal.cjs +14 -11
  74. package/dist/cjs/hooks/Portal.cjs.map +1 -1
  75. package/dist/cjs/hooks/useBodyScrollLock.cjs +49 -13
  76. package/dist/cjs/hooks/useBodyScrollLock.cjs.map +1 -1
  77. package/dist/cjs/hooks/useEdgeFade.cjs +60 -0
  78. package/dist/cjs/hooks/useEdgeFade.cjs.map +1 -0
  79. package/dist/cjs/hooks/useEscape.cjs +8 -5
  80. package/dist/cjs/hooks/useEscape.cjs.map +1 -1
  81. package/dist/cjs/hooks/useFocusTrap.cjs +61 -24
  82. package/dist/cjs/hooks/useFocusTrap.cjs.map +1 -1
  83. package/dist/cjs/hooks/useHideOthers.cjs +51 -0
  84. package/dist/cjs/hooks/useHideOthers.cjs.map +1 -0
  85. package/dist/cjs/hooks/useOutsideClick.cjs +31 -4
  86. package/dist/cjs/hooks/useOutsideClick.cjs.map +1 -1
  87. package/dist/cjs/icon-button/CloseButton.cjs +27 -0
  88. package/dist/cjs/icon-button/CloseButton.cjs.map +1 -0
  89. package/dist/cjs/icon-button/IconButton.cjs +6 -1
  90. package/dist/cjs/icon-button/IconButton.cjs.map +1 -1
  91. package/dist/cjs/icon-button/IconButton.module.css.cjs +1 -1
  92. package/dist/cjs/icons/TokenIcon.cjs +2 -0
  93. package/dist/cjs/icons/TokenIcon.cjs.map +1 -1
  94. package/dist/cjs/identicon/Identicon.cjs +2 -0
  95. package/dist/cjs/identicon/Identicon.cjs.map +1 -1
  96. package/dist/cjs/index.cjs +67 -5
  97. package/dist/cjs/index.cjs.map +1 -1
  98. package/dist/cjs/index.css +14 -4
  99. package/dist/cjs/info-tooltip/InfoTooltip.cjs +34 -0
  100. package/dist/cjs/info-tooltip/InfoTooltip.cjs.map +1 -0
  101. package/dist/cjs/info-tooltip/InfoTooltip.module.css.cjs +6 -0
  102. package/dist/cjs/info-tooltip/InfoTooltip.module.css.cjs.map +1 -0
  103. package/dist/cjs/input/Input.cjs +4 -8
  104. package/dist/cjs/input/Input.cjs.map +1 -1
  105. package/dist/cjs/input/Input.module.css.cjs +1 -1
  106. package/dist/cjs/link-provider/Anchor.cjs +23 -2
  107. package/dist/cjs/link-provider/Anchor.cjs.map +1 -1
  108. package/dist/cjs/link-provider/LinkProvider.cjs +1 -1
  109. package/dist/cjs/link-provider/LinkProvider.cjs.map +1 -1
  110. package/dist/cjs/logo/Logo.cjs +8 -0
  111. package/dist/cjs/logo/Logo.cjs.map +1 -1
  112. package/dist/cjs/message-box/MessageBox.cjs +1 -0
  113. package/dist/cjs/message-box/MessageBox.cjs.map +1 -1
  114. package/dist/cjs/modal/Modal.cjs +73 -15
  115. package/dist/cjs/modal/Modal.cjs.map +1 -1
  116. package/dist/cjs/nav-link/NavLink.cjs +6 -4
  117. package/dist/cjs/nav-link/NavLink.cjs.map +1 -1
  118. package/dist/cjs/notification/Notification.cjs +12 -6
  119. package/dist/cjs/notification/Notification.cjs.map +1 -1
  120. package/dist/cjs/page-layout/Layout.cjs +25 -0
  121. package/dist/cjs/page-layout/Layout.cjs.map +1 -0
  122. package/dist/cjs/page-layout/Layout.module.css.cjs +6 -0
  123. package/dist/cjs/page-layout/Layout.module.css.cjs.map +1 -0
  124. package/dist/cjs/page-layout/Main.cjs +29 -0
  125. package/dist/cjs/page-layout/Main.cjs.map +1 -0
  126. package/dist/cjs/page-layout/Main.module.css.cjs +6 -0
  127. package/dist/cjs/page-layout/Main.module.css.cjs.map +1 -0
  128. package/dist/cjs/page-layout/PageContent.cjs +22 -0
  129. package/dist/cjs/page-layout/PageContent.cjs.map +1 -0
  130. package/dist/cjs/page-layout/PageContent.module.css.cjs +6 -0
  131. package/dist/cjs/page-layout/PageContent.module.css.cjs.map +1 -0
  132. package/dist/cjs/pagination/Pagination.cjs +11 -6
  133. package/dist/cjs/pagination/Pagination.cjs.map +1 -1
  134. package/dist/cjs/popover/Popover.cjs +71 -15
  135. package/dist/cjs/popover/Popover.cjs.map +1 -1
  136. package/dist/cjs/radio-button/RadioButton.cjs +1 -0
  137. package/dist/cjs/radio-button/RadioButton.cjs.map +1 -1
  138. package/dist/cjs/rich-input/RichInput.cjs +22 -46
  139. package/dist/cjs/rich-input/RichInput.cjs.map +1 -1
  140. package/dist/cjs/rich-input/RichInput.module.css.cjs +1 -1
  141. package/dist/cjs/section-title/SectionTitle.cjs +9 -10
  142. package/dist/cjs/section-title/SectionTitle.cjs.map +1 -1
  143. package/dist/cjs/section-title/SectionTitle.module.css.cjs +1 -1
  144. package/dist/cjs/segmented-control/SegmentedControl.cjs +1 -0
  145. package/dist/cjs/segmented-control/SegmentedControl.cjs.map +1 -1
  146. package/dist/cjs/segmented-control/SegmentedControlCard.cjs +1 -0
  147. package/dist/cjs/segmented-control/SegmentedControlCard.cjs.map +1 -1
  148. package/dist/cjs/sidebar/Sidebar.cjs +141 -0
  149. package/dist/cjs/sidebar/Sidebar.cjs.map +1 -0
  150. package/dist/cjs/sidebar/Sidebar.module.css.cjs +6 -0
  151. package/dist/cjs/sidebar/Sidebar.module.css.cjs.map +1 -0
  152. package/dist/cjs/sidebar/SidebarContext.cjs +13 -0
  153. package/dist/cjs/sidebar/SidebarContext.cjs.map +1 -0
  154. package/dist/cjs/sidebar/SidebarGroup.cjs +37 -0
  155. package/dist/cjs/sidebar/SidebarGroup.cjs.map +1 -0
  156. package/dist/cjs/sidebar/SidebarGroup.module.css.cjs +6 -0
  157. package/dist/cjs/sidebar/SidebarGroup.module.css.cjs.map +1 -0
  158. package/dist/cjs/sidebar/SidebarInset.cjs +25 -0
  159. package/dist/cjs/sidebar/SidebarInset.cjs.map +1 -0
  160. package/dist/cjs/sidebar/SidebarInset.module.css.cjs +6 -0
  161. package/dist/cjs/sidebar/SidebarInset.module.css.cjs.map +1 -0
  162. package/dist/cjs/sidebar/SidebarItem.cjs +42 -0
  163. package/dist/cjs/sidebar/SidebarItem.cjs.map +1 -0
  164. package/dist/cjs/sidebar/SidebarItem.module.css.cjs +6 -0
  165. package/dist/cjs/sidebar/SidebarItem.module.css.cjs.map +1 -0
  166. package/dist/cjs/sidebar/SidebarLayout.cjs +41 -0
  167. package/dist/cjs/sidebar/SidebarLayout.cjs.map +1 -0
  168. package/dist/cjs/sidebar/SidebarLayout.module.css.cjs +6 -0
  169. package/dist/cjs/sidebar/SidebarLayout.module.css.cjs.map +1 -0
  170. package/dist/cjs/sidebar/SidebarToggle.cjs +44 -0
  171. package/dist/cjs/sidebar/SidebarToggle.cjs.map +1 -0
  172. package/dist/cjs/sidebar/SidebarToggle.module.css.cjs +6 -0
  173. package/dist/cjs/sidebar/SidebarToggle.module.css.cjs.map +1 -0
  174. package/dist/cjs/sidebar/useSidebarDrawer.cjs +47 -0
  175. package/dist/cjs/sidebar/useSidebarDrawer.cjs.map +1 -0
  176. package/dist/cjs/skeleton/Skeleton.cjs +18 -20
  177. package/dist/cjs/skeleton/Skeleton.cjs.map +1 -1
  178. package/dist/cjs/skip-link/SkipLink.cjs +52 -0
  179. package/dist/cjs/skip-link/SkipLink.cjs.map +1 -0
  180. package/dist/cjs/skip-link/SkipLink.module.css.cjs +6 -0
  181. package/dist/cjs/skip-link/SkipLink.module.css.cjs.map +1 -0
  182. package/dist/cjs/slider/Slider.cjs +1 -0
  183. package/dist/cjs/slider/Slider.cjs.map +1 -1
  184. package/dist/cjs/small-card/SmallCard.cjs +6 -2
  185. package/dist/cjs/small-card/SmallCard.cjs.map +1 -1
  186. package/dist/cjs/stack/Stack.cjs +27 -7
  187. package/dist/cjs/stack/Stack.cjs.map +1 -1
  188. package/dist/cjs/stack/Stack.module.css.cjs +1 -1
  189. package/dist/cjs/stat-item/StatItem.cjs +4 -8
  190. package/dist/cjs/stat-item/StatItem.cjs.map +1 -1
  191. package/dist/cjs/stat-item/StatItem.module.css.cjs +1 -1
  192. package/dist/cjs/switch/Switch.cjs +1 -0
  193. package/dist/cjs/switch/Switch.cjs.map +1 -1
  194. package/dist/cjs/tabs/Tabs.cjs +1 -0
  195. package/dist/cjs/tabs/Tabs.cjs.map +1 -1
  196. package/dist/cjs/tag/Tag.cjs +73 -8
  197. package/dist/cjs/tag/Tag.cjs.map +1 -1
  198. package/dist/cjs/tag/Tag.module.css.cjs +1 -1
  199. package/dist/cjs/text-link/TextLink.cjs +10 -13
  200. package/dist/cjs/text-link/TextLink.cjs.map +1 -1
  201. package/dist/cjs/text-link/TextLink.module.css.cjs +1 -1
  202. package/dist/cjs/theme-switcher/ThemeSwitcher.cjs +13 -5
  203. package/dist/cjs/theme-switcher/ThemeSwitcher.cjs.map +1 -1
  204. package/dist/cjs/theme-switcher/ThemeSwitcher.module.css.cjs +6 -0
  205. package/dist/cjs/theme-switcher/ThemeSwitcher.module.css.cjs.map +1 -0
  206. package/dist/cjs/token-amount/TokenAmount.cjs +1 -0
  207. package/dist/cjs/token-amount/TokenAmount.cjs.map +1 -1
  208. package/dist/cjs/token-selector/TokenSelector.cjs +56 -64
  209. package/dist/cjs/token-selector/TokenSelector.cjs.map +1 -1
  210. package/dist/cjs/tooltip/Tooltip.cjs +42 -27
  211. package/dist/cjs/tooltip/Tooltip.cjs.map +1 -1
  212. package/dist/cjs/tx-status/TxStatus.cjs +2 -0
  213. package/dist/cjs/tx-status/TxStatus.cjs.map +1 -1
  214. package/dist/cjs/typography/Typography.cjs +2 -0
  215. package/dist/cjs/typography/Typography.cjs.map +1 -1
  216. package/dist/cjs/utils/ActionElement.cjs +2 -13
  217. package/dist/cjs/utils/ActionElement.cjs.map +1 -1
  218. package/dist/cjs/utils/breakpoints.cjs +26 -0
  219. package/dist/cjs/utils/breakpoints.cjs.map +1 -0
  220. package/dist/cjs/utils/responsive.cjs +19 -30
  221. package/dist/cjs/utils/responsive.cjs.map +1 -1
  222. package/dist/cjs/utils/surface.module.css.cjs +6 -0
  223. package/dist/cjs/utils/surface.module.css.cjs.map +1 -0
  224. package/dist/esm/accordion/Accordion.mjs +1 -0
  225. package/dist/esm/accordion/Accordion.mjs.map +1 -1
  226. package/dist/esm/address/Address.mjs +46 -0
  227. package/dist/esm/address/Address.mjs.map +1 -0
  228. package/dist/esm/address/Address.module.css.mjs +4 -0
  229. package/dist/esm/address/Address.module.css.mjs.map +1 -0
  230. package/dist/esm/address-button/AddressButton.mjs +45 -0
  231. package/dist/esm/address-button/AddressButton.mjs.map +1 -0
  232. package/dist/esm/address-button/AddressButton.module.css.mjs +4 -0
  233. package/dist/esm/address-button/AddressButton.module.css.mjs.map +1 -0
  234. package/dist/esm/badge/Badge.mjs +1 -0
  235. package/dist/esm/badge/Badge.mjs.map +1 -1
  236. package/dist/esm/banner/Banner.mjs +1 -0
  237. package/dist/esm/banner/Banner.mjs.map +1 -1
  238. package/dist/esm/breadcrumbs/Breadcrumbs.mjs +56 -27
  239. package/dist/esm/breadcrumbs/Breadcrumbs.mjs.map +1 -1
  240. package/dist/esm/breadcrumbs/Breadcrumbs.module.css.mjs +1 -1
  241. package/dist/esm/button/Button.mjs +16 -25
  242. package/dist/esm/button/Button.mjs.map +1 -1
  243. package/dist/esm/button/Button.module.css.mjs +1 -1
  244. package/dist/esm/button/ButtonContent.mjs +45 -0
  245. package/dist/esm/button/ButtonContent.mjs.map +1 -0
  246. package/dist/esm/button/LinkButton.mjs +42 -0
  247. package/dist/esm/button/LinkButton.mjs.map +1 -0
  248. package/dist/esm/card/Card.mjs +1 -0
  249. package/dist/esm/card/Card.mjs.map +1 -1
  250. package/dist/esm/checkbox/Checkbox.mjs +1 -0
  251. package/dist/esm/checkbox/Checkbox.mjs.map +1 -1
  252. package/dist/esm/copy/Copy.mjs +51 -0
  253. package/dist/esm/copy/Copy.mjs.map +1 -0
  254. package/dist/esm/copy/Copy.module.css.mjs +4 -0
  255. package/dist/esm/copy/Copy.module.css.mjs.map +1 -0
  256. package/dist/esm/copy/useCopy.mjs +29 -0
  257. package/dist/esm/copy/useCopy.mjs.map +1 -0
  258. package/dist/esm/counter/Counter.mjs +6 -2
  259. package/dist/esm/counter/Counter.mjs.map +1 -1
  260. package/dist/esm/counter/CounterSlot.mjs +19 -3
  261. package/dist/esm/counter/CounterSlot.mjs.map +1 -1
  262. package/dist/esm/counter/CounterSlot.module.css.mjs +1 -1
  263. package/dist/esm/data-list/DataList.mjs +1 -0
  264. package/dist/esm/data-list/DataList.mjs.map +1 -1
  265. package/dist/esm/data-list/DataList.module.css.mjs +1 -1
  266. package/dist/esm/data-list/DataListRow.mjs +7 -12
  267. package/dist/esm/data-list/DataListRow.mjs.map +1 -1
  268. package/dist/esm/disclaimer/Disclaimer.mjs +10 -3
  269. package/dist/esm/disclaimer/Disclaimer.mjs.map +1 -1
  270. package/dist/esm/divider/Divider.mjs +5 -0
  271. package/dist/esm/divider/Divider.mjs.map +1 -1
  272. package/dist/esm/error-page/ErrorPage.mjs +14 -7
  273. package/dist/esm/error-page/ErrorPage.mjs.map +1 -1
  274. package/dist/esm/footer/Footer.mjs +10 -2
  275. package/dist/esm/footer/Footer.mjs.map +1 -1
  276. package/dist/esm/grid/Grid.mjs +8 -4
  277. package/dist/esm/grid/Grid.mjs.map +1 -1
  278. package/dist/esm/grid/Grid.module.css.mjs +1 -1
  279. package/dist/esm/grid/GridItem.mjs +2 -0
  280. package/dist/esm/grid/GridItem.mjs.map +1 -1
  281. package/dist/esm/header/Header.mjs +10 -2
  282. package/dist/esm/header/Header.mjs.map +1 -1
  283. package/dist/esm/header/HeaderNav.mjs +34 -22
  284. package/dist/esm/header/HeaderNav.mjs.map +1 -1
  285. package/dist/esm/header/HeaderNav.module.css.mjs +1 -1
  286. package/dist/esm/hex/Hex.mjs +37 -0
  287. package/dist/esm/hex/Hex.mjs.map +1 -0
  288. package/dist/esm/hex/Hex.module.css.mjs +4 -0
  289. package/dist/esm/hex/Hex.module.css.mjs.map +1 -0
  290. package/dist/esm/hex/trimHex.mjs +11 -0
  291. package/dist/esm/hex/trimHex.mjs.map +1 -0
  292. package/dist/esm/hidden/Hidden.mjs +10 -4
  293. package/dist/esm/hidden/Hidden.mjs.map +1 -1
  294. package/dist/esm/hooks/Portal.mjs +16 -13
  295. package/dist/esm/hooks/Portal.mjs.map +1 -1
  296. package/dist/esm/hooks/useBodyScrollLock.mjs +49 -13
  297. package/dist/esm/hooks/useBodyScrollLock.mjs.map +1 -1
  298. package/dist/esm/hooks/useEdgeFade.mjs +56 -0
  299. package/dist/esm/hooks/useEdgeFade.mjs.map +1 -0
  300. package/dist/esm/hooks/useEscape.mjs +8 -5
  301. package/dist/esm/hooks/useEscape.mjs.map +1 -1
  302. package/dist/esm/hooks/useFocusTrap.mjs +61 -24
  303. package/dist/esm/hooks/useFocusTrap.mjs.map +1 -1
  304. package/dist/esm/hooks/useHideOthers.mjs +47 -0
  305. package/dist/esm/hooks/useHideOthers.mjs.map +1 -0
  306. package/dist/esm/hooks/useOutsideClick.mjs +31 -4
  307. package/dist/esm/hooks/useOutsideClick.mjs.map +1 -1
  308. package/dist/esm/icon-button/CloseButton.mjs +23 -0
  309. package/dist/esm/icon-button/CloseButton.mjs.map +1 -0
  310. package/dist/esm/icon-button/IconButton.mjs +6 -1
  311. package/dist/esm/icon-button/IconButton.mjs.map +1 -1
  312. package/dist/esm/icon-button/IconButton.module.css.mjs +1 -1
  313. package/dist/esm/icons/TokenIcon.mjs +2 -0
  314. package/dist/esm/icons/TokenIcon.mjs.map +1 -1
  315. package/dist/esm/identicon/Identicon.mjs +2 -0
  316. package/dist/esm/identicon/Identicon.mjs.map +1 -1
  317. package/dist/esm/index.css +14 -4
  318. package/dist/esm/index.mjs +35 -1
  319. package/dist/esm/index.mjs.map +1 -1
  320. package/dist/esm/info-tooltip/InfoTooltip.mjs +30 -0
  321. package/dist/esm/info-tooltip/InfoTooltip.mjs.map +1 -0
  322. package/dist/esm/info-tooltip/InfoTooltip.module.css.mjs +4 -0
  323. package/dist/esm/info-tooltip/InfoTooltip.module.css.mjs.map +1 -0
  324. package/dist/esm/input/Input.mjs +4 -8
  325. package/dist/esm/input/Input.mjs.map +1 -1
  326. package/dist/esm/input/Input.module.css.mjs +1 -1
  327. package/dist/esm/link-provider/Anchor.mjs +23 -2
  328. package/dist/esm/link-provider/Anchor.mjs.map +1 -1
  329. package/dist/esm/link-provider/LinkProvider.mjs +1 -1
  330. package/dist/esm/link-provider/LinkProvider.mjs.map +1 -1
  331. package/dist/esm/logo/Logo.mjs +9 -1
  332. package/dist/esm/logo/Logo.mjs.map +1 -1
  333. package/dist/esm/message-box/MessageBox.mjs +1 -0
  334. package/dist/esm/message-box/MessageBox.mjs.map +1 -1
  335. package/dist/esm/modal/Modal.mjs +74 -17
  336. package/dist/esm/modal/Modal.mjs.map +1 -1
  337. package/dist/esm/nav-link/NavLink.mjs +6 -4
  338. package/dist/esm/nav-link/NavLink.mjs.map +1 -1
  339. package/dist/esm/notification/Notification.mjs +13 -7
  340. package/dist/esm/notification/Notification.mjs.map +1 -1
  341. package/dist/esm/page-layout/Layout.mjs +21 -0
  342. package/dist/esm/page-layout/Layout.mjs.map +1 -0
  343. package/dist/esm/page-layout/Layout.module.css.mjs +4 -0
  344. package/dist/esm/page-layout/Layout.module.css.mjs.map +1 -0
  345. package/dist/esm/page-layout/Main.mjs +24 -0
  346. package/dist/esm/page-layout/Main.mjs.map +1 -0
  347. package/dist/esm/page-layout/Main.module.css.mjs +4 -0
  348. package/dist/esm/page-layout/Main.module.css.mjs.map +1 -0
  349. package/dist/esm/page-layout/PageContent.mjs +18 -0
  350. package/dist/esm/page-layout/PageContent.mjs.map +1 -0
  351. package/dist/esm/page-layout/PageContent.module.css.mjs +4 -0
  352. package/dist/esm/page-layout/PageContent.module.css.mjs.map +1 -0
  353. package/dist/esm/pagination/Pagination.mjs +12 -7
  354. package/dist/esm/pagination/Pagination.mjs.map +1 -1
  355. package/dist/esm/popover/Popover.mjs +72 -16
  356. package/dist/esm/popover/Popover.mjs.map +1 -1
  357. package/dist/esm/radio-button/RadioButton.mjs +1 -0
  358. package/dist/esm/radio-button/RadioButton.mjs.map +1 -1
  359. package/dist/esm/rich-input/RichInput.mjs +23 -47
  360. package/dist/esm/rich-input/RichInput.mjs.map +1 -1
  361. package/dist/esm/rich-input/RichInput.module.css.mjs +1 -1
  362. package/dist/esm/section-title/SectionTitle.mjs +9 -10
  363. package/dist/esm/section-title/SectionTitle.mjs.map +1 -1
  364. package/dist/esm/section-title/SectionTitle.module.css.mjs +1 -1
  365. package/dist/esm/segmented-control/SegmentedControl.mjs +1 -0
  366. package/dist/esm/segmented-control/SegmentedControl.mjs.map +1 -1
  367. package/dist/esm/segmented-control/SegmentedControlCard.mjs +1 -0
  368. package/dist/esm/segmented-control/SegmentedControlCard.mjs.map +1 -1
  369. package/dist/esm/sidebar/Sidebar.mjs +136 -0
  370. package/dist/esm/sidebar/Sidebar.mjs.map +1 -0
  371. package/dist/esm/sidebar/Sidebar.module.css.mjs +4 -0
  372. package/dist/esm/sidebar/Sidebar.module.css.mjs.map +1 -0
  373. package/dist/esm/sidebar/SidebarContext.mjs +8 -0
  374. package/dist/esm/sidebar/SidebarContext.mjs.map +1 -0
  375. package/dist/esm/sidebar/SidebarGroup.mjs +33 -0
  376. package/dist/esm/sidebar/SidebarGroup.mjs.map +1 -0
  377. package/dist/esm/sidebar/SidebarGroup.module.css.mjs +4 -0
  378. package/dist/esm/sidebar/SidebarGroup.module.css.mjs.map +1 -0
  379. package/dist/esm/sidebar/SidebarInset.mjs +21 -0
  380. package/dist/esm/sidebar/SidebarInset.mjs.map +1 -0
  381. package/dist/esm/sidebar/SidebarInset.module.css.mjs +4 -0
  382. package/dist/esm/sidebar/SidebarInset.module.css.mjs.map +1 -0
  383. package/dist/esm/sidebar/SidebarItem.mjs +38 -0
  384. package/dist/esm/sidebar/SidebarItem.mjs.map +1 -0
  385. package/dist/esm/sidebar/SidebarItem.module.css.mjs +4 -0
  386. package/dist/esm/sidebar/SidebarItem.module.css.mjs.map +1 -0
  387. package/dist/esm/sidebar/SidebarLayout.mjs +37 -0
  388. package/dist/esm/sidebar/SidebarLayout.mjs.map +1 -0
  389. package/dist/esm/sidebar/SidebarLayout.module.css.mjs +4 -0
  390. package/dist/esm/sidebar/SidebarLayout.module.css.mjs.map +1 -0
  391. package/dist/esm/sidebar/SidebarToggle.mjs +40 -0
  392. package/dist/esm/sidebar/SidebarToggle.mjs.map +1 -0
  393. package/dist/esm/sidebar/SidebarToggle.module.css.mjs +4 -0
  394. package/dist/esm/sidebar/SidebarToggle.module.css.mjs.map +1 -0
  395. package/dist/esm/sidebar/useSidebarDrawer.mjs +43 -0
  396. package/dist/esm/sidebar/useSidebarDrawer.mjs.map +1 -0
  397. package/dist/esm/skeleton/Skeleton.mjs +18 -20
  398. package/dist/esm/skeleton/Skeleton.mjs.map +1 -1
  399. package/dist/esm/skip-link/SkipLink.mjs +48 -0
  400. package/dist/esm/skip-link/SkipLink.mjs.map +1 -0
  401. package/dist/esm/skip-link/SkipLink.module.css.mjs +4 -0
  402. package/dist/esm/skip-link/SkipLink.module.css.mjs.map +1 -0
  403. package/dist/esm/slider/Slider.mjs +1 -0
  404. package/dist/esm/slider/Slider.mjs.map +1 -1
  405. package/dist/esm/small-card/SmallCard.mjs +6 -2
  406. package/dist/esm/small-card/SmallCard.mjs.map +1 -1
  407. package/dist/esm/stack/Stack.mjs +28 -9
  408. package/dist/esm/stack/Stack.mjs.map +1 -1
  409. package/dist/esm/stack/Stack.module.css.mjs +1 -1
  410. package/dist/esm/stat-item/StatItem.mjs +4 -8
  411. package/dist/esm/stat-item/StatItem.mjs.map +1 -1
  412. package/dist/esm/stat-item/StatItem.module.css.mjs +1 -1
  413. package/dist/esm/switch/Switch.mjs +1 -0
  414. package/dist/esm/switch/Switch.mjs.map +1 -1
  415. package/dist/esm/tabs/Tabs.mjs +1 -0
  416. package/dist/esm/tabs/Tabs.mjs.map +1 -1
  417. package/dist/esm/tag/Tag.mjs +74 -9
  418. package/dist/esm/tag/Tag.mjs.map +1 -1
  419. package/dist/esm/tag/Tag.module.css.mjs +1 -1
  420. package/dist/esm/text-link/TextLink.mjs +10 -13
  421. package/dist/esm/text-link/TextLink.mjs.map +1 -1
  422. package/dist/esm/text-link/TextLink.module.css.mjs +1 -1
  423. package/dist/esm/theme-switcher/ThemeSwitcher.mjs +14 -6
  424. package/dist/esm/theme-switcher/ThemeSwitcher.mjs.map +1 -1
  425. package/dist/esm/theme-switcher/ThemeSwitcher.module.css.mjs +4 -0
  426. package/dist/esm/theme-switcher/ThemeSwitcher.module.css.mjs.map +1 -0
  427. package/dist/esm/token-amount/TokenAmount.mjs +1 -0
  428. package/dist/esm/token-amount/TokenAmount.mjs.map +1 -1
  429. package/dist/esm/token-selector/TokenSelector.mjs +58 -66
  430. package/dist/esm/token-selector/TokenSelector.mjs.map +1 -1
  431. package/dist/esm/tooltip/Tooltip.mjs +42 -27
  432. package/dist/esm/tooltip/Tooltip.mjs.map +1 -1
  433. package/dist/esm/tx-status/TxStatus.mjs +2 -0
  434. package/dist/esm/tx-status/TxStatus.mjs.map +1 -1
  435. package/dist/esm/typography/Typography.mjs +2 -0
  436. package/dist/esm/typography/Typography.mjs.map +1 -1
  437. package/dist/esm/utils/ActionElement.mjs +2 -13
  438. package/dist/esm/utils/ActionElement.mjs.map +1 -1
  439. package/dist/esm/utils/breakpoints.mjs +19 -0
  440. package/dist/esm/utils/breakpoints.mjs.map +1 -0
  441. package/dist/esm/utils/responsive.mjs +17 -27
  442. package/dist/esm/utils/responsive.mjs.map +1 -1
  443. package/dist/esm/utils/surface.module.css.mjs +4 -0
  444. package/dist/esm/utils/surface.module.css.mjs.map +1 -0
  445. package/dist/index.css +14 -4
  446. package/dist/styles/breakpoints.css +16 -12
  447. package/dist/styles/typography-mixins.css +8 -0
  448. package/dist/types/accordion/Accordion.d.ts +3 -0
  449. package/dist/types/accordion/Accordion.d.ts.map +1 -1
  450. package/dist/types/address/Address.d.ts +16 -0
  451. package/dist/types/address/Address.d.ts.map +1 -0
  452. package/dist/types/address/index.d.ts +3 -0
  453. package/dist/types/address/index.d.ts.map +1 -0
  454. package/dist/types/address-button/AddressButton.d.ts +13 -0
  455. package/dist/types/address-button/AddressButton.d.ts.map +1 -0
  456. package/dist/types/address-button/index.d.ts +3 -0
  457. package/dist/types/address-button/index.d.ts.map +1 -0
  458. package/dist/types/badge/Badge.d.ts +1 -0
  459. package/dist/types/badge/Badge.d.ts.map +1 -1
  460. package/dist/types/banner/Banner.d.ts +1 -0
  461. package/dist/types/banner/Banner.d.ts.map +1 -1
  462. package/dist/types/breadcrumbs/Breadcrumbs.d.ts +17 -1
  463. package/dist/types/breadcrumbs/Breadcrumbs.d.ts.map +1 -1
  464. package/dist/types/breadcrumbs/index.d.ts +1 -1
  465. package/dist/types/breadcrumbs/index.d.ts.map +1 -1
  466. package/dist/types/button/Button.d.ts +6 -26
  467. package/dist/types/button/Button.d.ts.map +1 -1
  468. package/dist/types/button/ButtonContent.d.ts +10 -0
  469. package/dist/types/button/ButtonContent.d.ts.map +1 -0
  470. package/dist/types/button/LinkButton.d.ts +10 -0
  471. package/dist/types/button/LinkButton.d.ts.map +1 -0
  472. package/dist/types/button/index.d.ts +2 -0
  473. package/dist/types/button/index.d.ts.map +1 -1
  474. package/dist/types/button/types.d.ts +26 -0
  475. package/dist/types/button/types.d.ts.map +1 -0
  476. package/dist/types/card/Card.d.ts +1 -0
  477. package/dist/types/card/Card.d.ts.map +1 -1
  478. package/dist/types/checkbox/Checkbox.d.ts +3 -0
  479. package/dist/types/checkbox/Checkbox.d.ts.map +1 -1
  480. package/dist/types/colors/colorTokens.d.ts.map +1 -1
  481. package/dist/types/copy/Copy.d.ts +10 -0
  482. package/dist/types/copy/Copy.d.ts.map +1 -0
  483. package/dist/types/copy/index.d.ts +5 -0
  484. package/dist/types/copy/index.d.ts.map +1 -0
  485. package/dist/types/copy/useCopy.d.ts +9 -0
  486. package/dist/types/copy/useCopy.d.ts.map +1 -0
  487. package/dist/types/counter/Counter.d.ts +6 -2
  488. package/dist/types/counter/Counter.d.ts.map +1 -1
  489. package/dist/types/counter/CounterSlot.d.ts +3 -0
  490. package/dist/types/counter/CounterSlot.d.ts.map +1 -1
  491. package/dist/types/data-list/DataList.d.ts +1 -0
  492. package/dist/types/data-list/DataList.d.ts.map +1 -1
  493. package/dist/types/data-list/DataListRow.d.ts +1 -0
  494. package/dist/types/data-list/DataListRow.d.ts.map +1 -1
  495. package/dist/types/disclaimer/Disclaimer.d.ts +9 -2
  496. package/dist/types/disclaimer/Disclaimer.d.ts.map +1 -1
  497. package/dist/types/divider/Divider.d.ts +5 -0
  498. package/dist/types/divider/Divider.d.ts.map +1 -1
  499. package/dist/types/divider/index.d.ts +1 -1
  500. package/dist/types/divider/index.d.ts.map +1 -1
  501. package/dist/types/error-page/ErrorPage.d.ts +17 -4
  502. package/dist/types/error-page/ErrorPage.d.ts.map +1 -1
  503. package/dist/types/footer/Footer.d.ts +17 -2
  504. package/dist/types/footer/Footer.d.ts.map +1 -1
  505. package/dist/types/footer/index.d.ts +1 -1
  506. package/dist/types/footer/index.d.ts.map +1 -1
  507. package/dist/types/grid/Grid.d.ts +21 -22
  508. package/dist/types/grid/Grid.d.ts.map +1 -1
  509. package/dist/types/grid/GridItem.d.ts +14 -10
  510. package/dist/types/grid/GridItem.d.ts.map +1 -1
  511. package/dist/types/grid/index.d.ts +2 -2
  512. package/dist/types/grid/index.d.ts.map +1 -1
  513. package/dist/types/header/Header.d.ts +15 -2
  514. package/dist/types/header/Header.d.ts.map +1 -1
  515. package/dist/types/header/HeaderNav.d.ts +10 -2
  516. package/dist/types/header/HeaderNav.d.ts.map +1 -1
  517. package/dist/types/header/index.d.ts +2 -2
  518. package/dist/types/header/index.d.ts.map +1 -1
  519. package/dist/types/hex/Hex.d.ts +10 -0
  520. package/dist/types/hex/Hex.d.ts.map +1 -0
  521. package/dist/types/hex/index.d.ts +4 -0
  522. package/dist/types/hex/index.d.ts.map +1 -0
  523. package/dist/types/hex/trimHex.d.ts +2 -0
  524. package/dist/types/hex/trimHex.d.ts.map +1 -0
  525. package/dist/types/hidden/Hidden.d.ts +20 -6
  526. package/dist/types/hidden/Hidden.d.ts.map +1 -1
  527. package/dist/types/hidden/index.d.ts +1 -1
  528. package/dist/types/hidden/index.d.ts.map +1 -1
  529. package/dist/types/hooks/Portal.d.ts +2 -5
  530. package/dist/types/hooks/Portal.d.ts.map +1 -1
  531. package/dist/types/hooks/index.d.ts +2 -0
  532. package/dist/types/hooks/index.d.ts.map +1 -1
  533. package/dist/types/hooks/useBodyScrollLock.d.ts +4 -2
  534. package/dist/types/hooks/useBodyScrollLock.d.ts.map +1 -1
  535. package/dist/types/hooks/useEdgeFade.d.ts +7 -0
  536. package/dist/types/hooks/useEdgeFade.d.ts.map +1 -0
  537. package/dist/types/hooks/useEscape.d.ts +4 -2
  538. package/dist/types/hooks/useEscape.d.ts.map +1 -1
  539. package/dist/types/hooks/useFocusTrap.d.ts +7 -3
  540. package/dist/types/hooks/useFocusTrap.d.ts.map +1 -1
  541. package/dist/types/hooks/useHideOthers.d.ts +3 -0
  542. package/dist/types/hooks/useHideOthers.d.ts.map +1 -0
  543. package/dist/types/hooks/useIsomorphicLayoutEffect.d.ts +2 -2
  544. package/dist/types/hooks/useIsomorphicLayoutEffect.d.ts.map +1 -1
  545. package/dist/types/hooks/useOutsideClick.d.ts +4 -2
  546. package/dist/types/hooks/useOutsideClick.d.ts.map +1 -1
  547. package/dist/types/icon-button/CloseButton.d.ts +9 -0
  548. package/dist/types/icon-button/CloseButton.d.ts.map +1 -0
  549. package/dist/types/icon-button/IconButton.d.ts +15 -2
  550. package/dist/types/icon-button/IconButton.d.ts.map +1 -1
  551. package/dist/types/icon-button/index.d.ts +2 -0
  552. package/dist/types/icon-button/index.d.ts.map +1 -1
  553. package/dist/types/icons/TokenIcon.d.ts +1 -0
  554. package/dist/types/icons/TokenIcon.d.ts.map +1 -1
  555. package/dist/types/identicon/Identicon.d.ts +5 -0
  556. package/dist/types/identicon/Identicon.d.ts.map +1 -1
  557. package/dist/types/index.d.ts +13 -0
  558. package/dist/types/index.d.ts.map +1 -1
  559. package/dist/types/info-tooltip/InfoTooltip.d.ts +12 -0
  560. package/dist/types/info-tooltip/InfoTooltip.d.ts.map +1 -0
  561. package/dist/types/info-tooltip/index.d.ts +3 -0
  562. package/dist/types/info-tooltip/index.d.ts.map +1 -0
  563. package/dist/types/input/Input.d.ts +1 -0
  564. package/dist/types/input/Input.d.ts.map +1 -1
  565. package/dist/types/link-provider/Anchor.d.ts +17 -1
  566. package/dist/types/link-provider/Anchor.d.ts.map +1 -1
  567. package/dist/types/link-provider/LinkProvider.d.ts +8 -2
  568. package/dist/types/link-provider/LinkProvider.d.ts.map +1 -1
  569. package/dist/types/link-provider/index.d.ts +1 -1
  570. package/dist/types/link-provider/index.d.ts.map +1 -1
  571. package/dist/types/logo/Logo.d.ts +20 -3
  572. package/dist/types/logo/Logo.d.ts.map +1 -1
  573. package/dist/types/logo/index.d.ts +1 -1
  574. package/dist/types/logo/index.d.ts.map +1 -1
  575. package/dist/types/message-box/MessageBox.d.ts +3 -0
  576. package/dist/types/message-box/MessageBox.d.ts.map +1 -1
  577. package/dist/types/modal/Modal.d.ts +21 -3
  578. package/dist/types/modal/Modal.d.ts.map +1 -1
  579. package/dist/types/modal/index.d.ts +2 -2
  580. package/dist/types/modal/index.d.ts.map +1 -1
  581. package/dist/types/nav-link/NavLink.d.ts +17 -0
  582. package/dist/types/nav-link/NavLink.d.ts.map +1 -1
  583. package/dist/types/nav-link/index.d.ts +1 -1
  584. package/dist/types/nav-link/index.d.ts.map +1 -1
  585. package/dist/types/notification/Notification.d.ts +7 -2
  586. package/dist/types/notification/Notification.d.ts.map +1 -1
  587. package/dist/types/page-layout/Layout.d.ts +5 -0
  588. package/dist/types/page-layout/Layout.d.ts.map +1 -0
  589. package/dist/types/page-layout/Main.d.ts +6 -0
  590. package/dist/types/page-layout/Main.d.ts.map +1 -0
  591. package/dist/types/page-layout/PageContent.d.ts +7 -0
  592. package/dist/types/page-layout/PageContent.d.ts.map +1 -0
  593. package/dist/types/page-layout/index.d.ts +7 -0
  594. package/dist/types/page-layout/index.d.ts.map +1 -0
  595. package/dist/types/pagination/Pagination.d.ts +3 -0
  596. package/dist/types/pagination/Pagination.d.ts.map +1 -1
  597. package/dist/types/popover/Popover.d.ts +32 -4
  598. package/dist/types/popover/Popover.d.ts.map +1 -1
  599. package/dist/types/popover/index.d.ts +1 -1
  600. package/dist/types/popover/index.d.ts.map +1 -1
  601. package/dist/types/radio-button/RadioButton.d.ts +3 -0
  602. package/dist/types/radio-button/RadioButton.d.ts.map +1 -1
  603. package/dist/types/rich-input/RichInput.d.ts +8 -1
  604. package/dist/types/rich-input/RichInput.d.ts.map +1 -1
  605. package/dist/types/section-title/SectionTitle.d.ts +8 -2
  606. package/dist/types/section-title/SectionTitle.d.ts.map +1 -1
  607. package/dist/types/section-title/index.d.ts +1 -1
  608. package/dist/types/section-title/index.d.ts.map +1 -1
  609. package/dist/types/segmented-control/SegmentedControl.d.ts +1 -0
  610. package/dist/types/segmented-control/SegmentedControl.d.ts.map +1 -1
  611. package/dist/types/segmented-control/SegmentedControlCard.d.ts +1 -0
  612. package/dist/types/segmented-control/SegmentedControlCard.d.ts.map +1 -1
  613. package/dist/types/sidebar/Sidebar.d.ts +15 -0
  614. package/dist/types/sidebar/Sidebar.d.ts.map +1 -0
  615. package/dist/types/sidebar/SidebarContext.d.ts +6 -0
  616. package/dist/types/sidebar/SidebarContext.d.ts.map +1 -0
  617. package/dist/types/sidebar/SidebarGroup.d.ts +7 -0
  618. package/dist/types/sidebar/SidebarGroup.d.ts.map +1 -0
  619. package/dist/types/sidebar/SidebarInset.d.ts +5 -0
  620. package/dist/types/sidebar/SidebarInset.d.ts.map +1 -0
  621. package/dist/types/sidebar/SidebarItem.d.ts +10 -0
  622. package/dist/types/sidebar/SidebarItem.d.ts.map +1 -0
  623. package/dist/types/sidebar/SidebarLayout.d.ts +18 -0
  624. package/dist/types/sidebar/SidebarLayout.d.ts.map +1 -0
  625. package/dist/types/sidebar/SidebarToggle.d.ts +13 -0
  626. package/dist/types/sidebar/SidebarToggle.d.ts.map +1 -0
  627. package/dist/types/sidebar/index.d.ts +17 -0
  628. package/dist/types/sidebar/index.d.ts.map +1 -0
  629. package/dist/types/sidebar/useSidebarDrawer.d.ts +23 -0
  630. package/dist/types/sidebar/useSidebarDrawer.d.ts.map +1 -0
  631. package/dist/types/skeleton/Skeleton.d.ts +17 -3
  632. package/dist/types/skeleton/Skeleton.d.ts.map +1 -1
  633. package/dist/types/skip-link/SkipLink.d.ts +11 -0
  634. package/dist/types/skip-link/SkipLink.d.ts.map +1 -0
  635. package/dist/types/skip-link/index.d.ts +3 -0
  636. package/dist/types/skip-link/index.d.ts.map +1 -0
  637. package/dist/types/slider/Slider.d.ts +1 -0
  638. package/dist/types/slider/Slider.d.ts.map +1 -1
  639. package/dist/types/small-card/SmallCard.d.ts +21 -2
  640. package/dist/types/small-card/SmallCard.d.ts.map +1 -1
  641. package/dist/types/stack/Stack.d.ts +24 -15
  642. package/dist/types/stack/Stack.d.ts.map +1 -1
  643. package/dist/types/stack/index.d.ts +1 -1
  644. package/dist/types/stack/index.d.ts.map +1 -1
  645. package/dist/types/stat-item/StatItem.d.ts +6 -0
  646. package/dist/types/stat-item/StatItem.d.ts.map +1 -1
  647. package/dist/types/switch/Switch.d.ts +3 -0
  648. package/dist/types/switch/Switch.d.ts.map +1 -1
  649. package/dist/types/tabs/Tabs.d.ts +1 -0
  650. package/dist/types/tabs/Tabs.d.ts.map +1 -1
  651. package/dist/types/tag/Tag.d.ts +31 -3
  652. package/dist/types/tag/Tag.d.ts.map +1 -1
  653. package/dist/types/text-link/TextLink.d.ts +25 -2
  654. package/dist/types/text-link/TextLink.d.ts.map +1 -1
  655. package/dist/types/text-link/index.d.ts +1 -1
  656. package/dist/types/text-link/index.d.ts.map +1 -1
  657. package/dist/types/theme-switcher/ThemeSwitcher.d.ts +9 -3
  658. package/dist/types/theme-switcher/ThemeSwitcher.d.ts.map +1 -1
  659. package/dist/types/token-amount/TokenAmount.d.ts +1 -0
  660. package/dist/types/token-amount/TokenAmount.d.ts.map +1 -1
  661. package/dist/types/token-selector/TokenSelector.d.ts +5 -1
  662. package/dist/types/token-selector/TokenSelector.d.ts.map +1 -1
  663. package/dist/types/tooltip/Tooltip.d.ts +2 -0
  664. package/dist/types/tooltip/Tooltip.d.ts.map +1 -1
  665. package/dist/types/tx-status/TxStatus.d.ts +3 -0
  666. package/dist/types/tx-status/TxStatus.d.ts.map +1 -1
  667. package/dist/types/typography/Typography.d.ts +4 -0
  668. package/dist/types/typography/Typography.d.ts.map +1 -1
  669. package/dist/types/utils/ActionElement.d.ts +4 -4
  670. package/dist/types/utils/ActionElement.d.ts.map +1 -1
  671. package/dist/types/utils/breakpoints.d.ts +16 -0
  672. package/dist/types/utils/breakpoints.d.ts.map +1 -0
  673. package/dist/types/utils/index.d.ts +5 -2
  674. package/dist/types/utils/index.d.ts.map +1 -1
  675. package/dist/types/utils/polymorphic.d.ts +15 -0
  676. package/dist/types/utils/polymorphic.d.ts.map +1 -0
  677. package/dist/types/utils/responsive.d.ts +29 -14
  678. package/dist/types/utils/responsive.d.ts.map +1 -1
  679. package/package.json +7 -3
@@ -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
@@ -0,0 +1,41 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+
5
+ const react = require('react');
6
+ const cn = require('classnames');
7
+ const Hex_module = require('./Hex.module.css.cjs');
8
+ const trimHex = require('./trimHex.cjs');
9
+ const jsxRuntime = require('react/jsx-runtime');
10
+
11
+ const Hex = /*#__PURE__*/react.forwardRef((_ref, ref) => {
12
+ let {
13
+ value,
14
+ symbols = 4,
15
+ title,
16
+ className,
17
+ ...rest
18
+ } = _ref;
19
+ const text = trimHex.trimHex(value, symbols);
20
+ const trimmed = text !== value;
21
+ return /*#__PURE__*/jsxRuntime.jsx("span", {
22
+ ref: ref,
23
+ title: (title ?? (trimmed ? value : undefined)) || undefined,
24
+ className: cn(trimmed ? Hex_module.root : Hex_module.full, className),
25
+ ...rest,
26
+ children: trimmed ? /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
27
+ children: [/*#__PURE__*/jsxRuntime.jsx("span", {
28
+ "aria-hidden": "true",
29
+ className: Hex_module.overlay,
30
+ children: value
31
+ }), /*#__PURE__*/jsxRuntime.jsx("span", {
32
+ className: Hex_module.text,
33
+ children: text
34
+ })]
35
+ }) : text
36
+ });
37
+ });
38
+ Hex.displayName = 'Hex';
39
+
40
+ exports.Hex = Hex;
41
+ //# sourceMappingURL=Hex.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Hex.cjs","sources":["../../../src/hex/Hex.tsx"],"sourcesContent":["import { forwardRef, type ComponentPropsWithoutRef } from 'react'\n\nimport cn from 'classnames'\n\nimport styles from './Hex.module.css'\nimport { trimHex } from './trimHex'\n\n// Title defaults to the full value only when trimmed; an empty title opts out.\nexport type HexProps = Omit<ComponentPropsWithoutRef<'span'>, 'children'> & {\n value: string\n symbols?: number\n}\n\nexport const Hex = forwardRef<HTMLSpanElement, HexProps>(\n ({ value, symbols = 4, title, className, ...rest }, ref) => {\n const text = trimHex(value, symbols)\n const trimmed = text !== value\n\n return (\n <span\n ref={ref}\n title={(title ?? (trimmed ? value : undefined)) || undefined}\n className={cn(trimmed ? styles.root : styles.full, className)}\n {...rest}\n >\n {trimmed ? (\n <>\n <span aria-hidden='true' className={styles.overlay}>\n {value}\n </span>\n <span className={styles.text}>{text}</span>\n </>\n ) : (\n text\n )}\n </span>\n )\n },\n)\n\nHex.displayName = 'Hex'\n"],"names":["Hex","forwardRef","_ref","ref","value","symbols","title","className","rest","text","trimHex","trimmed","_jsx","undefined","cn","styles","root","full","children","_jsxs","_Fragment","overlay","displayName"],"mappings":";;;;;;;;;;AAaO,MAAMA,GAAG,gBAAGC,gBAAU,CAC3B,CAAAC,IAAA,EAAoDC,GAAG,KAAK;EAAA,IAA3D;IAAEC,KAAK;AAAEC,IAAAA,OAAO,GAAG,CAAC;IAAEC,KAAK;IAAEC,SAAS;IAAE,GAAGC,IAAAA;AAAK,GAAC,GAAAN,IAAA,CAAA;AAChD,EAAA,MAAMO,IAAI,GAAGC,eAAO,CAACN,KAAK,EAAEC,OAAO,CAAC,CAAA;AACpC,EAAA,MAAMM,OAAO,GAAGF,IAAI,KAAKL,KAAK,CAAA;AAE9B,EAAA,oBACEQ,cAAA,CAAA,MAAA,EAAA;AACET,IAAAA,GAAG,EAAEA,GAAI;IACTG,KAAK,EAAE,CAACA,KAAK,KAAKK,OAAO,GAAGP,KAAK,GAAGS,SAAS,CAAC,KAAKA,SAAU;AAC7DN,IAAAA,SAAS,EAAEO,EAAE,CAACH,OAAO,GAAGI,UAAM,CAACC,IAAI,GAAGD,UAAM,CAACE,IAAI,EAAEV,SAAS,CAAE;AAAA,IAAA,GAC1DC,IAAI;AAAAU,IAAAA,QAAA,EAEPP,OAAO,gBACNQ,eAAA,CAAAC,mBAAA,EAAA;AAAAF,MAAAA,QAAA,gBACEN,cAAA,CAAA,MAAA,EAAA;AAAM,QAAA,aAAA,EAAY,MAAM;QAACL,SAAS,EAAEQ,UAAM,CAACM,OAAQ;AAAAH,QAAAA,QAAA,EAChDd,KAAAA;OACG,CAAC,eACPQ,cAAA,CAAA,MAAA,EAAA;QAAML,SAAS,EAAEQ,UAAM,CAACN,IAAK;AAAAS,QAAAA,QAAA,EAAET,IAAAA;AAAI,OAAO,CAAC,CAAA;AAAA,KAC3C,CAAC,GAEHA,IAAAA;AACD,GACG,CAAC,CAAA;AAEX,CACF,EAAC;AAEDT,GAAG,CAACsB,WAAW,GAAG,KAAK;;;;"}
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ const styles = {"root":"Hex-module_root__HswaZ","overlay":"Hex-module_overlay__ut9QP","text":"Hex-module_text__cQirb","full":"Hex-module_full__8Nr7J"};
4
+
5
+ module.exports = styles;
6
+ //# sourceMappingURL=Hex.module.css.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Hex.module.css.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,15 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+
5
+ const ELLIPSIS = '...';
6
+ const trimHex = (value, symbols) => {
7
+ if (symbols <= 0) return value;
8
+ const prefix = value.startsWith('0x') ? '0x' : '';
9
+ const body = value.slice(prefix.length);
10
+ if (body.length - symbols * 2 <= ELLIPSIS.length) return value;
11
+ return `${prefix}${body.slice(0, symbols)}${ELLIPSIS}${body.slice(-symbols)}`;
12
+ };
13
+
14
+ exports.trimHex = trimHex;
15
+ //# sourceMappingURL=trimHex.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trimHex.cjs","sources":["../../../src/hex/trimHex.ts"],"sourcesContent":["const ELLIPSIS = '...'\n\nexport const trimHex = (value: string, symbols: number): string => {\n if (symbols <= 0) return value\n\n const prefix = value.startsWith('0x') ? '0x' : ''\n const body = value.slice(prefix.length)\n if (body.length - symbols * 2 <= ELLIPSIS.length) return value\n\n return `${prefix}${body.slice(0, symbols)}${ELLIPSIS}${body.slice(-symbols)}`\n}\n"],"names":["ELLIPSIS","trimHex","value","symbols","prefix","startsWith","body","slice","length"],"mappings":";;;;AAAA,MAAMA,QAAQ,GAAG,KAAK,CAAA;MAETC,OAAO,GAAGA,CAACC,KAAa,EAAEC,OAAe,KAAa;AACjE,EAAA,IAAIA,OAAO,IAAI,CAAC,EAAE,OAAOD,KAAK,CAAA;EAE9B,MAAME,MAAM,GAAGF,KAAK,CAACG,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,EAAE,CAAA;EACjD,MAAMC,IAAI,GAAGJ,KAAK,CAACK,KAAK,CAACH,MAAM,CAACI,MAAM,CAAC,CAAA;AACvC,EAAA,IAAIF,IAAI,CAACE,MAAM,GAAGL,OAAO,GAAG,CAAC,IAAIH,QAAQ,CAACQ,MAAM,EAAE,OAAON,KAAK,CAAA;EAE9D,OAAO,CAAA,EAAGE,MAAM,CAAGE,EAAAA,IAAI,CAACC,KAAK,CAAC,CAAC,EAAEJ,OAAO,CAAC,CAAGH,EAAAA,QAAQ,GAAGM,IAAI,CAACC,KAAK,CAAC,CAACJ,OAAO,CAAC,CAAE,CAAA,CAAA;AAC/E;;;;"}
@@ -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;
@@ -1 +1 @@
1
- {"version":3,"file":"useBodyScrollLock.cjs","sources":["../../../src/hooks/useBodyScrollLock.ts"],"sourcesContent":["import { useEffect } from 'react'\n\n// Ref-counted so stacked overlays only restore on the last unlock.\nlet lockCount = 0\nlet saved = { overflow: '', paddingRight: '' }\n\nconst lock = () => {\n if (lockCount === 0) {\n const { body, documentElement } = document\n saved = {\n overflow: body.style.overflow,\n paddingRight: body.style.paddingRight,\n }\n const scrollbarWidth = window.innerWidth - documentElement.clientWidth\n if (scrollbarWidth > 0) {\n const current = parseFloat(getComputedStyle(body).paddingRight) || 0\n body.style.paddingRight = `${current + scrollbarWidth}px`\n }\n body.style.overflow = 'hidden'\n }\n lockCount += 1\n}\n\nconst unlock = () => {\n lockCount -= 1\n if (lockCount === 0) {\n document.body.style.overflow = saved.overflow\n document.body.style.paddingRight = saved.paddingRight\n }\n}\n\n/** Locks body scroll while `active`, compensating the scrollbar width. */\nexport const useBodyScrollLock = (active: boolean) => {\n useEffect(() => {\n if (!active) return\n lock()\n return unlock\n }, [active])\n}\n"],"names":["lockCount","saved","overflow","paddingRight","lock","body","documentElement","document","style","scrollbarWidth","window","innerWidth","clientWidth","current","parseFloat","getComputedStyle","unlock","useBodyScrollLock","active","useEffect"],"mappings":";;;;;;AAEA;AACA,IAAIA,SAAS,GAAG,CAAC,CAAA;AACjB,IAAIC,KAAK,GAAG;AAAEC,EAAAA,QAAQ,EAAE,EAAE;AAAEC,EAAAA,YAAY,EAAE,EAAA;AAAG,CAAC,CAAA;AAE9C,MAAMC,IAAI,GAAGA,MAAM;EACjB,IAAIJ,SAAS,KAAK,CAAC,EAAE;IACnB,MAAM;MAAEK,IAAI;AAAEC,MAAAA,eAAAA;AAAgB,KAAC,GAAGC,QAAQ,CAAA;AAC1CN,IAAAA,KAAK,GAAG;AACNC,MAAAA,QAAQ,EAAEG,IAAI,CAACG,KAAK,CAACN,QAAQ;AAC7BC,MAAAA,YAAY,EAAEE,IAAI,CAACG,KAAK,CAACL,YAAAA;KAC1B,CAAA;IACD,MAAMM,cAAc,GAAGC,MAAM,CAACC,UAAU,GAAGL,eAAe,CAACM,WAAW,CAAA;IACtE,IAAIH,cAAc,GAAG,CAAC,EAAE;AACtB,MAAA,MAAMI,OAAO,GAAGC,UAAU,CAACC,gBAAgB,CAACV,IAAI,CAAC,CAACF,YAAY,CAAC,IAAI,CAAC,CAAA;MACpEE,IAAI,CAACG,KAAK,CAACL,YAAY,GAAG,CAAGU,EAAAA,OAAO,GAAGJ,cAAc,CAAI,EAAA,CAAA,CAAA;AAC3D,KAAA;AACAJ,IAAAA,IAAI,CAACG,KAAK,CAACN,QAAQ,GAAG,QAAQ,CAAA;AAChC,GAAA;AACAF,EAAAA,SAAS,IAAI,CAAC,CAAA;AAChB,CAAC,CAAA;AAED,MAAMgB,MAAM,GAAGA,MAAM;AACnBhB,EAAAA,SAAS,IAAI,CAAC,CAAA;EACd,IAAIA,SAAS,KAAK,CAAC,EAAE;IACnBO,QAAQ,CAACF,IAAI,CAACG,KAAK,CAACN,QAAQ,GAAGD,KAAK,CAACC,QAAQ,CAAA;IAC7CK,QAAQ,CAACF,IAAI,CAACG,KAAK,CAACL,YAAY,GAAGF,KAAK,CAACE,YAAY,CAAA;AACvD,GAAA;AACF,CAAC,CAAA;;AAED;AACac,MAAAA,iBAAiB,GAAIC,MAAe,IAAK;AACpDC,EAAAA,eAAS,CAAC,MAAM;IACd,IAAI,CAACD,MAAM,EAAE,OAAA;AACbd,IAAAA,IAAI,EAAE,CAAA;AACN,IAAA,OAAOY,MAAM,CAAA;AACf,GAAC,EAAE,CAACE,MAAM,CAAC,CAAC,CAAA;AACd;;;;"}
1
+ {"version":3,"file":"useBodyScrollLock.cjs","sources":["../../../src/hooks/useBodyScrollLock.ts"],"sourcesContent":["import { useEffect } from 'react'\n\nconst SCROLLBAR_VAR = '--lido-app-ui-scrollbar-width'\n\n// Ref-counted so stacked overlays only restore on the last unlock.\nlet lockCount = 0\nconst AXES = ['overflow-x', 'overflow-y'] as const\n\ntype SavedAxis = { name: string; value: string; priority: string }\n\nlet saved = {\n scroller: null as HTMLElement | null,\n axes: [] as SavedAxis[],\n paddingRight: '',\n}\n\nconst lock = () => {\n if (lockCount === 0) {\n const { body, documentElement: html } = document\n // Locking <html> when body is the scroller would detach body's overflow propagation and break sticky headers.\n const scroller = ['auto', 'scroll'].includes(\n getComputedStyle(html).overflowY,\n )\n ? html\n : body\n saved = {\n scroller,\n axes: AXES.map((name) => ({\n name,\n value: scroller.style.getPropertyValue(name),\n priority: scroller.style.getPropertyPriority(name),\n })),\n paddingRight: body.style.paddingRight,\n }\n const before = body.getBoundingClientRect().width\n // body's rect updates synchronously after the lock, html.clientWidth doesn't.\n scroller.style.overflow = 'hidden'\n const gained = body.getBoundingClientRect().width - before\n if (gained > 0) {\n const current = parseFloat(getComputedStyle(body).paddingRight) || 0\n body.style.paddingRight = `${current + gained}px`\n html.style.setProperty(SCROLLBAR_VAR, `${gained}px`)\n }\n }\n lockCount += 1\n}\n\nconst unlock = () => {\n lockCount -= 1\n if (lockCount === 0) {\n const { body, documentElement: html } = document\n const { scroller, axes } = saved\n if (scroller) {\n scroller.style.removeProperty('overflow')\n axes.forEach(({ name, value, priority }) => {\n if (value) scroller.style.setProperty(name, value, priority)\n else scroller.style.removeProperty(name)\n })\n }\n body.style.paddingRight = saved.paddingRight\n html.style.removeProperty(SCROLLBAR_VAR)\n }\n}\n\n/** Locks page scroll while `enabled`, compensating the scrollbar width and exposing it as `--lido-app-ui-scrollbar-width`. */\nexport const useBodyScrollLock = ({\n enabled = true,\n}: { enabled?: boolean } = {}) => {\n useEffect(() => {\n if (!enabled) return\n lock()\n return unlock\n }, [enabled])\n}\n"],"names":["SCROLLBAR_VAR","lockCount","AXES","saved","scroller","axes","paddingRight","lock","body","documentElement","html","document","includes","getComputedStyle","overflowY","map","name","value","style","getPropertyValue","priority","getPropertyPriority","before","getBoundingClientRect","width","overflow","gained","current","parseFloat","setProperty","unlock","removeProperty","forEach","_ref","useBodyScrollLock","enabled","arguments","length","undefined","useEffect"],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+
5
+ const react = require('react');
6
+ const useIsomorphicLayoutEffect = require('./useIsomorphicLayoutEffect.cjs');
7
+
8
+ const syncFade = el => {
9
+ el.toggleAttribute('data-fade-start', el.scrollLeft > 0);
10
+ el.toggleAttribute('data-fade-end', el.scrollLeft < el.scrollWidth - el.clientWidth - 1);
11
+ };
12
+
13
+ /** Keeps `data-fade-*` in sync, maps vertical wheel to horizontal scroll, reveals keyboard-focused items. */
14
+ const useEdgeFade = ref => {
15
+ const sync = react.useCallback(() => {
16
+ if (ref.current) syncFade(ref.current);
17
+ }, [ref]);
18
+ useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(() => {
19
+ const el = ref.current;
20
+ if (!el) return;
21
+ syncFade(el);
22
+ if (typeof ResizeObserver === 'undefined') return;
23
+ const observer = new ResizeObserver(() => syncFade(el));
24
+ observer.observe(el);
25
+ return () => observer.disconnect();
26
+ }, [ref]);
27
+ react.useEffect(() => {
28
+ const el = ref.current;
29
+ if (!el) return;
30
+ const onWheel = e => {
31
+ if (e.ctrlKey || e.metaKey) return;
32
+ if (Math.abs(e.deltaY) <= Math.abs(e.deltaX)) return;
33
+ if (el.scrollWidth <= el.clientWidth) return;
34
+ const before = el.scrollLeft;
35
+ el.scrollLeft += e.deltaMode === 1 ? e.deltaY * 16 : e.deltaY;
36
+ if (el.scrollLeft !== before) e.preventDefault();
37
+ };
38
+ el.addEventListener('wheel', onWheel, {
39
+ passive: false
40
+ });
41
+ return () => el.removeEventListener('wheel', onWheel);
42
+ }, [ref]);
43
+
44
+ // keyboard only: scrolling on mouse focus would retarget the click away from the link
45
+ const onFocus = react.useCallback(e => {
46
+ const target = e.target;
47
+ if (target === e.currentTarget || !target.matches(':focus-visible')) return;
48
+ target.scrollIntoView?.({
49
+ block: 'nearest',
50
+ inline: 'nearest'
51
+ });
52
+ }, []);
53
+ return {
54
+ sync,
55
+ onFocus
56
+ };
57
+ };
58
+
59
+ exports.useEdgeFade = useEdgeFade;
60
+ //# sourceMappingURL=useEdgeFade.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useEdgeFade.cjs","sources":["../../../src/hooks/useEdgeFade.ts"],"sourcesContent":["import { useCallback, useEffect } from 'react'\nimport type { FocusEvent, RefObject } from 'react'\n\nimport { useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect'\n\nconst syncFade = (el: HTMLElement) => {\n el.toggleAttribute('data-fade-start', el.scrollLeft > 0)\n el.toggleAttribute(\n 'data-fade-end',\n el.scrollLeft < el.scrollWidth - el.clientWidth - 1,\n )\n}\n\n/** Keeps `data-fade-*` in sync, maps vertical wheel to horizontal scroll, reveals keyboard-focused items. */\nexport const useEdgeFade = (ref: RefObject<HTMLElement>) => {\n const sync = useCallback(() => {\n if (ref.current) syncFade(ref.current)\n }, [ref])\n\n useIsomorphicLayoutEffect(() => {\n const el = ref.current\n if (!el) return\n syncFade(el)\n if (typeof ResizeObserver === 'undefined') return\n const observer = new ResizeObserver(() => syncFade(el))\n observer.observe(el)\n return () => observer.disconnect()\n }, [ref])\n\n useEffect(() => {\n const el = ref.current\n if (!el) return\n const onWheel = (e: WheelEvent) => {\n if (e.ctrlKey || e.metaKey) return\n if (Math.abs(e.deltaY) <= Math.abs(e.deltaX)) return\n if (el.scrollWidth <= el.clientWidth) return\n const before = el.scrollLeft\n el.scrollLeft += e.deltaMode === 1 ? e.deltaY * 16 : e.deltaY\n if (el.scrollLeft !== before) e.preventDefault()\n }\n el.addEventListener('wheel', onWheel, { passive: false })\n return () => el.removeEventListener('wheel', onWheel)\n }, [ref])\n\n // keyboard only: scrolling on mouse focus would retarget the click away from the link\n const onFocus = useCallback((e: FocusEvent<HTMLElement>) => {\n const target = e.target as HTMLElement\n if (target === e.currentTarget || !target.matches(':focus-visible')) return\n target.scrollIntoView?.({ block: 'nearest', inline: 'nearest' })\n }, [])\n\n return { sync, onFocus }\n}\n"],"names":["syncFade","el","toggleAttribute","scrollLeft","scrollWidth","clientWidth","useEdgeFade","ref","sync","useCallback","current","useIsomorphicLayoutEffect","ResizeObserver","observer","observe","disconnect","useEffect","onWheel","e","ctrlKey","metaKey","Math","abs","deltaY","deltaX","before","deltaMode","preventDefault","addEventListener","passive","removeEventListener","onFocus","target","currentTarget","matches","scrollIntoView","block","inline"],"mappings":"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"}
@@ -7,18 +7,21 @@ const overlayStack = require('./overlayStack.cjs');
7
7
 
8
8
  const listenEscapeLayer = overlayStack.createLayerStack('keydown');
9
9
 
10
- /** Calls `handler` on Escape while `active`; with nested overlays only the newest one handles it. */
11
- const useEscape = (active, handler) => {
10
+ /** Calls `handler` on Escape while `enabled`; with nested overlays only the newest one handles it. */
11
+ const useEscape = function (handler) {
12
+ let {
13
+ enabled = true
14
+ } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
12
15
  const handlerRef = react.useRef(handler);
13
16
  handlerRef.current = handler;
14
17
  react.useEffect(() => {
15
- if (!active) return;
18
+ if (!enabled) return;
16
19
  return listenEscapeLayer(event => {
17
- if (event.key !== 'Escape' || event.defaultPrevented) return;
20
+ if (event.key !== 'Escape' || event.defaultPrevented || event.isComposing || event.keyCode === 229) return;
18
21
  event.preventDefault();
19
22
  handlerRef.current(event);
20
23
  });
21
- }, [active]);
24
+ }, [enabled]);
22
25
  };
23
26
 
24
27
  exports.useEscape = useEscape;
@@ -1 +1 @@
1
- {"version":3,"file":"useEscape.cjs","sources":["../../../src/hooks/useEscape.ts"],"sourcesContent":["import { useEffect, useRef } from 'react'\n\nimport { createLayerStack } from './overlayStack'\n\nconst listenEscapeLayer = createLayerStack('keydown')\n\n/** Calls `handler` on Escape while `active`; with nested overlays only the newest one handles it. */\nexport const useEscape = (\n active: boolean,\n handler: (event: KeyboardEvent) => void,\n) => {\n const handlerRef = useRef(handler)\n handlerRef.current = handler\n\n useEffect(() => {\n if (!active) return\n\n return listenEscapeLayer((event) => {\n if (event.key !== 'Escape' || event.defaultPrevented) return\n event.preventDefault()\n handlerRef.current(event)\n })\n }, [active])\n}\n"],"names":["listenEscapeLayer","createLayerStack","useEscape","active","handler","handlerRef","useRef","current","useEffect","event","key","defaultPrevented","preventDefault"],"mappings":";;;;;;;AAIA,MAAMA,iBAAiB,GAAGC,6BAAgB,CAAC,SAAS,CAAC,CAAA;;AAErD;MACaC,SAAS,GAAGA,CACvBC,MAAe,EACfC,OAAuC,KACpC;AACH,EAAA,MAAMC,UAAU,GAAGC,YAAM,CAACF,OAAO,CAAC,CAAA;EAClCC,UAAU,CAACE,OAAO,GAAGH,OAAO,CAAA;AAE5BI,EAAAA,eAAS,CAAC,MAAM;IACd,IAAI,CAACL,MAAM,EAAE,OAAA;IAEb,OAAOH,iBAAiB,CAAES,KAAK,IAAK;MAClC,IAAIA,KAAK,CAACC,GAAG,KAAK,QAAQ,IAAID,KAAK,CAACE,gBAAgB,EAAE,OAAA;MACtDF,KAAK,CAACG,cAAc,EAAE,CAAA;AACtBP,MAAAA,UAAU,CAACE,OAAO,CAACE,KAAK,CAAC,CAAA;AAC3B,KAAC,CAAC,CAAA;AACJ,GAAC,EAAE,CAACN,MAAM,CAAC,CAAC,CAAA;AACd;;;;"}
1
+ {"version":3,"file":"useEscape.cjs","sources":["../../../src/hooks/useEscape.ts"],"sourcesContent":["import { useEffect, useRef } from 'react'\n\nimport { createLayerStack } from './overlayStack'\n\nconst listenEscapeLayer = createLayerStack('keydown')\n\n/** Calls `handler` on Escape while `enabled`; with nested overlays only the newest one handles it. */\nexport const useEscape = (\n handler: (event: KeyboardEvent) => void,\n { enabled = true }: { enabled?: boolean } = {},\n) => {\n const handlerRef = useRef(handler)\n handlerRef.current = handler\n\n useEffect(() => {\n if (!enabled) return\n\n return listenEscapeLayer((event) => {\n if (\n event.key !== 'Escape' ||\n event.defaultPrevented ||\n event.isComposing ||\n event.keyCode === 229\n )\n return\n event.preventDefault()\n handlerRef.current(event)\n })\n }, [enabled])\n}\n"],"names":["listenEscapeLayer","createLayerStack","useEscape","handler","enabled","arguments","length","undefined","handlerRef","useRef","current","useEffect","event","key","defaultPrevented","isComposing","keyCode","preventDefault"],"mappings":";;;;;;;AAIA,MAAMA,iBAAiB,GAAGC,6BAAgB,CAAC,SAAS,CAAC,CAAA;;AAErD;MACaC,SAAS,GAAG,UACvBC,OAAuC,EAEpC;EAAA,IADH;AAAEC,IAAAA,OAAO,GAAG,IAAA;AAA4B,GAAC,GAAAC,SAAA,CAAAC,MAAA,GAAAD,CAAAA,IAAAA,SAAA,CAAAE,CAAAA,CAAAA,KAAAA,SAAA,GAAAF,SAAA,CAAG,CAAA,CAAA,GAAA,EAAE,CAAA;AAE9C,EAAA,MAAMG,UAAU,GAAGC,YAAM,CAACN,OAAO,CAAC,CAAA;EAClCK,UAAU,CAACE,OAAO,GAAGP,OAAO,CAAA;AAE5BQ,EAAAA,eAAS,CAAC,MAAM;IACd,IAAI,CAACP,OAAO,EAAE,OAAA;IAEd,OAAOJ,iBAAiB,CAAEY,KAAK,IAAK;AAClC,MAAA,IACEA,KAAK,CAACC,GAAG,KAAK,QAAQ,IACtBD,KAAK,CAACE,gBAAgB,IACtBF,KAAK,CAACG,WAAW,IACjBH,KAAK,CAACI,OAAO,KAAK,GAAG,EAErB,OAAA;MACFJ,KAAK,CAACK,cAAc,EAAE,CAAA;AACtBT,MAAAA,UAAU,CAACE,OAAO,CAACE,KAAK,CAAC,CAAA;AAC3B,KAAC,CAAC,CAAA;AACJ,GAAC,EAAE,CAACR,OAAO,CAAC,CAAC,CAAA;AACf;;;;"}