@lumx/react 3.20.1-alpha.12 → 3.20.1-alpha.13

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 (320) hide show
  1. package/_internal/Button-f19e18df.js +96 -0
  2. package/_internal/Button-f19e18df.js.map +1 -0
  3. package/_internal/{cdddaed8.js → ButtonRoot-ab633b1d.js} +19 -20
  4. package/_internal/ButtonRoot-ab633b1d.js.map +1 -0
  5. package/_internal/{85e3a5ca.js → Chip-4c572eec.js} +38 -34
  6. package/_internal/Chip-4c572eec.js.map +1 -0
  7. package/_internal/{7093ba23.js → ClickAwayProvider-bcce6ceb.js} +4 -6
  8. package/_internal/ClickAwayProvider-bcce6ceb.js.map +1 -0
  9. package/_internal/{ea04260d.js → DisabledStateContext-077b7bef.js} +6 -6
  10. package/_internal/DisabledStateContext-077b7bef.js.map +1 -0
  11. package/_internal/{370bdaed.js → HeadingLevelProvider-e4817816.js} +5 -7
  12. package/_internal/HeadingLevelProvider-e4817816.js.map +1 -0
  13. package/_internal/IconButton-10585058.js +72 -0
  14. package/_internal/IconButton-10585058.js.map +1 -0
  15. package/_internal/ImageCaption-4279b2b6.js +65 -0
  16. package/_internal/ImageCaption-4279b2b6.js.map +1 -0
  17. package/_internal/{f5508d3d.js → List-d5f5d465.js} +55 -56
  18. package/_internal/List-d5f5d465.js.map +1 -0
  19. package/_internal/{b1af5979.js → PopoverDialog-21e5c9dd.js} +165 -171
  20. package/_internal/PopoverDialog-21e5c9dd.js.map +1 -0
  21. package/_internal/{3f86608e.js → Portal-c43d098b.js} +2 -5
  22. package/_internal/Portal-c43d098b.js.map +1 -0
  23. package/_internal/{2c2b6a89.js → RawClickable-c76bbc4c.js} +7 -9
  24. package/_internal/RawClickable-c76bbc4c.js.map +1 -0
  25. package/_internal/{34c59f5b.js → Slides-01f513ce.js} +106 -112
  26. package/_internal/Slides-01f513ce.js.map +1 -0
  27. package/_internal/{3181f000.js → ThemeContext-3181f000.js} +1 -1
  28. package/_internal/ThemeContext-3181f000.js.map +1 -0
  29. package/_internal/{628468c4.js → Thumbnail-30d2a781.js} +50 -51
  30. package/_internal/Thumbnail-30d2a781.js.map +1 -0
  31. package/_internal/{3a4e4636.js → components/alert-dialog-8f1c163c.js} +39 -54
  32. package/_internal/components/alert-dialog-8f1c163c.js.map +1 -0
  33. package/_internal/{179a84d1.js → components/autocomplete-bfbdeb3c.js} +72 -67
  34. package/_internal/components/autocomplete-bfbdeb3c.js.map +1 -0
  35. package/_internal/components/avatar-6990e3e9.js +87 -0
  36. package/_internal/components/avatar-6990e3e9.js.map +1 -0
  37. package/_internal/{9c9df5f2.js → components/badge-81543bc7.js} +20 -19
  38. package/_internal/components/badge-81543bc7.js.map +1 -0
  39. package/_internal/{f93fe83e.js → components/button-927abe71.js} +14 -11
  40. package/_internal/components/button-927abe71.js.map +1 -0
  41. package/_internal/components/checkbox-dc4caec8.js +131 -0
  42. package/_internal/{f0900583.js.map → components/checkbox-dc4caec8.js.map} +1 -1
  43. package/_internal/{c0414b89.js → components/chip-fb3d0c76.js} +13 -10
  44. package/_internal/components/chip-fb3d0c76.js.map +1 -0
  45. package/_internal/components/comment-block-b84c4694.js +121 -0
  46. package/_internal/components/comment-block-b84c4694.js.map +1 -0
  47. package/_internal/components/date-picker-a425534c.js +2 -0
  48. package/_internal/components/date-picker-a425534c.js.map +1 -0
  49. package/_internal/{2f1716fa.js → components/dialog-7dbcb485.js} +69 -80
  50. package/_internal/components/dialog-7dbcb485.js.map +1 -0
  51. package/_internal/{3e653144.js → components/divider-12e9b6a0.js} +13 -9
  52. package/_internal/components/divider-12e9b6a0.js.map +1 -0
  53. package/_internal/components/drag-handle-a38ff757.js +53 -0
  54. package/_internal/components/drag-handle-a38ff757.js.map +1 -0
  55. package/_internal/{1ea72630.js → components/dropdown-38b0b6a0.js} +19 -17
  56. package/_internal/components/dropdown-38b0b6a0.js.map +1 -0
  57. package/_internal/{68c10f98.js → components/expansion-panel-c4b93653.js} +46 -54
  58. package/_internal/components/expansion-panel-c4b93653.js.map +1 -0
  59. package/_internal/{c2388b10.js → components/flag-c5e2f5f0.js} +19 -22
  60. package/_internal/components/flag-c5e2f5f0.js.map +1 -0
  61. package/_internal/{329b5f12.js → components/flex-box-c8701a85.js} +13 -10
  62. package/_internal/components/flex-box-c8701a85.js.map +1 -0
  63. package/_internal/{a84f4981.js → components/generic-block-0d6ad5a6.js} +30 -37
  64. package/_internal/components/generic-block-0d6ad5a6.js.map +1 -0
  65. package/_internal/{2f6c7f84.js → components/grid-3b194fe8.js} +22 -16
  66. package/_internal/components/grid-3b194fe8.js.map +1 -0
  67. package/_internal/{501f2f9f.js → components/grid-column-985b9327.js} +10 -8
  68. package/_internal/components/grid-column-985b9327.js.map +1 -0
  69. package/_internal/{193521fa.js → components/heading-5e954dfc.js} +13 -11
  70. package/_internal/components/heading-5e954dfc.js.map +1 -0
  71. package/_internal/{8ab42752.js → components/icon-2e7345ad.js} +29 -29
  72. package/_internal/components/icon-2e7345ad.js.map +1 -0
  73. package/_internal/components/image-block-8d21dd7e.js +109 -0
  74. package/_internal/components/image-block-8d21dd7e.js.map +1 -0
  75. package/_internal/{7f54e947.js → components/image-lightbox-4a5ab962.js} +105 -120
  76. package/_internal/components/image-lightbox-4a5ab962.js.map +1 -0
  77. package/_internal/{15eab19b.js → components/inline-list-4884f004.js} +25 -26
  78. package/_internal/components/inline-list-4884f004.js.map +1 -0
  79. package/_internal/{5f8f9454.js → components/input-helper-e644e05e.js} +14 -11
  80. package/_internal/components/input-helper-e644e05e.js.map +1 -0
  81. package/_internal/{b0a7a999.js → components/input-label-5e509a1b.js} +14 -12
  82. package/_internal/components/input-label-5e509a1b.js.map +1 -0
  83. package/_internal/{86aa4aa4.js → components/lightbox-bec1b95f.js} +59 -64
  84. package/_internal/components/lightbox-bec1b95f.js.map +1 -0
  85. package/_internal/components/link-9637b9e4.js +70 -0
  86. package/_internal/components/link-9637b9e4.js.map +1 -0
  87. package/_internal/components/link-preview-7a4a6e4b.js +108 -0
  88. package/_internal/components/link-preview-7a4a6e4b.js.map +1 -0
  89. package/_internal/{95cfd814.js → components/list-5c8f7122.js} +21 -14
  90. package/_internal/components/list-5c8f7122.js.map +1 -0
  91. package/_internal/{0be1006e.js → components/message-a67067d9.js} +27 -28
  92. package/_internal/components/message-a67067d9.js.map +1 -0
  93. package/_internal/components/mosaic-92b66c80.js +92 -0
  94. package/_internal/components/mosaic-92b66c80.js.map +1 -0
  95. package/_internal/components/navigation-4fd3917d.js +210 -0
  96. package/_internal/components/navigation-4fd3917d.js.map +1 -0
  97. package/_internal/{5ec059fe.js → components/notification-9063c963.js} +47 -52
  98. package/_internal/components/notification-9063c963.js.map +1 -0
  99. package/_internal/components/popover-3c4c54bd.js +3 -0
  100. package/_internal/components/popover-3c4c54bd.js.map +1 -0
  101. package/_internal/components/post-block-0cfc2206.js +99 -0
  102. package/_internal/components/post-block-0cfc2206.js.map +1 -0
  103. package/_internal/{f23cdf84.js → components/progress-eaf5b33d.js} +53 -46
  104. package/_internal/components/progress-eaf5b33d.js.map +1 -0
  105. package/_internal/{edab29ce.js → components/progress-tracker-4a65718d.js} +70 -69
  106. package/_internal/components/progress-tracker-4a65718d.js.map +1 -0
  107. package/_internal/components/radio-button-3ef8a325.js +148 -0
  108. package/_internal/components/radio-button-3ef8a325.js.map +1 -0
  109. package/_internal/components/select-d46cfe35.js +404 -0
  110. package/_internal/components/select-d46cfe35.js.map +1 -0
  111. package/_internal/{b477da26.js → components/side-navigation-75b22f19.js} +62 -67
  112. package/_internal/components/side-navigation-75b22f19.js.map +1 -0
  113. package/_internal/{6da19518.js → components/skeleton-361ce335.js} +34 -25
  114. package/_internal/components/skeleton-361ce335.js.map +1 -0
  115. package/_internal/{db4fdc7b.js → components/slider-8094cb5c.js} +60 -65
  116. package/_internal/components/slider-8094cb5c.js.map +1 -0
  117. package/_internal/{eaa8b1d8.js → components/slideshow-2e8cd372.js} +41 -41
  118. package/_internal/components/slideshow-2e8cd372.js.map +1 -0
  119. package/_internal/components/switch-5516949b.js +118 -0
  120. package/_internal/components/switch-5516949b.js.map +1 -0
  121. package/_internal/{be6da9b0.js → components/table-fa198ee6.js} +76 -73
  122. package/_internal/components/table-fa198ee6.js.map +1 -0
  123. package/_internal/{65f91970.js → components/tabs-bb9bc2a5.js} +48 -47
  124. package/_internal/components/tabs-bb9bc2a5.js.map +1 -0
  125. package/_internal/components/text-289c0526.js +2 -0
  126. package/_internal/components/text-289c0526.js.map +1 -0
  127. package/_internal/{b0b2e33d.js → components/text-field-82733568.js} +109 -122
  128. package/_internal/components/text-field-82733568.js.map +1 -0
  129. package/_internal/{76be70dd.js → components/thumbnail-e3acff82.js} +3 -3
  130. package/_internal/components/thumbnail-e3acff82.js.map +1 -0
  131. package/_internal/{bae266a9.js → components/toolbar-155562be.js} +18 -19
  132. package/_internal/components/toolbar-155562be.js.map +1 -0
  133. package/_internal/{9a4dfad0.js → components/tooltip-84ffb4f9.js} +42 -50
  134. package/_internal/components/tooltip-84ffb4f9.js.map +1 -0
  135. package/_internal/{9fdc715b.js → components/uploader-896a1d89.js} +38 -40
  136. package/_internal/components/uploader-896a1d89.js.map +1 -0
  137. package/_internal/{0d1a078c.js → components/user-block-8fd15895.js} +44 -45
  138. package/_internal/components/user-block-8fd15895.js.map +1 -0
  139. package/_internal/{4cd870a5.js → constants-b9e57936.js} +2 -2
  140. package/_internal/constants-b9e57936.js.map +1 -0
  141. package/_internal/{478b5c92.js → constants-d0e3f49e.js} +2 -2
  142. package/_internal/constants-d0e3f49e.js.map +1 -0
  143. package/_internal/{9d1336a1.js → context-21aeb1c7.js} +6 -6
  144. package/_internal/context-21aeb1c7.js.map +1 -0
  145. package/_internal/forwardRef-49d2bb84.js +80 -0
  146. package/_internal/forwardRef-49d2bb84.js.map +1 -0
  147. package/_internal/{230173a8.js → getFocusableElements-230173a8.js} +1 -1
  148. package/_internal/getFocusableElements-230173a8.js.map +1 -0
  149. package/_internal/{0420e67b.js → index-b4d256e7.js} +14 -15
  150. package/_internal/index-b4d256e7.js.map +1 -0
  151. package/_internal/{84dfe68f.js → index-f415b08e.js} +46 -52
  152. package/_internal/index-f415b08e.js.map +1 -0
  153. package/_internal/{78df9309.js → isComponent-78df9309.js} +1 -1
  154. package/_internal/isComponent-78df9309.js.map +1 -0
  155. package/_internal/{e806b848.js → isComponentType-e806b848.js} +1 -1
  156. package/_internal/isComponentType-e806b848.js.map +1 -0
  157. package/_internal/{f0d7d6ea.js → mergeRefs-f0d7d6ea.js} +1 -1
  158. package/_internal/mergeRefs-f0d7d6ea.js.map +1 -0
  159. package/_internal/{4daccdd5.js → partitionMulti-4daccdd5.js} +1 -1
  160. package/_internal/partitionMulti-4daccdd5.js.map +1 -0
  161. package/_internal/{825ac334.js → state-db358714.js} +2 -2
  162. package/_internal/state-db358714.js.map +1 -0
  163. package/_internal/{2a3d237c.js → useBooleanState-2a3d237c.js} +1 -1
  164. package/_internal/useBooleanState-2a3d237c.js.map +1 -0
  165. package/_internal/{d5f316cb.js → useCallbackOnEscape-ea4d9eb4.js} +3 -3
  166. package/_internal/useCallbackOnEscape-ea4d9eb4.js.map +1 -0
  167. package/_internal/{36bd7352.js → useDisableBodyScroll-36bd7352.js} +1 -1
  168. package/_internal/useDisableBodyScroll-36bd7352.js.map +1 -0
  169. package/_internal/{b8667090.js → useDisableStateProps-fffc365f.js} +2 -2
  170. package/_internal/useDisableStateProps-fffc365f.js.map +1 -0
  171. package/_internal/{5fe09341.js → useFocusTrap-c3c6378b.js} +4 -4
  172. package/_internal/useFocusTrap-c3c6378b.js.map +1 -0
  173. package/_internal/{3a1facc0.js → useId-3a1facc0.js} +1 -1
  174. package/_internal/useId-3a1facc0.js.map +1 -0
  175. package/_internal/{7daf0f24.js → useRovingTabIndex-7daf0f24.js} +1 -1
  176. package/_internal/useRovingTabIndex-7daf0f24.js.map +1 -0
  177. package/_internal/{e6dd117e.js → useTransitionVisibility-321fdbfa.js} +2 -2
  178. package/_internal/useTransitionVisibility-321fdbfa.js.map +1 -0
  179. package/_internal/{37b007a4.js → wrapChildrenIconWithSpaces-f86106ce.js} +3 -3
  180. package/_internal/wrapChildrenIconWithSpaces-f86106ce.js.map +1 -0
  181. package/index.d.ts +7 -352
  182. package/index.js +65 -111
  183. package/index.js.map +1 -1
  184. package/package.json +3 -3
  185. package/utils/index.d.ts +1 -1
  186. package/utils/index.js +3 -3
  187. package/_internal/0420e67b.js.map +0 -1
  188. package/_internal/0a490b07.js +0 -75
  189. package/_internal/0a490b07.js.map +0 -1
  190. package/_internal/0b9c76cb.js +0 -6
  191. package/_internal/0b9c76cb.js.map +0 -1
  192. package/_internal/0be1006e.js.map +0 -1
  193. package/_internal/0d1a078c.js.map +0 -1
  194. package/_internal/15eab19b.js.map +0 -1
  195. package/_internal/179a84d1.js.map +0 -1
  196. package/_internal/193521fa.js.map +0 -1
  197. package/_internal/1a90ea3d.js +0 -51
  198. package/_internal/1a90ea3d.js.map +0 -1
  199. package/_internal/1deba7d7.js +0 -224
  200. package/_internal/1deba7d7.js.map +0 -1
  201. package/_internal/1ea72630.js.map +0 -1
  202. package/_internal/21b83d16.js +0 -137
  203. package/_internal/21b83d16.js.map +0 -1
  204. package/_internal/230173a8.js.map +0 -1
  205. package/_internal/297bed8f.js +0 -457
  206. package/_internal/297bed8f.js.map +0 -1
  207. package/_internal/2a3d237c.js.map +0 -1
  208. package/_internal/2c2b6a89.js.map +0 -1
  209. package/_internal/2f1716fa.js.map +0 -1
  210. package/_internal/2f6c7f84.js.map +0 -1
  211. package/_internal/3181f000.js.map +0 -1
  212. package/_internal/329b5f12.js.map +0 -1
  213. package/_internal/332e9844.js +0 -2
  214. package/_internal/332e9844.js.map +0 -1
  215. package/_internal/34c59f5b.js.map +0 -1
  216. package/_internal/36bd7352.js.map +0 -1
  217. package/_internal/370bdaed.js.map +0 -1
  218. package/_internal/37b007a4.js.map +0 -1
  219. package/_internal/3a1facc0.js.map +0 -1
  220. package/_internal/3a4e4636.js.map +0 -1
  221. package/_internal/3e653144.js.map +0 -1
  222. package/_internal/3f86608e.js.map +0 -1
  223. package/_internal/478b5c92.js.map +0 -1
  224. package/_internal/4962be5b.js +0 -121
  225. package/_internal/4962be5b.js.map +0 -1
  226. package/_internal/49bbeed3.js +0 -6
  227. package/_internal/49bbeed3.js.map +0 -1
  228. package/_internal/4cd870a5.js.map +0 -1
  229. package/_internal/4daccdd5.js.map +0 -1
  230. package/_internal/501f2f9f.js.map +0 -1
  231. package/_internal/5e7b90e2.js +0 -2
  232. package/_internal/5e7b90e2.js.map +0 -1
  233. package/_internal/5ec059fe.js.map +0 -1
  234. package/_internal/5f8f9454.js.map +0 -1
  235. package/_internal/5fe09341.js.map +0 -1
  236. package/_internal/628468c4.js.map +0 -1
  237. package/_internal/6589b796.js +0 -280
  238. package/_internal/6589b796.js.map +0 -1
  239. package/_internal/65f91970.js.map +0 -1
  240. package/_internal/66f691d3.js +0 -74
  241. package/_internal/66f691d3.js.map +0 -1
  242. package/_internal/68c10f98.js.map +0 -1
  243. package/_internal/690ca33e.js +0 -109
  244. package/_internal/690ca33e.js.map +0 -1
  245. package/_internal/6ca04271.js +0 -108
  246. package/_internal/6ca04271.js.map +0 -1
  247. package/_internal/6da19518.js.map +0 -1
  248. package/_internal/7093ba23.js.map +0 -1
  249. package/_internal/74a4a214.js +0 -82
  250. package/_internal/74a4a214.js.map +0 -1
  251. package/_internal/76be70dd.js.map +0 -1
  252. package/_internal/78df9309.js.map +0 -1
  253. package/_internal/7b221b05.js +0 -9
  254. package/_internal/7b221b05.js.map +0 -1
  255. package/_internal/7daf0f24.js.map +0 -1
  256. package/_internal/7f54e947.js.map +0 -1
  257. package/_internal/825ac334.js.map +0 -1
  258. package/_internal/827b804a.js +0 -6
  259. package/_internal/827b804a.js.map +0 -1
  260. package/_internal/84dfe68f.js.map +0 -1
  261. package/_internal/85e3a5ca.js.map +0 -1
  262. package/_internal/86aa4aa4.js.map +0 -1
  263. package/_internal/88ec77c2.js +0 -130
  264. package/_internal/88ec77c2.js.map +0 -1
  265. package/_internal/8ab42752.js.map +0 -1
  266. package/_internal/95cfd814.js.map +0 -1
  267. package/_internal/9a4dfad0.js.map +0 -1
  268. package/_internal/9c9df5f2.js.map +0 -1
  269. package/_internal/9d1336a1.js.map +0 -1
  270. package/_internal/9fdc715b.js.map +0 -1
  271. package/_internal/a003602b.js +0 -116
  272. package/_internal/a003602b.js.map +0 -1
  273. package/_internal/a34639bd.js +0 -97
  274. package/_internal/a34639bd.js.map +0 -1
  275. package/_internal/a84f4981.js.map +0 -1
  276. package/_internal/b0a7a999.js.map +0 -1
  277. package/_internal/b0b2e33d.js.map +0 -1
  278. package/_internal/b1af5979.js.map +0 -1
  279. package/_internal/b477da26.js.map +0 -1
  280. package/_internal/b8667090.js.map +0 -1
  281. package/_internal/bae266a9.js.map +0 -1
  282. package/_internal/be6da9b0.js.map +0 -1
  283. package/_internal/c0414b89.js.map +0 -1
  284. package/_internal/c2388b10.js.map +0 -1
  285. package/_internal/c459a04d.js +0 -148
  286. package/_internal/c459a04d.js.map +0 -1
  287. package/_internal/c6ca7494.js +0 -2
  288. package/_internal/c6ca7494.js.map +0 -1
  289. package/_internal/cdddaed8.js.map +0 -1
  290. package/_internal/d0dd1815.js +0 -10
  291. package/_internal/d0dd1815.js.map +0 -1
  292. package/_internal/d45e3f16.js +0 -15
  293. package/_internal/d45e3f16.js.map +0 -1
  294. package/_internal/d5f316cb.js.map +0 -1
  295. package/_internal/d95844c1.d.ts +0 -7
  296. package/_internal/db4fdc7b.js.map +0 -1
  297. package/_internal/dbe0cf24.js +0 -75
  298. package/_internal/dbe0cf24.js.map +0 -1
  299. package/_internal/de24f857.js +0 -4
  300. package/_internal/de24f857.js.map +0 -1
  301. package/_internal/e2afb13f.js +0 -75
  302. package/_internal/e2afb13f.js.map +0 -1
  303. package/_internal/e52f0d3f.js +0 -94
  304. package/_internal/e52f0d3f.js.map +0 -1
  305. package/_internal/e6dd117e.js.map +0 -1
  306. package/_internal/e806b848.js.map +0 -1
  307. package/_internal/ea04260d.js.map +0 -1
  308. package/_internal/eaa8b1d8.js.map +0 -1
  309. package/_internal/eaf6c45a.js +0 -4
  310. package/_internal/eaf6c45a.js.map +0 -1
  311. package/_internal/edab29ce.js.map +0 -1
  312. package/_internal/ef5d1aac.js +0 -4
  313. package/_internal/ef5d1aac.js.map +0 -1
  314. package/_internal/f0900583.js +0 -142
  315. package/_internal/f0d7d6ea.js.map +0 -1
  316. package/_internal/f23cdf84.js.map +0 -1
  317. package/_internal/f52e979e.js +0 -3
  318. package/_internal/f52e979e.js.map +0 -1
  319. package/_internal/f5508d3d.js.map +0 -1
  320. package/_internal/f93fe83e.js.map +0 -1
