@simplybusiness/mobius 10.4.2 → 10.4.4

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 (224) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/cjs/components/AddressLookup/AddressLookup.js +39 -36
  3. package/dist/cjs/components/AddressLookup/AddressLookup.js.map +3 -3
  4. package/dist/cjs/components/AddressLookup/index.js +39 -36
  5. package/dist/cjs/components/AddressLookup/index.js.map +3 -3
  6. package/dist/cjs/components/Breadcrumbs/Breadcrumbs.js +3 -7
  7. package/dist/cjs/components/Breadcrumbs/Breadcrumbs.js.map +2 -2
  8. package/dist/cjs/components/Breadcrumbs/index.js +3 -7
  9. package/dist/cjs/components/Breadcrumbs/index.js.map +2 -2
  10. package/dist/cjs/components/Combobox/Combobox.js +35 -32
  11. package/dist/cjs/components/Combobox/Combobox.js.map +3 -3
  12. package/dist/cjs/components/Combobox/index.js +35 -32
  13. package/dist/cjs/components/Combobox/index.js.map +3 -3
  14. package/dist/cjs/components/DateField/DateField.js +11 -8
  15. package/dist/cjs/components/DateField/DateField.js.map +3 -3
  16. package/dist/cjs/components/DateField/index.js +11 -8
  17. package/dist/cjs/components/DateField/index.js.map +3 -3
  18. package/dist/cjs/components/DropdownMenu/Item.js +3 -6
  19. package/dist/cjs/components/DropdownMenu/Item.js.map +2 -2
  20. package/dist/cjs/components/DropdownMenu/index.js +3 -6
  21. package/dist/cjs/components/DropdownMenu/index.js.map +2 -2
  22. package/dist/cjs/components/MaskedField/MaskedField.js +11 -8
  23. package/dist/cjs/components/MaskedField/MaskedField.js.map +3 -3
  24. package/dist/cjs/components/MaskedField/index.js +13 -10
  25. package/dist/cjs/components/MaskedField/index.js.map +3 -3
  26. package/dist/cjs/components/NumberField/NumberField.js +10 -7
  27. package/dist/cjs/components/NumberField/NumberField.js.map +3 -3
  28. package/dist/cjs/components/NumberField/index.js +10 -7
  29. package/dist/cjs/components/NumberField/index.js.map +3 -3
  30. package/dist/cjs/components/PasswordField/PasswordField.js +9 -6
  31. package/dist/cjs/components/PasswordField/PasswordField.js.map +3 -3
  32. package/dist/cjs/components/PasswordField/index.js +9 -6
  33. package/dist/cjs/components/PasswordField/index.js.map +3 -3
  34. package/dist/cjs/components/Popover/Arrow.js +43 -0
  35. package/dist/cjs/components/Popover/Arrow.js.map +7 -0
  36. package/dist/cjs/components/Popover/Popover.js +258 -83
  37. package/dist/cjs/components/Popover/Popover.js.map +4 -4
  38. package/dist/cjs/components/Popover/index.js +258 -83
  39. package/dist/cjs/components/Popover/index.js.map +4 -4
  40. package/dist/cjs/components/Popover/useAutoUpdate.js +53 -0
  41. package/dist/cjs/components/Popover/useAutoUpdate.js.map +7 -0
  42. package/dist/cjs/components/Popover/useFloatingPosition.js +128 -0
  43. package/dist/cjs/components/Popover/useFloatingPosition.js.map +7 -0
  44. package/dist/cjs/components/Popover/useOutsidePress.js +46 -0
  45. package/dist/cjs/components/Popover/useOutsidePress.js.map +7 -0
  46. package/dist/cjs/components/TextField/TextField.js +6 -3
  47. package/dist/cjs/components/TextField/TextField.js.map +3 -3
  48. package/dist/cjs/components/TextField/adornmentWithClassName.js +3 -2
  49. package/dist/cjs/components/TextField/adornmentWithClassName.js.map +2 -2
  50. package/dist/cjs/components/TextField/index.js +6 -3
  51. package/dist/cjs/components/TextField/index.js.map +3 -3
  52. package/dist/cjs/components/index.js +550 -377
  53. package/dist/cjs/components/index.js.map +4 -4
  54. package/dist/cjs/index.js +550 -377
  55. package/dist/cjs/index.js.map +4 -4
  56. package/dist/cjs/meta.json +490 -121
  57. package/dist/esm/chunk-26KZYRE6.js +108 -0
  58. package/dist/esm/chunk-26KZYRE6.js.map +7 -0
  59. package/dist/esm/{chunk-XNEQHHNV.js → chunk-5QMKPWB4.js} +2 -2
  60. package/dist/esm/{chunk-IQKS662C.js → chunk-6RDK3FM2.js} +5 -3
  61. package/dist/esm/chunk-6RDK3FM2.js.map +7 -0
  62. package/dist/esm/{chunk-4HI2AOBC.js → chunk-6TSYA7CJ.js} +4 -7
  63. package/dist/esm/{chunk-4HI2AOBC.js.map → chunk-6TSYA7CJ.js.map} +2 -2
  64. package/dist/esm/chunk-CAL44W47.js +23 -0
  65. package/dist/esm/chunk-CAL44W47.js.map +7 -0
  66. package/dist/esm/{chunk-PEEQNAIN.js → chunk-DMYDWKKA.js} +4 -4
  67. package/dist/esm/{chunk-IM3I5CZL.js → chunk-I6CFRGID.js} +4 -3
  68. package/dist/esm/{chunk-IM3I5CZL.js.map → chunk-I6CFRGID.js.map} +2 -2
  69. package/dist/esm/chunk-K3ECDAUR.js +33 -0
  70. package/dist/esm/chunk-K3ECDAUR.js.map +7 -0
  71. package/dist/esm/{chunk-GJBH37DH.js → chunk-KFHPI67N.js} +4 -4
  72. package/dist/esm/{chunk-OEDU5ZEA.js → chunk-KUH5AB5T.js} +2 -2
  73. package/dist/esm/{chunk-JFDDW3IV.js → chunk-P7TPNRU4.js} +4 -8
  74. package/dist/esm/{chunk-JFDDW3IV.js.map → chunk-P7TPNRU4.js.map} +2 -2
  75. package/dist/esm/{chunk-F5ELD54X.js → chunk-QNOBB5HT.js} +2 -2
  76. package/dist/esm/{chunk-GV36OVX7.js → chunk-R67C5QTH.js} +2 -2
  77. package/dist/esm/{chunk-S4CU4XRB.js → chunk-VGFVSRWH.js} +2 -2
  78. package/dist/esm/chunk-VZ3IWSK6.js +158 -0
  79. package/dist/esm/chunk-VZ3IWSK6.js.map +7 -0
  80. package/dist/esm/{chunk-X4CMSAET.js → chunk-WSQWMVA2.js} +2 -2
  81. package/dist/esm/chunk-WYJP7HVL.js +26 -0
  82. package/dist/esm/chunk-WYJP7HVL.js.map +7 -0
  83. package/dist/esm/{chunk-OAG5T7NC.js → chunk-XEP6X7JU.js} +5 -5
  84. package/dist/esm/chunk-XEP6X7JU.js.map +7 -0
  85. package/dist/esm/components/AddressLookup/AddressLookup.js +6 -6
  86. package/dist/esm/components/AddressLookup/index.js +8 -8
  87. package/dist/esm/components/Breadcrumbs/Breadcrumbs.js +1 -1
  88. package/dist/esm/components/Breadcrumbs/index.js +3 -3
  89. package/dist/esm/components/Checkbox/index.js +1 -1
  90. package/dist/esm/components/Combobox/Combobox.js +5 -5
  91. package/dist/esm/components/Combobox/index.js +5 -5
  92. package/dist/esm/components/DateField/DateField.js +3 -3
  93. package/dist/esm/components/DateField/index.js +3 -3
  94. package/dist/esm/components/Drawer/index.js +3 -3
  95. package/dist/esm/components/DropdownMenu/Item.js +1 -1
  96. package/dist/esm/components/DropdownMenu/index.js +2 -2
  97. package/dist/esm/components/MaskedField/MaskedField.js +2 -2
  98. package/dist/esm/components/MaskedField/index.js +3 -3
  99. package/dist/esm/components/Modal/index.js +3 -3
  100. package/dist/esm/components/NumberField/NumberField.js +3 -3
  101. package/dist/esm/components/NumberField/index.js +3 -3
  102. package/dist/esm/components/PasswordField/PasswordField.js +3 -3
  103. package/dist/esm/components/PasswordField/index.js +3 -3
  104. package/dist/esm/components/Popover/Arrow.js +8 -0
  105. package/dist/esm/components/Popover/Arrow.js.map +7 -0
  106. package/dist/esm/components/Popover/Popover.js +5 -1
  107. package/dist/esm/components/Popover/index.js +5 -1
  108. package/dist/esm/components/Popover/useAutoUpdate.js +8 -0
  109. package/dist/esm/components/Popover/useAutoUpdate.js.map +7 -0
  110. package/dist/esm/components/Popover/useFloatingPosition.js +8 -0
  111. package/dist/esm/components/Popover/useFloatingPosition.js.map +7 -0
  112. package/dist/esm/components/Popover/useOutsidePress.js +8 -0
  113. package/dist/esm/components/Popover/useOutsidePress.js.map +7 -0
  114. package/dist/esm/components/TextField/TextField.js +2 -2
  115. package/dist/esm/components/TextField/adornmentWithClassName.js +1 -1
  116. package/dist/esm/components/TextField/index.js +2 -2
  117. package/dist/esm/components/index.js +81 -77
  118. package/dist/esm/index.js +81 -77
  119. package/dist/esm/meta.json +3495 -3149
  120. package/dist/tsconfig.build.tsbuildinfo +1 -1
  121. package/dist/types/components/Accordion/Accordion.d.ts +4 -4
  122. package/dist/types/components/Accordion/AccordionList.d.ts +4 -4
  123. package/dist/types/components/AddressLookup/AddressLookup.d.ts +4 -4
  124. package/dist/types/components/AddressLookup/LoqateAddressLookupService.d.ts +1 -1
  125. package/dist/types/components/Alert/Alert.d.ts +4 -4
  126. package/dist/types/components/Box/Box.d.ts +4 -4
  127. package/dist/types/components/Breadcrumbs/BreadcrumbItem.d.ts +4 -4
  128. package/dist/types/components/Breadcrumbs/Breadcrumbs.d.ts +4 -4
  129. package/dist/types/components/Button/Button.d.ts +4 -4
  130. package/dist/types/components/Checkbox/Checkbox.d.ts +4 -4
  131. package/dist/types/components/Checkbox/CheckboxGroup.d.ts +4 -4
  132. package/dist/types/components/Combobox/Combobox.d.ts +2 -5
  133. package/dist/types/components/Combobox/useComboboxOptions.d.ts +1 -1
  134. package/dist/types/components/Container/Container.d.ts +4 -4
  135. package/dist/types/components/DateField/DateField.d.ts +4 -4
  136. package/dist/types/components/Divider/Divider.d.ts +4 -4
  137. package/dist/types/components/Drawer/Content.d.ts +4 -4
  138. package/dist/types/components/Drawer/Drawer.d.ts +4 -4
  139. package/dist/types/components/Drawer/Header.d.ts +4 -4
  140. package/dist/types/components/DropdownMenu/DropdownMenu.d.ts +4 -4
  141. package/dist/types/components/DropdownMenu/Item.d.ts +4 -4
  142. package/dist/types/components/ErrorMessage/ErrorMessage.d.ts +4 -4
  143. package/dist/types/components/ExpandableText/ExpandableText.d.ts +4 -4
  144. package/dist/types/components/Fieldset/Fieldset.d.ts +4 -4
  145. package/dist/types/components/Flex/Flex.d.ts +4 -4
  146. package/dist/types/components/Grid/Grid.d.ts +4 -4
  147. package/dist/types/components/Grid/Item.d.ts +4 -4
  148. package/dist/types/components/Image/Image.d.ts +4 -4
  149. package/dist/types/components/Label/Label.d.ts +4 -4
  150. package/dist/types/components/Link/Link.d.ts +4 -4
  151. package/dist/types/components/List/List.d.ts +4 -4
  152. package/dist/types/components/List/ListItem.d.ts +4 -4
  153. package/dist/types/components/LoadingIndicator/LoadingIndicator.d.ts +4 -4
  154. package/dist/types/components/Logo/Logo.d.ts +4 -4
  155. package/dist/types/components/MaskedField/MaskedField.d.ts +4 -4
  156. package/dist/types/components/Modal/Content.d.ts +4 -4
  157. package/dist/types/components/Modal/Header.d.ts +4 -4
  158. package/dist/types/components/Modal/Modal.d.ts +4 -4
  159. package/dist/types/components/NumberField/NumberField.d.ts +4 -4
  160. package/dist/types/components/Option/Option.d.ts +4 -4
  161. package/dist/types/components/PasswordField/PasswordField.d.ts +4 -4
  162. package/dist/types/components/Popover/Arrow.d.ts +9 -0
  163. package/dist/types/components/Popover/useAutoUpdate.d.ts +9 -0
  164. package/dist/types/components/Popover/useFloatingPosition.d.ts +17 -0
  165. package/dist/types/components/Popover/useOutsidePress.d.ts +9 -0
  166. package/dist/types/components/Progress/Progress.d.ts +4 -4
  167. package/dist/types/components/Radio/Radio.d.ts +4 -4
  168. package/dist/types/components/Radio/RadioGroup.d.ts +4 -4
  169. package/dist/types/components/SVG/SVG.d.ts +4 -4
  170. package/dist/types/components/Segment/Segment.d.ts +4 -4
  171. package/dist/types/components/Segment/SegmentGroup.d.ts +4 -4
  172. package/dist/types/components/Select/Select.d.ts +4 -4
  173. package/dist/types/components/Stack/Stack.d.ts +4 -4
  174. package/dist/types/components/Switch/Switch.d.ts +4 -4
  175. package/dist/types/components/Table/Body.d.ts +4 -4
  176. package/dist/types/components/Table/Cell.d.ts +4 -4
  177. package/dist/types/components/Table/Foot.d.ts +4 -4
  178. package/dist/types/components/Table/Head.d.ts +4 -4
  179. package/dist/types/components/Table/HeaderCell.d.ts +4 -4
  180. package/dist/types/components/Table/Row.d.ts +4 -4
  181. package/dist/types/components/Table/Table.d.ts +4 -4
  182. package/dist/types/components/Text/Text.d.ts +4 -4
  183. package/dist/types/components/TextArea/TextArea.d.ts +4 -4
  184. package/dist/types/components/TextAreaInput/TextAreaInput.d.ts +4 -4
  185. package/dist/types/components/TextField/TextField.d.ts +1 -4
  186. package/dist/types/components/TextField/adornmentWithClassName.d.ts +3 -1
  187. package/dist/types/components/TextOrHTML/TextOrHTML.d.ts +4 -4
  188. package/dist/types/components/Title/Title.d.ts +4 -4
  189. package/dist/types/components/Toast/ToastOptionsDoc.d.ts +4 -8
  190. package/dist/types/components/Toast/Toaster.d.ts +4 -4
  191. package/dist/types/hooks/useButton/useButton.d.ts +5 -5
  192. package/dist/types/hooks/useLabel/useLabel.d.ts +1 -1
  193. package/package.json +11 -11
  194. package/src/components/Box/Box.test.tsx +1 -2
  195. package/src/components/Breadcrumbs/Breadcrumbs.tsx +3 -7
  196. package/src/components/Button/Button.stories.tsx +1 -1
  197. package/src/components/Combobox/Combobox.tsx +2 -4
  198. package/src/components/DropdownMenu/DropdownMenu.stories.tsx +1 -1
  199. package/src/components/DropdownMenu/Item.tsx +3 -6
  200. package/src/components/Grid/Grid.stories.tsx +1 -1
  201. package/src/components/Popover/Arrow.tsx +25 -0
  202. package/src/components/Popover/Popover.characterization.test.tsx +269 -0
  203. package/src/components/Popover/Popover.stories.tsx +40 -3
  204. package/src/components/Popover/Popover.test.tsx +6 -2
  205. package/src/components/Popover/Popover.tsx +87 -81
  206. package/src/components/Popover/useAutoUpdate.ts +43 -0
  207. package/src/components/Popover/useFloatingPosition.ts +177 -0
  208. package/src/components/Popover/useOutsidePress.ts +31 -0
  209. package/src/components/TextField/TextField.tsx +3 -1
  210. package/src/components/TextField/adornmentWithClassName.ts +4 -3
  211. package/src/hooks/useBreakpoint/useBreakpoint.test.tsx +4 -4
  212. package/src/styles.d.ts +2 -0
  213. package/dist/esm/chunk-IQKS662C.js.map +0 -7
  214. package/dist/esm/chunk-O5YEU5TG.js +0 -155
  215. package/dist/esm/chunk-O5YEU5TG.js.map +0 -7
  216. package/dist/esm/chunk-OAG5T7NC.js.map +0 -7
  217. /package/dist/esm/{chunk-XNEQHHNV.js.map → chunk-5QMKPWB4.js.map} +0 -0
  218. /package/dist/esm/{chunk-PEEQNAIN.js.map → chunk-DMYDWKKA.js.map} +0 -0
  219. /package/dist/esm/{chunk-GJBH37DH.js.map → chunk-KFHPI67N.js.map} +0 -0
  220. /package/dist/esm/{chunk-OEDU5ZEA.js.map → chunk-KUH5AB5T.js.map} +0 -0
  221. /package/dist/esm/{chunk-F5ELD54X.js.map → chunk-QNOBB5HT.js.map} +0 -0
  222. /package/dist/esm/{chunk-GV36OVX7.js.map → chunk-R67C5QTH.js.map} +0 -0
  223. /package/dist/esm/{chunk-S4CU4XRB.js.map → chunk-VGFVSRWH.js.map} +0 -0
  224. /package/dist/esm/{chunk-X4CMSAET.js.map → chunk-WSQWMVA2.js.map} +0 -0
