frey-ui 1.1.0 → 1.2.1

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 (193) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/Calendar/calendar.css +216 -0
  3. package/dist/cjs/Calendar/calendar.module.css.cjs +10 -0
  4. package/dist/cjs/Calendar/calendar.module.css.cjs.map +1 -0
  5. package/dist/cjs/Calendar/calendarInteractions.cjs +34 -0
  6. package/dist/cjs/Calendar/calendarInteractions.cjs.map +1 -0
  7. package/dist/cjs/Calendar/calendarModel.cjs +232 -0
  8. package/dist/cjs/Calendar/calendarModel.cjs.map +1 -0
  9. package/dist/cjs/Calendar/index.cjs +204 -0
  10. package/dist/cjs/Calendar/index.cjs.map +1 -0
  11. package/dist/cjs/DateField/DateFieldSegments.cjs +71 -0
  12. package/dist/cjs/DateField/DateFieldSegments.cjs.map +1 -0
  13. package/dist/cjs/DateField/DateSegmentInput.cjs +17 -0
  14. package/dist/cjs/DateField/DateSegmentInput.cjs.map +1 -0
  15. package/dist/cjs/DateField/dateFieldInteractions.cjs +205 -0
  16. package/dist/cjs/DateField/dateFieldInteractions.cjs.map +1 -0
  17. package/dist/cjs/DateField/dateFieldState.cjs +127 -0
  18. package/dist/cjs/DateField/dateFieldState.cjs.map +1 -0
  19. package/dist/cjs/DateField/datefield.css +134 -0
  20. package/dist/cjs/DateField/datefield.module.css.cjs +10 -0
  21. package/dist/cjs/DateField/datefield.module.css.cjs.map +1 -0
  22. package/dist/cjs/DateField/index.cjs +203 -0
  23. package/dist/cjs/DateField/index.cjs.map +1 -0
  24. package/dist/cjs/DatePicker/datepicker.css +24 -0
  25. package/dist/cjs/DatePicker/datepicker.module.css.cjs +10 -0
  26. package/dist/cjs/DatePicker/datepicker.module.css.cjs.map +1 -0
  27. package/dist/cjs/DatePicker/index.cjs +98 -0
  28. package/dist/cjs/DatePicker/index.cjs.map +1 -0
  29. package/dist/cjs/DropdownMenu/index.cjs +28 -55
  30. package/dist/cjs/DropdownMenu/index.cjs.map +1 -1
  31. package/dist/cjs/Icons/CalendarIcon.cjs +12 -0
  32. package/dist/cjs/Icons/CalendarIcon.cjs.map +1 -0
  33. package/dist/cjs/Popover/index.cjs +29 -52
  34. package/dist/cjs/Popover/index.cjs.map +1 -1
  35. package/dist/cjs/Tooltip/index.cjs +29 -34
  36. package/dist/cjs/Tooltip/index.cjs.map +1 -1
  37. package/dist/cjs/date/dateEngine.cjs +591 -0
  38. package/dist/cjs/date/dateEngine.cjs.map +1 -0
  39. package/dist/cjs/date/dateLocale.cjs +239 -0
  40. package/dist/cjs/date/dateLocale.cjs.map +1 -0
  41. package/dist/cjs/date/japaneseEraData.cjs +252 -0
  42. package/dist/cjs/date/japaneseEraData.cjs.map +1 -0
  43. package/dist/cjs/date/useDateLocale.cjs +24 -0
  44. package/dist/cjs/date/useDateLocale.cjs.map +1 -0
  45. package/dist/cjs/floating/FocusScope.cjs +195 -0
  46. package/dist/cjs/floating/FocusScope.cjs.map +1 -0
  47. package/dist/cjs/floating/autoUpdate.cjs +205 -0
  48. package/dist/cjs/floating/autoUpdate.cjs.map +1 -0
  49. package/dist/cjs/floating/dismissibleLayer.cjs +116 -0
  50. package/dist/cjs/floating/dismissibleLayer.cjs.map +1 -0
  51. package/dist/cjs/floating/geometry.cjs +160 -0
  52. package/dist/cjs/floating/geometry.cjs.map +1 -0
  53. package/dist/cjs/floating/platform.cjs +15 -0
  54. package/dist/cjs/floating/platform.cjs.map +1 -0
  55. package/dist/cjs/floating/pointerEvent.cjs +92 -0
  56. package/dist/cjs/floating/pointerEvent.cjs.map +1 -0
  57. package/dist/cjs/floating/tabbable.cjs +101 -0
  58. package/dist/cjs/floating/tabbable.cjs.map +1 -0
  59. package/dist/cjs/floating/useFloatingPosition.cjs +119 -0
  60. package/dist/cjs/floating/useFloatingPosition.cjs.map +1 -0
  61. package/dist/cjs/floating/useTooltipInteractions.cjs +136 -0
  62. package/dist/cjs/floating/useTooltipInteractions.cjs.map +1 -0
  63. package/dist/cjs/index.cjs +68 -60
  64. package/dist/cjs/index.cjs.map +1 -1
  65. package/dist/cjs/theme.css +14 -0
  66. package/dist/esm/Calendar/calendar.css +216 -0
  67. package/dist/esm/Calendar/calendar.module.css.mjs +6 -0
  68. package/dist/esm/Calendar/calendar.module.css.mjs.map +1 -0
  69. package/dist/esm/Calendar/calendarInteractions.mjs +32 -0
  70. package/dist/esm/Calendar/calendarInteractions.mjs.map +1 -0
  71. package/dist/esm/Calendar/calendarModel.mjs +224 -0
  72. package/dist/esm/Calendar/calendarModel.mjs.map +1 -0
  73. package/dist/esm/Calendar/index.mjs +200 -0
  74. package/dist/esm/Calendar/index.mjs.map +1 -0
  75. package/dist/esm/DateField/DateFieldSegments.mjs +69 -0
  76. package/dist/esm/DateField/DateFieldSegments.mjs.map +1 -0
  77. package/dist/esm/DateField/DateSegmentInput.mjs +15 -0
  78. package/dist/esm/DateField/DateSegmentInput.mjs.map +1 -0
  79. package/dist/esm/DateField/dateFieldInteractions.mjs +198 -0
  80. package/dist/esm/DateField/dateFieldInteractions.mjs.map +1 -0
  81. package/dist/esm/DateField/dateFieldState.mjs +119 -0
  82. package/dist/esm/DateField/dateFieldState.mjs.map +1 -0
  83. package/dist/esm/DateField/datefield.css +134 -0
  84. package/dist/esm/DateField/datefield.module.css.mjs +6 -0
  85. package/dist/esm/DateField/datefield.module.css.mjs.map +1 -0
  86. package/dist/esm/DateField/index.mjs +198 -0
  87. package/dist/esm/DateField/index.mjs.map +1 -0
  88. package/dist/esm/DatePicker/datepicker.css +24 -0
  89. package/dist/esm/DatePicker/datepicker.module.css.mjs +6 -0
  90. package/dist/esm/DatePicker/datepicker.module.css.mjs.map +1 -0
  91. package/dist/esm/DatePicker/index.mjs +94 -0
  92. package/dist/esm/DatePicker/index.mjs.map +1 -0
  93. package/dist/esm/DropdownMenu/index.mjs +29 -56
  94. package/dist/esm/DropdownMenu/index.mjs.map +1 -1
  95. package/dist/esm/Icons/CalendarIcon.mjs +10 -0
  96. package/dist/esm/Icons/CalendarIcon.mjs.map +1 -0
  97. package/dist/esm/Popover/index.mjs +30 -53
  98. package/dist/esm/Popover/index.mjs.map +1 -1
  99. package/dist/esm/Tooltip/index.mjs +29 -34
  100. package/dist/esm/Tooltip/index.mjs.map +1 -1
  101. package/dist/esm/date/dateEngine.mjs +573 -0
  102. package/dist/esm/date/dateEngine.mjs.map +1 -0
  103. package/dist/esm/date/dateLocale.mjs +226 -0
  104. package/dist/esm/date/dateLocale.mjs.map +1 -0
  105. package/dist/esm/date/japaneseEraData.mjs +250 -0
  106. package/dist/esm/date/japaneseEraData.mjs.map +1 -0
  107. package/dist/esm/date/useDateLocale.mjs +22 -0
  108. package/dist/esm/date/useDateLocale.mjs.map +1 -0
  109. package/dist/esm/floating/FocusScope.mjs +193 -0
  110. package/dist/esm/floating/FocusScope.mjs.map +1 -0
  111. package/dist/esm/floating/autoUpdate.mjs +202 -0
  112. package/dist/esm/floating/autoUpdate.mjs.map +1 -0
  113. package/dist/esm/floating/dismissibleLayer.mjs +114 -0
  114. package/dist/esm/floating/dismissibleLayer.mjs.map +1 -0
  115. package/dist/esm/floating/geometry.mjs +158 -0
  116. package/dist/esm/floating/geometry.mjs.map +1 -0
  117. package/dist/esm/floating/platform.mjs +12 -0
  118. package/dist/esm/floating/platform.mjs.map +1 -0
  119. package/dist/esm/floating/pointerEvent.mjs +89 -0
  120. package/dist/esm/floating/pointerEvent.mjs.map +1 -0
  121. package/dist/esm/floating/tabbable.mjs +99 -0
  122. package/dist/esm/floating/tabbable.mjs.map +1 -0
  123. package/dist/esm/floating/useFloatingPosition.mjs +117 -0
  124. package/dist/esm/floating/useFloatingPosition.mjs.map +1 -0
  125. package/dist/esm/floating/useTooltipInteractions.mjs +134 -0
  126. package/dist/esm/floating/useTooltipInteractions.mjs.map +1 -0
  127. package/dist/esm/index.mjs +4 -0
  128. package/dist/esm/index.mjs.map +1 -1
  129. package/dist/esm/theme.css +14 -0
  130. package/dist/index.d.ts +80 -3
  131. package/dist/types/src/Calendar/calendarInteractions.d.ts +9 -0
  132. package/dist/types/src/Calendar/calendarInteractions.d.ts.map +1 -0
  133. package/dist/types/src/Calendar/calendarModel.d.ts +81 -0
  134. package/dist/types/src/Calendar/calendarModel.d.ts.map +1 -0
  135. package/dist/types/src/Calendar/index.d.ts +26 -0
  136. package/dist/types/src/Calendar/index.d.ts.map +1 -0
  137. package/dist/types/src/DateField/DateFieldSegments.d.ts +28 -0
  138. package/dist/types/src/DateField/DateFieldSegments.d.ts.map +1 -0
  139. package/dist/types/src/DateField/DateSegmentInput.d.ts +23 -0
  140. package/dist/types/src/DateField/DateSegmentInput.d.ts.map +1 -0
  141. package/dist/types/src/DateField/dateFieldInteractions.d.ts +66 -0
  142. package/dist/types/src/DateField/dateFieldInteractions.d.ts.map +1 -0
  143. package/dist/types/src/DateField/dateFieldState.d.ts +32 -0
  144. package/dist/types/src/DateField/dateFieldState.d.ts.map +1 -0
  145. package/dist/types/src/DateField/index.d.ts +42 -0
  146. package/dist/types/src/DateField/index.d.ts.map +1 -0
  147. package/dist/types/src/DatePicker/index.d.ts +19 -0
  148. package/dist/types/src/DatePicker/index.d.ts.map +1 -0
  149. package/dist/types/src/DropdownMenu/index.d.ts.map +1 -1
  150. package/dist/types/src/Icons/CalendarIcon.d.ts +4 -0
  151. package/dist/types/src/Icons/CalendarIcon.d.ts.map +1 -0
  152. package/dist/types/src/Icons/index.d.ts +1 -0
  153. package/dist/types/src/Icons/index.d.ts.map +1 -1
  154. package/dist/types/src/Popover/index.d.ts +3 -1
  155. package/dist/types/src/Popover/index.d.ts.map +1 -1
  156. package/dist/types/src/Tooltip/index.d.ts.map +1 -1
  157. package/dist/types/src/date/dateEngine.d.ts +22 -0
  158. package/dist/types/src/date/dateEngine.d.ts.map +1 -0
  159. package/dist/types/src/date/dateLocale.d.ts +30 -0
  160. package/dist/types/src/date/dateLocale.d.ts.map +1 -0
  161. package/dist/types/src/date/japaneseEraData.d.ts +7 -0
  162. package/dist/types/src/date/japaneseEraData.d.ts.map +1 -0
  163. package/dist/types/src/date/types.d.ts +23 -0
  164. package/dist/types/src/date/types.d.ts.map +1 -0
  165. package/dist/types/src/date/useDateLocale.d.ts +2 -0
  166. package/dist/types/src/date/useDateLocale.d.ts.map +1 -0
  167. package/dist/types/src/floating/FocusScope.d.ts +11 -0
  168. package/dist/types/src/floating/FocusScope.d.ts.map +1 -0
  169. package/dist/types/src/floating/autoUpdate.d.ts +5 -0
  170. package/dist/types/src/floating/autoUpdate.d.ts.map +1 -0
  171. package/dist/types/src/floating/dismissibleLayer.d.ts +12 -0
  172. package/dist/types/src/floating/dismissibleLayer.d.ts.map +1 -0
  173. package/dist/types/src/floating/geometry.d.ts +27 -0
  174. package/dist/types/src/floating/geometry.d.ts.map +1 -0
  175. package/dist/types/src/floating/platform.d.ts +3 -0
  176. package/dist/types/src/floating/platform.d.ts.map +1 -0
  177. package/dist/types/src/floating/pointerEvent.d.ts +3 -0
  178. package/dist/types/src/floating/pointerEvent.d.ts.map +1 -0
  179. package/dist/types/src/floating/tabbable.d.ts +2 -0
  180. package/dist/types/src/floating/tabbable.d.ts.map +1 -0
  181. package/dist/types/src/floating/useFloatingPosition.d.ts +18 -0
  182. package/dist/types/src/floating/useFloatingPosition.d.ts.map +1 -0
  183. package/dist/types/src/floating/useTooltipInteractions.d.ts +9 -0
  184. package/dist/types/src/floating/useTooltipInteractions.d.ts.map +1 -0
  185. package/dist/types/src/index.d.ts +8 -1
  186. package/dist/types/src/index.d.ts.map +1 -1
  187. package/package.json +1 -2
  188. package/dist/cjs/hooks/floatingConfig.cjs +0 -24
  189. package/dist/cjs/hooks/floatingConfig.cjs.map +0 -1
  190. package/dist/esm/hooks/floatingConfig.mjs +0 -20
  191. package/dist/esm/hooks/floatingConfig.mjs.map +0 -1
  192. package/dist/types/src/hooks/floatingConfig.d.ts +0 -6
  193. package/dist/types/src/hooks/floatingConfig.d.ts.map +0 -1
