@lumx/react 3.20.1-alpha.27 → 3.20.1-alpha.29

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 (197) hide show
  1. package/index.js +14033 -63
  2. package/index.js.map +1 -1
  3. package/package.json +7 -13
  4. package/utils/index.js +158 -3
  5. package/utils/index.js.map +1 -1
  6. package/_internal/Button-2b55a913.js +0 -97
  7. package/_internal/Button-2b55a913.js.map +0 -1
  8. package/_internal/ButtonRoot-823f3e9c.js +0 -117
  9. package/_internal/ButtonRoot-823f3e9c.js.map +0 -1
  10. package/_internal/Chip-e1e85810.js +0 -143
  11. package/_internal/Chip-e1e85810.js.map +0 -1
  12. package/_internal/ClickAwayProvider-1204f237.js +0 -95
  13. package/_internal/ClickAwayProvider-1204f237.js.map +0 -1
  14. package/_internal/DisabledStateContext-ea04260d.js +0 -29
  15. package/_internal/DisabledStateContext-ea04260d.js.map +0 -1
  16. package/_internal/HeadingLevelProvider-ebdcb0c7.js +0 -61
  17. package/_internal/HeadingLevelProvider-ebdcb0c7.js.map +0 -1
  18. package/_internal/IconButton-be160cb0.js +0 -77
  19. package/_internal/IconButton-be160cb0.js.map +0 -1
  20. package/_internal/ImageCaption-fcf5720c.js +0 -75
  21. package/_internal/ImageCaption-fcf5720c.js.map +0 -1
  22. package/_internal/List-dbf4297f.js +0 -791
  23. package/_internal/List-dbf4297f.js.map +0 -1
  24. package/_internal/PopoverDialog-193a0918.js +0 -655
  25. package/_internal/PopoverDialog-193a0918.js.map +0 -1
  26. package/_internal/Portal-3f86608e.js +0 -45
  27. package/_internal/Portal-3f86608e.js.map +0 -1
  28. package/_internal/RawClickable-2c2b6a89.js +0 -52
  29. package/_internal/RawClickable-2c2b6a89.js.map +0 -1
  30. package/_internal/Slides-2d267d8c.js +0 -679
  31. package/_internal/Slides-2d267d8c.js.map +0 -1
  32. package/_internal/ThemeContext-3181f000.js +0 -14
  33. package/_internal/ThemeContext-3181f000.js.map +0 -1
  34. package/_internal/Thumbnail-0872250e.js +0 -314
  35. package/_internal/Thumbnail-0872250e.js.map +0 -1
  36. package/_internal/check-circle-de24f857.js +0 -4
  37. package/_internal/check-circle-de24f857.js.map +0 -1
  38. package/_internal/chevron-right-827b804a.js +0 -6
  39. package/_internal/chevron-right-827b804a.js.map +0 -1
  40. package/_internal/chevron-up-0b9c76cb.js +0 -6
  41. package/_internal/chevron-up-0b9c76cb.js.map +0 -1
  42. package/_internal/close-circle-ef5d1aac.js +0 -4
  43. package/_internal/close-circle-ef5d1aac.js.map +0 -1
  44. package/_internal/close-eaf6c45a.js +0 -4
  45. package/_internal/close-eaf6c45a.js.map +0 -1
  46. package/_internal/components/alert-dialog-a6ed922b.js +0 -163
  47. package/_internal/components/alert-dialog-a6ed922b.js.map +0 -1
  48. package/_internal/components/autocomplete-c97b7698.js +0 -261
  49. package/_internal/components/autocomplete-c97b7698.js.map +0 -1
  50. package/_internal/components/avatar-d2214a61.js +0 -83
  51. package/_internal/components/avatar-d2214a61.js.map +0 -1
  52. package/_internal/components/badge-8390e590.js +0 -81
  53. package/_internal/components/badge-8390e590.js.map +0 -1
  54. package/_internal/components/button-b05f8f0c.js +0 -47
  55. package/_internal/components/button-b05f8f0c.js.map +0 -1
  56. package/_internal/components/checkbox-346834f8.js +0 -143
  57. package/_internal/components/checkbox-346834f8.js.map +0 -1
  58. package/_internal/components/chip-e3a6330f.js +0 -102
  59. package/_internal/components/chip-e3a6330f.js.map +0 -1
  60. package/_internal/components/comment-block-b1acc69f.js +0 -138
  61. package/_internal/components/comment-block-b1acc69f.js.map +0 -1
  62. package/_internal/components/date-picker-582c4925.js +0 -2
  63. package/_internal/components/date-picker-582c4925.js.map +0 -1
  64. package/_internal/components/dialog-785646aa.js +0 -238
  65. package/_internal/components/dialog-785646aa.js.map +0 -1
  66. package/_internal/components/divider-116af6b9.js +0 -50
  67. package/_internal/components/divider-116af6b9.js.map +0 -1
  68. package/_internal/components/drag-handle-6b073866.js +0 -52
  69. package/_internal/components/drag-handle-6b073866.js.map +0 -1
  70. package/_internal/components/dropdown-c0c0cfe8.js +0 -147
  71. package/_internal/components/dropdown-c0c0cfe8.js.map +0 -1
  72. package/_internal/components/expansion-panel-1de1d1ff.js +0 -167
  73. package/_internal/components/expansion-panel-1de1d1ff.js.map +0 -1
  74. package/_internal/components/flag-7c9d3abf.js +0 -59
  75. package/_internal/components/flag-7c9d3abf.js.map +0 -1
  76. package/_internal/components/flex-box-10423fa5.js +0 -56
  77. package/_internal/components/flex-box-10423fa5.js.map +0 -1
  78. package/_internal/components/generic-block-b79f163a.js +0 -128
  79. package/_internal/components/generic-block-b79f163a.js.map +0 -1
  80. package/_internal/components/grid-6f1b5a41.js +0 -104
  81. package/_internal/components/grid-6f1b5a41.js.map +0 -1
  82. package/_internal/components/grid-column-ee504283.js +0 -58
  83. package/_internal/components/grid-column-ee504283.js.map +0 -1
  84. package/_internal/components/heading-d4c66a34.js +0 -53
  85. package/_internal/components/heading-d4c66a34.js.map +0 -1
  86. package/_internal/components/icon-7c79ab42.js +0 -2
  87. package/_internal/components/icon-7c79ab42.js.map +0 -1
  88. package/_internal/components/image-block-762eb669.js +0 -110
  89. package/_internal/components/image-block-762eb669.js.map +0 -1
  90. package/_internal/components/image-lightbox-10fef304.js +0 -759
  91. package/_internal/components/image-lightbox-10fef304.js.map +0 -1
  92. package/_internal/components/inline-list-e6f19a98.js +0 -74
  93. package/_internal/components/inline-list-e6f19a98.js.map +0 -1
  94. package/_internal/components/input-helper-64153099.js +0 -71
  95. package/_internal/components/input-helper-64153099.js.map +0 -1
  96. package/_internal/components/input-label-2feb0bb0.js +0 -59
  97. package/_internal/components/input-label-2feb0bb0.js.map +0 -1
  98. package/_internal/components/lightbox-dcc9a7a0.js +0 -155
  99. package/_internal/components/lightbox-dcc9a7a0.js.map +0 -1
  100. package/_internal/components/link-f9421eab.js +0 -72
  101. package/_internal/components/link-f9421eab.js.map +0 -1
  102. package/_internal/components/link-preview-5c7e3878.js +0 -117
  103. package/_internal/components/link-preview-5c7e3878.js.map +0 -1
  104. package/_internal/components/list-f29e54b7.js +0 -71
  105. package/_internal/components/list-f29e54b7.js.map +0 -1
  106. package/_internal/components/message-aa3e3f76.js +0 -98
  107. package/_internal/components/message-aa3e3f76.js.map +0 -1
  108. package/_internal/components/mosaic-b4b35fa7.js +0 -94
  109. package/_internal/components/mosaic-b4b35fa7.js.map +0 -1
  110. package/_internal/components/navigation-8357dbe6.js +0 -225
  111. package/_internal/components/navigation-8357dbe6.js.map +0 -1
  112. package/_internal/components/notification-ec4cf95f.js +0 -143
  113. package/_internal/components/notification-ec4cf95f.js.map +0 -1
  114. package/_internal/components/popover-a674dd8d.js +0 -3
  115. package/_internal/components/popover-a674dd8d.js.map +0 -1
  116. package/_internal/components/post-block-bb3d3cbf.js +0 -109
  117. package/_internal/components/post-block-bb3d3cbf.js.map +0 -1
  118. package/_internal/components/progress-f39c3fa2.js +0 -182
  119. package/_internal/components/progress-f39c3fa2.js.map +0 -1
  120. package/_internal/components/progress-tracker-997931ac.js +0 -309
  121. package/_internal/components/progress-tracker-997931ac.js.map +0 -1
  122. package/_internal/components/radio-button-559a4863.js +0 -149
  123. package/_internal/components/radio-button-559a4863.js.map +0 -1
  124. package/_internal/components/select-8295a416.js +0 -457
  125. package/_internal/components/select-8295a416.js.map +0 -1
  126. package/_internal/components/side-navigation-40ee8bda.js +0 -164
  127. package/_internal/components/side-navigation-40ee8bda.js.map +0 -1
  128. package/_internal/components/skeleton-c66516ee.js +0 -166
  129. package/_internal/components/skeleton-c66516ee.js.map +0 -1
  130. package/_internal/components/slider-efbfbc45.js +0 -311
  131. package/_internal/components/slider-efbfbc45.js.map +0 -1
  132. package/_internal/components/slideshow-c5faf531.js +0 -151
  133. package/_internal/components/slideshow-c5faf531.js.map +0 -1
  134. package/_internal/components/switch-a26a5a72.js +0 -121
  135. package/_internal/components/switch-a26a5a72.js.map +0 -1
  136. package/_internal/components/table-c43ec4a5.js +0 -297
  137. package/_internal/components/table-c43ec4a5.js.map +0 -1
  138. package/_internal/components/tabs-4037fe57.js +0 -298
  139. package/_internal/components/tabs-4037fe57.js.map +0 -1
  140. package/_internal/components/text-851c62f8.js +0 -2
  141. package/_internal/components/text-851c62f8.js.map +0 -1
  142. package/_internal/components/text-field-82adaeb4.js +0 -359
  143. package/_internal/components/text-field-82adaeb4.js.map +0 -1
  144. package/_internal/components/thumbnail-f1784929.js +0 -42
  145. package/_internal/components/thumbnail-f1784929.js.map +0 -1
  146. package/_internal/components/toolbar-a43533a2.js +0 -61
  147. package/_internal/components/toolbar-a43533a2.js.map +0 -1
  148. package/_internal/components/tooltip-aa48ddda.js +0 -327
  149. package/_internal/components/tooltip-aa48ddda.js.map +0 -1
  150. package/_internal/components/uploader-7bc3adaa.js +0 -153
  151. package/_internal/components/uploader-7bc3adaa.js.map +0 -1
  152. package/_internal/components/user-block-fc03f01a.js +0 -144
  153. package/_internal/components/user-block-fc03f01a.js.map +0 -1
  154. package/_internal/constants-b9e57936.js +0 -2155
  155. package/_internal/constants-b9e57936.js.map +0 -1
  156. package/_internal/constants-d0e3f49e.js +0 -24
  157. package/_internal/constants-d0e3f49e.js.map +0 -1
  158. package/_internal/context-9d1336a1.js +0 -19
  159. package/_internal/context-9d1336a1.js.map +0 -1
  160. package/_internal/forwardRef-15f62847.js +0 -70
  161. package/_internal/forwardRef-15f62847.js.map +0 -1
  162. package/_internal/getFocusableElements-230173a8.js +0 -13
  163. package/_internal/getFocusableElements-230173a8.js.map +0 -1
  164. package/_internal/index-192f8ada.js +0 -103
  165. package/_internal/index-192f8ada.js.map +0 -1
  166. package/_internal/index-8e7fecb5.js +0 -436
  167. package/_internal/index-8e7fecb5.js.map +0 -1
  168. package/_internal/index-b06353f2.js +0 -117
  169. package/_internal/index-b06353f2.js.map +0 -1
  170. package/_internal/information-49bbeed3.js +0 -6
  171. package/_internal/information-49bbeed3.js.map +0 -1
  172. package/_internal/isComponent-b9762ff1.js +0 -18
  173. package/_internal/isComponent-b9762ff1.js.map +0 -1
  174. package/_internal/isComponentType-e806b848.js +0 -9
  175. package/_internal/isComponentType-e806b848.js.map +0 -1
  176. package/_internal/mergeRefs-f0d7d6ea.js +0 -30
  177. package/_internal/mergeRefs-f0d7d6ea.js.map +0 -1
  178. package/_internal/state-db358714.js +0 -130
  179. package/_internal/state-db358714.js.map +0 -1
  180. package/_internal/useBooleanState-2a3d237c.js +0 -12
  181. package/_internal/useBooleanState-2a3d237c.js.map +0 -1
  182. package/_internal/useCallbackOnEscape-0b220f9c.js +0 -62
  183. package/_internal/useCallbackOnEscape-0b220f9c.js.map +0 -1
  184. package/_internal/useDisableBodyScroll-36bd7352.js +0 -219
  185. package/_internal/useDisableBodyScroll-36bd7352.js.map +0 -1
  186. package/_internal/useDisableStateProps-69e16b7c.js +0 -36
  187. package/_internal/useDisableStateProps-69e16b7c.js.map +0 -1
  188. package/_internal/useFocusTrap-3114e5e8.js +0 -112
  189. package/_internal/useFocusTrap-3114e5e8.js.map +0 -1
  190. package/_internal/useId-3a1facc0.js +0 -18
  191. package/_internal/useId-3a1facc0.js.map +0 -1
  192. package/_internal/useRovingTabIndex-7daf0f24.js +0 -77
  193. package/_internal/useRovingTabIndex-7daf0f24.js.map +0 -1
  194. package/_internal/useTransitionVisibility-321fdbfa.js +0 -50
  195. package/_internal/useTransitionVisibility-321fdbfa.js.map +0 -1
  196. package/_internal/wrapChildrenIconWithSpaces-f1e91251.js +0 -20
  197. package/_internal/wrapChildrenIconWithSpaces-f1e91251.js.map +0 -1