@@ -0,0 +1,108 @@
1
+ // src/components/Popover/useFloatingPosition.ts
2
+ import { useCallback, useLayoutEffect } from "react";
3
+ var ABSOLUTE_FLOATING_STYLES = {
4
+ position: "absolute",
5
+ top: 0,
6
+ left: 0,
7
+ width: "max-content"
8
+ };
9
+ var FIXED_FLOATING_STYLES = {
10
+ position: "fixed",
11
+ top: 0,
12
+ left: 0,
13
+ width: "max-content"
14
+ };
15
+ var INITIAL_ARROW_STYLES = {
16
+ position: "absolute"
17
+ };
18
+ var VIEWPORT_PADDING = 0;
19
+ var createsFixedContainingBlock = (el) => {
20
+ const style = window.getComputedStyle(el);
21
+ return style.transform !== "none" || style.filter !== "none" || style.backdropFilter !== "none" || style.perspective !== "none" || /\b(transform|filter|perspective)\b/.test(style.willChange);
22
+ };
23
+ var useFloatingPosition = ({
24
+ referenceRef,
25
+ floatingRef,
26
+ arrowRef,
27
+ isOpen,
28
+ offsetPx,
29
+ arrowWidth,
30
+ useFixedStrategy
31
+ }) => {
32
+ const update = useCallback(() => {
33
+ const reference = referenceRef.current;
34
+ const floating = floatingRef.current;
35
+ if (!reference || !floating) return;
36
+ const refRect = reference.getBoundingClientRect();
37
+ const floatingWidth = floating.offsetWidth;
38
+ const floatingHeight = floating.offsetHeight;
39
+ const scrollX = useFixedStrategy ? 0 : window.scrollX;
40
+ const scrollY = useFixedStrategy ? 0 : window.scrollY;
41
+ const parent = floating.parentElement;
42
+ const parentIsCb = useFixedStrategy && !!parent && createsFixedContainingBlock(parent);
43
+ const boundsRect = parentIsCb ? parent.getBoundingClientRect() : {
44
+ left: 0,
45
+ top: 0,
46
+ right: window.innerWidth,
47
+ bottom: window.innerHeight
48
+ };
49
+ const bottomTopViewport = refRect.bottom + offsetPx;
50
+ const topTopViewport = refRect.top - floatingHeight - offsetPx;
51
+ const overflowsBottom = bottomTopViewport + floatingHeight > boundsRect.bottom;
52
+ const fitsTop = topTopViewport >= boundsRect.top;
53
+ const nextPlacement = overflowsBottom && fitsTop ? "top" : "bottom";
54
+ const topViewport = nextPlacement === "bottom" ? bottomTopViewport : topTopViewport;
55
+ const rawLeftViewport = refRect.left + refRect.width / 2 - floatingWidth / 2;
56
+ const minLeftViewport = boundsRect.left + VIEWPORT_PADDING;
57
+ const maxLeftViewport = Math.max(
58
+ minLeftViewport,
59
+ boundsRect.right - floatingWidth - VIEWPORT_PADDING
60
+ );
61
+ const leftViewport = Math.min(
62
+ Math.max(minLeftViewport, rawLeftViewport),
63
+ maxLeftViewport
64
+ );
65
+ const cbOffsetLeft = parentIsCb ? boundsRect.left : 0;
66
+ const cbOffsetTop = parentIsCb ? boundsRect.top : 0;
67
+ floating.style.top = `${topViewport + scrollY - cbOffsetTop}px`;
68
+ floating.style.left = `${leftViewport + scrollX - cbOffsetLeft}px`;
69
+ const arrow = arrowRef.current;
70
+ if (!arrow) return;
71
+ const arrowHalf = arrowWidth / 2;
72
+ const refCenterX = refRect.left + refRect.width / 2;
73
+ const rawArrowLeft = refCenterX - leftViewport - arrowHalf;
74
+ const maxArrowLeft = Math.max(0, floatingWidth - arrowWidth);
75
+ const arrowLeft = Math.min(Math.max(0, rawArrowLeft), maxArrowLeft);
76
+ arrow.style.left = `${arrowLeft}px`;
77
+ if (nextPlacement === "bottom") {
78
+ arrow.style.bottom = "100%";
79
+ arrow.style.top = "";
80
+ arrow.style.transform = "rotate(180deg)";
81
+ } else {
82
+ arrow.style.top = "100%";
83
+ arrow.style.bottom = "";
84
+ arrow.style.transform = "";
85
+ }
86
+ }, [
87
+ referenceRef,
88
+ floatingRef,
89
+ arrowRef,
90
+ offsetPx,
91
+ arrowWidth,
92
+ useFixedStrategy
93
+ ]);
94
+ useLayoutEffect(() => {
95
+ if (!isOpen) return;
96
+ update();
97
+ }, [isOpen, update]);
98
+ return {
99
+ initialFloatingStyles: useFixedStrategy ? FIXED_FLOATING_STYLES : ABSOLUTE_FLOATING_STYLES,
100
+ initialArrowStyles: INITIAL_ARROW_STYLES,
101
+ update
102
+ };
103
+ };
104
+
105
+ export {
106
+ useFloatingPosition
107
+ };
108
+ //# sourceMappingURL=chunk-26KZYRE6.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/components/Popover/useFloatingPosition.ts"],
4
+ "sourcesContent": ["import type { CSSProperties, RefObject } from \"react\";\nimport { useCallback, useLayoutEffect } from \"react\";\n\ntype Placement = \"bottom\" | \"top\";\n\ninterface UseFloatingPositionArgs {\n referenceRef: RefObject<HTMLElement | null>;\n floatingRef: RefObject<HTMLDivElement | null>;\n arrowRef: RefObject<SVGSVGElement | null>;\n isOpen: boolean;\n offsetPx: number;\n arrowWidth: number;\n useFixedStrategy: boolean;\n}\n\ninterface UseFloatingPositionResult {\n initialFloatingStyles: CSSProperties;\n initialArrowStyles: CSSProperties;\n update: () => void;\n}\n\n// Two positioning strategies:\n// - `absolute` + document-relative coords (viewport rect + window.scrollY/X)\n// when portalled to document.body. The initial containing block is the\n// document, so absolute coords pin to the trigger and scroll natively.\n// - `fixed` + viewport coords when portalled inside a <dialog> (top-layer).\n// The dialog's own box would otherwise become the containing block for an\n// `absolute` child, throwing off coordinates and triggering `overflow: hidden`\n// clipping. `fixed` keeps the containing block as the viewport.\nconst ABSOLUTE_FLOATING_STYLES: CSSProperties = {\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"max-content\",\n};\n\nconst FIXED_FLOATING_STYLES: CSSProperties = {\n position: \"fixed\",\n top: 0,\n left: 0,\n width: \"max-content\",\n};\n\nconst INITIAL_ARROW_STYLES: CSSProperties = {\n position: \"absolute\",\n};\n\nconst VIEWPORT_PADDING = 0;\n\n// Properties that make an ancestor the containing block for a `position: fixed`\n// descendant, overriding the initial viewport containing block. When the portal\n// target (dialog) has any of these, `position: fixed` coords are interpreted\n// relative to the dialog's box, not the viewport \u2014 we compensate by subtracting\n// the dialog's viewport offset.\nconst createsFixedContainingBlock = (el: HTMLElement): boolean => {\n const style = window.getComputedStyle(el);\n return (\n style.transform !== \"none\" ||\n style.filter !== \"none\" ||\n style.backdropFilter !== \"none\" ||\n style.perspective !== \"none\" ||\n /\\b(transform|filter|perspective)\\b/.test(style.willChange)\n );\n};\n\nexport const useFloatingPosition = ({\n referenceRef,\n floatingRef,\n arrowRef,\n isOpen,\n offsetPx,\n arrowWidth,\n useFixedStrategy,\n}: UseFloatingPositionArgs): UseFloatingPositionResult => {\n // Writes styles directly to the DOM (bypassing React state) so scroll/resize\n // handlers can update position in the same event-frame the browser uses to\n // paint the scroll, eliminating the re-render lag that shows up as a\n // trigger-vs-popover parallax on fast scroll.\n const update = useCallback(() => {\n const reference = referenceRef.current;\n const floating = floatingRef.current;\n if (!reference || !floating) return;\n\n const refRect = reference.getBoundingClientRect();\n const floatingWidth = floating.offsetWidth;\n const floatingHeight = floating.offsetHeight;\n const scrollX = useFixedStrategy ? 0 : window.scrollX;\n const scrollY = useFixedStrategy ? 0 : window.scrollY;\n\n // Clamp to the portal target's bounds when the dialog is a containing\n // block (its own `overflow: hidden` would clip the popover). Otherwise\n // clamp to the viewport.\n const parent = floating.parentElement;\n const parentIsCb =\n useFixedStrategy && !!parent && createsFixedContainingBlock(parent);\n const boundsRect = parentIsCb\n ? parent.getBoundingClientRect()\n : {\n left: 0,\n top: 0,\n right: window.innerWidth,\n bottom: window.innerHeight,\n };\n\n const bottomTopViewport = refRect.bottom + offsetPx;\n const topTopViewport = refRect.top - floatingHeight - offsetPx;\n const overflowsBottom =\n bottomTopViewport + floatingHeight > boundsRect.bottom;\n const fitsTop = topTopViewport >= boundsRect.top;\n const nextPlacement: Placement =\n overflowsBottom && fitsTop ? \"top\" : \"bottom\";\n\n const topViewport =\n nextPlacement === \"bottom\" ? bottomTopViewport : topTopViewport;\n\n const rawLeftViewport =\n refRect.left + refRect.width / 2 - floatingWidth / 2;\n const minLeftViewport = boundsRect.left + VIEWPORT_PADDING;\n const maxLeftViewport = Math.max(\n minLeftViewport,\n boundsRect.right - floatingWidth - VIEWPORT_PADDING,\n );\n const leftViewport = Math.min(\n Math.max(minLeftViewport, rawLeftViewport),\n maxLeftViewport,\n );\n\n // Subtract containing-block offset when the dialog is the CB, so\n // `position: fixed` coords land at the intended viewport position.\n const cbOffsetLeft = parentIsCb ? boundsRect.left : 0;\n const cbOffsetTop = parentIsCb ? boundsRect.top : 0;\n\n floating.style.top = `${topViewport + scrollY - cbOffsetTop}px`;\n floating.style.left = `${leftViewport + scrollX - cbOffsetLeft}px`;\n\n const arrow = arrowRef.current;\n if (!arrow) return;\n\n // Arrow coords are relative to the floating element, so scroll cancels out.\n const arrowHalf = arrowWidth / 2;\n const refCenterX = refRect.left + refRect.width / 2;\n const rawArrowLeft = refCenterX - leftViewport - arrowHalf;\n const maxArrowLeft = Math.max(0, floatingWidth - arrowWidth);\n const arrowLeft = Math.min(Math.max(0, rawArrowLeft), maxArrowLeft);\n\n arrow.style.left = `${arrowLeft}px`;\n if (nextPlacement === \"bottom\") {\n arrow.style.bottom = \"100%\";\n arrow.style.top = \"\";\n arrow.style.transform = \"rotate(180deg)\";\n } else {\n arrow.style.top = \"100%\";\n arrow.style.bottom = \"\";\n arrow.style.transform = \"\";\n }\n }, [\n referenceRef,\n floatingRef,\n arrowRef,\n offsetPx,\n arrowWidth,\n useFixedStrategy,\n ]);\n\n useLayoutEffect(() => {\n if (!isOpen) return;\n update();\n }, [isOpen, update]);\n\n return {\n initialFloatingStyles: useFixedStrategy\n ? FIXED_FLOATING_STYLES\n : ABSOLUTE_FLOATING_STYLES,\n initialArrowStyles: INITIAL_ARROW_STYLES,\n update,\n };\n};\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-CI5GCPUG.js";
5
5
  import {
6
6
  TextField
7
- } from "./chunk-IQKS662C.js";
7
+ } from "./chunk-6RDK3FM2.js";
8
8
  import {
9
9
  mergeRefs
10
10
  } from "./chunk-QGGILW3D.js";
