@lidofinance/lido-app-ui 1.8.0 → 1.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (352) hide show
  1. package/README.md +30 -1
  2. package/dist/README.md +30 -1
  3. package/dist/cjs/breadcrumbs/Breadcrumbs.cjs +92 -0
  4. package/dist/cjs/breadcrumbs/Breadcrumbs.cjs.map +1 -0
  5. package/dist/cjs/breadcrumbs/Breadcrumbs.module.css.cjs +6 -0
  6. package/dist/cjs/breadcrumbs/Breadcrumbs.module.css.cjs.map +1 -0
  7. package/dist/cjs/button/Button.cjs +11 -3
  8. package/dist/cjs/button/Button.cjs.map +1 -1
  9. package/dist/cjs/counter/Counter.module.css.cjs +1 -1
  10. package/dist/cjs/counter/CounterSlot.cjs +22 -0
  11. package/dist/cjs/counter/CounterSlot.cjs.map +1 -0
  12. package/dist/cjs/counter/CounterSlot.module.css.cjs +6 -0
  13. package/dist/cjs/counter/CounterSlot.module.css.cjs.map +1 -0
  14. package/dist/cjs/disclaimer/Disclaimer.cjs +33 -0
  15. package/dist/cjs/disclaimer/Disclaimer.cjs.map +1 -0
  16. package/dist/cjs/disclaimer/Disclaimer.module.css.cjs +6 -0
  17. package/dist/cjs/disclaimer/Disclaimer.module.css.cjs.map +1 -0
  18. package/dist/cjs/divider/Divider.cjs +26 -0
  19. package/dist/cjs/divider/Divider.cjs.map +1 -0
  20. package/dist/cjs/divider/Divider.module.css.cjs +6 -0
  21. package/dist/cjs/divider/Divider.module.css.cjs.map +1 -0
  22. package/dist/cjs/error-page/ErrorPage.cjs +64 -0
  23. package/dist/cjs/error-page/ErrorPage.cjs.map +1 -0
  24. package/dist/cjs/error-page/ErrorPage.module.css.cjs +6 -0
  25. package/dist/cjs/error-page/ErrorPage.module.css.cjs.map +1 -0
  26. package/dist/cjs/footer/Footer.cjs +30 -0
  27. package/dist/cjs/footer/Footer.cjs.map +1 -0
  28. package/dist/cjs/footer/Footer.module.css.cjs +6 -0
  29. package/dist/cjs/footer/Footer.module.css.cjs.map +1 -0
  30. package/dist/cjs/grid/Grid.cjs +47 -0
  31. package/dist/cjs/grid/Grid.cjs.map +1 -0
  32. package/dist/cjs/grid/Grid.module.css.cjs +6 -0
  33. package/dist/cjs/grid/Grid.module.css.cjs.map +1 -0
  34. package/dist/cjs/grid/GridItem.cjs +39 -0
  35. package/dist/cjs/grid/GridItem.cjs.map +1 -0
  36. package/dist/cjs/grid/GridItem.module.css.cjs +6 -0
  37. package/dist/cjs/grid/GridItem.module.css.cjs.map +1 -0
  38. package/dist/cjs/header/Header.cjs +31 -0
  39. package/dist/cjs/header/Header.cjs.map +1 -0
  40. package/dist/cjs/header/Header.module.css.cjs +6 -0
  41. package/dist/cjs/header/Header.module.css.cjs.map +1 -0
  42. package/dist/cjs/header/HeaderNav.cjs +69 -0
  43. package/dist/cjs/header/HeaderNav.cjs.map +1 -0
  44. package/dist/cjs/header/HeaderNav.module.css.cjs +6 -0
  45. package/dist/cjs/header/HeaderNav.module.css.cjs.map +1 -0
  46. package/dist/cjs/hidden/Hidden.cjs +25 -0
  47. package/dist/cjs/hidden/Hidden.cjs.map +1 -0
  48. package/dist/cjs/hidden/Hidden.module.css.cjs +6 -0
  49. package/dist/cjs/hidden/Hidden.module.css.cjs.map +1 -0
  50. package/dist/cjs/hooks/Portal.cjs +57 -0
  51. package/dist/cjs/hooks/Portal.cjs.map +1 -0
  52. package/dist/cjs/hooks/overlayStack.cjs +26 -0
  53. package/dist/cjs/hooks/overlayStack.cjs.map +1 -0
  54. package/dist/cjs/hooks/useBodyScrollLock.cjs +50 -0
  55. package/dist/cjs/hooks/useBodyScrollLock.cjs.map +1 -0
  56. package/dist/cjs/hooks/useEscape.cjs +25 -0
  57. package/dist/cjs/hooks/useEscape.cjs.map +1 -0
  58. package/dist/cjs/hooks/useFocusTrap.cjs +66 -0
  59. package/dist/cjs/hooks/useFocusTrap.cjs.map +1 -0
  60. package/dist/cjs/hooks/useIsomorphicLayoutEffect.cjs +10 -0
  61. package/dist/cjs/hooks/useIsomorphicLayoutEffect.cjs.map +1 -0
  62. package/dist/cjs/hooks/useOutsideClick.cjs +15 -13
  63. package/dist/cjs/hooks/useOutsideClick.cjs.map +1 -1
  64. package/dist/cjs/icon-button/IconButton.cjs +13 -5
  65. package/dist/cjs/icon-button/IconButton.cjs.map +1 -1
  66. package/dist/cjs/icon-button/IconButton.module.css.cjs +1 -1
  67. package/dist/cjs/index.cjs +34 -0
  68. package/dist/cjs/index.cjs.map +1 -1
  69. package/dist/cjs/index.css +3 -3
  70. package/dist/cjs/link-provider/Anchor.cjs +48 -0
  71. package/dist/cjs/link-provider/Anchor.cjs.map +1 -0
  72. package/dist/cjs/link-provider/LinkProvider.cjs +29 -0
  73. package/dist/cjs/link-provider/LinkProvider.cjs.map +1 -0
  74. package/dist/cjs/logo/Logo.cjs +84 -0
  75. package/dist/cjs/logo/Logo.cjs.map +1 -0
  76. package/dist/cjs/logo/Logo.module.css.cjs +6 -0
  77. package/dist/cjs/logo/Logo.module.css.cjs.map +1 -0
  78. package/dist/cjs/modal/Modal.cjs +36 -29
  79. package/dist/cjs/modal/Modal.cjs.map +1 -1
  80. package/dist/cjs/nav-link/NavLink.cjs +44 -0
  81. package/dist/cjs/nav-link/NavLink.cjs.map +1 -0
  82. package/dist/cjs/nav-link/NavLink.module.css.cjs +6 -0
  83. package/dist/cjs/nav-link/NavLink.module.css.cjs.map +1 -0
  84. package/dist/cjs/notification/Notification.cjs +20 -4
  85. package/dist/cjs/notification/Notification.cjs.map +1 -1
  86. package/dist/cjs/notification/Notification.module.css.cjs +1 -1
  87. package/dist/cjs/popover/Popover.cjs +136 -0
  88. package/dist/cjs/popover/Popover.cjs.map +1 -0
  89. package/dist/cjs/popover/Popover.module.css.cjs +6 -0
  90. package/dist/cjs/popover/Popover.module.css.cjs.map +1 -0
  91. package/dist/cjs/segmented-control/SegmentedControl.cjs +2 -1
  92. package/dist/cjs/segmented-control/SegmentedControl.cjs.map +1 -1
  93. package/dist/cjs/segmented-control/SegmentedControlCard.cjs +2 -1
  94. package/dist/cjs/segmented-control/SegmentedControlCard.cjs.map +1 -1
  95. package/dist/cjs/skeleton/Skeleton.cjs +40 -0
  96. package/dist/cjs/skeleton/Skeleton.cjs.map +1 -0
  97. package/dist/cjs/skeleton/Skeleton.module.css.cjs +6 -0
  98. package/dist/cjs/skeleton/Skeleton.module.css.cjs.map +1 -0
  99. package/dist/cjs/small-card/SmallCard.cjs +2 -1
  100. package/dist/cjs/small-card/SmallCard.cjs.map +1 -1
  101. package/dist/cjs/stack/Stack.cjs +41 -0
  102. package/dist/cjs/stack/Stack.cjs.map +1 -0
  103. package/dist/cjs/stack/Stack.module.css.cjs +6 -0
  104. package/dist/cjs/stack/Stack.module.css.cjs.map +1 -0
  105. package/dist/cjs/tabs/Tabs.cjs +2 -1
  106. package/dist/cjs/tabs/Tabs.cjs.map +1 -1
  107. package/dist/cjs/tag/Tag.cjs +1 -1
  108. package/dist/cjs/tag/Tag.cjs.map +1 -1
  109. package/dist/cjs/tag/Tag.module.css.cjs +1 -1
  110. package/dist/cjs/text-link/TextLink.cjs +2 -1
  111. package/dist/cjs/text-link/TextLink.cjs.map +1 -1
  112. package/dist/cjs/theme-switcher/ThemeSwitcher.cjs +39 -0
  113. package/dist/cjs/theme-switcher/ThemeSwitcher.cjs.map +1 -0
  114. package/dist/cjs/token-selector/TokenSelector.cjs +3 -3
  115. package/dist/cjs/token-selector/TokenSelector.cjs.map +1 -1
  116. package/dist/cjs/tooltip/Tooltip.cjs +2 -1
  117. package/dist/cjs/tooltip/Tooltip.cjs.map +1 -1
  118. package/dist/cjs/utils/ActionElement.cjs +41 -0
  119. package/dist/cjs/utils/ActionElement.cjs.map +1 -0
  120. package/dist/cjs/utils/responsive.cjs +67 -0
  121. package/dist/cjs/utils/responsive.cjs.map +1 -0
  122. package/dist/esm/breadcrumbs/Breadcrumbs.mjs +88 -0
  123. package/dist/esm/breadcrumbs/Breadcrumbs.mjs.map +1 -0
  124. package/dist/esm/breadcrumbs/Breadcrumbs.module.css.mjs +4 -0
  125. package/dist/esm/breadcrumbs/Breadcrumbs.module.css.mjs.map +1 -0
  126. package/dist/esm/button/Button.mjs +11 -3
  127. package/dist/esm/button/Button.mjs.map +1 -1
  128. package/dist/esm/counter/Counter.module.css.mjs +1 -1
  129. package/dist/esm/counter/CounterSlot.mjs +18 -0
  130. package/dist/esm/counter/CounterSlot.mjs.map +1 -0
  131. package/dist/esm/counter/CounterSlot.module.css.mjs +4 -0
  132. package/dist/esm/counter/CounterSlot.module.css.mjs.map +1 -0
  133. package/dist/esm/disclaimer/Disclaimer.mjs +29 -0
  134. package/dist/esm/disclaimer/Disclaimer.mjs.map +1 -0
  135. package/dist/esm/disclaimer/Disclaimer.module.css.mjs +4 -0
  136. package/dist/esm/disclaimer/Disclaimer.module.css.mjs.map +1 -0
  137. package/dist/esm/divider/Divider.mjs +22 -0
  138. package/dist/esm/divider/Divider.mjs.map +1 -0
  139. package/dist/esm/divider/Divider.module.css.mjs +4 -0
  140. package/dist/esm/divider/Divider.module.css.mjs.map +1 -0
  141. package/dist/esm/error-page/ErrorPage.mjs +60 -0
  142. package/dist/esm/error-page/ErrorPage.mjs.map +1 -0
  143. package/dist/esm/error-page/ErrorPage.module.css.mjs +4 -0
  144. package/dist/esm/error-page/ErrorPage.module.css.mjs.map +1 -0
  145. package/dist/esm/footer/Footer.mjs +26 -0
  146. package/dist/esm/footer/Footer.mjs.map +1 -0
  147. package/dist/esm/footer/Footer.module.css.mjs +4 -0
  148. package/dist/esm/footer/Footer.module.css.mjs.map +1 -0
  149. package/dist/esm/grid/Grid.mjs +43 -0
  150. package/dist/esm/grid/Grid.mjs.map +1 -0
  151. package/dist/esm/grid/Grid.module.css.mjs +4 -0
  152. package/dist/esm/grid/Grid.module.css.mjs.map +1 -0
  153. package/dist/esm/grid/GridItem.mjs +35 -0
  154. package/dist/esm/grid/GridItem.mjs.map +1 -0
  155. package/dist/esm/grid/GridItem.module.css.mjs +4 -0
  156. package/dist/esm/grid/GridItem.module.css.mjs.map +1 -0
  157. package/dist/esm/header/Header.mjs +27 -0
  158. package/dist/esm/header/Header.mjs.map +1 -0
  159. package/dist/esm/header/Header.module.css.mjs +4 -0
  160. package/dist/esm/header/Header.module.css.mjs.map +1 -0
  161. package/dist/esm/header/HeaderNav.mjs +65 -0
  162. package/dist/esm/header/HeaderNav.mjs.map +1 -0
  163. package/dist/esm/header/HeaderNav.module.css.mjs +4 -0
  164. package/dist/esm/header/HeaderNav.module.css.mjs.map +1 -0
  165. package/dist/esm/hidden/Hidden.mjs +21 -0
  166. package/dist/esm/hidden/Hidden.mjs.map +1 -0
  167. package/dist/esm/hidden/Hidden.module.css.mjs +4 -0
  168. package/dist/esm/hidden/Hidden.module.css.mjs.map +1 -0
  169. package/dist/esm/hooks/Portal.mjs +53 -0
  170. package/dist/esm/hooks/Portal.mjs.map +1 -0
  171. package/dist/esm/hooks/overlayStack.mjs +22 -0
  172. package/dist/esm/hooks/overlayStack.mjs.map +1 -0
  173. package/dist/esm/hooks/useBodyScrollLock.mjs +46 -0
  174. package/dist/esm/hooks/useBodyScrollLock.mjs.map +1 -0
  175. package/dist/esm/hooks/useEscape.mjs +21 -0
  176. package/dist/esm/hooks/useEscape.mjs.map +1 -0
  177. package/dist/esm/hooks/useFocusTrap.mjs +62 -0
  178. package/dist/esm/hooks/useFocusTrap.mjs.map +1 -0
  179. package/dist/esm/hooks/useIsomorphicLayoutEffect.mjs +6 -0
  180. package/dist/esm/hooks/useIsomorphicLayoutEffect.mjs.map +1 -0
  181. package/dist/esm/hooks/useOutsideClick.mjs +16 -14
  182. package/dist/esm/hooks/useOutsideClick.mjs.map +1 -1
  183. package/dist/esm/icon-button/IconButton.mjs +14 -6
  184. package/dist/esm/icon-button/IconButton.mjs.map +1 -1
  185. package/dist/esm/icon-button/IconButton.module.css.mjs +1 -1
  186. package/dist/esm/index.css +3 -3
  187. package/dist/esm/index.mjs +17 -0
  188. package/dist/esm/index.mjs.map +1 -1
  189. package/dist/esm/link-provider/Anchor.mjs +44 -0
  190. package/dist/esm/link-provider/Anchor.mjs.map +1 -0
  191. package/dist/esm/link-provider/LinkProvider.mjs +24 -0
  192. package/dist/esm/link-provider/LinkProvider.mjs.map +1 -0
  193. package/dist/esm/logo/Logo.mjs +80 -0
  194. package/dist/esm/logo/Logo.mjs.map +1 -0
  195. package/dist/esm/logo/Logo.module.css.mjs +4 -0
  196. package/dist/esm/logo/Logo.module.css.mjs.map +1 -0
  197. package/dist/esm/modal/Modal.mjs +38 -31
  198. package/dist/esm/modal/Modal.mjs.map +1 -1
  199. package/dist/esm/nav-link/NavLink.mjs +40 -0
  200. package/dist/esm/nav-link/NavLink.mjs.map +1 -0
  201. package/dist/esm/nav-link/NavLink.module.css.mjs +4 -0
  202. package/dist/esm/nav-link/NavLink.module.css.mjs.map +1 -0
  203. package/dist/esm/notification/Notification.mjs +20 -4
  204. package/dist/esm/notification/Notification.mjs.map +1 -1
  205. package/dist/esm/notification/Notification.module.css.mjs +1 -1
  206. package/dist/esm/popover/Popover.mjs +132 -0
  207. package/dist/esm/popover/Popover.mjs.map +1 -0
  208. package/dist/esm/popover/Popover.module.css.mjs +4 -0
  209. package/dist/esm/popover/Popover.module.css.mjs.map +1 -0
  210. package/dist/esm/segmented-control/SegmentedControl.mjs +3 -2
  211. package/dist/esm/segmented-control/SegmentedControl.mjs.map +1 -1
  212. package/dist/esm/segmented-control/SegmentedControlCard.mjs +3 -2
  213. package/dist/esm/segmented-control/SegmentedControlCard.mjs.map +1 -1
  214. package/dist/esm/skeleton/Skeleton.mjs +36 -0
  215. package/dist/esm/skeleton/Skeleton.mjs.map +1 -0
  216. package/dist/esm/skeleton/Skeleton.module.css.mjs +4 -0
  217. package/dist/esm/skeleton/Skeleton.module.css.mjs.map +1 -0
  218. package/dist/esm/small-card/SmallCard.mjs +2 -1
  219. package/dist/esm/small-card/SmallCard.mjs.map +1 -1
  220. package/dist/esm/stack/Stack.mjs +37 -0
  221. package/dist/esm/stack/Stack.mjs.map +1 -0
  222. package/dist/esm/stack/Stack.module.css.mjs +4 -0
  223. package/dist/esm/stack/Stack.module.css.mjs.map +1 -0
  224. package/dist/esm/tabs/Tabs.mjs +3 -2
  225. package/dist/esm/tabs/Tabs.mjs.map +1 -1
  226. package/dist/esm/tag/Tag.mjs +1 -1
  227. package/dist/esm/tag/Tag.mjs.map +1 -1
  228. package/dist/esm/tag/Tag.module.css.mjs +1 -1
  229. package/dist/esm/text-link/TextLink.mjs +2 -1
  230. package/dist/esm/text-link/TextLink.mjs.map +1 -1
  231. package/dist/esm/theme-switcher/ThemeSwitcher.mjs +35 -0
  232. package/dist/esm/theme-switcher/ThemeSwitcher.mjs.map +1 -0
  233. package/dist/esm/token-selector/TokenSelector.mjs +3 -3
  234. package/dist/esm/token-selector/TokenSelector.mjs.map +1 -1
  235. package/dist/esm/tooltip/Tooltip.mjs +3 -2
  236. package/dist/esm/tooltip/Tooltip.mjs.map +1 -1
  237. package/dist/esm/utils/ActionElement.mjs +37 -0
  238. package/dist/esm/utils/ActionElement.mjs.map +1 -0
  239. package/dist/esm/utils/responsive.mjs +58 -0
  240. package/dist/esm/utils/responsive.mjs.map +1 -0
  241. package/dist/index.css +3 -3
  242. package/dist/styles/breakpoints.css +6 -0
  243. package/dist/styles/typography-mixins.css +8 -0
  244. package/dist/types/breadcrumbs/Breadcrumbs.d.ts +11 -0
  245. package/dist/types/breadcrumbs/Breadcrumbs.d.ts.map +1 -0
  246. package/dist/types/breadcrumbs/index.d.ts +3 -0
  247. package/dist/types/breadcrumbs/index.d.ts.map +1 -0
  248. package/dist/types/button/Button.d.ts +14 -2
  249. package/dist/types/button/Button.d.ts.map +1 -1
  250. package/dist/types/colors/colorTokens.d.ts.map +1 -1
  251. package/dist/types/counter/CounterSlot.d.ts +8 -0
  252. package/dist/types/counter/CounterSlot.d.ts.map +1 -0
  253. package/dist/types/disclaimer/Disclaimer.d.ts +9 -0
  254. package/dist/types/disclaimer/Disclaimer.d.ts.map +1 -0
  255. package/dist/types/disclaimer/index.d.ts +3 -0
  256. package/dist/types/disclaimer/index.d.ts.map +1 -0
  257. package/dist/types/divider/Divider.d.ts +10 -0
  258. package/dist/types/divider/Divider.d.ts.map +1 -0
  259. package/dist/types/divider/index.d.ts +3 -0
  260. package/dist/types/divider/index.d.ts.map +1 -0
  261. package/dist/types/error-page/ErrorPage.d.ts +20 -0
  262. package/dist/types/error-page/ErrorPage.d.ts.map +1 -0
  263. package/dist/types/error-page/index.d.ts +3 -0
  264. package/dist/types/error-page/index.d.ts.map +1 -0
  265. package/dist/types/footer/Footer.d.ts +7 -0
  266. package/dist/types/footer/Footer.d.ts.map +1 -0
  267. package/dist/types/footer/index.d.ts +3 -0
  268. package/dist/types/footer/index.d.ts.map +1 -0
  269. package/dist/types/grid/Grid.d.ts +31 -0
  270. package/dist/types/grid/Grid.d.ts.map +1 -0
  271. package/dist/types/grid/GridItem.d.ts +16 -0
  272. package/dist/types/grid/GridItem.d.ts.map +1 -0
  273. package/dist/types/grid/index.d.ts +5 -0
  274. package/dist/types/grid/index.d.ts.map +1 -0
  275. package/dist/types/header/Header.d.ts +9 -0
  276. package/dist/types/header/Header.d.ts.map +1 -0
  277. package/dist/types/header/HeaderNav.d.ts +4 -0
  278. package/dist/types/header/HeaderNav.d.ts.map +1 -0
  279. package/dist/types/header/index.d.ts +5 -0
  280. package/dist/types/header/index.d.ts.map +1 -0
  281. package/dist/types/hidden/Hidden.d.ts +11 -0
  282. package/dist/types/hidden/Hidden.d.ts.map +1 -0
  283. package/dist/types/hidden/index.d.ts +3 -0
  284. package/dist/types/hidden/index.d.ts.map +1 -0
  285. package/dist/types/hooks/Portal.d.ts +12 -0
  286. package/dist/types/hooks/Portal.d.ts.map +1 -0
  287. package/dist/types/hooks/index.d.ts +9 -0
  288. package/dist/types/hooks/index.d.ts.map +1 -0
  289. package/dist/types/hooks/overlayStack.d.ts +7 -0
  290. package/dist/types/hooks/overlayStack.d.ts.map +1 -0
  291. package/dist/types/hooks/useBodyScrollLock.d.ts +3 -0
  292. package/dist/types/hooks/useBodyScrollLock.d.ts.map +1 -0
  293. package/dist/types/hooks/useEscape.d.ts +3 -0
  294. package/dist/types/hooks/useEscape.d.ts.map +1 -0
  295. package/dist/types/hooks/useFocusTrap.d.ts +10 -0
  296. package/dist/types/hooks/useFocusTrap.d.ts.map +1 -0
  297. package/dist/types/hooks/useIsomorphicLayoutEffect.d.ts +3 -0
  298. package/dist/types/hooks/useIsomorphicLayoutEffect.d.ts.map +1 -0
  299. package/dist/types/hooks/useOutsideClick.d.ts +2 -2
  300. package/dist/types/hooks/useOutsideClick.d.ts.map +1 -1
  301. package/dist/types/icon-button/IconButton.d.ts +14 -3
  302. package/dist/types/icon-button/IconButton.d.ts.map +1 -1
  303. package/dist/types/index.d.ts +16 -0
  304. package/dist/types/index.d.ts.map +1 -1
  305. package/dist/types/link-provider/Anchor.d.ts +4 -0
  306. package/dist/types/link-provider/Anchor.d.ts.map +1 -0
  307. package/dist/types/link-provider/LinkProvider.d.ts +17 -0
  308. package/dist/types/link-provider/LinkProvider.d.ts.map +1 -0
  309. package/dist/types/link-provider/index.d.ts +3 -0
  310. package/dist/types/link-provider/index.d.ts.map +1 -0
  311. package/dist/types/logo/Logo.d.ts +13 -0
  312. package/dist/types/logo/Logo.d.ts.map +1 -0
  313. package/dist/types/logo/index.d.ts +3 -0
  314. package/dist/types/logo/index.d.ts.map +1 -0
  315. package/dist/types/modal/Modal.d.ts +23 -1
  316. package/dist/types/modal/Modal.d.ts.map +1 -1
  317. package/dist/types/nav-link/NavLink.d.ts +12 -0
  318. package/dist/types/nav-link/NavLink.d.ts.map +1 -0
  319. package/dist/types/nav-link/index.d.ts +3 -0
  320. package/dist/types/nav-link/index.d.ts.map +1 -0
  321. package/dist/types/notification/Notification.d.ts +15 -2
  322. package/dist/types/notification/Notification.d.ts.map +1 -1
  323. package/dist/types/popover/Popover.d.ts +21 -0
  324. package/dist/types/popover/Popover.d.ts.map +1 -0
  325. package/dist/types/popover/index.d.ts +3 -0
  326. package/dist/types/popover/index.d.ts.map +1 -0
  327. package/dist/types/segmented-control/SegmentedControl.d.ts.map +1 -1
  328. package/dist/types/segmented-control/SegmentedControlCard.d.ts.map +1 -1
  329. package/dist/types/skeleton/Skeleton.d.ts +9 -0
  330. package/dist/types/skeleton/Skeleton.d.ts.map +1 -0
  331. package/dist/types/skeleton/index.d.ts +2 -0
  332. package/dist/types/skeleton/index.d.ts.map +1 -0
  333. package/dist/types/small-card/SmallCard.d.ts.map +1 -1
  334. package/dist/types/stack/Stack.d.ts +25 -0
  335. package/dist/types/stack/Stack.d.ts.map +1 -0
  336. package/dist/types/stack/index.d.ts +3 -0
  337. package/dist/types/stack/index.d.ts.map +1 -0
  338. package/dist/types/tabs/Tabs.d.ts.map +1 -1
  339. package/dist/types/tag/Tag.d.ts.map +1 -1
  340. package/dist/types/text-link/TextLink.d.ts.map +1 -1
  341. package/dist/types/theme-switcher/ThemeSwitcher.d.ts +5 -0
  342. package/dist/types/theme-switcher/ThemeSwitcher.d.ts.map +1 -0
  343. package/dist/types/theme-switcher/index.d.ts +3 -0
  344. package/dist/types/theme-switcher/index.d.ts.map +1 -0
  345. package/dist/types/tooltip/Tooltip.d.ts.map +1 -1
  346. package/dist/types/utils/ActionElement.d.ts +10 -0
  347. package/dist/types/utils/ActionElement.d.ts.map +1 -0
  348. package/dist/types/utils/index.d.ts +5 -0
  349. package/dist/types/utils/index.d.ts.map +1 -0
  350. package/dist/types/utils/responsive.d.ts +27 -0
  351. package/dist/types/utils/responsive.d.ts.map +1 -0
  352. package/package.json +2 -2