@@ -1,13 +1,10 @@
1
- import { m as getRootClassName, n as forwardRef, l as classNames } from './6589b796.js';
2
- import { h as handleBasicClasses } from './e2afb13f.js';
3
- import { g as getTypographyClassName } from './d0dd1815.js';
4
- import { f as fontColorClass } from './d45e3f16.js';
1
+ import { f as forwardRef, _ as _extends, c as classNames } from './forwardRef-49d2bb84.js';
2
+ import { getRootClassName, getTypographyClassName, handleBasicClasses, fontColorClass } from '@lumx/core/js/utils/className';
5
3
  import React__default from 'react';
6
- import { u as useTooltipContext } from './9d1336a1.js';
7
- import { V as VISUALLY_HIDDEN } from './478b5c92.js';
8
- import { u as useMergeRefs } from './f0d7d6ea.js';
9
- import { w as wrapChildrenIconWithSpaces } from './37b007a4.js';
10
- import { jsx } from 'react/jsx-runtime';
4
+ import { u as useTooltipContext } from './context-21aeb1c7.js';
5
+ import { V as VISUALLY_HIDDEN } from './constants-d0e3f49e.js';
6
+ import { u as useMergeRefs } from './mergeRefs-f0d7d6ea.js';
7
+ import { w as wrapChildrenIconWithSpaces } from './wrapChildrenIconWithSpaces-f86106ce.js';
11
8
 
12
9
  /**
13
10
  * Compute a tooltip label based on a label element `innerText` if the text overflows.
@@ -37,6 +34,10 @@ const useOverflowTooltipLabel = content => {
37
34
  };
38
35
  };
39
36
 
37
+ /**
38
+ * Defines the props of the component.
39
+ */
40
+
40
41
  /**
41
42
  * Component display name.
42
43
  */