@@ -97,4 +97,4 @@ export {
97
97
  MIN_MAX_ERROR,
98
98
  DateField
99
99
  };
100
- //# sourceMappingURL=chunk-XNEQHHNV.js.map
100
+ //# sourceMappingURL=chunk-5QMKPWB4.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  adornmentWithClassName
3
- } from "./chunk-IM3I5CZL.js";
3
+ } from "./chunk-I6CFRGID.js";
4
4
  import {
5
5
  ErrorMessage
6
6
  } from "./chunk-MZJT3USG.js";
@@ -19,9 +19,10 @@ import {
19
19
 
20
20
  // src/components/TextField/TextField.tsx
21
21
  import classNames from "classnames/dedupe";
22
+ import { memo } from "react";
22
23
  import "@simplybusiness/mobius/src/components/TextField/TextField.css";
23
24
  import { jsx, jsxs } from "react/jsx-runtime";
24
- var TextField = ({ ref, ...props }) => {
25
+ var TextFieldInner = ({ ref, ...props }) => {
25
26
  const {
26
27
  isDisabled,
27
28
  type = "text",
@@ -115,9 +116,10 @@ var TextField = ({ ref, ...props }) => {
115
116
  /* @__PURE__ */ jsx(ErrorMessage, { ...errorMessageProps, errorMessage })
116
117
  ] });
117
118
  };
119
+ var TextField = memo(TextFieldInner);
118
120
  TextField.displayName = "TextField";
119
121
 
120
122
  export {
121
123
  TextField
122
124
  };
123
- //# sourceMappingURL=chunk-IQKS662C.js.map
125
+ //# sourceMappingURL=chunk-6RDK3FM2.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/components/TextField/TextField.tsx"],
4
+ "sourcesContent": ["\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport { memo } from \"react\";\nimport type {\n HTMLInputTypeAttribute,\n ReactElement,\n ReactNode,\n Ref,\n RefAttributes,\n} from \"react\";\nimport type { UseTextFieldProps } from \"../../hooks\";\nimport { useTextField, useValidationClasses } from \"../../hooks\";\nimport type { DOMProps, FocusEvents } from \"../../types\";\nimport { ErrorMessage } from \"../ErrorMessage\";\nimport { Label } from \"../Label\";\nimport { Stack } from \"../Stack\";\nimport { adornmentWithClassName } from \"./adornmentWithClassName\";\nimport \"./TextField.css\";\n\nexport type TextFieldElementType = HTMLInputElement;\nexport interface TextFieldProps\n extends\n DOMProps,\n FocusEvents,\n UseTextFieldProps,\n RefAttributes<TextFieldElementType> {\n className?: string;\n errorMessage?: string;\n children?: ReactNode;\n label?: string;\n type?: Exclude<\n HTMLInputTypeAttribute,\n | \"button\"\n | \"checkbox\"\n | \"color\"\n | \"date\"\n | \"datetime-local\"\n | \"file\"\n | \"image\"\n | \"month\"\n | \"radio\"\n | \"range\"\n | \"reset\"\n | \"submit\"\n | \"week\"\n >;\n prefixInside?: ReactElement;\n prefixOutside?: ReactElement;\n suffixInside?: ReactElement;\n suffixOutside?: ReactElement;\n}\n\nexport type TextFieldRef = Ref<TextFieldElementType>;\n\nconst TextFieldInner = ({ ref, ...props }: TextFieldProps) => {\n const {\n isDisabled,\n type = \"text\",\n isInvalid,\n className,\n label,\n errorMessage,\n children,\n isRequired,\n prefixInside,\n prefixOutside,\n suffixInside,\n suffixOutside,\n autoComplete,\n isReadOnly,\n ...otherProps\n } = props;\n\n const resolvedAutoComplete =\n autoComplete ??\n (type === \"email\" ? \"email\" : type === \"tel\" ? \"tel\" : undefined);\n\n const { inputProps, labelProps, errorMessageProps } = useTextField({\n ...props,\n autoComplete: resolvedAutoComplete,\n \"aria-errormessage\": errorMessage,\n });\n\n const hidden = type === \"hidden\";\n\n const validationClasses = useValidationClasses({ isInvalid });\n\n const textfieldClasses = {\n \"--is-disabled\": isDisabled,\n \"--is-required\": typeof isRequired === \"boolean\" && isRequired,\n \"--is-optional\": typeof isRequired === \"boolean\" && !isRequired,\n \"--is-hidden\": hidden,\n [className || \"\"]: true,\n };\n\n const sharedClasses = classNames(validationClasses, textfieldClasses);\n\n const labelClasses = classNames(\n {\n \"--is-disabled\": isDisabled,\n },\n validationClasses,\n );\n\n const containerClasses = classNames(\n \"mobius\",\n \"mobius-text-field\",\n sharedClasses,\n );\n\n const inputClasses = classNames(\n \"mobius\",\n \"mobius-text-field__input\",\n sharedClasses,\n );\n\n const inputWrapperClasses = classNames(\n \"mobius-text-field__input-wrapper\",\n sharedClasses,\n );\n\n return (\n <Stack gap=\"xs\" className={containerClasses}>\n {label && !hidden && (\n <Label {...labelProps} className={labelClasses}>\n {label}\n </Label>\n )}\n <div className=\"mobius-text-field__inner-container\">\n {adornmentWithClassName(\n prefixOutside,\n labelClasses,\n \"mobius-text-field__prefix-outside\",\n )}\n <div className={inputWrapperClasses}>\n {adornmentWithClassName(\n prefixInside,\n labelClasses,\n \"mobius-text-field__prefix-inside\",\n )}\n <input\n {...otherProps}\n {...inputProps}\n ref={ref}\n type={type}\n className={inputClasses}\n />\n {adornmentWithClassName(\n suffixInside,\n labelClasses,\n \"mobius-text-field__suffix-inside\",\n )}\n </div>\n {adornmentWithClassName(\n suffixOutside,\n labelClasses,\n \"mobius-text-field__suffix-outside\",\n )}\n </div>\n {children && (\n <div className=\"mobius-text-field__children\">{children}</div>\n )}\n\n <ErrorMessage {...errorMessageProps} errorMessage={errorMessage} />\n </Stack>\n );\n};\n\nconst TextField = memo(TextFieldInner);\nTextField.displayName = \"TextField\";\nexport { TextField };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAEA,OAAO,gBAAgB;AACvB,SAAS,YAAY;AAerB,OAAO;AA2GC,cAUA,YAVA;AAtER,IAAM,iBAAiB,CAAC,EAAE,KAAK,GAAG,MAAM,MAAsB;AAC5D,QAAM;AAAA,IACJ;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,IAAI;AAEJ,QAAM,uBACJ,iBACC,SAAS,UAAU,UAAU,SAAS,QAAQ,QAAQ;AAEzD,QAAM,EAAE,YAAY,YAAY,kBAAkB,IAAI,aAAa;AAAA,IACjE,GAAG;AAAA,IACH,cAAc;AAAA,IACd,qBAAqB;AAAA,EACvB,CAAC;AAED,QAAM,SAAS,SAAS;AAExB,QAAM,oBAAoB,qBAAqB,EAAE,UAAU,CAAC;AAE5D,QAAM,mBAAmB;AAAA,IACvB,iBAAiB;AAAA,IACjB,iBAAiB,OAAO,eAAe,aAAa;AAAA,IACpD,iBAAiB,OAAO,eAAe,aAAa,CAAC;AAAA,IACrD,eAAe;AAAA,IACf,CAAC,aAAa,EAAE,GAAG;AAAA,EACrB;AAEA,QAAM,gBAAgB,WAAW,mBAAmB,gBAAgB;AAEpE,QAAM,eAAe;AAAA,IACnB;AAAA,MACE,iBAAiB;AAAA,IACnB;AAAA,IACA;AAAA,EACF;AAEA,QAAM,mBAAmB;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,QAAM,eAAe;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,QAAM,sBAAsB;AAAA,IAC1B;AAAA,IACA;AAAA,EACF;AAEA,SACE,qBAAC,SAAM,KAAI,MAAK,WAAW,kBACxB;AAAA,aAAS,CAAC,UACT,oBAAC,SAAO,GAAG,YAAY,WAAW,cAC/B,iBACH;AAAA,IAEF,qBAAC,SAAI,WAAU,sCACZ;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,qBAAC,SAAI,WAAW,qBACb;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACE,GAAG;AAAA,YACH,GAAG;AAAA,YACJ;AAAA,YACA;AAAA,YACA,WAAW;AAAA;AAAA,QACb;AAAA,QACC;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,SACF;AAAA,MACC;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,OACF;AAAA,IACC,YACC,oBAAC,SAAI,WAAU,+BAA+B,UAAS;AAAA,IAGzD,oBAAC,gBAAc,GAAG,mBAAmB,cAA4B;AAAA,KACnE;AAEJ;AAEA,IAAM,YAAY,KAAK,cAAc;AACrC,UAAU,cAAc;",
6
+ "names": []
7
+ }
@@ -22,12 +22,9 @@ var Item = ({ ref, ...props }) => {
22
22
  child.props.className,
23
23
  classes
24
24
  );
25
- return cloneElement(
26
- child,
27
- {
28
- className: childClasses
29
- }
30
- );
25
+ return cloneElement(child, {
26
+ className: childClasses
27
+ });
31
28
  }