@@ -0,0 +1,39 @@
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 GridItem_module = require('./GridItem.module.css.cjs');
8
+ const jsxRuntime = require('react/jsx-runtime');
9
+ const responsive = require('../utils/responsive.cjs');
10
+
11
+ const spanToCss = span => span === 'full' ? '1 / -1' : `span ${span} / span ${span}`;
12
+
13
+ /** Grid child that can span columns or sit in a named area. */
14
+ const GridItem = /*#__PURE__*/react.forwardRef((_ref, ref) => {
15
+ let {
16
+ as: Component = 'div',
17
+ span,
18
+ area,
19
+ className,
20
+ style,
21
+ ...rest
22
+ } = _ref;
23
+ return /*#__PURE__*/jsxRuntime.jsx(Component, {
24
+ ref: ref,
25
+ className: cn(GridItem_module.root, className),
26
+ style: {
27
+ ...responsive.responsiveVars('span', span, spanToCss),
28
+ ...(area !== undefined && {
29
+ gridArea: area
30
+ }),
31
+ ...style
32
+ },
33
+ ...rest
34
+ });
35
+ });
36
+ GridItem.displayName = 'GridItem';
37
+
38
+ exports.GridItem = GridItem;
39
+ //# sourceMappingURL=GridItem.cjs.map
@@ -0,0 +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;;;;"}
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ const styles = {"root":"GridItem-module_root__Jj7cu"};
4
+
5
+ module.exports = styles;
6
+ //# sourceMappingURL=GridItem.module.css.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GridItem.module.css.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,31 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+
5
+ const cn = require('classnames');
6
+ const Header_module = require('./Header.module.css.cjs');
7
+ const jsxRuntime = require('react/jsx-runtime');
8
+
9
+ const Header = _ref => {
10
+ let {
11
+ children,
12
+ actions,
13
+ sticky,
14
+ className,
15
+ ...rest
16
+ } = _ref;
17
+ return /*#__PURE__*/jsxRuntime.jsxs("header", {
18
+ className: cn(Header_module.header, sticky && Header_module.sticky, className),
19
+ ...rest,
20
+ children: [/*#__PURE__*/jsxRuntime.jsx("div", {
21
+ className: Header_module.content,
22
+ children: children
23
+ }), actions != null ? /*#__PURE__*/jsxRuntime.jsx("div", {
24
+ className: Header_module.actions,
25
+ children: actions
26
+ }) : null]
27
+ });
28
+ };
29
+
30
+ exports.Header = Header;
31
+ //# sourceMappingURL=Header.cjs.map
@@ -0,0 +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;;;;"}
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ const styles = {"header":"Header-module_header__BlKE6","sticky":"Header-module_sticky__ftIiS","content":"Header-module_content__P2dip","actions":"Header-module_actions__iRAGS"};
4
+
5
+ module.exports = styles;
6
+ //# sourceMappingURL=Header.module.css.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Header.module.css.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,69 @@
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 HeaderNav_module = require('./HeaderNav.module.css.cjs');
8
+ const jsxRuntime = require('react/jsx-runtime');
9
+
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']");
16
+ if (!active) return;
17
+ const navRect = nav.getBoundingClientRect();
18
+ const activeRect = active.getBoundingClientRect();
19
+ nav.scrollLeft += activeRect.left - navRect.left - (nav.clientWidth - activeRect.width) / 2;
20
+ };
21
+ const HeaderNav = /*#__PURE__*/react.forwardRef((_ref, ref) => {
22
+ let {
23
+ 'aria-label': ariaLabel = 'Main',
24
+ className,
25
+ onScroll,
26
+ ...rest
27
+ } = _ref;
28
+ const navRef = react.useRef(null);
29
+ const setRef = react.useCallback(node => {
30
+ navRef.current = node;
31
+ if (typeof ref === 'function') ref(node);else if (ref) ref.current = node;
32
+ }, [ref]);
33
+ react.useEffect(() => {
34
+ const nav = navRef.current;
35
+ if (!nav) return;
36
+ const sync = () => {
37
+ scrollActiveIntoView(nav);
38
+ syncFade(nav);
39
+ };
40
+ sync();
41
+ const mutations = typeof MutationObserver === 'undefined' ? null : new MutationObserver(sync);
42
+ mutations?.observe(nav, {
43
+ childList: true,
44
+ subtree: true,
45
+ attributes: true,
46
+ attributeFilter: ['aria-current']
47
+ });
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
+ }, []);
55
+ return /*#__PURE__*/jsxRuntime.jsx("nav", {
56
+ ref: setRef,
57
+ "aria-label": ariaLabel,
58
+ className: cn(HeaderNav_module.nav, className),
59
+ onScroll: e => {
60
+ syncFade(e.currentTarget);
61
+ onScroll?.(e);
62
+ },
63
+ ...rest
64
+ });
65
+ });
66
+ HeaderNav.displayName = 'HeaderNav';
67
+
68
+ exports.HeaderNav = HeaderNav;
69
+ //# sourceMappingURL=HeaderNav.cjs.map
@@ -0,0 +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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"}
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ const styles = {"nav":"HeaderNav-module_nav__YxWpA"};
4
+
5
+ module.exports = styles;
6
+ //# sourceMappingURL=HeaderNav.module.css.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HeaderNav.module.css.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,25 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+
5
+ const cn = require('classnames');
6
+ const Hidden_module = require('./Hidden.module.css.cjs');
7
+ const jsxRuntime = require('react/jsx-runtime');
8
+ const responsive = require('../utils/responsive.cjs');
9
+
10
+ /** CSS-only responsive visibility, safe for SSR. Wrapper is `display: contents` while visible. */
11
+ const Hidden = _ref => {
12
+ let {
13
+ below,
14
+ above,
15
+ className,
16
+ ...rest
17
+ } = _ref;
18
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
19
+ className: cn(Hidden_module.root, below && Hidden_module[`below${responsive.capitalize(below)}`], above && Hidden_module[`above${responsive.capitalize(above)}`], className),
20
+ ...rest
21
+ });
22
+ };
23
+
24
+ exports.Hidden = Hidden;
25
+ //# sourceMappingURL=Hidden.cjs.map
@@ -0,0 +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;;;;"}
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ const styles = {"root":"Hidden-module_root__9hkfD","belowLg":"Hidden-module_belowLg__zbI6R","belowMl":"Hidden-module_belowMl__vJPhT","belowMd":"Hidden-module_belowMd__lVH9f","belowSm":"Hidden-module_belowSm__cnb9B","belowXs":"Hidden-module_belowXs__ipzM-","belowXxs":"Hidden-module_belowXxs__BkbGR","aboveLg":"Hidden-module_aboveLg__G7kJk","aboveMl":"Hidden-module_aboveMl__QadhV","aboveMd":"Hidden-module_aboveMd__1yfOJ","aboveSm":"Hidden-module_aboveSm__6-6D8","aboveXs":"Hidden-module_aboveXs__TxT4e","aboveXxs":"Hidden-module_aboveXxs__gRrwE"};
4
+
5
+ module.exports = styles;
6
+ //# sourceMappingURL=Hidden.module.css.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Hidden.module.css.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,57 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+
5
+ const react = require('react');
6
+ const reactDom = require('react-dom');
7
+ const jsxRuntime = require('react/jsx-runtime');
8
+
9
+ const THEME_ATTR = 'data-lido-theme';
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
+ */
15
+ const Portal = _ref => {
16
+ let {
17
+ children,
18
+ container
19
+ } = _ref;
20
+ const markerRef = react.useRef(null);
21
+ const [target, setTarget] = react.useState(null);
22
+ react.useEffect(() => {
23
+ if (container) {
24
+ setTarget(container);
25
+ return;
26
+ }
27
+ const scope = markerRef.current?.closest(`[${THEME_ATTR}]`);
28
+ if (!scope || scope === document.documentElement) {
29
+ setTarget(document.body);
30
+ return;
31
+ }
32
+ const root = document.createElement('div');
33
+ root.style.display = 'contents';
34
+ const sync = () => root.setAttribute(THEME_ATTR, scope.getAttribute(THEME_ATTR) ?? '');
35
+ sync();
36
+ document.body.appendChild(root);
37
+ const observer = new MutationObserver(sync);
38
+ observer.observe(scope, {
39
+ attributes: true,
40
+ attributeFilter: [THEME_ATTR]
41
+ });
42
+ setTarget(root);
43
+ return () => {
44
+ observer.disconnect();
45
+ root.remove();
46
+ };
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]
53
+ });
54
+ };
55
+
56
+ exports.Portal = Portal;
57
+ //# sourceMappingURL=Portal.cjs.map
@@ -0,0 +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;;;;"}
@@ -0,0 +1,26 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+
5
+ /** Each layer gets a document listener for `type` that only fires while it's the newest layer in its stack. */
6
+ const createLayerStack = function (type) {
7
+ let {
8
+ capture = false
9
+ } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
10
+ const layers = [];
11
+ return onEvent => {
12
+ const layer = {};
13
+ layers.push(layer);
14
+ const listener = event => {
15
+ if (layers[layers.length - 1] === layer) onEvent(event);
16
+ };
17
+ document.addEventListener(type, listener, capture);
18
+ return () => {
19
+ document.removeEventListener(type, listener, capture);
20
+ layers.splice(layers.indexOf(layer), 1);
21
+ };
22
+ };
23
+ };
24
+
25
+ exports.createLayerStack = createLayerStack;
26
+ //# sourceMappingURL=overlayStack.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlayStack.cjs","sources":["../../../src/hooks/overlayStack.ts"],"sourcesContent":["type LayerOptions = { capture?: boolean }\n\n/** Each layer gets a document listener for `type` that only fires while it's the newest layer in its stack. */\nexport const createLayerStack = <K extends keyof DocumentEventMap>(\n type: K,\n { capture = false }: LayerOptions = {},\n) => {\n const layers: object[] = []\n return (onEvent: (event: DocumentEventMap[K]) => void) => {\n const layer = {}\n layers.push(layer)\n const listener = (event: DocumentEventMap[K]) => {\n if (layers[layers.length - 1] === layer) onEvent(event)\n }\n document.addEventListener(type, listener, capture)\n return () => {\n document.removeEventListener(type, listener, capture)\n layers.splice(layers.indexOf(layer), 1)\n }\n }\n}\n"],"names":["createLayerStack","type","capture","arguments","length","undefined","layers","onEvent","layer","push","listener","event","document","addEventListener","removeEventListener","splice","indexOf"],"mappings":";;;;AAEA;MACaA,gBAAgB,GAAG,UAC9BC,IAAO,EAEJ;EAAA,IADH;AAAEC,IAAAA,OAAO,GAAG,KAAA;AAAoB,GAAC,GAAAC,SAAA,CAAAC,MAAA,GAAAD,CAAAA,IAAAA,SAAA,CAAAE,CAAAA,CAAAA,KAAAA,SAAA,GAAAF,SAAA,CAAG,CAAA,CAAA,GAAA,EAAE,CAAA;EAEtC,MAAMG,MAAgB,GAAG,EAAE,CAAA;AAC3B,EAAA,OAAQC,OAA6C,IAAK;IACxD,MAAMC,KAAK,GAAG,EAAE,CAAA;AAChBF,IAAAA,MAAM,CAACG,IAAI,CAACD,KAAK,CAAC,CAAA;IAClB,MAAME,QAAQ,GAAIC,KAA0B,IAAK;AAC/C,MAAA,IAAIL,MAAM,CAACA,MAAM,CAACF,MAAM,GAAG,CAAC,CAAC,KAAKI,KAAK,EAAED,OAAO,CAACI,KAAK,CAAC,CAAA;KACxD,CAAA;IACDC,QAAQ,CAACC,gBAAgB,CAACZ,IAAI,EAAES,QAAQ,EAAER,OAAO,CAAC,CAAA;AAClD,IAAA,OAAO,MAAM;MACXU,QAAQ,CAACE,mBAAmB,CAACb,IAAI,EAAES,QAAQ,EAAER,OAAO,CAAC,CAAA;MACrDI,MAAM,CAACS,MAAM,CAACT,MAAM,CAACU,OAAO,CAACR,KAAK,CAAC,EAAE,CAAC,CAAC,CAAA;KACxC,CAAA;GACF,CAAA;AACH;;;;"}
@@ -0,0 +1,50 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+
5
+ const react = require('react');
6
+
7
+ // Ref-counted so stacked overlays only restore on the last unlock.
8
+ let lockCount = 0;
9
+ let saved = {
10
+ overflow: '',
11
+ paddingRight: ''
12
+ };
13
+ const lock = () => {
14
+ if (lockCount === 0) {
15
+ const {
16
+ body,
17
+ documentElement
18
+ } = document;
19
+ saved = {
20
+ overflow: body.style.overflow,
21
+ paddingRight: body.style.paddingRight
22
+ };
23
+ const scrollbarWidth = window.innerWidth - documentElement.clientWidth;
24
+ if (scrollbarWidth > 0) {
25
+ const current = parseFloat(getComputedStyle(body).paddingRight) || 0;
26
+ body.style.paddingRight = `${current + scrollbarWidth}px`;
27
+ }
28
+ body.style.overflow = 'hidden';
29
+ }
30
+ lockCount += 1;
31
+ };
32
+ const unlock = () => {
33
+ lockCount -= 1;
34
+ if (lockCount === 0) {
35
+ document.body.style.overflow = saved.overflow;
36
+ document.body.style.paddingRight = saved.paddingRight;
37
+ }
38
+ };
39
+
40
+ /** Locks body scroll while `active`, compensating the scrollbar width. */
41
+ const useBodyScrollLock = active => {
42
+ react.useEffect(() => {
43
+ if (!active) return;
44
+ lock();
45
+ return unlock;
46
+ }, [active]);
47
+ };
48
+
49
+ exports.useBodyScrollLock = useBodyScrollLock;
50
+ //# sourceMappingURL=useBodyScrollLock.cjs.map
@@ -0,0 +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;;;;"}
@@ -0,0 +1,25 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+
5
+ const react = require('react');
6
+ const overlayStack = require('./overlayStack.cjs');
7
+
8
+ const listenEscapeLayer = overlayStack.createLayerStack('keydown');
9
+
10
+ /** Calls `handler` on Escape while `active`; with nested overlays only the newest one handles it. */
11
+ const useEscape = (active, handler) => {
12
+ const handlerRef = react.useRef(handler);
13
+ handlerRef.current = handler;
14
+ react.useEffect(() => {
15
+ if (!active) return;
16
+ return listenEscapeLayer(event => {
17
+ if (event.key !== 'Escape' || event.defaultPrevented) return;
18
+ event.preventDefault();
19
+ handlerRef.current(event);
20
+ });
21
+ }, [active]);
22
+ };
23
+
24
+ exports.useEscape = useEscape;
25
+ //# sourceMappingURL=useEscape.cjs.map
@@ -0,0 +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;;;;"}
@@ -0,0 +1,66 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+
5
+ const react = require('react');
6
+ const overlayStack = require('./overlayStack.cjs');
7
+
8
+ const listenTrapLayer = overlayStack.createLayerStack('keydown');
9
+ const TABBABLE = 'a[href],button,input:not([type="hidden"]),select,textarea,[tabindex]:not([tabindex="-1"]),[contenteditable="true"]';
10
+ const isRendered = el => {
11
+ const style = getComputedStyle(el);
12
+ return style.visibility !== 'hidden' && style.display !== 'none';
13
+ };
14
+ const getTabbable = container => Array.from(container.querySelectorAll(TABBABLE)).filter(el => !el.matches(':disabled') && el.getAttribute('aria-hidden') !== 'true' && isRendered(el));
15
+ /** Keeps Tab / Shift+Tab inside `element` while `active`; with nested traps only the newest one handles Tab. */
16
+ const useFocusTrap = function (element, active) {
17
+ let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
18
+ const optionsRef = react.useRef(options);
19
+ optionsRef.current = options;
20
+ react.useEffect(() => {
21
+ const container = element;
22
+ if (!active || !container) return;
23
+ const previous = document.activeElement;
24
+ const target = optionsRef.current.initialFocus?.current ?? getTabbable(container)[0] ?? container;
25
+ if (target === container && !container.hasAttribute('tabindex')) {
26
+ container.setAttribute('tabindex', '-1');
27
+ }
28
+ target.focus({
29
+ preventScroll: true
30
+ });
31
+ const onKeyDown = event => {
32
+ if (event.key !== 'Tab') return;
33
+ const items = getTabbable(container);
34
+ if (items.length === 0) {
35
+ event.preventDefault();
36
+ container.focus();
37
+ return;
38
+ }
39
+ const first = items[0];
40
+ const last = items[items.length - 1];
41
+ const current = document.activeElement;
42
+ if (!container.contains(current)) {
43
+ event.preventDefault();
44
+ (event.shiftKey ? last : first).focus();
45
+ } else if (event.shiftKey && (current === first || current === container)) {
46
+ event.preventDefault();
47
+ last.focus();
48
+ } else if (!event.shiftKey && current === last) {
49
+ event.preventDefault();
50
+ first.focus();
51
+ }
52
+ };
53
+ const stopListening = listenTrapLayer(onKeyDown);
54
+ return () => {
55
+ stopListening();
56
+ if ((optionsRef.current.restoreFocus ?? true) && previous && document.contains(previous)) {
57
+ previous.focus({
58
+ preventScroll: true
59
+ });
60
+ }
61
+ };
62
+ }, [element, active]);
63
+ };
64
+
65
+ exports.useFocusTrap = useFocusTrap;
66
+ //# sourceMappingURL=useFocusTrap.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFocusTrap.cjs","sources":["../../../src/hooks/useFocusTrap.ts"],"sourcesContent":["import { useEffect, useRef, type RefObject } from 'react'\n\nimport { createLayerStack } from './overlayStack'\n\nconst listenTrapLayer = createLayerStack('keydown')\n\nconst TABBABLE =\n 'a[href],button,input:not([type=\"hidden\"]),select,textarea,[tabindex]:not([tabindex=\"-1\"]),[contenteditable=\"true\"]'\n\nconst isRendered = (el: HTMLElement) => {\n const style = getComputedStyle(el)\n return style.visibility !== 'hidden' && style.display !== 'none'\n}\n\nconst getTabbable = (container: HTMLElement) =>\n Array.from(container.querySelectorAll<HTMLElement>(TABBABLE)).filter(\n (el) =>\n !el.matches(':disabled') &&\n el.getAttribute('aria-hidden') !== 'true' &&\n isRendered(el),\n )\n\nexport type FocusTrapOptions = {\n /** Element to focus on activate; defaults to first tabbable, then the container. */\n initialFocus?: RefObject<HTMLElement | null>\n /** Return focus to the previously focused element on deactivate. Default true. */\n restoreFocus?: boolean\n}\n\n/** Keeps Tab / Shift+Tab inside `element` while `active`; with nested traps only the newest one handles Tab. */\nexport const useFocusTrap = (\n element: HTMLElement | null,\n active: boolean,\n options: FocusTrapOptions = {},\n) => {\n const optionsRef = useRef(options)\n optionsRef.current = options\n\n useEffect(() => {\n const container = element\n if (!active || !container) return\n\n const previous = document.activeElement as HTMLElement | null\n\n const target =\n optionsRef.current.initialFocus?.current ??\n getTabbable(container)[0] ??\n container\n if (target === container && !container.hasAttribute('tabindex')) {\n container.setAttribute('tabindex', '-1')\n }\n target.focus({ preventScroll: true })\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== 'Tab') return\n const items = getTabbable(container)\n if (items.length === 0) {\n event.preventDefault()\n container.focus()\n return\n }\n const first = items[0]\n const last = items[items.length - 1]\n const current = document.activeElement\n if (!container.contains(current)) {\n event.preventDefault()\n ;(event.shiftKey ? last : first).focus()\n } else if (\n event.shiftKey &&\n (current === first || current === container)\n ) {\n event.preventDefault()\n last.focus()\n } else if (!event.shiftKey && current === last) {\n event.preventDefault()\n first.focus()\n }\n }\n\n const stopListening = listenTrapLayer(onKeyDown)\n return () => {\n stopListening()\n if (\n (optionsRef.current.restoreFocus ?? true) &&\n previous &&\n document.contains(previous)\n ) {\n previous.focus({ preventScroll: true })\n }\n }\n }, [element, active])\n}\n"],"names":["listenTrapLayer","createLayerStack","TABBABLE","isRendered","el","style","getComputedStyle","visibility","display","getTabbable","container","Array","from","querySelectorAll","filter","matches","getAttribute","useFocusTrap","element","active","options","arguments","length","undefined","optionsRef","useRef","current","useEffect","previous","document","activeElement","target","initialFocus","hasAttribute","setAttribute","focus","preventScroll","onKeyDown","event","key","items","preventDefault","first","last","contains","shiftKey","stopListening","restoreFocus"],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+
5
+ const react = require('react');
6
+
7
+ const useIsomorphicLayoutEffect = typeof window === 'undefined' ? react.useEffect : react.useLayoutEffect;
8
+
9
+ exports.useIsomorphicLayoutEffect = useIsomorphicLayoutEffect;
10
+ //# sourceMappingURL=useIsomorphicLayoutEffect.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useIsomorphicLayoutEffect.cjs","sources":["../../../src/hooks/useIsomorphicLayoutEffect.ts"],"sourcesContent":["import { useEffect, useLayoutEffect } from 'react'\n\nexport const useIsomorphicLayoutEffect =\n typeof window === 'undefined' ? useEffect : useLayoutEffect\n"],"names":["useIsomorphicLayoutEffect","window","useEffect","useLayoutEffect"],"mappings":";;;;;;AAEO,MAAMA,yBAAyB,GACpC,OAAOC,MAAM,KAAK,WAAW,GAAGC,eAAS,GAAGC;;;;"}
@@ -3,21 +3,23 @@
3
3
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
4
 