@@ -94,7 +95,7 @@ const Text = forwardRef((props, ref) => {
94
95
  tooltipLabel,
95
96
  labelRef
96
97
  } = useOverflowTooltipLabel(children);
97
- return /*#__PURE__*/jsx(Component, {
98
+ return /*#__PURE__*/React.createElement(Component, _extends({
98
99
  ref: useMergeRefs(ref, labelRef),
99
100
  className: classNames(className, handleBasicClasses({
100
101
  prefix: CLASSNAME,
@@ -106,14 +107,12 @@ const Text = forwardRef((props, ref) => {
106
107
  ...truncateLinesStyle,
107
108
  ...whiteSpaceStyle,
108
109
  ...style
109
- },
110
- ...forwardedProps,
111
- children: wrapChildrenIconWithSpaces(children)
112
- });
110
+ }
111
+ }, forwardedProps), wrapChildrenIconWithSpaces(children));
113
112
  });
114
113
  Text.displayName = COMPONENT_NAME;
115
114
  Text.className = CLASSNAME;
116
115
  Text.defaultProps = DEFAULT_PROPS;
117
116
 
118
117
  export { Text as T, useOverflowTooltipLabel as u };
119
- //# sourceMappingURL=0420e67b.js.map
118
+ //# sourceMappingURL=index-b4d256e7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-b4d256e7.js","sources":["../../src/hooks/useOverflowTooltipLabel.tsx","../../src/components/text/Text.tsx"],"sourcesContent":["import React from 'react';\nimport { useTooltipContext } from '@lumx/react/components/tooltip/context';\nimport { VISUALLY_HIDDEN } from '@lumx/react/constants';\n\n/**\n * Compute a tooltip label based on a label element `innerText` if the text overflows.\n * Updates dynamically on content changes (but not on resize!)\n */\nexport const useOverflowTooltipLabel = (content: React.ReactNode) => {\n const parentTooltip = useTooltipContext();\n const [tooltipLabel, setTooltipLabel] = React.useState<string | undefined>(undefined);\n const [labelElement, setLabelElement] = React.useState<HTMLElement | null>(null);\n\n React.useLayoutEffect(() => {\n if (\n // Not inside a tooltip\n !parentTooltip &&\n labelElement &&\n // Not inside a visually hidden\n !labelElement?.closest(`.${VISUALLY_HIDDEN}`) &&\n // Text overflows\n labelElement.offsetWidth < labelElement.scrollWidth\n ) {\n // Set tooltip label\n setTooltipLabel(labelElement.innerText);\n } else {\n setTooltipLabel(undefined);\n }\n }, [labelElement, parentTooltip, content]);\n\n return { labelRef: setLabelElement, tooltipLabel };\n};\n","import classNames from 'classnames';\n\nimport { ColorWithVariants, ColorVariant, Typography, WhiteSpace } from '@lumx/react';\nimport { GenericProps, TextElement } from '@lumx/react/utils/type';\nimport {\n fontColorClass,\n getRootClassName,\n handleBasicClasses,\n getTypographyClassName,\n} from '@lumx/core/js/utils/className';\nimport { useOverflowTooltipLabel } from '@lumx/react/hooks/useOverflowTooltipLabel';\nimport { useMergeRefs } from '@lumx/react/utils/react/mergeRefs';\nimport { forwardRef } from '@lumx/react/utils/react/forwardRef';\nimport { wrapChildrenIconWithSpaces } from '@lumx/react/utils/react/wrapChildrenIconWithSpaces';\n\n/**\n * Defines the props of the component.\n */\nexport interface TextProps extends GenericProps {\n /**\n * Color variant.\n */\n color?: ColorWithVariants;\n /**\n * Lightened or darkened variant of the selected color.\n */\n colorVariant?: ColorVariant;\n /**\n * Typography variant.\n */\n typography?: Typography;\n /**\n * Custom component to render the text.\n */\n as: TextElement;\n /**\n * Control whether the text should truncate or not.\n * Setting as `true` will make the text truncate on a single line.\n * Setting as `{ lines: number }` will make the text truncate on a multiple lines.\n */\n truncate?: boolean | { lines: number };\n /**\n * Prevents text to wrap on multiple lines\n * (automatically activated when single line text truncate is activated).\n */\n noWrap?: boolean;\n /**\n * WhiteSpace variant\n * Ignored when `noWrap` is set to true\n * Ignored when `truncate` is set to true or lines: 1\n * */\n whiteSpace?: WhiteSpace;\n /**\n * Children\n */\n children?: React.ReactNode;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'Text';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * Component default props.\n */\nconst DEFAULT_PROPS = {} as const;\n\n/**\n * Text component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const Text = forwardRef<TextProps>((props, ref) => {\n const {\n as: Component,\n children,\n className,\n color,\n colorVariant,\n noWrap,\n typography,\n truncate,\n whiteSpace,\n style,\n ...forwardedProps\n } = props;\n\n const typographyClass = typography && getTypographyClassName(typography);\n\n // Truncate mode\n const truncateLinesStyle = typeof truncate === 'object' &&\n truncate.lines > 1 && { '--lumx-text-truncate-lines': truncate.lines };\n const isTruncatedMultiline = !!truncateLinesStyle;\n const isTruncated = !!truncate;\n\n /**\n * Add custom white-space style if specified\n * Disabled if noWrap is specified\n * Disabled if truncated on one-line\n * */\n const whiteSpaceStyle = !noWrap &&\n !(isTruncated && !isTruncatedMultiline) &&\n whiteSpace && { '--lumx-text-white-space': whiteSpace };\n\n const { tooltipLabel, labelRef } = useOverflowTooltipLabel(children);\n\n return (\n <Component\n ref={useMergeRefs(ref as React.Ref<any>, labelRef)}\n className={classNames(\n className,\n handleBasicClasses({\n prefix: CLASSNAME,\n isTruncated: isTruncated && !isTruncatedMultiline,\n isTruncatedMultiline,\n }),\n typographyClass,\n fontColorClass(color, colorVariant),\n noWrap && `${CLASSNAME}--no-wrap`,\n )}\n title={tooltipLabel}\n style={{ ...truncateLinesStyle, ...whiteSpaceStyle, ...style }}\n {...forwardedProps}\n >\n {wrapChildrenIconWithSpaces(children)}\n </Component>\n );\n});\nText.displayName = COMPONENT_NAME;\nText.className = CLASSNAME;\nText.defaultProps = DEFAULT_PROPS;\n"],"names":["useOverflowTooltipLabel","content","parentTooltip","useTooltipContext","tooltipLabel","setTooltipLabel","React","useState","undefined","labelElement","setLabelElement","useLayoutEffect","closest","VISUALLY_HIDDEN","offsetWidth","scrollWidth","innerText","labelRef","COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","Text","forwardRef","props","ref","as","Component","children","className","color","colorVariant","noWrap","typography","truncate","whiteSpace","style","forwardedProps","typographyClass","getTypographyClassName","truncateLinesStyle","lines","isTruncatedMultiline","isTruncated","whiteSpaceStyle","createElement","_extends","useMergeRefs","classNames","handleBasicClasses","prefix","fontColorClass","title","wrapChildrenIconWithSpaces","displayName","defaultProps"],"mappings":"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"}
@@ -1,16 +1,15 @@
1
+ import { _ as _extends, f as forwardRef, c as classNames } from './forwardRef-49d2bb84.js';
1
2
  import React__default, { useState, useEffect, useLayoutEffect, useMemo, useRef } from 'react';
2
- import { m as getRootClassName, n as forwardRef, l as classNames } from './6589b796.js';
3
- import { u as useCallbackOnEscape } from './d5f316cb.js';
4
- import { D as DOCUMENT, W as WINDOW } from './478b5c92.js';
5
- import { h as handleBasicClasses } from './e2afb13f.js';
6
- import { u as useMergeRefs } from './f0d7d6ea.js';
7
- import { g as getFirstAndLastFocusable, u as useFocusTrap } from './5fe09341.js';
8
- import { jsx, jsxs } from 'react/jsx-runtime';
9
- import { T as ThemeProvider } from './3181f000.js';
3
+ import { u as useCallbackOnEscape } from './useCallbackOnEscape-ea4d9eb4.js';
4
+ import { D as DOCUMENT, W as WINDOW } from './constants-d0e3f49e.js';
5
+ import { getRootClassName, handleBasicClasses } from '@lumx/core/js/utils/className';
6
+ import { u as useMergeRefs } from './mergeRefs-f0d7d6ea.js';
7
+ import { g as getFirstAndLastFocusable, u as useFocusTrap } from './useFocusTrap-c3c6378b.js';
8
+ import { T as ThemeProvider } from './ThemeContext-3181f000.js';
10
9
  import memoize from 'lodash/memoize';
11
- import { A as ARROW_SIZE, u as usePopper, d as detectOverflow, F as FitAnchorWidth, P as Placement, a as POPOVER_ZINDEX } from './4cd870a5.js';
12
- import { P as Portal } from './3f86608e.js';
13
- import { C as ClickAwayProvider } from './7093ba23.js';
10
+ import { A as ARROW_SIZE, u as usePopper, d as detectOverflow, F as FitAnchorWidth, P as Placement, a as POPOVER_ZINDEX } from './constants-b9e57936.js';
11
+ import { P as Portal } from './Portal-c43d098b.js';
12
+ import { C as ClickAwayProvider } from './ClickAwayProvider-bcce6ceb.js';
14
13
 
15
14
  /**
16
15
  * Hook focusing an element when defined and `focus` boolean `true`.
@@ -39,10 +38,9 @@ const skipRender = (predicate, Component) => {
39
38
  // Can't render in SSR.
40
39
  return null;
41
40
  }
42
- return /*#__PURE__*/jsx(Component, {
43
- ref: ref,
44
- ...props
45
- });
41
+ return /*#__PURE__*/React__default.createElement(Component, _extends({
42
+ ref: ref
43
+ }, props));
46
44
  });
47
45
  Wrapper.displayName = Component.displayName;
48
46
  return Wrapper;
@@ -103,7 +101,7 @@ function useRestoreFocusOnClose({
103
101
  }, 0);
104
102
  };
105
103
  }, [anchorRef, focusAnchorOnClose, parentElement, popoverElement]);