32
29
  return /* @__PURE__ */ jsx("span", { className: classes, children: child });
33
30
  }) });
@@ -37,4 +34,4 @@ Item.displayName = "DropdownMenu.Item";
37
34
  export {
38
35
  Item
39
36
  };
40
- //# sourceMappingURL=chunk-4HI2AOBC.js.map
37
+ //# sourceMappingURL=chunk-6TSYA7CJ.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/components/DropdownMenu/Item.tsx"],
4
- "sourcesContent": ["import type { Ref, RefAttributes, ReactNode, ReactElement } from \"react\";\nimport { cloneElement, isValidElement, Children } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\n\nexport type ItemElementType = HTMLLIElement;\n\nexport interface ItemProps extends DOMProps, RefAttributes<ItemElementType> {\n elementType?: React.ElementType;\n /** Custom class name for setting specific CSS */\n className?: string;\n active?: boolean;\n children?: ReactNode;\n onClick?: () => void;\n}\n\nexport type ItemRef = Ref<ItemElementType>;\n\nconst Item = ({ ref, ...props }: ItemProps) => {\n const {\n elementType: Element = \"li\",\n active,\n onClick,\n children,\n ...otherProps\n } = props;\n const classes = classNames(\n \"mobius\",\n \"mobius-dropdown-menu__item\",\n { \"--is-active\": active },\n otherProps.className,\n );\n\n return (\n <Element ref={ref} onClick={onClick} {...otherProps}>\n {Children.map(children, child => {\n if (isValidElement(child)) {\n const childClasses = classNames(\n (child.props as { className?: string }).className,\n classes,\n );\n return cloneElement(\n child as ReactElement,\n {\n className: childClasses,\n } as { className: string },\n );\n }\n\n return <span className={classes}>{child}</span>;\n })}\n </Element>\n );\n};\n\nItem.displayName = \"DropdownMenu.Item\";\nexport { Item };\n"],
5
- "mappings": ";AACA,SAAS,cAAc,gBAAgB,gBAAgB;AACvD,OAAO,gBAAgB;AA+CR;AA/Bf,IAAM,OAAO,CAAC,EAAE,KAAK,GAAG,MAAM,MAAiB;AAC7C,QAAM;AAAA,IACJ,aAAa,UAAU;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,IAAI;AACJ,QAAM,UAAU;AAAA,IACd;AAAA,IACA;AAAA,IACA,EAAE,eAAe,OAAO;AAAA,IACxB,WAAW;AAAA,EACb;AAEA,SACE,oBAAC,WAAQ,KAAU,SAAmB,GAAG,YACtC,mBAAS,IAAI,UAAU,WAAS;AAC/B,QAAI,eAAe,KAAK,GAAG;AACzB,YAAM,eAAe;AAAA,QAClB,MAAM,MAAiC;AAAA,QACxC;AAAA,MACF;AACA,aAAO;AAAA,QACL;AAAA,QACA;AAAA,UACE,WAAW;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAEA,WAAO,oBAAC,UAAK,WAAW,SAAU,iBAAM;AAAA,EAC1C,CAAC,GACH;AAEJ;AAEA,KAAK,cAAc;",
4
+ "sourcesContent": ["import type { Ref, RefAttributes, ReactNode, ReactElement } from \"react\";\nimport { cloneElement, isValidElement, Children } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\n\nexport type ItemElementType = HTMLLIElement;\n\nexport interface ItemProps extends DOMProps, RefAttributes<ItemElementType> {\n elementType?: React.ElementType;\n /** Custom class name for setting specific CSS */\n className?: string;\n active?: boolean;\n children?: ReactNode;\n onClick?: () => void;\n}\n\nexport type ItemRef = Ref<ItemElementType>;\n\nconst Item = ({ ref, ...props }: ItemProps) => {\n const {\n elementType: Element = \"li\",\n active,\n onClick,\n children,\n ...otherProps\n } = props;\n const classes = classNames(\n \"mobius\",\n \"mobius-dropdown-menu__item\",\n { \"--is-active\": active },\n otherProps.className,\n );\n\n return (\n <Element ref={ref} onClick={onClick} {...otherProps}>\n {Children.map(children, child => {\n if (isValidElement(child)) {\n const childClasses = classNames(\n (child.props as { className?: string }).className,\n classes,\n );\n return cloneElement(child as ReactElement<{ className?: string }>, {\n className: childClasses,\n });\n }\n\n return <span className={classes}>{child}</span>;\n })}\n </Element>\n );\n};\n\nItem.displayName = \"DropdownMenu.Item\";\nexport { Item };\n"],
5
+ "mappings": ";AACA,SAAS,cAAc,gBAAgB,gBAAgB;AACvD,OAAO,gBAAgB;AA4CR;AA5Bf,IAAM,OAAO,CAAC,EAAE,KAAK,GAAG,MAAM,MAAiB;AAC7C,QAAM;AAAA,IACJ,aAAa,UAAU;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,IAAI;AACJ,QAAM,UAAU;AAAA,IACd;AAAA,IACA;AAAA,IACA,EAAE,eAAe,OAAO;AAAA,IACxB,WAAW;AAAA,EACb;AAEA,SACE,oBAAC,WAAQ,KAAU,SAAmB,GAAG,YACtC,mBAAS,IAAI,UAAU,WAAS;AAC/B,QAAI,eAAe,KAAK,GAAG;AACzB,YAAM,eAAe;AAAA,QAClB,MAAM,MAAiC;AAAA,QACxC;AAAA,MACF;AACA,aAAO,aAAa,OAA+C;AAAA,QACjE,WAAW;AAAA,MACb,CAAC;AAAA,IACH;AAEA,WAAO,oBAAC,UAAK,WAAW,SAAU,iBAAM;AAAA,EAC1C,CAAC,GACH;AAEJ;AAEA,KAAK,cAAc;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,23 @@
1
+ // src/components/Popover/Arrow.tsx
2
+ import { jsx } from "react/jsx-runtime";
3
+ var Arrow = ({ ref, width = 20, className, style }) => {
4
+ const height = width / 2;
5
+ return /* @__PURE__ */ jsx(
6
+ "svg",
7
+ {
8
+ ref,
9
+ className,
10
+ "aria-hidden": "true",
11
+ width,
12
+ height,
13
+ viewBox: `0 0 ${width} ${height}`,
14
+ style,
15
+ children: /* @__PURE__ */ jsx("path", { d: `M0,0 H${width} L${width / 2},${height} Z` })
16
+ }
17
+ );
18
+ };
19
+
20
+ export {
21
+ Arrow
22
+ };
23
+ //# sourceMappingURL=chunk-CAL44W47.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/components/Popover/Arrow.tsx"],
4
+ "sourcesContent": ["import type { CSSProperties, Ref } from \"react\";\n\ninterface ArrowProps {\n ref?: Ref<SVGSVGElement>;\n width?: number;\n className?: string;\n style?: CSSProperties;\n}\n\nexport const Arrow = ({ ref, width = 20, className, style }: ArrowProps) => {\n const height = width / 2;\n return (\n <svg\n ref={ref}\n className={className}\n aria-hidden=\"true\"\n width={width}\n height={height}\n viewBox={`0 0 ${width} ${height}`}\n style={style}\n >\n <path d={`M0,0 H${width} L${width / 2},${height} Z`} />\n </svg>\n );\n};\n"],
5
+ "mappings": ";AAqBM;AAZC,IAAM,QAAQ,CAAC,EAAE,KAAK,QAAQ,IAAI,WAAW,MAAM,MAAkB;AAC1E,QAAM,SAAS,QAAQ;AACvB,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,eAAY;AAAA,MACZ;AAAA,MACA;AAAA,MACA,SAAS,OAAO,KAAK,IAAI,MAAM;AAAA,MAC/B;AAAA,MAEA,8BAAC,UAAK,GAAG,SAAS,KAAK,KAAK,QAAQ,CAAC,IAAI,MAAM,MAAM;AAAA;AAAA,EACvD;AAEJ;",
6
+ "names": []
7
+ }
@@ -1,12 +1,12 @@
1
+ import {
2
+ Content
3
+ } from "./chunk-55NPJOV3.js";
1
4
  import {
2
5
  Header
3
6
  } from "./chunk-MPB5F6QL.js";