@@ -0,0 +1,193 @@
1
+ 'use client';
2
+ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
3
+ import React from 'react';
4
+ import { isSafari } from './platform.mjs';
5
+ import { getTabbableElements } from './tabbable.mjs';
6
+
7
+ const modalAccessibilityManagers = new WeakMap();
8
+ const focusGuardStyle = {
9
+ border: 0,
10
+ clip: 'rect(0 0 0 0)',
11
+ height: 1,
12
+ margin: -1,
13
+ overflow: 'hidden',
14
+ padding: 0,
15
+ position: 'fixed',
16
+ whiteSpace: 'nowrap',
17
+ width: 1,
18
+ top: 0,
19
+ left: 0,
20
+ };
21
+ function FocusGuard({ position, onFocus, }) {
22
+ const safari = typeof window !== 'undefined' && isSafari(window) ? true : undefined;
23
+ // Safari VoiceOver only forwards virtual-cursor focus to a guard exposed as
24
+ // a button. Keep the non-native span sentinel to avoid native activation
25
+ // behavior: https://github.com/floating-ui/floating-ui/blob/master/packages/react/src/components/FocusGuard.tsx
26
+ return (jsx("span", { "aria-hidden": safari ? undefined : true, "data-frey-focus-guard": position, onFocus: onFocus, role: safari ? 'button' : undefined, style: focusGuardStyle, tabIndex: 0 }));
27
+ }
28
+ function focusElement(element) {
29
+ if (!element)
30
+ return;
31
+ try {
32
+ element.focus({ preventScroll: true });
33
+ }
34
+ catch {
35
+ element.focus();
36
+ }
37
+ }
38
+ function trapTabKey(content, event) {
39
+ if (event.defaultPrevented ||
40
+ event.key !== 'Tab' ||
41
+ event.altKey ||
42
+ event.ctrlKey ||
43
+ event.metaKey ||
44
+ !event.target ||
45
+ !content.contains(event.target)) {
46
+ return;
47
+ }
48
+ const tabbableElements = getTabbableElements(content);
49
+ const activeElement = content.ownerDocument.activeElement;
50
+ const currentIndex = tabbableElements.indexOf(activeElement);
51
+ let target;
52
+ if (tabbableElements.length === 0) {
53
+ target = content;
54
+ }
55
+ else if (event.shiftKey) {
56
+ const [lastTabbableElement] = tabbableElements.slice(-1);
57
+ target =
58
+ currentIndex > 0
59
+ ? tabbableElements[currentIndex - 1]
60
+ : lastTabbableElement;
61
+ }
62
+ else {
63
+ target =
64
+ currentIndex >= 0 && currentIndex < tabbableElements.length - 1
65
+ ? tabbableElements[currentIndex + 1]
66
+ : tabbableElements[0];
67
+ }
68
+ event.preventDefault();
69
+ focusElement(target);
70
+ }
71
+ function hideElement(element) {
72
+ const value = element.getAttribute('aria-hidden');
73
+ element.setAttribute('aria-hidden', 'true');
74
+ return () => {
75
+ if (value === null) {
76
+ element.removeAttribute('aria-hidden');
77
+ }
78
+ else {
79
+ element.setAttribute('aria-hidden', value);
80
+ }
81
+ };
82
+ }
83
+ function hideOutsideContents(ownerDocument, contents) {
84
+ const liveRegions = [
85
+ ...ownerDocument.querySelectorAll('[aria-live], [role="alert"], [role="log"], [role="marquee"], [role="status"], [role="timer"], output'),
86
+ ];
87
+ const focusGuards = contents.flatMap((content) => content.parentElement
88
+ ? [
89
+ ...content.parentElement.querySelectorAll('[data-frey-focus-guard]'),
90
+ ]
91
+ : []);
92
+ const keepElements = [...contents, ...focusGuards, ...liveRegions];
93
+ const cleanupCallbacks = [];
94
+ const visit = (element) => {
95
+ if (element.tagName === 'SCRIPT' || element.tagName === 'STYLE')
96
+ return;
97
+ if (keepElements.includes(element))
98
+ return;
99
+ if (keepElements.some((keptElement) => element.contains(keptElement))) {
100
+ [...element.children].forEach(visit);
101
+ return;
102
+ }
103
+ cleanupCallbacks.push(hideElement(element));
104
+ };
105
+ [...ownerDocument.body.children].forEach(visit);
106
+ return () => {
107
+ cleanupCallbacks.forEach((cleanup) => {
108
+ cleanup();
109
+ });
110
+ };
111
+ }
112
+ function refreshModalAccessibility(ownerDocument, manager) {
113
+ manager.cleanup?.();
114
+ manager.cleanup = undefined;
115
+ if (manager.contents.size > 0) {
116
+ manager.cleanup = hideOutsideContents(ownerDocument, [...manager.contents]);
117
+ }
118
+ }
119
+ function registerModalContent(content) {
120
+ const ownerDocument = content.ownerDocument;
121
+ let manager = modalAccessibilityManagers.get(ownerDocument);
122
+ if (!manager) {
123
+ manager = { contents: new Set() };
124
+ modalAccessibilityManagers.set(ownerDocument, manager);
125
+ }
126
+ manager.contents.add(content);
127
+ refreshModalAccessibility(ownerDocument, manager);
128
+ return () => {
129
+ manager.contents.delete(content);
130
+ refreshModalAccessibility(ownerDocument, manager);
131
+ if (manager.contents.size === 0) {
132
+ modalAccessibilityManagers.delete(ownerDocument);
133
+ }
134
+ };
135
+ }
136
+ function getInitialFocusTarget(content, initialFocusRef) {
137
+ return initialFocusRef?.current ?? getTabbableElements(content)[0] ?? content;
138
+ }
139
+ function FocusScope({ children, contentRef, triggerRef, initialFocusRef, modal = true, restoreFocus = true, }) {
140
+ const focusFirst = React.useCallback(() => {
141
+ const content = contentRef.current;
142
+ if (!content)
143
+ return;
144
+ focusElement(getTabbableElements(content)[0] ?? content);
145
+ }, [contentRef]);
146
+ const focusLast = React.useCallback(() => {
147
+ const content = contentRef.current;
148
+ if (!content)
149
+ return;
150
+ const tabbableElements = getTabbableElements(content);
151
+ const [lastTabbableElement] = tabbableElements.slice(-1);
152
+ focusElement(lastTabbableElement ?? content);
153
+ }, [contentRef]);
154
+ React.useEffect(() => {
155
+ const content = contentRef.current;
156
+ if (!content)
157
+ return;
158
+ const cleanupOutsideContent = modal
159
+ ? registerModalContent(content)
160
+ : undefined;
161
+ const handleKeyDown = (event) => {
162
+ trapTabKey(content, event);
163
+ };
164
+ if (modal) {
165
+ content.ownerDocument.addEventListener('keydown', handleKeyDown);
166
+ }
167
+ let active = true;
168
+ queueMicrotask(() => {
169
+ if (!active || !content.isConnected)
170
+ return;
171
+ if (!content.contains(content.ownerDocument.activeElement)) {
172
+ focusElement(getInitialFocusTarget(content, initialFocusRef));
173
+ }
174
+ });
175
+ return () => {
176
+ active = false;
177
+ content.ownerDocument.removeEventListener('keydown', handleKeyDown);
178
+ cleanupOutsideContent?.();
179
+ if (!restoreFocus)
180
+ return;
181
+ const activeElement = content.ownerDocument.activeElement;
182
+ if (activeElement === content.ownerDocument.body ||
183
+ activeElement === null ||
184
+ content.contains(activeElement)) {
185
+ focusElement(triggerRef.current);
186
+ }
187
+ };
188
+ }, [contentRef, initialFocusRef, modal, restoreFocus, triggerRef]);
189
+ return (jsxs(Fragment, { children: [modal ? jsx(FocusGuard, { position: 'before', onFocus: focusLast }) : null, children, modal ? jsx(FocusGuard, { position: 'after', onFocus: focusFirst }) : null] }));
190
+ }
191
+
192
+ export { FocusScope };
193
+ //# sourceMappingURL=FocusScope.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FocusScope.mjs","sources":["../../../src/floating/FocusScope.tsx"],"sourcesContent":[null],"names":["_jsx","_jsxs"],"mappings":"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"}
@@ -0,0 +1,202 @@
1
+ 'use client';
2
+ const sharedListeners = new WeakMap();
3
+ const overflowPattern = /(auto|scroll|overlay|hidden|clip)/;
4
+ function subscribeShared(target, type, callback, options) {
5
+ let targetListeners = sharedListeners.get(target);
6
+ if (!targetListeners) {
7
+ targetListeners = new Map();
8
+ sharedListeners.set(target, targetListeners);
9
+ }
10
+ const key = type;
11
+ let subscription = targetListeners.get(key);
12
+ if (!subscription) {
13
+ const callbacks = new Set();
14
+ const listener = (event) => {
15
+ callbacks.forEach((registeredCallback) => {
16
+ registeredCallback(event);
17
+ });
18
+ };
19
+ subscription = { callbacks, listener, options };
20
+ targetListeners.set(key, subscription);
21
+ target.addEventListener(type, listener, options);
22
+ }
23
+ subscription.callbacks.add(callback);
24
+ const activeSubscription = subscription;
25
+ const activeTargetListeners = targetListeners;
26
+ return () => {
27
+ activeSubscription.callbacks.delete(callback);
28
+ if (activeSubscription.callbacks.size === 0) {
29
+ target.removeEventListener(type, activeSubscription.listener, activeSubscription.options);
30
+ activeTargetListeners.delete(key);
31
+ if (activeTargetListeners.size === 0) {
32
+ sharedListeners.delete(target);
33
+ }
34
+ }
35
+ };
36
+ }
37
+ function getParentElement(element) {
38
+ const assignedSlot = element.assignedSlot;
39
+ if (assignedSlot)
40
+ return assignedSlot;
41
+ const parentNode = element.parentNode;
42
+ if (parentNode instanceof Element)
43
+ return parentNode;
44
+ if (parentNode instanceof ShadowRoot)
45
+ return parentNode.host;
46
+ return null;
47
+ }
48
+ function isOverflowElement(element) {
49
+ const style = element.ownerDocument.defaultView?.getComputedStyle(element);
50
+ if (!style)
51
+ return false;
52
+ return overflowPattern.test(`${style.overflow}${style.overflowX}${style.overflowY}`);
53
+ }
54
+ function getOverflowElements(element) {
55
+ const ancestors = [];
56
+ let current = getParentElement(element);
57
+ while (current) {
58
+ if (isOverflowElement(current)) {
59
+ ancestors.push(current);
60
+ }
61
+ current = getParentElement(current);
62
+ }
63
+ return ancestors;
64
+ }
65
+ function getOverflowAncestors(element, ownerWindow) {
66
+ return [...getOverflowElements(element), ownerWindow];
67
+ }
68
+ function observeReferenceMove(reference, update) {
69
+ const ownerWindow = reference.ownerDocument.defaultView;
70
+ if (!ownerWindow?.IntersectionObserver) {
71
+ return undefined;
72
+ }
73
+ const IntersectionObserverConstructor = ownerWindow.IntersectionObserver;
74
+ const documentElement = reference.ownerDocument.documentElement;
75
+ let observer = null;
76
+ let timeoutId;
77
+ let active = true;
78
+ const cleanupObserver = () => {
79
+ if (timeoutId !== undefined)
80
+ ownerWindow.clearTimeout(timeoutId);
81
+ timeoutId = undefined;
82
+ observer?.disconnect();
83
+ observer = null;
84
+ };
85
+ const rectKeys = ['top', 'right', 'bottom', 'left'];
86
+ const rectsMatch = (first, second) => {
87
+ for (const key of rectKeys) {
88
+ if (first[key] !== second[key])
89
+ return false;
90
+ }
91
+ return true;
92
+ };
93
+ const refresh = (skipUpdate = false, threshold = 1) => {
94
+ if (!active)
95
+ return;
96
+ cleanupObserver();
97
+ const rect = reference.getBoundingClientRect();
98
+ if (!skipUpdate)
99
+ update();
100
+ const viewportWidth = documentElement.clientWidth || ownerWindow.innerWidth;
101
+ const viewportHeight = documentElement.clientHeight || ownerWindow.innerHeight;
102
+ const rootMargin = `${-Math.floor(rect.top)}px ${-Math.floor(viewportWidth - rect.right)}px ${-Math.floor(viewportHeight - rect.bottom)}px ${-Math.floor(rect.left)}px`;
103
+ const normalizedThreshold = Math.max(0, Math.min(1, threshold));
104
+ let firstNotification = true;
105
+ observer = new IntersectionObserverConstructor((entries) => {
106
+ const entry = entries[0];
107
+ if (!entry) {
108
+ update();
109
+ return;
110
+ }
111
+ const ratio = entry.intersectionRatio;
112
+ if (ratio !== threshold) {
113
+ if (!firstNotification) {
114
+ refresh();
115
+ return;
116
+ }
117
+ if (ratio === 0) {
118
+ timeoutId = ownerWindow.setTimeout(() => refresh(false, 0.0000001), 1000);
119
+ }
120
+ else {
121
+ refresh(false, ratio);
122
+ return;
123
+ }
124
+ }
125
+ if (ratio === 1 &&
126
+ !rectsMatch(rect, reference.getBoundingClientRect())) {
127
+ refresh();
128
+ return;
129
+ }
130
+ firstNotification = false;
131
+ }, {
132
+ rootMargin,
133
+ threshold: normalizedThreshold,
134
+ });
135
+ observer.observe(reference);
136
+ };
137
+ refresh(true);
138
+ return () => {
139
+ active = false;
140
+ cleanupObserver();
141
+ };
142
+ }
143
+ function autoUpdateFloating(reference, floating, update) {
144
+ const ownerWindow = reference.ownerDocument.defaultView;
145
+ if (!ownerWindow) {
146
+ update();
147
+ return () => { };
148
+ }
149
+ let active = true;
150
+ let frameId = null;
151
+ const cleanupCallbacks = [];
152
+ const scheduleUpdate = () => {
153
+ if (!active || frameId !== null)
154
+ return;
155
+ frameId = ownerWindow.requestAnimationFrame(() => {
156
+ frameId = null;
157
+ if (active)
158
+ update();
159
+ });
160
+ };
161
+ const ancestors = new Set([
162
+ ...getOverflowAncestors(reference, ownerWindow),
163
+ ...getOverflowAncestors(floating, ownerWindow),
164
+ ]);
165
+ ancestors.forEach((ancestor) => {
166
+ cleanupCallbacks.push(subscribeShared(ancestor, 'scroll', scheduleUpdate, { passive: true }), subscribeShared(ancestor, 'resize', scheduleUpdate));
167
+ });
168
+ const visualViewport = ownerWindow.visualViewport;
169
+ if (visualViewport) {
170
+ cleanupCallbacks.push(subscribeShared(visualViewport, 'scroll', scheduleUpdate, {
171
+ passive: true,
172
+ }), subscribeShared(visualViewport, 'resize', scheduleUpdate));
173
+ }
174
+ const ResizeObserverConstructor = ownerWindow.ResizeObserver;
175
+ if (ResizeObserverConstructor !== undefined) {
176
+ const resizeObserver = new ResizeObserverConstructor(scheduleUpdate);
177
+ resizeObserver.observe(reference);
178
+ resizeObserver.observe(floating);
179
+ cleanupCallbacks.push(() => resizeObserver.disconnect());
180
+ }
181
+ const cleanupMoveObserver = observeReferenceMove(reference, scheduleUpdate);
182
+ if (cleanupMoveObserver)
183
+ cleanupCallbacks.push(cleanupMoveObserver);
184
+ update();
185
+ let cleanedUp = false;
186
+ return () => {
187
+ if (cleanedUp)
188
+ return;
189
+ cleanedUp = true;
190
+ active = false;
191
+ if (frameId !== null) {
192
+ ownerWindow.cancelAnimationFrame(frameId);
193
+ frameId = null;
194
+ }
195
+ cleanupCallbacks.forEach((cleanup) => {
196
+ cleanup();
197
+ });
198
+ };
199
+ }
200
+
201
+ export { autoUpdateFloating, getOverflowElements };
202
+ //# sourceMappingURL=autoUpdate.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autoUpdate.mjs","sources":["../../../src/floating/autoUpdate.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,114 @@
1
+ 'use client';
2
+ import React from 'react';
3
+ import { isWebKit } from './platform.mjs';
4
+ import { isScrollbarPress, eventIsInside } from './pointerEvent.mjs';
5
+
6
+ const managers = new WeakMap();
7
+ function getTopLayer(manager) {
8
+ const [topLayer] = manager.layers.slice(-1);
9
+ return topLayer;
10
+ }
11
+ function attachManagerListeners(ownerDocument, manager) {
12
+ const clearCompositionReset = () => {
13
+ if (manager.compositionResetTimer === undefined)
14
+ return;
15
+ clearTimeout(manager.compositionResetTimer);
16
+ manager.compositionResetTimer = undefined;
17
+ };
18
+ const handleKeyDown = (event) => {
19
+ if (event.key !== 'Escape' || event.isComposing || manager.composing) {
20
+ return;
21
+ }
22
+ const layer = getTopLayer(manager);
23
+ if (!layer)
24
+ return;
25
+ const { closeOnEscape = true, onDismiss } = layer.optionsRef.current;
26
+ if (!closeOnEscape)
27
+ return;
28
+ onDismiss('escape', event);
29
+ };
30
+ const handlePointerDown = (event) => {
31
+ const layer = getTopLayer(manager);
32
+ if (!layer)
33
+ return;
34
+ const { closeOnOutsidePointerDown = true, floatingRef, referenceRef, onDismiss, } = layer.optionsRef.current;
35
+ if (!closeOnOutsidePointerDown)
36
+ return;
37
+ if (isScrollbarPress(event, ownerDocument))
38
+ return;
39
+ if (eventIsInside(event, referenceRef.current))
40
+ return;
41
+ if (eventIsInside(event, floatingRef.current))
42
+ return;
43
+ onDismiss('outside-pointer', event);
44
+ };
45
+ const handleCompositionStart = () => {
46
+ clearCompositionReset();
47
+ manager.composing = true;
48
+ };
49
+ const handleCompositionEnd = () => {
50
+ clearCompositionReset();
51
+ manager.compositionResetTimer = setTimeout(() => {
52
+ manager.compositionResetTimer = undefined;
53
+ manager.composing = false;
54
+ }, isWebKit(ownerDocument.defaultView) ? 5 : 0);
55
+ };
56
+ ownerDocument.addEventListener('keydown', handleKeyDown);
57
+ ownerDocument.addEventListener('pointerdown', handlePointerDown);
58
+ ownerDocument.addEventListener('compositionstart', handleCompositionStart);
59
+ ownerDocument.addEventListener('compositionend', handleCompositionEnd);
60
+ return () => {
61
+ clearCompositionReset();
62
+ manager.composing = false;
63
+ ownerDocument.removeEventListener('keydown', handleKeyDown);
64
+ ownerDocument.removeEventListener('pointerdown', handlePointerDown);
65
+ ownerDocument.removeEventListener('compositionstart', handleCompositionStart);
66
+ ownerDocument.removeEventListener('compositionend', handleCompositionEnd);
67
+ };
68
+ }
69
+ function registerLayer(ownerDocument, layer) {
70
+ let manager = managers.get(ownerDocument);
71
+ if (!manager) {
72
+ manager = { layers: [], composing: false };
73
+ managers.set(ownerDocument, manager);
74
+ }
75
+ const activeManager = manager;
76
+ const nestedChildIndex = activeManager.layers.findIndex((existingLayer) => {
77
+ const parentFloating = layer.optionsRef.current.floatingRef.current;
78
+ const childReference = existingLayer.optionsRef.current.referenceRef.current;
79
+ return Boolean(parentFloating &&
80
+ childReference &&
81
+ parentFloating.contains(childReference));
82
+ });
83
+ if (nestedChildIndex >= 0) {
84
+ activeManager.layers.splice(nestedChildIndex, 0, layer);
85
+ }
86
+ else {
87
+ activeManager.layers.push(layer);
88
+ }
89
+ activeManager.cleanupListeners ?? (activeManager.cleanupListeners = attachManagerListeners(ownerDocument, activeManager));
90
+ return () => {
91
+ const layerIndex = activeManager.layers.lastIndexOf(layer);
92
+ activeManager.layers.splice(layerIndex, 1);
93
+ if (activeManager.layers.length === 0) {
94
+ activeManager.cleanupListeners?.();
95
+ activeManager.cleanupListeners = undefined;
96
+ managers.delete(ownerDocument);
97
+ }
98
+ };
99
+ }
100
+ function useDismissibleLayer({ open, ...options }) {
101
+ const optionsRef = React.useRef(options);
102
+ optionsRef.current = options;
103
+ const ownerDocument = options.referenceRef.current?.ownerDocument ??
104
+ options.floatingRef.current?.ownerDocument ??
105
+ (typeof document === 'undefined' ? undefined : document);
106
+ React.useEffect(() => {
107
+ if (!open || !ownerDocument)
108
+ return;
109
+ return registerLayer(ownerDocument, { optionsRef });
110
+ }, [open, ownerDocument]);
111
+ }
112
+
113
+ export { useDismissibleLayer };
114
+ //# sourceMappingURL=dismissibleLayer.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dismissibleLayer.mjs","sources":["../../../src/floating/dismissibleLayer.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}