5
5
  const react = require('react');
6
+ const overlayStack = require('./overlayStack.cjs');
6
7
 
7
- const useOutsideClick = (ref, onOutside, enabled) => {
8
+ const listenOutsideLayer = overlayStack.createLayerStack('pointerdown', {
9
+ capture: true
10
+ });
11
+
12
+ /** Calls `onOutside` on pointerdown outside `element` while `enabled`; with nested overlays only the newest one handles outside clicks. */
13
+ const useOutsideClick = (element, onOutside, enabled) => {
14
+ const handlerRef = react.useRef(onOutside);
15
+ handlerRef.current = onOutside;
8
16
  react.useEffect(() => {
9
- if (!enabled) return;
10
- const handlePointerDown = event => {
11
- const element = ref.current;
12
- if (!element) return;
13
- if (event.target instanceof Node && element.contains(event.target)) {
14
- return;
15
- }
16
- onOutside();
17
- };
18
- document.addEventListener('pointerdown', handlePointerDown, true);
19
- return () => document.removeEventListener('pointerdown', handlePointerDown, true);
20
- }, [ref, onOutside, enabled]);
17
+ if (!enabled || !element) return;
18
+ return listenOutsideLayer(event => {
19
+ if (event.target instanceof Node && element.contains(event.target)) return;
20
+ handlerRef.current(event);
21
+ });
22
+ }, [element, enabled]);
21
23
  };