4
7
  import {
5
8
  Modal
6
9
  } from "./chunk-JJUTS5ET.js";
7
- import {
8
- Content
9
- } from "./chunk-55NPJOV3.js";
10
10
 
11
11
  // src/components/Modal/index.tsx
12
12
  var Modal2 = Object.assign(Modal, {
@@ -18,4 +18,4 @@ Modal2.displayName = "Modal";
18
18
  export {
19
19
  Modal2 as Modal
20
20
  };
21
- //# sourceMappingURL=chunk-PEEQNAIN.js.map
21
+ //# sourceMappingURL=chunk-DMYDWKKA.js.map
@@ -3,9 +3,10 @@ import classNames from "classnames/dedupe";
3
3
  import { cloneElement } from "react";
4
4
  var adornmentWithClassName = (component, validationClasses, className) => {
5
5
  if (!component) return null;
6
- return cloneElement(component, {
6
+ const typedComponent = component;
7
+ return cloneElement(typedComponent, {
7
8
  className: classNames(
8
- component.props.className,
9
+ typedComponent.props.className,
9
10
  validationClasses,
10
11
  className
11
12
  )
@@ -15,4 +16,4 @@ var adornmentWithClassName = (component, validationClasses, className) => {
15
16
  export {
16
17
  adornmentWithClassName
17
18
  };
18
- //# sourceMappingURL=chunk-IM3I5CZL.js.map
19
+ //# sourceMappingURL=chunk-I6CFRGID.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/components/TextField/adornmentWithClassName.ts"],
4
- "sourcesContent": ["import classNames from \"classnames/dedupe\";\nimport type { ReactElement } from \"react\";\nimport { cloneElement } from \"react\";\n\nexport const adornmentWithClassName = (\n component?: ReactElement,\n validationClasses?: string,\n className?: string,\n) => {\n if (!component) return null;\n\n return cloneElement(component, {\n className: classNames(\n (component.props as { className?: string }).className,\n validationClasses,\n className,\n ),\n } as { className: string });\n};\n"],
5
- "mappings": ";AAAA,OAAO,gBAAgB;AAEvB,SAAS,oBAAoB;AAEtB,IAAM,yBAAyB,CACpC,WACA,mBACA,cACG;AACH,MAAI,CAAC,UAAW,QAAO;AAEvB,SAAO,aAAa,WAAW;AAAA,IAC7B,WAAW;AAAA,MACR,UAAU,MAAiC;AAAA,MAC5C;AAAA,MACA;AAAA,IACF;AAAA,EACF,CAA0B;AAC5B;",
4
+ "sourcesContent": ["import classNames from \"classnames/dedupe\";\nimport type { ReactElement } from \"react\";\nimport { cloneElement } from \"react\";\n\nexport const adornmentWithClassName = (\n component?: ReactElement,\n validationClasses?: string,\n className?: string,\n) => {\n if (!component) return null;\n\n const typedComponent = component as ReactElement<{ className?: string }>;\n return cloneElement(typedComponent, {\n className: classNames(\n typedComponent.props.className,\n validationClasses,\n className,\n ),\n });\n};\n"],
5
+ "mappings": ";AAAA,OAAO,gBAAgB;AAEvB,SAAS,oBAAoB;AAEtB,IAAM,yBAAyB,CACpC,WACA,mBACA,cACG;AACH,MAAI,CAAC,UAAW,QAAO;AAEvB,QAAM,iBAAiB;AACvB,SAAO,aAAa,gBAAgB;AAAA,IAClC,WAAW;AAAA,MACT,eAAe,MAAM;AAAA,MACrB;AAAA,MACA;AAAA,IACF;AAAA,EACF,CAAC;AACH;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,33 @@
1
+ // src/components/Popover/useAutoUpdate.ts
2
+ import { useEffect } from "react";
3
+ var useAutoUpdate = ({
4
+ referenceRef,
5
+ floatingRef,
6
+ onUpdate,
7
+ enabled
8
+ }) => {
9
+ useEffect(() => {
10
+ if (!enabled) return;
11
+ const reference = referenceRef.current;
12
+ const floating = floatingRef.current;
13
+ const scrollOpts = {
14
+ capture: true,
15
+ passive: true
16
+ };
17
+ window.addEventListener("scroll", onUpdate, scrollOpts);
18
+ window.addEventListener("resize", onUpdate, { passive: true });
19
+ const observer = typeof ResizeObserver === "function" ? new ResizeObserver(onUpdate) : null;
20
+ if (observer && reference) observer.observe(reference);
21
+ if (observer && floating) observer.observe(floating);
22
+ return () => {
23
+ window.removeEventListener("scroll", onUpdate, scrollOpts);
24
+ window.removeEventListener("resize", onUpdate);
25
+ observer?.disconnect();
26
+ };
27
+ }, [enabled, onUpdate, referenceRef, floatingRef]);
28
+ };
29
+
30
+ export {
31
+ useAutoUpdate
32
+ };
33
+ //# sourceMappingURL=chunk-K3ECDAUR.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/components/Popover/useAutoUpdate.ts"],
4
+ "sourcesContent": ["import type { RefObject } from \"react\";\nimport { useEffect } from \"react\";\n\ninterface UseAutoUpdateArgs {\n referenceRef: RefObject<HTMLElement | null>;\n floatingRef: RefObject<HTMLDivElement | null>;\n onUpdate: () => void;\n enabled: boolean;\n}\n\nexport const useAutoUpdate = ({\n referenceRef,\n floatingRef,\n onUpdate,\n enabled,\n}: UseAutoUpdateArgs): void => {\n useEffect(() => {\n if (!enabled) return;\n\n const reference = referenceRef.current;\n const floating = floatingRef.current;\n\n const scrollOpts: AddEventListenerOptions = {\n capture: true,\n passive: true,\n };\n window.addEventListener(\"scroll\", onUpdate, scrollOpts);\n window.addEventListener(\"resize\", onUpdate, { passive: true });\n\n const observer =\n typeof ResizeObserver === \"function\"\n ? new ResizeObserver(onUpdate)\n : null;\n if (observer && reference) observer.observe(reference);\n if (observer && floating) observer.observe(floating);\n\n return () => {\n window.removeEventListener(\"scroll\", onUpdate, scrollOpts);\n window.removeEventListener(\"resize\", onUpdate);\n observer?.disconnect();\n };\n }, [enabled, onUpdate, referenceRef, floatingRef]);\n};\n"],
5
+ "mappings": ";AACA,SAAS,iBAAiB;AASnB,IAAM,gBAAgB,CAAC;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAA+B;AAC7B,YAAU,MAAM;AACd,QAAI,CAAC,QAAS;AAEd,UAAM,YAAY,aAAa;AAC/B,UAAM,WAAW,YAAY;AAE7B,UAAM,aAAsC;AAAA,MAC1C,SAAS;AAAA,MACT,SAAS;AAAA,IACX;AACA,WAAO,iBAAiB,UAAU,UAAU,UAAU;AACtD,WAAO,iBAAiB,UAAU,UAAU,EAAE,SAAS,KAAK,CAAC;AAE7D,UAAM,WACJ,OAAO,mBAAmB,aACtB,IAAI,eAAe,QAAQ,IAC3B;AACN,QAAI,YAAY,UAAW,UAAS,QAAQ,SAAS;AACrD,QAAI,YAAY,SAAU,UAAS,QAAQ,QAAQ;AAEnD,WAAO,MAAM;AACX,aAAO,oBAAoB,UAAU,UAAU,UAAU;AACzD,aAAO,oBAAoB,UAAU,QAAQ;AAC7C,gBAAU,WAAW;AAAA,IACvB;AAAA,EACF,GAAG,CAAC,SAAS,UAAU,cAAc,WAAW,CAAC;AACnD;",
6
+ "names": []
7
+ }
@@ -1,12 +1,12 @@
1
+ import {
2
+ Header
3
+ } from "./chunk-UZV5PZ7R.js";
1
4
  import {
2
5
  Content
3
6
  } from "./chunk-WHRUNWJI.js";
4
7
  import {
5
8
  Drawer
6
9
  } from "./chunk-VYQRTISC.js";
7
- import {
8
- Header
9
- } from "./chunk-UZV5PZ7R.js";
10
10
 
11
11
  // src/components/Drawer/index.tsx
12
12
  var Drawer2 = Object.assign(Drawer, {
@@ -18,4 +18,4 @@ Drawer2.displayName = "Drawer";
18
18
  export {
19
19
  Drawer2 as Drawer
20
20
  };
21
- //# sourceMappingURL=chunk-GJBH37DH.js.map
21
+ //# sourceMappingURL=chunk-KFHPI67N.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-YGME6T3L.js";
4
4
  import {
5
5
  Item
6
- } from "./chunk-4HI2AOBC.js";
6
+ } from "./chunk-6TSYA7CJ.js";
7
7
 
8
8
  // src/components/DropdownMenu/index.tsx
9
9
  var DropdownMenu2 = Object.assign(
@@ -17,4 +17,4 @@ DropdownMenu2.displayName = "DropdownMenu";
17
17
  export {
18
18
  DropdownMenu2 as DropdownMenu
19
19
  };
20
- //# sourceMappingURL=chunk-OEDU5ZEA.js.map
20
+ //# sourceMappingURL=chunk-KUH5AB5T.js.map
@@ -14,13 +14,9 @@ var Breadcrumbs = ({ ref, ...props }) => {
14
14
  otherProps.className
15
15
  );
16
16
  return /* @__PURE__ */ jsx("nav", { ref, ...otherProps, ...navProps, className: classes, children: /* @__PURE__ */ jsx("ul", { children: childArray.map(
17
- (child, i) => cloneElement(
18
- child,
19
- {
20
- key: i,
21
- isCurrent: i === childArray.length - 1
22
- }
23
- )
17
+ (child, i) => cloneElement(child, {
18
+ isCurrent: i === childArray.length - 1
19
+ })
24
20
  ) }) });
25
21
  };
26
22
  Breadcrumbs.displayName = "Breadcrumbs";
@@ -28,4 +24,4 @@ Breadcrumbs.displayName = "Breadcrumbs";
28
24
  export {
29
25
  Breadcrumbs
30
26
  };
31
- //# sourceMappingURL=chunk-JFDDW3IV.js.map
27
+ //# sourceMappingURL=chunk-P7TPNRU4.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/components/Breadcrumbs/Breadcrumbs.tsx"],
4
- "sourcesContent": ["\"use client\";\n\nimport type { ReactElement, RefAttributes, ReactNode } from \"react\";\nimport { Children, cloneElement } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport \"./Breadcrumbs.css\";\n\nexport type BreadcrumbsElementType = HTMLElement;\n\nexport interface BreadcrumbsProps extends RefAttributes<BreadcrumbsElementType> {\n /** Custom class name for setting specific CSS */\n className?: string;\n children?: ReactNode;\n \"aria-label\"?: string;\n}\n\nconst Breadcrumbs = ({ ref, ...props }: BreadcrumbsProps) => {\n const { \"aria-label\": ariaLabel = \"Breadcrumbs\" } = props;\n const { navProps } = { navProps: { \"aria-label\": ariaLabel } };\n const { children, ...otherProps } = props;\n const childArray = Children.toArray(children);\n\n // Reshape class name and apply to outer element\n const classes = classNames(\n \"mobius\",\n \"mobius-breadcrumb\",\n otherProps.className,\n );\n\n return (\n <nav ref={ref} {...otherProps} {...navProps} className={classes}>\n <ul>\n {childArray.map((child, i) =>\n cloneElement(\n child as ReactElement,\n {\n key: i,\n isCurrent: i === childArray.length - 1,\n } as { key: number; isCurrent: boolean },\n ),\n )}\n </ul>\n </nav>\n );\n};\n\nBreadcrumbs.displayName = \"Breadcrumbs\";\nexport { Breadcrumbs };\n"],
5
- "mappings": ";AAGA,SAAS,UAAU,oBAAoB;AACvC,OAAO,gBAAgB;AACvB,OAAO;AA0BD;AAfN,IAAM,cAAc,CAAC,EAAE,KAAK,GAAG,MAAM,MAAwB;AAC3D,QAAM,EAAE,cAAc,YAAY,cAAc,IAAI;AACpD,QAAM,EAAE,SAAS,IAAI,EAAE,UAAU,EAAE,cAAc,UAAU,EAAE;AAC7D,QAAM,EAAE,UAAU,GAAG,WAAW,IAAI;AACpC,QAAM,aAAa,SAAS,QAAQ,QAAQ;AAG5C,QAAM,UAAU;AAAA,IACd;AAAA,IACA;AAAA,IACA,WAAW;AAAA,EACb;AAEA,SACE,oBAAC,SAAI,KAAW,GAAG,YAAa,GAAG,UAAU,WAAW,SACtD,8BAAC,QACE,qBAAW;AAAA,IAAI,CAAC,OAAO,MACtB;AAAA,MACE;AAAA,MACA;AAAA,QACE,KAAK;AAAA,QACL,WAAW,MAAM,WAAW,SAAS;AAAA,MACvC;AAAA,IACF;AAAA,EACF,GACF,GACF;AAEJ;AAEA,YAAY,cAAc;",
4
+ "sourcesContent": ["\"use client\";\n\nimport type { ReactElement, RefAttributes, ReactNode } from \"react\";\nimport { Children, cloneElement } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport \"./Breadcrumbs.css\";\n\nexport type BreadcrumbsElementType = HTMLElement;\n\nexport interface BreadcrumbsProps extends RefAttributes<BreadcrumbsElementType> {\n /** Custom class name for setting specific CSS */\n className?: string;\n children?: ReactNode;\n \"aria-label\"?: string;\n}\n\nconst Breadcrumbs = ({ ref, ...props }: BreadcrumbsProps) => {\n const { \"aria-label\": ariaLabel = \"Breadcrumbs\" } = props;\n const { navProps } = { navProps: { \"aria-label\": ariaLabel } };\n const { children, ...otherProps } = props;\n const childArray = Children.toArray(children);\n\n // Reshape class name and apply to outer element\n const classes = classNames(\n \"mobius\",\n \"mobius-breadcrumb\",\n otherProps.className,\n );\n\n return (\n <nav ref={ref} {...otherProps} {...navProps} className={classes}>\n <ul>\n {childArray.map((child, i) =>\n cloneElement(child as ReactElement<{ isCurrent?: boolean }>, {\n isCurrent: i === childArray.length - 1,\n }),\n )}\n </ul>\n </nav>\n );\n};\n\nBreadcrumbs.displayName = \"Breadcrumbs\";\nexport { Breadcrumbs };\n"],
5
+ "mappings": ";AAGA,SAAS,UAAU,oBAAoB;AACvC,OAAO,gBAAgB;AACvB,OAAO;AA0BD;AAfN,IAAM,cAAc,CAAC,EAAE,KAAK,GAAG,MAAM,MAAwB;AAC3D,QAAM,EAAE,cAAc,YAAY,cAAc,IAAI;AACpD,QAAM,EAAE,SAAS,IAAI,EAAE,UAAU,EAAE,cAAc,UAAU,EAAE;AAC7D,QAAM,EAAE,UAAU,GAAG,WAAW,IAAI;AACpC,QAAM,aAAa,SAAS,QAAQ,QAAQ;AAG5C,QAAM,UAAU;AAAA,IACd;AAAA,IACA;AAAA,IACA,WAAW;AAAA,EACb;AAEA,SACE,oBAAC,SAAI,KAAW,GAAG,YAAa,GAAG,UAAU,WAAW,SACtD,8BAAC,QACE,qBAAW;AAAA,IAAI,CAAC,OAAO,MACtB,aAAa,OAAgD;AAAA,MAC3D,WAAW,MAAM,WAAW,SAAS;AAAA,IACvC,CAAC;AAAA,EACH,GACF,GACF;AAEJ;AAEA,YAAY,cAAc;",
6
6
  "names": []
7
7
  }
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-66ARYOY7.js";
4
4
  import {
5
5
  Combobox
6
- } from "./chunk-OAG5T7NC.js";
6
+ } from "./chunk-XEP6X7JU.js";
7
7
  import {
8
8
  Icon
9
9
  } from "./chunk-TKIP5Q5H.js";
@@ -93,4 +93,4 @@ AddressLookup.displayName = "AddressLookup";
93
93
  export {
94
94
  AddressLookup
95
95
  };
96
- //# sourceMappingURL=chunk-F5ELD54X.js.map
96
+ //# sourceMappingURL=chunk-QNOBB5HT.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  TextField
3
- } from "./chunk-IQKS662C.js";
3
+ } from "./chunk-6RDK3FM2.js";
4
4
 
5
5
  // src/components/MaskedField/index.tsx
6
6
  import loadable from "@loadable/component";
@@ -38,4 +38,4 @@ MaskedField.displayName = "MaskedField";
38
38
  export {
39
39
  MaskedField
40
40
  };
41
- //# sourceMappingURL=chunk-GV36OVX7.js.map
41
+ //# sourceMappingURL=chunk-R67C5QTH.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  TextField
3
- } from "./chunk-IQKS662C.js";
3
+ } from "./chunk-6RDK3FM2.js";
4
4
 
5
5
  // src/components/NumberField/NumberField.tsx
6
6
  import classNames from "classnames/dedupe";
@@ -94,4 +94,4 @@ NumberField.displayName = "NumberField";
94
94
  export {
95
95
  NumberField
96
96
  };
97
- //# sourceMappingURL=chunk-S4CU4XRB.js.map
97
+ //# sourceMappingURL=chunk-VGFVSRWH.js.map