@@ -1,219 +0,0 @@
1
- import { useEffect } from 'react';
2
-
3
- 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); } }
4
-
5
- // Older browsers don't support event options, feature detect it.
6
-
7
- // Adopted and modified solution from Bohdan Didukh (2017)
8
- // https://stackoverflow.com/questions/41594997/ios-10-safari-prevent-scrolling-behind-a-fixed-overlay-and-maintain-scroll-posi
9
-
10
- var hasPassiveEvents = false;
11
- if (typeof window !== 'undefined') {
12
- var passiveTestOptions = {
13
- get passive() {
14
- hasPassiveEvents = true;
15
- return undefined;
16
- }
17
- };
18
- window.addEventListener('testPassive', null, passiveTestOptions);
19
- window.removeEventListener('testPassive', null, passiveTestOptions);
20
- }
21
-
22
- var 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);
23
-
24
-
25
- var locks = [];
26
- var documentListenerAdded = false;
27
- var initialClientY = -1;
28
- var previousBodyOverflowSetting = void 0;
29
- var previousBodyPaddingRight = void 0;
30
-
31
- // returns true if `el` should be allowed to receive touchmove events.
32
- var allowTouchMove = function allowTouchMove(el) {
33
- return locks.some(function (lock) {
34
- if (lock.options.allowTouchMove && lock.options.allowTouchMove(el)) {
35
- return true;
36
- }
37
-
38
- return false;
39
- });
40
- };
41
-
42
- var preventDefault = function preventDefault(rawEvent) {
43
- var e = rawEvent || window.event;
44
-
45
- // For the case whereby consumers adds a touchmove event listener to document.
46
- // Recall that we do document.addEventListener('touchmove', preventDefault, { passive: false })
47
- // in disableBodyScroll - so if we provide this opportunity to allowTouchMove, then
48
- // the touchmove event on document will break.
49
- if (allowTouchMove(e.target)) {
50
- return true;
51
- }
52
-
53
- // Do not prevent if the event has more than one touch (usually meaning this is a multi touch gesture like pinch to zoom).
54
- if (e.touches.length > 1) return true;
55
-
56
- if (e.preventDefault) e.preventDefault();
57
-
58
- return false;
59
- };
60
-
61
- var setOverflowHidden = function setOverflowHidden(options) {
62
- // If previousBodyPaddingRight is already set, don't set it again.
63
- if (previousBodyPaddingRight === undefined) {
64
- var _reserveScrollBarGap = !!options && options.reserveScrollBarGap === true;
65
- var scrollBarGap = window.innerWidth - document.documentElement.clientWidth;
66
-
67
- if (_reserveScrollBarGap && scrollBarGap > 0) {
68
- previousBodyPaddingRight = document.body.style.paddingRight;
69
- document.body.style.paddingRight = scrollBarGap + 'px';
70
- }
71
- }
72
-
73
- // If previousBodyOverflowSetting is already set, don't set it again.
74
- if (previousBodyOverflowSetting === undefined) {
75
- previousBodyOverflowSetting = document.body.style.overflow;
76
- document.body.style.overflow = 'hidden';
77
- }
78
- };
79
-
80
- var restoreOverflowSetting = function restoreOverflowSetting() {
81
- if (previousBodyPaddingRight !== undefined) {
82
- document.body.style.paddingRight = previousBodyPaddingRight;
83
-
84
- // Restore previousBodyPaddingRight to undefined so setOverflowHidden knows it
85
- // can be set again.
86
- previousBodyPaddingRight = undefined;
87
- }
88
-
89
- if (previousBodyOverflowSetting !== undefined) {
90
- document.body.style.overflow = previousBodyOverflowSetting;
91
-
92
- // Restore previousBodyOverflowSetting to undefined
93
- // so setOverflowHidden knows it can be set again.
94
- previousBodyOverflowSetting = undefined;
95
- }
96
- };
97
-
98
- // https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight#Problems_and_solutions
99
- var isTargetElementTotallyScrolled = function isTargetElementTotallyScrolled(targetElement) {
100
- return targetElement ? targetElement.scrollHeight - targetElement.scrollTop <= targetElement.clientHeight : false;
101
- };
102
-
103
- var handleScroll = function handleScroll(event, targetElement) {
104
- var clientY = event.targetTouches[0].clientY - initialClientY;
105
-
106
- if (allowTouchMove(event.target)) {
107
- return false;
108
- }
109
-
110
- if (targetElement && targetElement.scrollTop === 0 && clientY > 0) {
111
- // element is at the top of its scroll.
112
- return preventDefault(event);
113
- }
114
-
115
- if (isTargetElementTotallyScrolled(targetElement) && clientY < 0) {
116
- // element is at the bottom of its scroll.
117
- return preventDefault(event);
118
- }
119
-
120
- event.stopPropagation();
121
- return true;
122
- };
123
-
124
- var disableBodyScroll = function disableBodyScroll(targetElement, options) {
125
- // targetElement must be provided
126
- if (!targetElement) {
127
- // eslint-disable-next-line no-console
128
- console.error('disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.');
129
- return;
130
- }
131
-
132
- // disableBodyScroll must not have been called on this targetElement before
133
- if (locks.some(function (lock) {
134
- return lock.targetElement === targetElement;
135
- })) {
136
- return;
137
- }
138
-
139
- var lock = {
140
- targetElement: targetElement,
141
- options: options || {}
142
- };
143
-
144
- locks = [].concat(_toConsumableArray(locks), [lock]);
145
-
146
- if (isIosDevice) {
147
- targetElement.ontouchstart = function (event) {
148
- if (event.targetTouches.length === 1) {
149
- // detect single touch.
150
- initialClientY = event.targetTouches[0].clientY;
151
- }
152
- };
153
- targetElement.ontouchmove = function (event) {
154
- if (event.targetTouches.length === 1) {
155
- // detect single touch.
156
- handleScroll(event, targetElement);
157
- }
158
- };
159
-
160
- if (!documentListenerAdded) {
161
- document.addEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined);
162
- documentListenerAdded = true;
163
- }
164
- } else {
165
- setOverflowHidden(options);
166
- }
167
- };
168
-
169
- var enableBodyScroll = function enableBodyScroll(targetElement) {
170
- if (!targetElement) {
171
- // eslint-disable-next-line no-console
172
- console.error('enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices.');
173
- return;
174
- }
175
-
176
- locks = locks.filter(function (lock) {
177
- return lock.targetElement !== targetElement;
178
- });
179
-
180
- if (isIosDevice) {
181
- targetElement.ontouchstart = null;
182
- targetElement.ontouchmove = null;
183
-
184
- if (documentListenerAdded && locks.length === 0) {
185
- document.removeEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined);
186
- documentListenerAdded = false;
187
- }
188
- } else if (!locks.length) {
189
- restoreOverflowSetting();
190
- }
191
- };
192
-
193
- /**
194
- * Disables the scroll on the body to make it only usable in the current modal element.
195
- * When the modal element is not provided anymore, the scroll is restored.
196
- *
197
- * @param modalElement The modal element.
198
- */
199
- const useDisableBodyScroll = modalElement => {
200
- useEffect(() => {
201
- if (!modalElement) {
202
- return undefined;
203
- }
204
- // Fixing the document overflow style to prevent a bug that scrolls the window to the top.
205
- const previousDocumentOverflow = document.documentElement.style.overflow;
206
- document.documentElement.style.overflow = 'visible';
207
- disableBodyScroll(modalElement);
208
- return () => {
209
- enableBodyScroll(modalElement);
210
- // Restore the previous overflow style.
211
- requestAnimationFrame(() => {
212
- document.documentElement.style.overflow = previousDocumentOverflow;
213
- });
214
- };
215
- }, [modalElement]);
216
- };
217
-
218
- export { useDisableBodyScroll as u };
219
- //# sourceMappingURL=useDisableBodyScroll-36bd7352.js.map
@@ -1 +0,0 @@
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,36 +0,0 @@
1
- import { u as useDisabledStateContext } from './DisabledStateContext-ea04260d.js';
2
-
3
- /**
4
- * Resolve disabled state from props.
5
- * (handles `disabled`, `isDisabled` and `aria-disabled`)
6
- *
7
- * @params component props
8
- */
9
- function useDisableStateProps(props) {
10
- const {
11
- disabled,
12
- isDisabled = disabled,
13
- 'aria-disabled': ariaDisabled,
14
- onClick,
15
- onChange,
16
- ...otherProps
17
- } = props;
18
- const disabledStateContext = useDisabledStateContext();
19
- const disabledStateProps = {
20
- disabled: disabledStateContext?.state === 'disabled' || isDisabled,
21
- 'aria-disabled': ariaDisabled === true || ariaDisabled === 'true'
22
- };
23
- const isAnyDisabled = disabledStateProps['aria-disabled'] || disabledStateProps.disabled;
24
- if (!isAnyDisabled) {
25
- otherProps.onClick = onClick;
26
- otherProps.onChange = onChange;
27
- }
28
- return {
29
- disabledStateProps,
30
- otherProps: otherProps,
31
- isAnyDisabled
32
- };
33
- }
34
-
35
- export { useDisableStateProps as u };
36
- //# sourceMappingURL=useDisableStateProps-69e16b7c.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useDisableStateProps-69e16b7c.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,112 +0,0 @@
1
- import { useEffect } from 'react';
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-0b220f9c.js';
5
-
6
- /**
7
- * Get first and last elements focusable in an element.
8
- *
9
- * @param parentElement The element in which to search focusable elements.
10
- * @return first and last focusable elements
11
- */
12
- function getFirstAndLastFocusable(parentElement) {
13
- const focusableElements = getFocusableElements(parentElement);
14
-
15
- // First non disabled element.
16
- const first = focusableElements[0];
17
- // Last non disabled element.
18
- const last = focusableElements[focusableElements.length - 1];
19
- if (last && first) {
20
- return {
21
- first,
22
- last
23
- };
24
- }
25
- return {};
26
- }
27
-
28
- const FOCUS_TRAPS = makeListenerTowerContext();
29
-
30
- /**
31
- * Trap 'Tab' focus switch inside the `focusZoneElement`.
32
- *
33
- * If multiple focus trap are activated, only the last one is maintained and when a focus trap closes, the previous one
34
- * gets activated again.
35
- *
36
- * @param focusZoneElement The element in which to trap the focus.
37
- * @param focusElement The element to focus when the focus trap is activated (otherwise the first focusable element
38
- * will be focused).
39
- */
40
- function useFocusTrap(focusZoneElement, focusElement) {
41
- useEffect(() => {
42
- // Body element can be undefined in SSR context.
43
- const rootElement = DOCUMENT?.body;
44
- if (!rootElement || !focusZoneElement) {
45
- return undefined;
46
- }
47
-
48
- // Use the shadow root as focusZoneElement when available
49
- const focusZoneElementOrShadowRoot = focusZoneElement.shadowRoot || focusZoneElement;
50
-
51
- // Trap 'Tab' key down focus switch into the focus zone.
52
- const trapTabFocusInFocusZone = evt => {
53
- const {
54
- key
55
- } = evt;
56
- if (key !== 'Tab') {
57
- return;
58
- }
59
- const focusable = getFirstAndLastFocusable(focusZoneElementOrShadowRoot);
60
-
61
- // Prevent focus switch if no focusable available.
62
- if (!focusable.first) {
63
- evt.preventDefault();
64
- return;
65
- }
66
- const activeElement = focusZoneElement.shadowRoot ? focusZoneElement.shadowRoot.activeElement : document.activeElement;
67
- if (
68
- // No previous focus
69
- !activeElement ||
70
- // Previous focus is at the end of the focus zone.
71
- !evt.shiftKey && activeElement === focusable.last ||
72
- // Previous focus is outside the focus zone
73
- !focusZoneElementOrShadowRoot.contains(activeElement)) {
74
- focusable.first.focus();
75
- evt.preventDefault();
76
- return;
77
- }
78
- if (
79
- // Focus order reversed
80
- evt.shiftKey &&
81
- // Previous focus is at the start of the focus zone.
82
- activeElement === focusable.first) {
83
- focusable.last.focus();
84
- evt.preventDefault();
85
- }
86
- };
87
- const focusTrap = {
88
- enable: () => rootElement.addEventListener('keydown', trapTabFocusInFocusZone),
89
- disable: () => rootElement.removeEventListener('keydown', trapTabFocusInFocusZone)
90
- };
91
-
92
- // SETUP:
93
- if (focusElement && focusZoneElementOrShadowRoot.contains(focusElement)) {
94
- // Focus the given element.
95
- focusElement.focus({
96
- preventScroll: true
97
- });
98
- } else {
99
- // Focus the first focusable element in the zone.
100
- getFirstAndLastFocusable(focusZoneElementOrShadowRoot).first?.focus({
101
- preventScroll: true
102
- });
103
- }
104
- FOCUS_TRAPS.register(focusTrap);
105
-
106
- // TEARDOWN:
107
- return () => FOCUS_TRAPS.unregister(focusTrap);
108
- }, [focusElement, focusZoneElement]);
109
- }
110
-
111
- export { getFirstAndLastFocusable as g, useFocusTrap as u };
112
- //# sourceMappingURL=useFocusTrap-3114e5e8.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useFocusTrap-3114e5e8.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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"}
@@ -1,18 +0,0 @@
1
- import React__default from 'react';
2
-
3
- let i = 0;
4
-
5
- /**
6
- * Generate a unique id (for use in a11y or other id based DOM linking).
7
- *
8
- * (Tries to emulate React 18 useId hook, to remove once we upgrade React)
9
- */
10
- function useId() {
11
- return React__default.useMemo(() => {
12
- i += 1;
13
- return `:lumx${i}:`;
14
- }, []);
15
- }
16
-
17
- export { useId as u };
18
- //# sourceMappingURL=useId-3a1facc0.js.map
@@ -1 +0,0 @@
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;;;;"}
@@ -1,77 +0,0 @@
1
- import { useEffect } from 'react';
2
-
3
- const useRovingTabIndex = ({
4
- parentRef,
5
- elementSelector,
6
- keepTabIndex,
7
- onElementFocus,
8
- extraDependencies = []
9
- }) => {
10
- useEffect(() => {
11
- const parent = parentRef?.current;
12
- if (!parent) {
13
- return undefined;
14
- }
15
- const elements = parent.querySelectorAll(elementSelector);
16
- const initialFocusableElement = parent?.querySelector(`${elementSelector}[tabindex="0"]`);
17
- const handleKeyDown = index => evt => {
18
- let newTabFocus = index;
19
- if (!(evt.key === 'ArrowRight' || evt.key === 'ArrowLeft')) {
20
- return;
21
- }
22
- if (evt.key === 'ArrowRight') {
23
- // Move right
24
- newTabFocus += 1;
25
- // If we're at the end, go to the start
26
- if (newTabFocus >= elements.length) {
27
- newTabFocus = 0;
28
- }
29
- } else if (evt.key === 'ArrowLeft') {
30
- // Move left
31
- newTabFocus -= 1;
32
- if (newTabFocus < 0) {
33
- // If we're at the start, move to the end
34
- newTabFocus = elements.length - 1;
35
- }
36
- }
37
- const newElement = elements[newTabFocus];
38
- newElement?.focus();
39
-
40
- // When an element is focused using roving tab index, trigger the onElementFocus callback
41
- if (newElement && onElementFocus) {
42
- onElementFocus(newElement);
43
- }
44
- if (keepTabIndex) {
45
- evt.currentTarget.setAttribute('tabindex', '-1');
46
- newElement?.setAttribute('tabindex', '0');
47
- }
48
- };
49
- if (elements?.length > 0) {
50
- elements.forEach((el, key) => {
51
- // if no element has tabindex set to 0, set the first element as focusable
52
- if (!initialFocusableElement && key === 0) {
53
- el.setAttribute('tabindex', '0');
54
- // set all other to -1
55
- } else if (initialFocusableElement !== el) {
56
- el.setAttribute('tabindex', '-1');
57
- }
58
- // add event listener
59
- el.addEventListener('keydown', handleKeyDown(key));
60
- });
61
- }
62
-
63
- // Cleanup listeners
64
- return () => {
65
- if (elements?.length > 0) {
66
- elements.forEach((el, key) => {
67
- el.removeEventListener('keydown', handleKeyDown(key));
68
- });
69
- }
70
- };
71
- },
72
- // eslint-disable-next-line react-hooks/exhaustive-deps
73
- [parentRef, ...extraDependencies]);
74
- };
75
-
76
- export { useRovingTabIndex as u };
77
- //# sourceMappingURL=useRovingTabIndex-7daf0f24.js.map
@@ -1 +0,0 @@
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,50 +0,0 @@
1
- import { useState, useRef, useEffect } from 'react';
2
- import { W as WINDOW } from './constants-d0e3f49e.js';
3
-
4
- /** Check if user prefers reduced motion */
5
- function isReducedMotion() {
6
- return WINDOW?.matchMedia?.('(prefers-reduced-motion: reduce)').matches;
7
- }
8
-
9
- /**
10
- * Returns true if the component is visible tracking the opacity transition.
11
- *
12
- * @param ref Element on which to listen the transition event.
13
- * @param isComponentVisible Whether the component intends to be visible or not.
14
- * @param onVisibilityChange Callback called when the visibility changes.
15
- * @return true if the component should be rendered
16
- */
17
- const useTransitionVisibility = (ref, isComponentVisible, timeout, onVisibilityChange) => {
18
- const [isVisible, setVisible] = useState(isComponentVisible);
19
- const previousVisibility = useRef(isVisible);
20
-
21
- // On component visibility change.
22
- useEffect(() => {
23
- if (isComponentVisible) {
24
- setVisible(true);
25
- return undefined;
26
- }
27
- const {
28
- current: element
29
- } = ref;
30
-
31
- // Transition event is not supported or the user prefers reduced motion.
32
- // => Skip and set visibility to false directly.
33
- if (!element || !window.TransitionEvent || isReducedMotion()) {
34
- setVisible(false);
35
- return undefined;
36
- }
37
- const timer = setTimeout(() => setVisible(false), timeout);
38
- return () => clearTimeout(timer);
39
- }, [isComponentVisible, ref, timeout]);
40
- useEffect(() => {
41
- if (onVisibilityChange && previousVisibility.current !== isVisible) {
42
- onVisibilityChange(isVisible);
43
- previousVisibility.current = isVisible;
44
- }
45
- }, [isVisible, onVisibilityChange]);
46
- return isVisible || isComponentVisible;
47
- };
48
-
49
- export { isReducedMotion as i, useTransitionVisibility as u };
50
- //# sourceMappingURL=useTransitionVisibility-321fdbfa.js.map
@@ -1 +0,0 @@
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;;;;"}
@@ -1,20 +0,0 @@
1
- import React__default, { Children } from 'react';
2
- import { i as isComponentType } from './isComponentType-e806b848.js';
3
- import { I as Icon } from './index-192f8ada.js';
4
-
5
- /** Force wrap spaces around icons to make sure they are never stuck against text. */
6
- function wrapChildrenIconWithSpaces(children) {
7
- if (children === null || children === undefined) return undefined;
8
- return Children.toArray(children).flatMap(child => {
9
- if (isComponentType(Icon)(child)) {
10
- return [' ', child, ' '];
11
- }
12
- if (/*#__PURE__*/React__default.isValidElement(child) && child.props && typeof child.props === 'object' && 'children' in child.props) {
13
- return /*#__PURE__*/React__default.cloneElement(child, undefined, wrapChildrenIconWithSpaces(child.props.children));
14
- }
15
- return child;
16
- });
17
- }
18
-
19
- export { wrapChildrenIconWithSpaces as w };
20
- //# sourceMappingURL=wrapChildrenIconWithSpaces-f1e91251.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wrapChildrenIconWithSpaces-f1e91251.js","sources":["../../src/utils/react/wrapChildrenIconWithSpaces.tsx"],"sourcesContent":["import React, { Children } from 'react';\nimport { isComponentType } from '@lumx/react/utils/type';\nimport { Icon } from '@lumx/react';\n\n/** Force wrap spaces around icons to make sure they are never stuck against text. */\nexport function wrapChildrenIconWithSpaces(children: React.ReactNode): React.ReactNode {\n if (children === null || children === undefined) return undefined;\n return Children.toArray(children).flatMap((child) => {\n if (isComponentType(Icon)(child)) {\n return [' ', child, ' '];\n }\n if (\n React.isValidElement(child) &&\n child.props &&\n typeof child.props === 'object' &&\n 'children' in child.props\n ) {\n return React.cloneElement(child, undefined, wrapChildrenIconWithSpaces(child.props.children));\n }\n return child;\n });\n}\n"],"names":["wrapChildrenIconWithSpaces","children","undefined","Children","toArray","flatMap","child","isComponentType","Icon","React","isValidElement","props","cloneElement"],"mappings":";;;;AAIA;AACO,SAASA,0BAA0BA,CAACC,QAAyB,EAAmB;EACnF,IAAIA,QAAQ,KAAK,IAAI,IAAIA,QAAQ,KAAKC,SAAS,EAAE,OAAOA,SAAS,CAAA;EACjE,OAAOC,QAAQ,CAACC,OAAO,CAACH,QAAQ,CAAC,CAACI,OAAO,CAAEC,KAAK,IAAK;AACjD,IAAA,IAAIC,eAAe,CAACC,IAAI,CAAC,CAACF,KAAK,CAAC,EAAE;AAC9B,MAAA,OAAO,CAAC,GAAG,EAAEA,KAAK,EAAE,GAAG,CAAC,CAAA;AAC5B,KAAA;IACA,iBACIG,cAAK,CAACC,cAAc,CAACJ,KAAK,CAAC,IAC3BA,KAAK,CAACK,KAAK,IACX,OAAOL,KAAK,CAACK,KAAK,KAAK,QAAQ,IAC/B,UAAU,IAAIL,KAAK,CAACK,KAAK,EAC3B;AACE,MAAA,oBAAOF,cAAK,CAACG,YAAY,CAACN,KAAK,EAAEJ,SAAS,EAAEF,0BAA0B,CAACM,KAAK,CAACK,KAAK,CAACV,QAAQ,CAAC,CAAC,CAAA;AACjG,KAAA;AACA,IAAA,OAAOK,KAAK,CAAA;AAChB,GAAC,CAAC,CAAA;AACN;;;;"}