22
24
 
23
25
  exports.useOutsideClick = useOutsideClick;
@@ -1 +1 @@
1
- {"version":3,"file":"useOutsideClick.cjs","sources":["../../../src/hooks/useOutsideClick.ts"],"sourcesContent":["import { useEffect, type RefObject } from 'react'\n\nexport const useOutsideClick = (\n ref: RefObject<HTMLElement | null>,\n onOutside: () => void,\n enabled: boolean,\n) => {\n useEffect(() => {\n if (!enabled) return\n\n const handlePointerDown = (event: PointerEvent) => {\n const element = ref.current\n if (!element) return\n if (event.target instanceof Node && element.contains(event.target)) {\n return\n }\n onOutside()\n }\n\n document.addEventListener('pointerdown', handlePointerDown, true)\n return () =>\n document.removeEventListener('pointerdown', handlePointerDown, true)\n }, [ref, onOutside, enabled])\n}\n"],"names":["useOutsideClick","ref","onOutside","enabled","useEffect","handlePointerDown","event","element","current","target","Node","contains","document","addEventListener","removeEventListener"],"mappings":";;;;;;AAEO,MAAMA,eAAe,GAAGA,CAC7BC,GAAkC,EAClCC,SAAqB,EACrBC,OAAgB,KACb;AACHC,EAAAA,eAAS,CAAC,MAAM;IACd,IAAI,CAACD,OAAO,EAAE,OAAA;IAEd,MAAME,iBAAiB,GAAIC,KAAmB,IAAK;AACjD,MAAA,MAAMC,OAAO,GAAGN,GAAG,CAACO,OAAO,CAAA;MAC3B,IAAI,CAACD,OAAO,EAAE,OAAA;AACd,MAAA,IAAID,KAAK,CAACG,MAAM,YAAYC,IAAI,IAAIH,OAAO,CAACI,QAAQ,CAACL,KAAK,CAACG,MAAM,CAAC,EAAE;AAClE,QAAA,OAAA;AACF,OAAA;AACAP,MAAAA,SAAS,EAAE,CAAA;KACZ,CAAA;IAEDU,QAAQ,CAACC,gBAAgB,CAAC,aAAa,EAAER,iBAAiB,EAAE,IAAI,CAAC,CAAA;IACjE,OAAO,MACLO,QAAQ,CAACE,mBAAmB,CAAC,aAAa,EAAET,iBAAiB,EAAE,IAAI,CAAC,CAAA;GACvE,EAAE,CAACJ,GAAG,EAAEC,SAAS,EAAEC,OAAO,CAAC,CAAC,CAAA;AAC/B;;;;"}
1
+ {"version":3,"file":"useOutsideClick.cjs","sources":["../../../src/hooks/useOutsideClick.ts"],"sourcesContent":["import { useEffect, useRef } from 'react'\n\nimport { createLayerStack } from './overlayStack'\n\nconst listenOutsideLayer = createLayerStack('pointerdown', { capture: true })\n\n/** Calls `onOutside` on pointerdown outside `element` while `enabled`; with nested overlays only the newest one handles outside clicks. */\nexport const useOutsideClick = (\n element: HTMLElement | null,\n onOutside: (event: PointerEvent) => void,\n enabled: boolean,\n) => {\n const handlerRef = useRef(onOutside)\n handlerRef.current = onOutside\n\n useEffect(() => {\n if (!enabled || !element) return\n\n return listenOutsideLayer((event) => {\n if (event.target instanceof Node && element.contains(event.target)) return\n handlerRef.current(event)\n })\n }, [element, enabled])\n}\n"],"names":["listenOutsideLayer","createLayerStack","capture","useOutsideClick","element","onOutside","enabled","handlerRef","useRef","current","useEffect","event","target","Node","contains"],"mappings":";;;;;;;AAIA,MAAMA,kBAAkB,GAAGC,6BAAgB,CAAC,aAAa,EAAE;AAAEC,EAAAA,OAAO,EAAE,IAAA;AAAK,CAAC,CAAC,CAAA;;AAE7E;AACO,MAAMC,eAAe,GAAGA,CAC7BC,OAA2B,EAC3BC,SAAwC,EACxCC,OAAgB,KACb;AACH,EAAA,MAAMC,UAAU,GAAGC,YAAM,CAACH,SAAS,CAAC,CAAA;EACpCE,UAAU,CAACE,OAAO,GAAGJ,SAAS,CAAA;AAE9BK,EAAAA,eAAS,CAAC,MAAM;AACd,IAAA,IAAI,CAACJ,OAAO,IAAI,CAACF,OAAO,EAAE,OAAA;IAE1B,OAAOJ,kBAAkB,CAAEW,KAAK,IAAK;AACnC,MAAA,IAAIA,KAAK,CAACC,MAAM,YAAYC,IAAI,IAAIT,OAAO,CAACU,QAAQ,CAACH,KAAK,CAACC,MAAM,CAAC,EAAE,OAAA;AACpEL,MAAAA,UAAU,CAACE,OAAO,CAACE,KAAK,CAAC,CAAA;AAC3B,KAAC,CAAC,CAAA;AACJ,GAAC,EAAE,CAACP,OAAO,EAAEE,OAAO,CAAC,CAAC,CAAA;AACxB;;;;"}