106
- return /*#__PURE__*/jsx(OnBeforeUnmount, {
104
+ return /*#__PURE__*/React__default.createElement(OnBeforeUnmount, {
107
105
  callbackRef: onBeforeUnmountRef
108
106
  });
109
107
  }
@@ -297,6 +295,10 @@ function usePopoverStyle({
297
295
  };
298
296
  }
299
297
 
298
+ /**
299
+ * Defines the props of the component.
300
+ */
301
+
300
302
  /**
301
303
  * Component display name.
302
304
  */
@@ -380,41 +382,33 @@ const _InnerPopover = forwardRef((props, ref) => {
380
382
  useFocusTrap(withFocusTrap && isOpen && focusZoneElement, focusElement?.current);
381
383
  const clickAwayRefs = useRef([popoverRef, anchorRef]);
382
384
  const mergedRefs = useMergeRefs(setPopperElement, ref, popoverRef);
383
- return isOpen ? /*#__PURE__*/jsx(Portal, {
384
- enabled: usePortal,
385
- children: /*#__PURE__*/jsxs(Component, {
386
- ...forwardedProps,
387
- ref: mergedRefs,
388
- className: classNames(className, handleBasicClasses({
389
- prefix: CLASSNAME,
390
- theme,
391
- elevation: Math.min(elevation || 0, 5),
392
- position,
393
- isInitializing: !styles.popover?.transform
394
- })),
395
- style: styles.popover,
396
- ...attributes.popper,
397
- children: [unmountSentinel, /*#__PURE__*/jsxs(ClickAwayProvider, {
398
- callback: closeOnClickAway && onClose,
399
- childrenRefs: clickAwayRefs,
400
- children: [hasArrow && /*#__PURE__*/jsx("div", {
401
- ref: setArrowElement,
402
- className: `${CLASSNAME}__arrow`,
403
- style: styles.arrow,
404
- children: /*#__PURE__*/jsx("svg", {
405
- viewBox: "0 0 14 14",
406
- "aria-hidden": true,
407
- children: /*#__PURE__*/jsx("path", {
408
- d: "M8 3.49C7.62 2.82 6.66 2.82 6.27 3.48L.04 14 14.04 14 8 3.49Z"
409
- })
410
- })
411
- }), /*#__PURE__*/jsx(ThemeProvider, {
412
- value: theme,
413
- children: children
414
- })]
415
- })]
416
- })
417
- }) : null;
385
+ return isOpen ? /*#__PURE__*/React.createElement(Portal, {
386
+ enabled: usePortal
387
+ }, /*#__PURE__*/React.createElement(Component, _extends({}, forwardedProps, {
388
+ ref: mergedRefs,
389
+ className: classNames(className, handleBasicClasses({
390
+ prefix: CLASSNAME,
391
+ theme,
392
+ elevation: Math.min(elevation || 0, 5),
393
+ position,
394
+ isInitializing: !styles.popover?.transform
395
+ })),
396
+ style: styles.popover
397
+ }, attributes.popper), unmountSentinel, /*#__PURE__*/React.createElement(ClickAwayProvider, {
398
+ callback: closeOnClickAway && onClose,
399
+ childrenRefs: clickAwayRefs
400
+ }, hasArrow && /*#__PURE__*/React.createElement("div", {
401
+ ref: setArrowElement,
402
+ className: `${CLASSNAME}__arrow`,
403
+ style: styles.arrow
404
+ }, /*#__PURE__*/React.createElement("svg", {
405
+ viewBox: "0 0 14 14",
406
+ "aria-hidden": true
407
+ }, /*#__PURE__*/React.createElement("path", {
408
+ d: "M8 3.49C7.62 2.82 6.66 2.82 6.27 3.48L.04 14 14.04 14 8 3.49Z"
409
+ }))), /*#__PURE__*/React.createElement(ThemeProvider, {
410
+ value: theme
411
+ }, children)))) : null;
418
412
  });
419
413
  _InnerPopover.displayName = COMPONENT_NAME;
420
414
 
@@ -433,4 +427,4 @@ Popover.className = CLASSNAME;
433
427
  Popover.defaultProps = DEFAULT_PROPS;
434
428
 
435
429
  export { Popover as P, useFocus as u };
436
- //# sourceMappingURL=84dfe68f.js.map
430
+ //# sourceMappingURL=index-f415b08e.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-f415b08e.js","sources":["../../src/hooks/useFocus.tsx","../../src/utils/react/skipRender.tsx","../../src/utils/react/OnBeforeUnmount.tsx","../../src/components/popover/useRestoreFocusOnClose.tsx","../../src/components/popover/usePopoverStyle.tsx","../../src/components/popover/Popover.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\n\n/**\n * Hook focusing an element when defined and `focus` boolean `true`.\n *\n * @param element Element to focus.\n * @param shouldFocus Boolean flag to trigger the focus\n */\nexport function useFocus(element: HTMLElement | null | undefined, shouldFocus = true): void {\n const [wasFocus, setWasFocus] = useState(false);\n useEffect(\n () => {\n if (shouldFocus && wasFocus !== shouldFocus && element) {\n element.focus();\n setWasFocus(shouldFocus);\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [element, shouldFocus],\n );\n}\n","import React from 'react';\n\nimport { DOCUMENT } from '@lumx/react/constants';\nimport type { Comp } from '@lumx/react/utils/type';\n/**\n * HOC component wrapping a component to skip render if predicate return falsy\n */\nexport const skipRender = <P, T>(predicate: (props: P) => any, Component: Comp<P, T>) => {\n const Wrapper = React.forwardRef<T, P>((props, ref) => {\n if (!DOCUMENT) {\n // Can't render in SSR.\n return null;\n }\n return <Component ref={ref} {...props} />;\n });\n Wrapper.displayName = Component.displayName;\n return Wrapper;\n};\n","import { useLayoutEffect } from 'react';\n\n/**\n * Helper component using useLayoutEffect to trigger a callback on before unmount.\n *\n * The callback must be wrapped in a React ref to avoid updating the `useLayoutEffect` before the un-mount\n */\nexport const OnBeforeUnmount = ({ callbackRef }: { callbackRef: React.RefObject<(() => void) | undefined> }) => {\n useLayoutEffect(\n () => {\n return () => {\n // On unmount\n // eslint-disable-next-line react-hooks/exhaustive-deps\n callbackRef.current?.();\n };\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n return null;\n};\n","import React from 'react';\nimport { getFirstAndLastFocusable } from '@lumx/react/utils/browser/focus/getFirstAndLastFocusable';\nimport { OnBeforeUnmount } from '@lumx/react/utils/react/OnBeforeUnmount';\nimport type { PopoverProps } from './Popover';\n\n/**\n * Provides an unmount sentinel to inject in the popover to detect when it closes and restore the focus to the\n * anchor if needed.\n */\nexport function useRestoreFocusOnClose(\n {\n focusAnchorOnClose,\n anchorRef,\n parentElement,\n }: Pick<PopoverProps, 'focusAnchorOnClose' | 'anchorRef' | 'parentElement'>,\n popoverElement?: HTMLElement | null,\n) {\n const onBeforeUnmountRef = React.useRef<(() => void) | undefined>();\n\n React.useEffect(() => {\n if (!popoverElement || !focusAnchorOnClose) {\n onBeforeUnmountRef.current = undefined;\n return;\n }\n\n onBeforeUnmountRef.current = () => {\n const isFocusWithin = popoverElement?.contains(document.activeElement);\n if (!isFocusWithin) return;\n\n // On next render\n setTimeout(() => {\n const anchor = anchorRef.current;\n const elementToFocus =\n // Provided parent element\n parentElement?.current ||\n // Or first focusable element in anchor\n (anchor ? getFirstAndLastFocusable(anchor).first : undefined) ||\n // Fallback to anchor\n anchor;\n\n elementToFocus?.focus({ preventScroll: true });\n }, 0);\n };\n }, [anchorRef, focusAnchorOnClose, parentElement, popoverElement]);\n\n return <OnBeforeUnmount callbackRef={onBeforeUnmountRef} />;\n}\n","import { useEffect, useMemo, useState } from 'react';\nimport memoize from 'lodash/memoize';\nimport { detectOverflow } from '@popperjs/core';\n\nimport { DOCUMENT, WINDOW } from '@lumx/react/constants';\nimport { PopoverProps } from '@lumx/react/components/popover/Popover';\nimport { usePopper } from '@lumx/react/hooks/usePopper';\nimport { ARROW_SIZE, FitAnchorWidth, Placement } from './constants';\n\n/**\n * Popper js modifier to fit popover min width to the anchor width.\n */\nconst sameWidth = memoize((anchorWidthOption: FitAnchorWidth) => ({\n name: 'sameWidth',\n enabled: true,\n phase: 'beforeWrite',\n requires: ['computeStyles'],\n fn({ state }: any) {\n // eslint-disable-next-line no-param-reassign\n state.styles.popper[anchorWidthOption] = `${state.rects.reference.width}px`;\n },\n effect({ state }: any) {\n // eslint-disable-next-line no-param-reassign\n state.elements.popper.style[anchorWidthOption] = `${state.elements.reference.offsetWidth}px`;\n },\n}));\n\n/**\n * Popper js modifier to compute max size of the popover.\n */\nconst maxSize = {\n name: 'maxSize',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['offset', 'preventOverflow', 'flip'],\n fn({ state, name, options }: any) {\n const overflow = detectOverflow(state, options);\n\n const { y = 0, x = 0 } = state.modifiersData.preventOverflow;\n const { width, height } = state.rects.popper;\n\n const [basePlacement] = state.placement.split('-');\n\n const widthProp = basePlacement === 'left' ? 'left' : 'right';\n const heightProp = basePlacement === 'top' ? 'top' : 'bottom';\n // eslint-disable-next-line no-param-reassign\n state.modifiersData[name] = {\n width: width - overflow[widthProp] - x,\n height: height - overflow[heightProp] - y,\n };\n },\n};\n\n/**\n * Popper js modifier to apply the max height.\n */\nconst applyMaxHeight = {\n name: 'applyMaxHeight',\n enabled: true,\n phase: 'beforeWrite',\n requires: ['maxSize'],\n fn({ state }: any) {\n const { height } = state.modifiersData.maxSize;\n // eslint-disable-next-line no-param-reassign\n state.elements.popper.style.maxHeight = `${height - ARROW_SIZE}px`;\n },\n};\n\ntype Options = Pick<\n PopoverProps,\n | 'offset'\n | 'hasArrow'\n | 'fitToAnchorWidth'\n | 'fitWithinViewportHeight'\n | 'boundaryRef'\n | 'anchorRef'\n | 'placement'\n | 'style'\n | 'zIndex'\n>;\n\ninterface Output {\n styles: { arrow?: React.CSSProperties; popover?: React.CSSProperties };\n attributes: any;\n isPositioned: boolean;\n position?: Placement;\n setArrowElement?: React.Ref<HTMLDivElement>;\n setPopperElement?: React.Ref<HTMLDivElement>;\n popperElement: HTMLElement | null;\n}\n\nexport function usePopoverStyle({\n offset,\n hasArrow,\n fitToAnchorWidth,\n fitWithinViewportHeight,\n boundaryRef,\n anchorRef,\n placement,\n style,\n zIndex,\n}: Options): Output {\n const [popperElement, setPopperElement] = useState<null | HTMLElement>(null);\n const [arrowElement, setArrowElement] = useState<null | HTMLElement>(null);\n\n const actualOffset: [number, number] = [offset?.along ?? 0, (offset?.away ?? 0) + (hasArrow ? ARROW_SIZE : 0)];\n const modifiers: any = [\n {\n name: 'offset',\n options: { offset: actualOffset },\n },\n ];\n if (hasArrow && arrowElement) {\n modifiers.push({\n name: 'arrow',\n options: {\n element: arrowElement,\n padding: ARROW_SIZE / 2,\n },\n });\n }\n if (fitToAnchorWidth) {\n const fitWidth = typeof fitToAnchorWidth === 'string' ? fitToAnchorWidth : FitAnchorWidth.MIN_WIDTH;\n modifiers.push(sameWidth(fitWidth));\n }\n if (fitWithinViewportHeight) {\n modifiers.push({ ...maxSize, options: { boundary: boundaryRef?.current } }, applyMaxHeight);\n }\n if (boundaryRef) {\n modifiers.push(\n { name: 'flip', options: { boundary: boundaryRef.current } },\n { name: 'preventOverflow', options: { boundary: boundaryRef.current } },\n );\n }\n\n const { styles, attributes, state, update } = usePopper(anchorRef.current, popperElement, { placement, modifiers });\n\n // Auto update popover\n useEffect(() => {\n const { current: anchorElement } = anchorRef;\n if (!update || !popperElement || !anchorElement || !WINDOW?.ResizeObserver) {\n return undefined;\n }\n let running: ReturnType<typeof setTimeout> | undefined;\n function updateRateLimited() {\n if (running) return;\n update?.();\n running = setTimeout(() => {\n running = undefined;\n }, 100);\n }\n updateRateLimited();\n\n // On anchor or popover resize\n const resizeObserver = new ResizeObserver(updateRateLimited);\n resizeObserver.observe(anchorElement);\n resizeObserver.observe(popperElement);\n return () => {\n resizeObserver.disconnect();\n };\n }, [anchorRef, popperElement, update]);\n\n const position = state?.placement ?? placement;\n\n const popoverStyle = useMemo(() => {\n const newStyles = { ...style, ...styles.popper, zIndex };\n\n if (fitWithinViewportHeight && !newStyles.maxHeight) {\n newStyles.maxHeight = WINDOW?.innerHeight || DOCUMENT?.documentElement.clientHeight;\n }\n\n return newStyles;\n }, [style, styles.popper, zIndex, fitWithinViewportHeight]);\n\n return {\n styles: { arrow: styles.arrow, popover: popoverStyle },\n attributes,\n isPositioned: (state?.rects?.popper?.y ?? -1) >= 0,\n position,\n setArrowElement,\n setPopperElement,\n popperElement,\n };\n}\n","import { ReactNode, RefObject, useRef } from 'react';\n\nimport classNames from 'classnames';\n\nimport { useCallbackOnEscape } from '@lumx/react/hooks/useCallbackOnEscape';\nimport { useFocus } from '@lumx/react/hooks/useFocus';\nimport { ClickAwayProvider } from '@lumx/react/utils/ClickAwayProvider';\nimport { DOCUMENT } from '@lumx/react/constants';\nimport { Comp, GenericProps, HasTheme } from '@lumx/react/utils/type';\nimport { getRootClassName, handleBasicClasses } from '@lumx/core/js/utils/className';\nimport { useMergeRefs } from '@lumx/react/utils/react/mergeRefs';\nimport { useFocusTrap } from '@lumx/react/hooks/useFocusTrap';\nimport { skipRender } from '@lumx/react/utils/react/skipRender';\nimport { forwardRef } from '@lumx/react/utils/react/forwardRef';\n\nimport { ThemeProvider } from '@lumx/react/utils/theme/ThemeContext';\nimport { Portal } from '@lumx/react/utils';\nimport { useRestoreFocusOnClose } from './useRestoreFocusOnClose';\nimport { usePopoverStyle } from './usePopoverStyle';\nimport { Elevation, FitAnchorWidth, Offset, Placement, POPOVER_ZINDEX } from './constants';\n\n/**\n * Defines the props of the component.\n */\nexport interface PopoverProps extends GenericProps, HasTheme {\n /** Reference to the DOM element used to set the position of the popover. */\n anchorRef: React.RefObject<HTMLElement>;\n /** Customize the root element. (Must accept ref forwarding and props forwarding!). */\n as?: React.ElementType;\n /** Element which will act as boundary when opening the popover. */\n boundaryRef?: RefObject<HTMLElement>;\n /** Content. */\n children: ReactNode;\n /** Whether a click anywhere out of the popover would close it. */\n closeOnClickAway?: boolean;\n /** Whether an escape key press would close the popover. */\n closeOnEscape?: boolean;\n /** Shadow elevation. */\n elevation?: Elevation;\n /**\n * Manage popover width:\n * - `maxWidth`: popover not bigger than anchor\n * - `minWidth` or `true`: popover not smaller than anchor\n * - `width`: popover equal to the anchor.\n */\n fitToAnchorWidth?: FitAnchorWidth | boolean;\n /** Shrink popover if even after flipping there is not enough space. */\n fitWithinViewportHeight?: boolean;\n /** Element to focus when opening the popover. */\n focusElement?: RefObject<HTMLElement>;\n /** Whether the focus should go back on the anchor when popover closes and focus is within. */\n focusAnchorOnClose?: boolean;\n /** Whether we put an arrow or not. */\n hasArrow?: boolean;\n /** Whether the popover is open or not. */\n isOpen: boolean;\n /** Offset placement relative to anchor. */\n offset?: Offset;\n /** Reference to the parent element that triggered the popover (will get back focus on close or else fallback on the anchor element). */\n parentElement?: RefObject<HTMLElement>;\n /** Placement relative to anchor. */\n placement?: Placement;\n /** Whether the popover should be rendered into a DOM node that exists outside the DOM hierarchy of the parent component. */\n usePortal?: boolean;\n /** The element in which the focus trap should be set. Default to popover. */\n focusTrapZoneElement?: RefObject<HTMLElement>;\n /** Z-axis position. */\n zIndex?: number;\n /** On close callback (on click away or Escape pressed). */\n onClose?(): void;\n /** Whether the popover should trap the focus within itself. Default to false. */\n withFocusTrap?: boolean;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'Popover';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * Component default props.\n */\nconst DEFAULT_PROPS: Partial<PopoverProps> = {\n elevation: 3,\n placement: Placement.AUTO,\n focusAnchorOnClose: true,\n usePortal: true,\n zIndex: POPOVER_ZINDEX,\n};\n\n// Inner component (must be wrapped before export)\nconst _InnerPopover = forwardRef<PopoverProps, HTMLDivElement>((props, ref) => {\n const {\n anchorRef,\n as: Component = 'div',\n children,\n className,\n closeOnClickAway,\n closeOnEscape,\n elevation = DEFAULT_PROPS.elevation,\n focusElement,\n hasArrow,\n isOpen,\n onClose,\n parentElement,\n usePortal = DEFAULT_PROPS.usePortal,\n focusAnchorOnClose = DEFAULT_PROPS.focusAnchorOnClose,\n withFocusTrap,\n boundaryRef,\n fitToAnchorWidth,\n fitWithinViewportHeight,\n focusTrapZoneElement,\n offset,\n placement = DEFAULT_PROPS.placement,\n style,\n theme,\n zIndex = DEFAULT_PROPS.zIndex,\n ...forwardedProps\n } = props;\n const popoverRef = useRef<HTMLDivElement>(null);\n\n const { styles, attributes, isPositioned, position, setArrowElement, setPopperElement, popperElement } =\n usePopoverStyle({\n offset,\n hasArrow,\n fitToAnchorWidth,\n fitWithinViewportHeight,\n boundaryRef,\n anchorRef,\n placement,\n style,\n zIndex,\n });\n\n const unmountSentinel = useRestoreFocusOnClose({ focusAnchorOnClose, anchorRef, parentElement }, popperElement);\n const focusZoneElement = focusTrapZoneElement?.current || popoverRef?.current;\n\n useCallbackOnEscape(onClose, isOpen && closeOnEscape);\n\n /** Only set focus within if the focus trap is disabled as they interfere with one another. */\n useFocus(focusElement?.current, !withFocusTrap && isOpen && isPositioned);\n useFocusTrap(withFocusTrap && isOpen && focusZoneElement, focusElement?.current);\n\n const clickAwayRefs = useRef([popoverRef, anchorRef]);\n const mergedRefs = useMergeRefs<HTMLDivElement>(setPopperElement, ref, popoverRef);\n\n return isOpen ? (\n <Portal enabled={usePortal}>\n <Component\n {...forwardedProps}\n ref={mergedRefs}\n className={classNames(\n className,\n handleBasicClasses({\n prefix: CLASSNAME,\n theme,\n elevation: Math.min(elevation || 0, 5),\n position,\n isInitializing: !styles.popover?.transform,\n }),\n )}\n style={styles.popover}\n {...attributes.popper}\n >\n {unmountSentinel}\n <ClickAwayProvider callback={closeOnClickAway && onClose} childrenRefs={clickAwayRefs}>\n {hasArrow && (\n <div ref={setArrowElement} className={`${CLASSNAME}__arrow`} style={styles.arrow}>\n <svg viewBox=\"0 0 14 14\" aria-hidden>\n <path d=\"M8 3.49C7.62 2.82 6.66 2.82 6.27 3.48L.04 14 14.04 14 8 3.49Z\" />\n </svg>\n </div>\n )}\n <ThemeProvider value={theme}>{children}</ThemeProvider>\n </ClickAwayProvider>\n </Component>\n </Portal>\n ) : null;\n});\n_InnerPopover.displayName = COMPONENT_NAME;\n\n/**\n * Popover component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const Popover: Comp<PopoverProps, HTMLDivElement> = skipRender(\n // Skip render in SSR\n () => Boolean(DOCUMENT),\n _InnerPopover,\n);\nPopover.displayName = COMPONENT_NAME;\nPopover.className = CLASSNAME;\nPopover.defaultProps = DEFAULT_PROPS;\n"],"names":["useFocus","element","shouldFocus","wasFocus","setWasFocus","useState","useEffect","focus","skipRender","predicate","Component","Wrapper","React","forwardRef","props","ref","DOCUMENT","createElement","_extends","displayName","OnBeforeUnmount","callbackRef","useLayoutEffect","current","useRestoreFocusOnClose","focusAnchorOnClose","anchorRef","parentElement","popoverElement","onBeforeUnmountRef","useRef","undefined","isFocusWithin","contains","document","activeElement","setTimeout","anchor","elementToFocus","getFirstAndLastFocusable","first","preventScroll","sameWidth","memoize","anchorWidthOption","name","enabled","phase","requires","fn","state","styles","popper","rects","reference","width","effect","elements","style","offsetWidth","maxSize","requiresIfExists","options","overflow","detectOverflow","y","x","modifiersData","preventOverflow","height","basePlacement","placement","split","widthProp","heightProp","applyMaxHeight","maxHeight","ARROW_SIZE","usePopoverStyle","offset","hasArrow","fitToAnchorWidth","fitWithinViewportHeight","boundaryRef","zIndex","popperElement","setPopperElement","arrowElement","setArrowElement","actualOffset","along","away","modifiers","push","padding","fitWidth","FitAnchorWidth","MIN_WIDTH","boundary","attributes","update","usePopper","anchorElement","WINDOW","ResizeObserver","running","updateRateLimited","resizeObserver","observe","disconnect","position","popoverStyle","useMemo","newStyles","innerHeight","documentElement","clientHeight","arrow","popover","isPositioned","COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","elevation","Placement","AUTO","usePortal","POPOVER_ZINDEX","_InnerPopover","as","children","className","closeOnClickAway","closeOnEscape","focusElement","isOpen","onClose","withFocusTrap","focusTrapZoneElement","theme","forwardedProps","popoverRef","unmountSentinel","focusZoneElement","useCallbackOnEscape","useFocusTrap","clickAwayRefs","mergedRefs","useMergeRefs","Portal","classNames","handleBasicClasses","prefix","Math","min","isInitializing","transform","ClickAwayProvider","callback","childrenRefs","viewBox","d","ThemeProvider","value","Popover","Boolean","defaultProps"],"mappings":"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"}
@@ -17,4 +17,4 @@ const isComponent = component => instance => {
17
17
  };
18
18
 
19
19
  export { isComponent as i };
20
- //# sourceMappingURL=78df9309.js.map
20
+ //# sourceMappingURL=isComponent-78df9309.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isComponent-78df9309.js","sources":["../../src/utils/type/isComponent.ts"],"sourcesContent":["import type { ReactElement, ReactNode } from 'react';\nimport get from 'lodash/get';\nimport type { Comp } from './Comp';\n\n/**\n * Properties of a component to use to determine it's name.\n * In the order of preference.\n */\nconst NAME_PROPERTIES: string[] = [\n 'type',\n 'type.displayName',\n 'displayName',\n 'name',\n 'type.name',\n 'props.mdxType',\n '_reactInternalFiber.elementType.name',\n];\n/**\n * Create a predicate function that checks if a ReactNode is a react element from the given component.\n *\n * @param component React function component or the component name\n * @return predicate returning true if value is instance of the component\n */\nexport const isComponent =\n <C>(component: Comp<C, any> | string) =>\n (instance: ReactNode): instance is ReactElement => {\n const componentName = typeof component === 'string' ? component : component.displayName;\n\n return (\n !!get(instance, '$$typeof') &&\n NAME_PROPERTIES.some((nameProperty: string): boolean => get(instance, nameProperty) === componentName)\n );\n };\n"],"names":["NAME_PROPERTIES","isComponent","component","instance","componentName","displayName","get","some","nameProperty"],"mappings":";;AAIA;AACA;AACA;AACA;AACA,MAAMA,eAAyB,GAAG,CAC9B,MAAM,EACN,kBAAkB,EAClB,aAAa,EACb,MAAM,EACN,WAAW,EACX,eAAe,EACf,sCAAsC,CACzC,CAAA;AACD;AACA;AACA;AACA;AACA;AACA;MACaC,WAAW,GAChBC,SAAgC,IACnCC,QAAmB,IAA+B;EAC/C,MAAMC,aAAa,GAAG,OAAOF,SAAS,KAAK,QAAQ,GAAGA,SAAS,GAAGA,SAAS,CAACG,WAAW,CAAA;EAEvF,OACI,CAAC,CAACC,GAAG,CAACH,QAAQ,EAAE,UAAU,CAAC,IAC3BH,eAAe,CAACO,IAAI,CAAEC,YAAoB,IAAcF,GAAG,CAACH,QAAQ,EAAEK,YAAY,CAAC,KAAKJ,aAAa,CAAC,CAAA;AAE9G;;;;"}
@@ -6,4 +6,4 @@ import React__default from 'react';
6
6
  const isComponentType = type => node => /*#__PURE__*/React__default.isValidElement(node) && node.type === type;
7
7
 
8
8
  export { isComponentType as i };
9
- //# sourceMappingURL=e806b848.js.map
9
+ //# sourceMappingURL=isComponentType-e806b848.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isComponentType-e806b848.js","sources":["../../src/utils/type/isComponentType.ts"],"sourcesContent":["import React, { ReactElement, ReactNode } from 'react';\n\n/**\n * Similar to `isComponent` but more precise as it's not based on the component `displayName` but on the component function reference.\n */\nexport const isComponentType =\n (type: ReactElement['type']) =>\n (node: ReactNode): node is ReactElement =>\n React.isValidElement(node) && node.type === type;\n"],"names":["isComponentType","type","node","React","isValidElement"],"mappings":";;AAEA;AACA;AACA;MACaA,eAAe,GACvBC,IAA0B,IAC1BC,IAAe,iBACZC,cAAK,CAACC,cAAc,CAACF,IAAI,CAAC,IAAIA,IAAI,CAACD,IAAI,KAAKA;;;;"}
@@ -27,4 +27,4 @@ const useMergeRefs = (...refs) => {
27
27
  };
28
28
 
29
29
  export { mergeRefs as m, useMergeRefs as u };
30
- //# sourceMappingURL=f0d7d6ea.js.map
30
+ //# sourceMappingURL=mergeRefs-f0d7d6ea.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mergeRefs-f0d7d6ea.js","sources":["../../src/utils/react/mergeRefs.ts"],"sourcesContent":["import { Falsy } from '@lumx/react/utils/type';\nimport { MutableRefObject, useMemo } from 'react';\n\ntype FnRef<T> = (value: T) => void;\n\n/**\n * Merge refs into a single function ref.\n *\n * @param refs React references to merge.\n * @return the merged ref.\n */\nexport function mergeRefs<T>(...refs: Array<MutableRefObject<T | null> | FnRef<T> | Falsy>): FnRef<T> {\n return (value) =>\n refs.forEach((ref) => {\n if (typeof ref === 'function') {\n ref(value);\n } else if (ref) {\n // eslint-disable-next-line no-param-reassign\n (ref as MutableRefObject<T>).current = value;\n }\n });\n}\n\n/**\n * Same as `mergeRefs` but memoized\n */\nexport const useMergeRefs = <T>(...refs: Array<MutableRefObject<T | null> | FnRef<T> | Falsy>) => {\n return useMemo(\n () => mergeRefs(...refs),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n refs,\n );\n};\n"],"names":["mergeRefs","refs","value","forEach","ref","current","useMergeRefs","useMemo"],"mappings":";;AAKA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,SAASA,CAAI,GAAGC,IAA0D,EAAY;AAClG,EAAA,OAAQC,KAAK,IACTD,IAAI,CAACE,OAAO,CAAEC,GAAG,IAAK;AAClB,IAAA,IAAI,OAAOA,GAAG,KAAK,UAAU,EAAE;MAC3BA,GAAG,CAACF,KAAK,CAAC,CAAA;KACb,MAAM,IAAIE,GAAG,EAAE;AACZ;MACCA,GAAG,CAAyBC,OAAO,GAAGH,KAAK,CAAA;AAChD,KAAA;AACJ,GAAC,CAAC,CAAA;AACV,CAAA;;AAEA;AACA;AACA;MACaI,YAAY,GAAGA,CAAI,GAAGL,IAA0D,KAAK;AAC9F,EAAA,OAAOM,OAAO,CACV,MAAMP,SAAS,CAAC,GAAGC,IAAI,CAAC;AACxB;AACAA,EAAAA,IACJ,CAAC,CAAA;AACL;;;;"}
@@ -22,4 +22,4 @@ function partitionMulti(elements, predicates) {
22
22
  }
23
23
 
24
24
  export { partitionMulti as p };
25
- //# sourceMappingURL=4daccdd5.js.map
25
+ //# sourceMappingURL=partitionMulti-4daccdd5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"partitionMulti-4daccdd5.js","sources":["../../src/utils/partitionMulti.ts"],"sourcesContent":["import concat from 'lodash/concat';\nimport dropRight from 'lodash/dropRight';\nimport last from 'lodash/last';\nimport partition from 'lodash/partition';\nimport reduce from 'lodash/reduce';\n\nimport { Predicate } from '@lumx/core/js/types';\n\n/**\n * Similar to lodash `partition` function but working with multiple predicates.\n *\n * @example\n * const isString = (s) => typeof s === 'string'\n * const isNumber = (s) => typeof s === 'number'\n * const [strings, numbers, others] = partitionMulti(['a', 1, 'b', false], [isString, isNumber])\n * //=> [['a', 'b'], [1], [false]]\n *\n * @param elements array of elements\n * @param predicates array of predicates to apply on elements\n * @return partitioned elements by the given predicates\n */\nexport function partitionMulti<T>(elements: T[], predicates: Array<Predicate<T>>): T[][] {\n return reduce(\n predicates,\n (partitioned: T[][], predicate: Predicate<T>) =>\n concat(dropRight(partitioned), partition(last(partitioned), predicate)),\n [elements],\n );\n}\n"],"names":["partitionMulti","elements","predicates","reduce","partitioned","predicate","concat","dropRight","partition","last"],"mappings":";;;;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,cAAcA,CAAIC,QAAa,EAAEC,UAA+B,EAAS;AACrF,EAAA,OAAOC,MAAM,CACTD,UAAU,EACV,CAACE,WAAkB,EAAEC,SAAuB,KACxCC,MAAM,CAACC,SAAS,CAACH,WAAW,CAAC,EAAEI,SAAS,CAACC,IAAI,CAACL,WAAW,CAAC,EAAEC,SAAS,CAAC,CAAC,EAC3E,CAACJ,QAAQ,CACb,CAAC,CAAA;AACL;;;;"}
@@ -1,5 +1,5 @@
1
1
  import { createContext, useContext, useEffect, useMemo, useCallback } from 'react';
2
- import { u as useId } from './3a1facc0.js';
2
+ import { u as useId } from './useId-3a1facc0.js';
3
3
 
4
4
  const INIT_STATE = {
5
5
  isLazy: true,
@@ -127,4 +127,4 @@ const useTabProviderContextState = () => {
127
127
  };
128
128
 
129
129
  export { INIT_STATE as I, TabProviderContext as T, useTabProviderContext as a, reducer as r, useTabProviderContextState as u };
130
- //# sourceMappingURL=825ac334.js.map
130
+ //# sourceMappingURL=state-db358714.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-db358714.js","sources":["../../src/components/tabs/state.ts"],"sourcesContent":["import { Dispatch, createContext, useCallback, useContext, useEffect, useMemo } from 'react';\nimport { useId } from '@lumx/react/hooks/useId';\n\ntype TabType = 'tab' | 'tabPanel';\n\nexport interface State {\n isLazy: boolean;\n shouldActivateOnFocus: boolean;\n activeTabIndex: number;\n ids: Record<TabType, string[]>;\n}\n\nexport const INIT_STATE: State = {\n isLazy: true,\n shouldActivateOnFocus: false,\n activeTabIndex: 0,\n ids: { tab: [], tabPanel: [] },\n};\n\nexport type Action =\n | { type: 'update'; payload: Partial<State> }\n | { type: 'setActiveTabIndex'; payload: number }\n | { type: 'register'; payload: { type: TabType; id: string } }\n | { type: 'unregister'; payload: { type: TabType; id: string } };\n\nexport const reducer = (state: State, action: Action): State => {\n switch (action.type) {\n case 'update':\n return { ...state, ...action.payload };\n case 'setActiveTabIndex': {\n if (state.activeTabIndex === action.payload) {\n return state;\n }\n // Change active tab index.\n return { ...state, activeTabIndex: action.payload };\n }\n case 'register': {\n const { type, id } = action.payload;\n // Append tab/tabPanel id in state.\n return { ...state, ids: { ...state.ids, [type]: [...state.ids[type], id] } };\n }\n case 'unregister': {\n const { type, id } = action.payload;\n const index = state.ids[type].indexOf(id);\n if (index === -1) return state;\n // Remove tab & tab panel at index.\n const tabIds = [...state.ids.tab];\n tabIds.splice(index, 1);\n const tabPanelIds = [...state.ids.tabPanel];\n tabPanelIds.splice(index, 1);\n return {\n ...state,\n ids: { tab: tabIds, tabPanel: tabPanelIds },\n };\n }\n default:\n return state;\n }\n};\n\nexport const TabProviderContext = createContext<[State, Dispatch<Action>] | null>(null);\n\nexport type TabState = Pick<Required<State>, 'isLazy' | 'shouldActivateOnFocus'> & {\n isActive: boolean;\n tabId: string;\n tabPanelId: string;\n changeToTab(): void;\n};\n\n/* eslint-disable react-hooks/rules-of-hooks */\nexport const useTabProviderContext = (type: TabType, originalId?: string): undefined | TabState => {\n const context = useContext(TabProviderContext);\n if (!context) {\n return undefined;\n }\n const [state, dispatch] = context;\n\n // Current tab or tab panel id.\n const generatedId = useId();\n const id = originalId || generatedId;\n\n useEffect(\n () => {\n // On mount: register tab or tab panel id.\n dispatch({ type: 'register', payload: { type, id } });\n return () => {\n // On unmount: unregister tab or tab panel id.\n dispatch({ type: 'unregister', payload: { type, id } });\n };\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n\n // Find tab/tabPanel index using it's id.\n const index = useMemo(() => state.ids[type].indexOf(id), [state.ids, type, id]);\n const tabId = useMemo(() => state.ids.tab[index] || '', [state, index]);\n const tabPanelId = useMemo(() => state.ids.tabPanel[index] || '', [state, index]);\n const isActive = useMemo(() => state.activeTabIndex === index, [state, index]);\n const changeToTab = useCallback(() => dispatch({ type: 'setActiveTabIndex', payload: index }), [dispatch, index]);\n return {\n isLazy: state.isLazy,\n shouldActivateOnFocus: state.shouldActivateOnFocus,\n tabId,\n tabPanelId,\n isActive,\n changeToTab,\n };\n};\n\nexport const useTabProviderContextState = (): State | undefined => {\n const context = useContext(TabProviderContext);\n return context?.[0];\n};\n"],"names":["INIT_STATE","isLazy","shouldActivateOnFocus","activeTabIndex","ids","tab","tabPanel","reducer","state","action","type","payload","id","index","indexOf","tabIds","splice","tabPanelIds","TabProviderContext","createContext","useTabProviderContext","originalId","context","useContext","undefined","dispatch","generatedId","useId","useEffect","useMemo","tabId","tabPanelId","isActive","changeToTab","useCallback","useTabProviderContextState"],"mappings":"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"}
@@ -9,4 +9,4 @@ const useBooleanState = defaultValue => {
9
9
  };
10
10
 
11
11
  export { useBooleanState as u };
12
- //# sourceMappingURL=2a3d237c.js.map
12
+ //# sourceMappingURL=useBooleanState-2a3d237c.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useBooleanState-2a3d237c.js","sources":["../../src/hooks/useBooleanState.tsx"],"sourcesContent":["import { useCallback, useState } from 'react';\n\nexport const useBooleanState = (defaultValue: boolean): [boolean, () => void, () => void, () => void] => {\n const [booleanValue, setBoolean] = useState<boolean>(defaultValue);\n\n const setToFalse = useCallback(() => setBoolean(false), []);\n\n const setToTrue = useCallback(() => setBoolean(true), []);\n\n const toggleBoolean = useCallback(() => setBoolean((previousValue) => !previousValue), []);\n\n return [booleanValue, setToFalse, setToTrue, toggleBoolean];\n};\n"],"names":["useBooleanState","defaultValue","booleanValue","setBoolean","useState","setToFalse","useCallback","setToTrue","toggleBoolean","previousValue"],"mappings":";;AAEaA,MAAAA,eAAe,GAAIC,YAAqB,IAAoD;EACrG,MAAM,CAACC,YAAY,EAAEC,UAAU,CAAC,GAAGC,QAAQ,CAAUH,YAAY,CAAC,CAAA;EAElE,MAAMI,UAAU,GAAGC,WAAW,CAAC,MAAMH,UAAU,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAA;EAE3D,MAAMI,SAAS,GAAGD,WAAW,CAAC,MAAMH,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;AAEzD,EAAA,MAAMK,aAAa,GAAGF,WAAW,CAAC,MAAMH,UAAU,CAAEM,aAAa,IAAK,CAACA,aAAa,CAAC,EAAE,EAAE,CAAC,CAAA;EAE1F,OAAO,CAACP,YAAY,EAAEG,UAAU,EAAEE,SAAS,EAAEC,aAAa,CAAC,CAAA;AAC/D;;;;"}
@@ -1,5 +1,5 @@
1
- import { D as DOCUMENT } from './478b5c92.js';
2
- import { a as onEscapePressed } from './88ec77c2.js';
1
+ import { D as DOCUMENT } from './constants-d0e3f49e.js';
2
+ import { onEscapePressed } from '@lumx/core/js/utils';
3
3
  import { useEffect } from 'react';
4
4
  import last from 'lodash/last';
5
5
  import pull from 'lodash/pull';
@@ -59,4 +59,4 @@ function useCallbackOnEscape(callback, closeOnEscape = true) {
59
59
  }
60
60
 
61
61
  export { makeListenerTowerContext as m, useCallbackOnEscape as u };
62
- //# sourceMappingURL=d5f316cb.js.map
62
+ //# sourceMappingURL=useCallbackOnEscape-ea4d9eb4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCallbackOnEscape-ea4d9eb4.js","sources":["../../src/utils/function/makeListenerTowerContext.ts","../../src/hooks/useCallbackOnEscape.ts"],"sourcesContent":["import last from 'lodash/last';\nimport pull from 'lodash/pull';\n\nexport type Listener = { enable(): void; disable(): void };\n\n/**\n * Keep track of listeners, only the last registered listener gets activated at any point (previously registered\n * listener are disabled).\n * When a listener gets unregistered, the previously registered listener gets enabled again.\n */\nexport function makeListenerTowerContext() {\n const LISTENERS: Listener[] = [];\n\n return {\n register(listener: Listener) {\n // Disable previous listener.\n last(LISTENERS)?.disable();\n // Keep track of current listener.\n LISTENERS.push(listener);\n // Enable current listener.\n listener.enable();\n },\n unregister(listener: Listener) {\n // Disable current listener.\n listener.disable();\n // Remove current listener.\n pull(LISTENERS, listener);\n // Enable previous listener.\n last(LISTENERS)?.enable();\n },\n };\n}\n","import { DOCUMENT } from '@lumx/react/constants';\nimport { Callback } from '@lumx/react/utils/type';\nimport { onEscapePressed } from '@lumx/core/js/utils';\nimport { useEffect } from 'react';\nimport { Listener, makeListenerTowerContext } from '@lumx/react/utils/function/makeListenerTowerContext';\n\nconst LISTENERS = makeListenerTowerContext();\n\n/**\n * Register a global listener on 'Escape' key pressed.\n *\n * If multiple listener are registered, only the last one is maintained. When a listener is unregistered, the previous\n * one gets activated again.\n *\n * @param callback Callback\n * @param closeOnEscape Disables the hook when false\n */\nexport function useCallbackOnEscape(callback: Callback | undefined, closeOnEscape = true) {\n useEffect(() => {\n const rootElement = DOCUMENT?.body;\n if (!closeOnEscape || !callback || !rootElement) {\n return undefined;\n }\n const onKeyDown = onEscapePressed(callback);\n\n const listener: Listener = {\n enable: () => rootElement.addEventListener('keydown', onKeyDown),\n disable: () => rootElement.removeEventListener('keydown', onKeyDown),\n };\n\n LISTENERS.register(listener);\n return () => LISTENERS.unregister(listener);\n }, [callback, closeOnEscape]);\n}\n"],"names":["makeListenerTowerContext","LISTENERS","register","listener","last","disable","push","enable","unregister","pull","useCallbackOnEscape","callback","closeOnEscape","useEffect","rootElement","DOCUMENT","body","undefined","onKeyDown","onEscapePressed","addEventListener","removeEventListener"],"mappings":";;;;;;AAKA;AACA;AACA;AACA;AACA;AACO,SAASA,wBAAwBA,GAAG;EACvC,MAAMC,SAAqB,GAAG,EAAE,CAAA;EAEhC,OAAO;IACHC,QAAQA,CAACC,QAAkB,EAAE;AACzB;AACAC,MAAAA,IAAI,CAACH,SAAS,CAAC,EAAEI,OAAO,EAAE,CAAA;AAC1B;AACAJ,MAAAA,SAAS,CAACK,IAAI,CAACH,QAAQ,CAAC,CAAA;AACxB;MACAA,QAAQ,CAACI,MAAM,EAAE,CAAA;KACpB;IACDC,UAAUA,CAACL,QAAkB,EAAE;AAC3B;MACAA,QAAQ,CAACE,OAAO,EAAE,CAAA;AAClB;AACAI,MAAAA,IAAI,CAACR,SAAS,EAAEE,QAAQ,CAAC,CAAA;AACzB;AACAC,MAAAA,IAAI,CAACH,SAAS,CAAC,EAAEM,MAAM,EAAE,CAAA;AAC7B,KAAA;GACH,CAAA;AACL;;ACzBA,MAAMN,SAAS,GAAGD,wBAAwB,EAAE,CAAA;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASU,mBAAmBA,CAACC,QAA8B,EAAEC,aAAa,GAAG,IAAI,EAAE;AACtFC,EAAAA,SAAS,CAAC,MAAM;AACZ,IAAA,MAAMC,WAAW,GAAGC,QAAQ,EAAEC,IAAI,CAAA;IAClC,IAAI,CAACJ,aAAa,IAAI,CAACD,QAAQ,IAAI,CAACG,WAAW,EAAE;AAC7C,MAAA,OAAOG,SAAS,CAAA;AACpB,KAAA;AACA,IAAA,MAAMC,SAAS,GAAGC,eAAe,CAACR,QAAQ,CAAC,CAAA;AAE3C,IAAA,MAAMR,QAAkB,GAAG;MACvBI,MAAM,EAAEA,MAAMO,WAAW,CAACM,gBAAgB,CAAC,SAAS,EAAEF,SAAS,CAAC;MAChEb,OAAO,EAAEA,MAAMS,WAAW,CAACO,mBAAmB,CAAC,SAAS,EAAEH,SAAS,CAAA;KACtE,CAAA;AAEDjB,IAAAA,SAAS,CAACC,QAAQ,CAACC,QAAQ,CAAC,CAAA;AAC5B,IAAA,OAAO,MAAMF,SAAS,CAACO,UAAU,CAACL,QAAQ,CAAC,CAAA;AAC/C,GAAC,EAAE,CAACQ,QAAQ,EAAEC,aAAa,CAAC,CAAC,CAAA;AACjC;;;;"}
@@ -216,4 +216,4 @@ const useDisableBodyScroll = modalElement => {
216
216
  };
217
217
 
218
218
  export { useDisableBodyScroll as u };
219
- //# sourceMappingURL=36bd7352.js.map
219
+ //# sourceMappingURL=useDisableBodyScroll-36bd7352.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDisableBodyScroll-36bd7352.js","sources":["../../../../node_modules/body-scroll-lock/lib/bodyScrollLock.esm.js","../../src/hooks/useDisableBodyScroll.ts"],"sourcesContent":["function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\n// Older browsers don't support event options, feature detect it.\n\n// Adopted and modified solution from Bohdan Didukh (2017)\n// https://stackoverflow.com/questions/41594997/ios-10-safari-prevent-scrolling-behind-a-fixed-overlay-and-maintain-scroll-posi\n\nvar hasPassiveEvents = false;\nif (typeof window !== 'undefined') {\n var passiveTestOptions = {\n get passive() {\n hasPassiveEvents = true;\n return undefined;\n }\n };\n window.addEventListener('testPassive', null, passiveTestOptions);\n window.removeEventListener('testPassive', null, passiveTestOptions);\n}\n\nvar isIosDevice = typeof window !== 'undefined' && window.navigator && window.navigator.platform && (/iP(ad|hone|od)/.test(window.navigator.platform) || window.navigator.platform === 'MacIntel' && window.navigator.maxTouchPoints > 1);\n\n\nvar locks = [];\nvar documentListenerAdded = false;\nvar initialClientY = -1;\nvar previousBodyOverflowSetting = void 0;\nvar previousBodyPaddingRight = void 0;\n\n// returns true if `el` should be allowed to receive touchmove events.\nvar allowTouchMove = function allowTouchMove(el) {\n return locks.some(function (lock) {\n if (lock.options.allowTouchMove && lock.options.allowTouchMove(el)) {\n return true;\n }\n\n return false;\n });\n};\n\nvar preventDefault = function preventDefault(rawEvent) {\n var e = rawEvent || window.event;\n\n // For the case whereby consumers adds a touchmove event listener to document.\n // Recall that we do document.addEventListener('touchmove', preventDefault, { passive: false })\n // in disableBodyScroll - so if we provide this opportunity to allowTouchMove, then\n // the touchmove event on document will break.\n if (allowTouchMove(e.target)) {\n return true;\n }\n\n // Do not prevent if the event has more than one touch (usually meaning this is a multi touch gesture like pinch to zoom).\n if (e.touches.length > 1) return true;\n\n if (e.preventDefault) e.preventDefault();\n\n return false;\n};\n\nvar setOverflowHidden = function setOverflowHidden(options) {\n // If previousBodyPaddingRight is already set, don't set it again.\n if (previousBodyPaddingRight === undefined) {\n var _reserveScrollBarGap = !!options && options.reserveScrollBarGap === true;\n var scrollBarGap = window.innerWidth - document.documentElement.clientWidth;\n\n if (_reserveScrollBarGap && scrollBarGap > 0) {\n previousBodyPaddingRight = document.body.style.paddingRight;\n document.body.style.paddingRight = scrollBarGap + 'px';\n }\n }\n\n // If previousBodyOverflowSetting is already set, don't set it again.\n if (previousBodyOverflowSetting === undefined) {\n previousBodyOverflowSetting = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n }\n};\n\nvar restoreOverflowSetting = function restoreOverflowSetting() {\n if (previousBodyPaddingRight !== undefined) {\n document.body.style.paddingRight = previousBodyPaddingRight;\n\n // Restore previousBodyPaddingRight to undefined so setOverflowHidden knows it\n // can be set again.\n previousBodyPaddingRight = undefined;\n }\n\n if (previousBodyOverflowSetting !== undefined) {\n document.body.style.overflow = previousBodyOverflowSetting;\n\n // Restore previousBodyOverflowSetting to undefined\n // so setOverflowHidden knows it can be set again.\n previousBodyOverflowSetting = undefined;\n }\n};\n\n// https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight#Problems_and_solutions\nvar isTargetElementTotallyScrolled = function isTargetElementTotallyScrolled(targetElement) {\n return targetElement ? targetElement.scrollHeight - targetElement.scrollTop <= targetElement.clientHeight : false;\n};\n\nvar handleScroll = function handleScroll(event, targetElement) {\n var clientY = event.targetTouches[0].clientY - initialClientY;\n\n if (allowTouchMove(event.target)) {\n return false;\n }\n\n if (targetElement && targetElement.scrollTop === 0 && clientY > 0) {\n // element is at the top of its scroll.\n return preventDefault(event);\n }\n\n if (isTargetElementTotallyScrolled(targetElement) && clientY < 0) {\n // element is at the bottom of its scroll.\n return preventDefault(event);\n }\n\n event.stopPropagation();\n return true;\n};\n\nexport var disableBodyScroll = function disableBodyScroll(targetElement, options) {\n // targetElement must be provided\n if (!targetElement) {\n // eslint-disable-next-line no-console\n console.error('disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.');\n return;\n }\n\n // disableBodyScroll must not have been called on this targetElement before\n if (locks.some(function (lock) {\n return lock.targetElement === targetElement;\n })) {\n return;\n }\n\n var lock = {\n targetElement: targetElement,\n options: options || {}\n };\n\n locks = [].concat(_toConsumableArray(locks), [lock]);\n\n if (isIosDevice) {\n targetElement.ontouchstart = function (event) {\n if (event.targetTouches.length === 1) {\n // detect single touch.\n initialClientY = event.targetTouches[0].clientY;\n }\n };\n targetElement.ontouchmove = function (event) {\n if (event.targetTouches.length === 1) {\n // detect single touch.\n handleScroll(event, targetElement);\n }\n };\n\n if (!documentListenerAdded) {\n document.addEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined);\n documentListenerAdded = true;\n }\n } else {\n setOverflowHidden(options);\n }\n};\n\nexport var clearAllBodyScrollLocks = function clearAllBodyScrollLocks() {\n if (isIosDevice) {\n // Clear all locks ontouchstart/ontouchmove handlers, and the references.\n locks.forEach(function (lock) {\n lock.targetElement.ontouchstart = null;\n lock.targetElement.ontouchmove = null;\n });\n\n if (documentListenerAdded) {\n document.removeEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined);\n documentListenerAdded = false;\n }\n\n // Reset initial clientY.\n initialClientY = -1;\n } else {\n restoreOverflowSetting();\n }\n\n locks = [];\n};\n\nexport var enableBodyScroll = function enableBodyScroll(targetElement) {\n if (!targetElement) {\n // eslint-disable-next-line no-console\n console.error('enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices.');\n return;\n }\n\n locks = locks.filter(function (lock) {\n return lock.targetElement !== targetElement;\n });\n\n if (isIosDevice) {\n targetElement.ontouchstart = null;\n targetElement.ontouchmove = null;\n\n if (documentListenerAdded && locks.length === 0) {\n document.removeEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined);\n documentListenerAdded = false;\n }\n } else if (!locks.length) {\n restoreOverflowSetting();\n }\n};\n\n","import { useEffect } from 'react';\nimport { disableBodyScroll, enableBodyScroll } from 'body-scroll-lock';\nimport { Falsy } from '@lumx/react/utils/type';\n\n/**\n * Disables the scroll on the body to make it only usable in the current modal element.\n * When the modal element is not provided anymore, the scroll is restored.\n *\n * @param modalElement The modal element.\n */\nexport const useDisableBodyScroll = (modalElement: Element | Falsy): void => {\n useEffect(() => {\n if (!modalElement) {\n return undefined;\n }\n // Fixing the document overflow style to prevent a bug that scrolls the window to the top.\n const previousDocumentOverflow = document.documentElement.style.overflow;\n document.documentElement.style.overflow = 'visible';\n disableBodyScroll(modalElement);\n return () => {\n enableBodyScroll(modalElement);\n // Restore the previous overflow style.\n requestAnimationFrame(() => {\n document.documentElement.style.overflow = previousDocumentOverflow;\n });\n };\n }, [modalElement]);\n};\n"],"names":["useDisableBodyScroll","modalElement","useEffect","undefined","previousDocumentOverflow","document","documentElement","style","overflow","disableBodyScroll","enableBodyScroll","requestAnimationFrame"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1,4 +1,4 @@
1
- import { u as useDisabledStateContext } from './ea04260d.js';
1
+ import { u as useDisabledStateContext } from './DisabledStateContext-077b7bef.js';
2
2
 
3
3
  /**
4
4
  * Resolve disabled state from props.
@@ -33,4 +33,4 @@ function useDisableStateProps(props) {
33
33
  }
34
34
 
35
35
  export { useDisableStateProps as u };
36
- //# sourceMappingURL=b8667090.js.map
36
+ //# sourceMappingURL=useDisableStateProps-fffc365f.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDisableStateProps-fffc365f.js","sources":["../../src/utils/disabled/useDisableStateProps.tsx"],"sourcesContent":["import { useDisabledStateContext } from './DisabledStateContext';\n\ntype GenericProps = {\n disabled?: boolean;\n isDisabled?: boolean;\n 'aria-disabled'?: boolean | 'true' | 'false';\n onClick?: any;\n onChange?: any;\n};\n\ninterface Output<TProps extends GenericProps> {\n /** Is disabled or aria-disabled */\n isAnyDisabled?: boolean;\n disabledStateProps: { disabled?: boolean; 'aria-disabled'?: boolean };\n otherProps: TProps & { disabled: never; 'aria-disabled': never; isDisabled: never };\n}\n\n/**\n * Resolve disabled state from props.\n * (handles `disabled`, `isDisabled` and `aria-disabled`)\n *\n * @params component props\n */\nexport function useDisableStateProps<TProps extends GenericProps>(props: TProps): Output<TProps> {\n const { disabled, isDisabled = disabled, 'aria-disabled': ariaDisabled, onClick, onChange, ...otherProps } = props;\n const disabledStateContext = useDisabledStateContext();\n const disabledStateProps = {\n disabled: disabledStateContext?.state === 'disabled' || isDisabled,\n 'aria-disabled': ariaDisabled === true || ariaDisabled === 'true',\n };\n const isAnyDisabled = disabledStateProps['aria-disabled'] || disabledStateProps.disabled;\n if (!isAnyDisabled) {\n (otherProps as any).onClick = onClick;\n (otherProps as any).onChange = onChange;\n }\n return { disabledStateProps, otherProps: otherProps as Output<TProps>['otherProps'], isAnyDisabled };\n}\n"],"names":["useDisableStateProps","props","disabled","isDisabled","ariaDisabled","onClick","onChange","otherProps","disabledStateContext","useDisabledStateContext","disabledStateProps","state","isAnyDisabled"],"mappings":";;AAiBA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,oBAAoBA,CAA8BC,KAAa,EAAkB;EAC7F,MAAM;IAAEC,QAAQ;AAAEC,IAAAA,UAAU,GAAGD,QAAQ;AAAE,IAAA,eAAe,EAAEE,YAAY;IAAEC,OAAO;IAAEC,QAAQ;IAAE,GAAGC,UAAAA;AAAW,GAAC,GAAGN,KAAK,CAAA;AAClH,EAAA,MAAMO,oBAAoB,GAAGC,uBAAuB,EAAE,CAAA;AACtD,EAAA,MAAMC,kBAAkB,GAAG;AACvBR,IAAAA,QAAQ,EAAEM,oBAAoB,EAAEG,KAAK,KAAK,UAAU,IAAIR,UAAU;AAClE,IAAA,eAAe,EAAEC,YAAY,KAAK,IAAI,IAAIA,YAAY,KAAK,MAAA;GAC9D,CAAA;EACD,MAAMQ,aAAa,GAAGF,kBAAkB,CAAC,eAAe,CAAC,IAAIA,kBAAkB,CAACR,QAAQ,CAAA;EACxF,IAAI,CAACU,aAAa,EAAE;IACfL,UAAU,CAASF,OAAO,GAAGA,OAAO,CAAA;IACpCE,UAAU,CAASD,QAAQ,GAAGA,QAAQ,CAAA;AAC3C,GAAA;EACA,OAAO;IAAEI,kBAAkB;AAAEH,IAAAA,UAAU,EAAEA,UAA0C;AAAEK,IAAAA,aAAAA;GAAe,CAAA;AACxG;;;;"}
@@ -1,7 +1,7 @@
1
1
  import { useEffect } from 'react';
2
- import { D as DOCUMENT } from './478b5c92.js';
3
- import { g as getFocusableElements } from './230173a8.js';
4
- import { m as makeListenerTowerContext } from './d5f316cb.js';
2
+ import { D as DOCUMENT } from './constants-d0e3f49e.js';
3
+ import { g as getFocusableElements } from './getFocusableElements-230173a8.js';
4
+ import { m as makeListenerTowerContext } from './useCallbackOnEscape-ea4d9eb4.js';
5
5
 
6
6
  /**
7
7
  * Get first and last elements focusable in an element.
@@ -109,4 +109,4 @@ function useFocusTrap(focusZoneElement, focusElement) {
109
109
  }
110
110
 
111
111
  export { getFirstAndLastFocusable as g, useFocusTrap as u };
112
- //# sourceMappingURL=5fe09341.js.map
112
+ //# sourceMappingURL=useFocusTrap-c3c6378b.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFocusTrap-c3c6378b.js","sources":["../../src/utils/browser/focus/getFirstAndLastFocusable.ts","../../src/hooks/useFocusTrap.ts"],"sourcesContent":["import { getFocusableElements } from './getFocusableElements';\n\n/**\n * Get first and last elements focusable in an element.\n *\n * @param parentElement The element in which to search focusable elements.\n * @return first and last focusable elements\n */\nexport function getFirstAndLastFocusable(parentElement: HTMLElement | ShadowRoot) {\n const focusableElements = getFocusableElements(parentElement);\n\n // First non disabled element.\n const first = focusableElements[0];\n // Last non disabled element.\n const last = focusableElements[focusableElements.length - 1];\n\n if (last && first) {\n return { first, last };\n }\n return {};\n}\n","import { useEffect } from 'react';\n\nimport { DOCUMENT } from '@lumx/react/constants';\nimport { getFirstAndLastFocusable } from '@lumx/react/utils/browser/focus/getFirstAndLastFocusable';\nimport { Falsy } from '@lumx/react/utils/type';\nimport { Listener, makeListenerTowerContext } from '@lumx/react/utils/function/makeListenerTowerContext';\n\nconst FOCUS_TRAPS = makeListenerTowerContext();\n\n/**\n * Trap 'Tab' focus switch inside the `focusZoneElement`.\n *\n * If multiple focus trap are activated, only the last one is maintained and when a focus trap closes, the previous one\n * gets activated again.\n *\n * @param focusZoneElement The element in which to trap the focus.\n * @param focusElement The element to focus when the focus trap is activated (otherwise the first focusable element\n * will be focused).\n */\nexport function useFocusTrap(focusZoneElement: HTMLElement | Falsy, focusElement?: HTMLElement | null): void {\n useEffect(() => {\n // Body element can be undefined in SSR context.\n const rootElement = DOCUMENT?.body;\n\n if (!rootElement || !focusZoneElement) {\n return undefined;\n }\n\n // Use the shadow root as focusZoneElement when available\n const focusZoneElementOrShadowRoot = focusZoneElement.shadowRoot || focusZoneElement;\n\n // Trap 'Tab' key down focus switch into the focus zone.\n const trapTabFocusInFocusZone = (evt: KeyboardEvent) => {\n const { key } = evt;\n if (key !== 'Tab') {\n return;\n }\n\n const focusable = getFirstAndLastFocusable(focusZoneElementOrShadowRoot);\n\n // Prevent focus switch if no focusable available.\n if (!focusable.first) {\n evt.preventDefault();\n return;\n }\n\n const activeElement = focusZoneElement.shadowRoot\n ? focusZoneElement.shadowRoot.activeElement\n : document.activeElement;\n\n if (\n // No previous focus\n !activeElement ||\n // Previous focus is at the end of the focus zone.\n (!evt.shiftKey && activeElement === focusable.last) ||\n // Previous focus is outside the focus zone\n !focusZoneElementOrShadowRoot.contains(activeElement)\n ) {\n focusable.first.focus();\n evt.preventDefault();\n return;\n }\n\n if (\n // Focus order reversed\n evt.shiftKey &&\n // Previous focus is at the start of the focus zone.\n activeElement === focusable.first\n ) {\n focusable.last.focus();\n evt.preventDefault();\n }\n };\n\n const focusTrap: Listener = {\n enable: () => rootElement.addEventListener('keydown', trapTabFocusInFocusZone),\n disable: () => rootElement.removeEventListener('keydown', trapTabFocusInFocusZone),\n };\n\n // SETUP:\n if (focusElement && focusZoneElementOrShadowRoot.contains(focusElement)) {\n // Focus the given element.\n focusElement.focus({ preventScroll: true });\n } else {\n // Focus the first focusable element in the zone.\n getFirstAndLastFocusable(focusZoneElementOrShadowRoot).first?.focus({ preventScroll: true });\n }\n FOCUS_TRAPS.register(focusTrap);\n\n // TEARDOWN:\n return () => FOCUS_TRAPS.unregister(focusTrap);\n }, [focusElement, focusZoneElement]);\n}\n"],"names":["getFirstAndLastFocusable","parentElement","focusableElements","getFocusableElements","first","last","length","FOCUS_TRAPS","makeListenerTowerContext","useFocusTrap","focusZoneElement","focusElement","useEffect","rootElement","DOCUMENT","body","undefined","focusZoneElementOrShadowRoot","shadowRoot","trapTabFocusInFocusZone","evt","key","focusable","preventDefault","activeElement","document","shiftKey","contains","focus","focusTrap","enable","addEventListener","disable","removeEventListener","preventScroll","register","unregister"],"mappings":"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"}
@@ -15,4 +15,4 @@ function useId() {
15
15
  }
16
16
 
17
17
  export { useId as u };
18
- //# sourceMappingURL=3a1facc0.js.map
18
+ //# sourceMappingURL=useId-3a1facc0.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useId-3a1facc0.js","sources":["../../src/hooks/useId.ts"],"sourcesContent":["import React from 'react';\n\nlet i = 0;\n\n/**\n * Generate a unique id (for use in a11y or other id based DOM linking).\n *\n * (Tries to emulate React 18 useId hook, to remove once we upgrade React)\n */\nexport function useId() {\n return React.useMemo(() => {\n i += 1;\n return `:lumx${i}:`;\n }, []);\n}\n"],"names":["i","useId","React","useMemo"],"mappings":";;AAEA,IAAIA,CAAC,GAAG,CAAC,CAAA;;AAET;AACA;AACA;AACA;AACA;AACO,SAASC,KAAKA,GAAG;AACpB,EAAA,OAAOC,cAAK,CAACC,OAAO,CAAC,MAAM;AACvBH,IAAAA,CAAC,IAAI,CAAC,CAAA;IACN,OAAO,CAAA,KAAA,EAAQA,CAAC,CAAG,CAAA,CAAA,CAAA;GACtB,EAAE,EAAE,CAAC,CAAA;AACV;;;;"}
@@ -74,4 +74,4 @@ const useRovingTabIndex = ({
74
74
  };
75
75
 
76
76
  export { useRovingTabIndex as u };
77
- //# sourceMappingURL=7daf0f24.js.map
77
+ //# sourceMappingURL=useRovingTabIndex-7daf0f24.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRovingTabIndex-7daf0f24.js","sources":["../../src/hooks/useRovingTabIndex.tsx"],"sourcesContent":["import { RefObject, useEffect } from 'react';\n\ninterface UseRovingTabIndexOptions {\n parentRef: RefObject<HTMLElement>;\n elementSelector: string;\n keepTabIndex?: boolean;\n /** Action to trigger when an element is focused using roving tab index */\n onElementFocus?: (element: HTMLElement) => void;\n /** List of values to be used as extra dependencies of the useEffect */\n extraDependencies?: any[];\n}\n\nexport const useRovingTabIndex = ({\n parentRef,\n elementSelector,\n keepTabIndex,\n onElementFocus,\n extraDependencies = [],\n}: UseRovingTabIndexOptions): void => {\n useEffect(\n () => {\n const parent = parentRef?.current;\n if (!parent) {\n return undefined;\n }\n\n const elements = parent.querySelectorAll(elementSelector) as NodeListOf<HTMLElement>;\n const initialFocusableElement = parent?.querySelector(`${elementSelector}[tabindex=\"0\"]`);\n\n const handleKeyDown = (index: number) => (evt: KeyboardEvent) => {\n let newTabFocus = index;\n if (!(evt.key === 'ArrowRight' || evt.key === 'ArrowLeft')) {\n return;\n }\n\n if (evt.key === 'ArrowRight') {\n // Move right\n newTabFocus += 1;\n // If we're at the end, go to the start\n if (newTabFocus >= elements.length) {\n newTabFocus = 0;\n }\n } else if (evt.key === 'ArrowLeft') {\n // Move left\n newTabFocus -= 1;\n if (newTabFocus < 0) {\n // If we're at the start, move to the end\n newTabFocus = elements.length - 1;\n }\n }\n const newElement = elements[newTabFocus];\n newElement?.focus();\n\n // When an element is focused using roving tab index, trigger the onElementFocus callback\n if (newElement && onElementFocus) {\n onElementFocus(newElement);\n }\n\n if (keepTabIndex) {\n (evt.currentTarget as HTMLElement).setAttribute('tabindex', '-1');\n newElement?.setAttribute('tabindex', '0');\n }\n };\n\n if (elements?.length > 0) {\n elements.forEach((el, key) => {\n // if no element has tabindex set to 0, set the first element as focusable\n if (!initialFocusableElement && key === 0) {\n el.setAttribute('tabindex', '0');\n // set all other to -1\n } else if (initialFocusableElement !== el) {\n el.setAttribute('tabindex', '-1');\n }\n // add event listener\n el.addEventListener('keydown', handleKeyDown(key) as EventListener);\n });\n }\n\n // Cleanup listeners\n return () => {\n if (elements?.length > 0) {\n elements.forEach((el, key) => {\n el.removeEventListener('keydown', handleKeyDown(key) as EventListener);\n });\n }\n };\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [parentRef, ...extraDependencies],\n );\n};\n"],"names":["useRovingTabIndex","parentRef","elementSelector","keepTabIndex","onElementFocus","extraDependencies","useEffect","parent","current","undefined","elements","querySelectorAll","initialFocusableElement","querySelector","handleKeyDown","index","evt","newTabFocus","key","length","newElement","focus","currentTarget","setAttribute","forEach","el","addEventListener","removeEventListener"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { useState, useRef, useEffect } from 'react';
2
- import { W as WINDOW } from './478b5c92.js';
2
+ import { W as WINDOW } from './constants-d0e3f49e.js';
3
3
 
4
4
  /** Check if user prefers reduced motion */
5
5
  function isReducedMotion() {
@@ -47,4 +47,4 @@ const useTransitionVisibility = (ref, isComponentVisible, timeout, onVisibilityC
47
47
  };
48
48
 
49
49
  export { isReducedMotion as i, useTransitionVisibility as u };
50
- //# sourceMappingURL=e6dd117e.js.map
50
+ //# sourceMappingURL=useTransitionVisibility-321fdbfa.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTransitionVisibility-321fdbfa.js","sources":["../../src/utils/browser/isReducedMotion.ts","../../src/hooks/useTransitionVisibility.ts"],"sourcesContent":["import { WINDOW } from '@lumx/react/constants';\n\n/** Check if user prefers reduced motion */\nexport function isReducedMotion() {\n return WINDOW?.matchMedia?.('(prefers-reduced-motion: reduce)').matches;\n}\n","import { RefObject, useEffect, useRef, useState } from 'react';\nimport { isReducedMotion } from '@lumx/react/utils/browser/isReducedMotion';\n\n/**\n * Returns true if the component is visible tracking the opacity transition.\n *\n * @param ref Element on which to listen the transition event.\n * @param isComponentVisible Whether the component intends to be visible or not.\n * @param onVisibilityChange Callback called when the visibility changes.\n * @return true if the component should be rendered\n */\nexport const useTransitionVisibility = (\n ref: RefObject<HTMLElement>,\n isComponentVisible: boolean,\n timeout: number,\n onVisibilityChange?: (isVisible: boolean) => void,\n) => {\n const [isVisible, setVisible] = useState(isComponentVisible);\n const previousVisibility = useRef(isVisible);\n\n // On component visibility change.\n useEffect(() => {\n if (isComponentVisible) {\n setVisible(true);\n return undefined;\n }\n const { current: element } = ref;\n\n // Transition event is not supported or the user prefers reduced motion.\n // => Skip and set visibility to false directly.\n if (!element || !window.TransitionEvent || isReducedMotion()) {\n setVisible(false);\n return undefined;\n }\n\n const timer = setTimeout(() => setVisible(false), timeout);\n return () => clearTimeout(timer);\n }, [isComponentVisible, ref, timeout]);\n\n useEffect(() => {\n if (onVisibilityChange && previousVisibility.current !== isVisible) {\n onVisibilityChange(isVisible);\n previousVisibility.current = isVisible;\n }\n }, [isVisible, onVisibilityChange]);\n\n return isVisible || isComponentVisible;\n};\n"],"names":["isReducedMotion","WINDOW","matchMedia","matches","useTransitionVisibility","ref","isComponentVisible","timeout","onVisibilityChange","isVisible","setVisible","useState","previousVisibility","useRef","useEffect","undefined","current","element","window","TransitionEvent","timer","setTimeout","clearTimeout"],"mappings":";;;AAEA;AACO,SAASA,eAAeA,GAAG;AAC9B,EAAA,OAAOC,MAAM,EAAEC,UAAU,GAAG,kCAAkC,CAAC,CAACC,OAAO,CAAA;AAC3E;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,uBAAuB,GAAGA,CACnCC,GAA2B,EAC3BC,kBAA2B,EAC3BC,OAAe,EACfC,kBAAiD,KAChD;EACD,MAAM,CAACC,SAAS,EAAEC,UAAU,CAAC,GAAGC,QAAQ,CAACL,kBAAkB,CAAC,CAAA;AAC5D,EAAA,MAAMM,kBAAkB,GAAGC,MAAM,CAACJ,SAAS,CAAC,CAAA;;AAE5C;AACAK,EAAAA,SAAS,CAAC,MAAM;AACZ,IAAA,IAAIR,kBAAkB,EAAE;MACpBI,UAAU,CAAC,IAAI,CAAC,CAAA;AAChB,MAAA,OAAOK,SAAS,CAAA;AACpB,KAAA;IACA,MAAM;AAAEC,MAAAA,OAAO,EAAEC,OAAAA;AAAQ,KAAC,GAAGZ,GAAG,CAAA;;AAEhC;AACA;IACA,IAAI,CAACY,OAAO,IAAI,CAACC,MAAM,CAACC,eAAe,IAAInB,eAAe,EAAE,EAAE;MAC1DU,UAAU,CAAC,KAAK,CAAC,CAAA;AACjB,MAAA,OAAOK,SAAS,CAAA;AACpB,KAAA;IAEA,MAAMK,KAAK,GAAGC,UAAU,CAAC,MAAMX,UAAU,CAAC,KAAK,CAAC,EAAEH,OAAO,CAAC,CAAA;AAC1D,IAAA,OAAO,MAAMe,YAAY,CAACF,KAAK,CAAC,CAAA;GACnC,EAAE,CAACd,kBAAkB,EAAED,GAAG,EAAEE,OAAO,CAAC,CAAC,CAAA;AAEtCO,EAAAA,SAAS,CAAC,MAAM;AACZ,IAAA,IAAIN,kBAAkB,IAAII,kBAAkB,CAACI,OAAO,KAAKP,SAAS,EAAE;MAChED,kBAAkB,CAACC,SAAS,CAAC,CAAA;MAC7BG,kBAAkB,CAACI,OAAO,GAAGP,SAAS,CAAA;AAC1C,KAAA;AACJ,GAAC,EAAE,CAACA,SAAS,EAAED,kBAAkB,CAAC,CAAC,CAAA;EAEnC,OAAOC,SAAS,IAAIH,kBAAkB,CAAA;AAC1C;;;;"}