@simplybusiness/mobius 4.3.0 → 4.3.2

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 (249) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/cjs/components/Drawer/Drawer.js +37 -20
  3. package/dist/cjs/components/Drawer/Drawer.js.map +1 -1
  4. package/dist/cjs/components/Modal/Modal.js +31 -21
  5. package/dist/cjs/components/Modal/Modal.js.map +1 -1
  6. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  7. package/dist/esm/components/Drawer/Drawer.js +37 -20
  8. package/dist/esm/components/Drawer/Drawer.js.map +1 -1
  9. package/dist/esm/components/Modal/Modal.js +31 -21
  10. package/dist/esm/components/Modal/Modal.js.map +1 -1
  11. package/dist/types/components/Accordion/Accordion.d.ts +34 -0
  12. package/dist/types/components/Accordion/Accordion.stories.d.ts +10 -0
  13. package/dist/types/components/Accordion/Accordion.test.d.ts +1 -0
  14. package/dist/types/components/Accordion/index.d.ts +1 -0
  15. package/dist/types/components/Alert/Alert.d.ts +16 -0
  16. package/dist/types/components/Alert/Alert.stories.d.ts +7 -0
  17. package/dist/types/components/Alert/Alert.test.d.ts +1 -0
  18. package/dist/types/components/Alert/index.d.ts +1 -0
  19. package/dist/types/components/Box/Box.d.ts +15 -0
  20. package/dist/types/components/Box/Box.stories.d.ts +7 -0
  21. package/dist/types/components/Box/Box.test.d.ts +1 -0
  22. package/dist/types/components/Box/index.d.ts +1 -0
  23. package/dist/types/components/Breadcrumbs/BreadcrumbItem.d.ts +15 -0
  24. package/dist/types/components/Breadcrumbs/Breadcrumbs.d.ts +12 -0
  25. package/dist/types/components/Breadcrumbs/Breadcrumbs.stories.d.ts +7 -0
  26. package/dist/types/components/Breadcrumbs/Breadcrumbs.test.d.ts +1 -0
  27. package/dist/types/components/Breadcrumbs/index.d.ts +2 -0
  28. package/dist/types/components/Button/Button.d.ts +31 -0
  29. package/dist/types/components/Button/Button.stories.d.ts +19 -0
  30. package/dist/types/components/Button/Button.test.d.ts +1 -0
  31. package/dist/types/components/Button/Loading.d.ts +2 -0
  32. package/dist/types/components/Button/index.d.ts +1 -0
  33. package/dist/types/components/Checkbox/Checkbox.d.ts +3 -0
  34. package/dist/types/components/Checkbox/Checkbox.stories.d.ts +10 -0
  35. package/dist/types/components/Checkbox/Checkbox.test.d.ts +1 -0
  36. package/dist/types/components/Checkbox/CheckboxGroup.d.ts +3 -0
  37. package/dist/types/components/Checkbox/CheckboxGroup.stories.d.ts +9 -0
  38. package/dist/types/components/Checkbox/CheckboxGroup.test.d.ts +1 -0
  39. package/dist/types/components/Checkbox/index.d.ts +3 -0
  40. package/dist/types/components/Checkbox/types.d.ts +56 -0
  41. package/dist/types/components/Container/Container.d.ts +15 -0
  42. package/dist/types/components/Container/Container.stories.d.ts +6 -0
  43. package/dist/types/components/Container/Container.test.d.ts +1 -0
  44. package/dist/types/components/Container/index.d.ts +1 -0
  45. package/dist/types/components/Divider/Divider.d.ts +11 -0
  46. package/dist/types/components/Divider/Divider.stories.d.ts +6 -0
  47. package/dist/types/components/Divider/Divider.test.d.ts +1 -0
  48. package/dist/types/components/Divider/index.d.ts +1 -0
  49. package/dist/types/components/Drawer/Content.d.ts +10 -0
  50. package/dist/types/components/Drawer/Drawer.d.ts +6 -0
  51. package/dist/types/components/Drawer/Drawer.stories.d.ts +8 -0
  52. package/dist/types/components/Drawer/Drawer.test.d.ts +1 -0
  53. package/dist/types/components/Drawer/Header.d.ts +10 -0
  54. package/dist/types/components/Drawer/index.d.ts +9 -0
  55. package/dist/types/components/Drawer/types.d.ts +17 -0
  56. package/dist/types/components/DropdownMenu/DropdownMenu.d.ts +15 -0
  57. package/dist/types/components/DropdownMenu/DropdownMenu.stories.d.ts +7 -0
  58. package/dist/types/components/DropdownMenu/DropdownMenu.test.d.ts +1 -0
  59. package/dist/types/components/DropdownMenu/Item.d.ts +15 -0
  60. package/dist/types/components/DropdownMenu/index.d.ts +10 -0
  61. package/dist/types/components/ErrorMessage/ErrorMessage.d.ts +9 -0
  62. package/dist/types/components/ErrorMessage/ErrorMessage.stories.d.ts +7 -0
  63. package/dist/types/components/ErrorMessage/ErrorMessage.test.d.ts +1 -0
  64. package/dist/types/components/ErrorMessage/index.d.ts +1 -0
  65. package/dist/types/components/Fieldset/Fieldset.d.ts +17 -0
  66. package/dist/types/components/Fieldset/Fieldset.stories.d.ts +7 -0
  67. package/dist/types/components/Fieldset/Fieldset.test.d.ts +1 -0
  68. package/dist/types/components/Fieldset/index.d.ts +1 -0
  69. package/dist/types/components/Flex/Flex.d.ts +4 -0
  70. package/dist/types/components/Flex/Flex.stories.d.ts +7 -0
  71. package/dist/types/components/Flex/Flex.test.d.ts +1 -0
  72. package/dist/types/components/Flex/index.d.ts +2 -0
  73. package/dist/types/components/Flex/propUtils.d.ts +8 -0
  74. package/dist/types/components/Flex/propUtils.test.d.ts +1 -0
  75. package/dist/types/components/Flex/types.d.ts +33 -0
  76. package/dist/types/components/Grid/Grid.d.ts +28 -0
  77. package/dist/types/components/Grid/Grid.stories.d.ts +11 -0
  78. package/dist/types/components/Grid/Grid.test.d.ts +1 -0
  79. package/dist/types/components/Grid/Item.d.ts +30 -0
  80. package/dist/types/components/Grid/index.d.ts +9 -0
  81. package/dist/types/components/Icon/Icon.d.ts +2 -0
  82. package/dist/types/components/Icon/Icon.stories.d.ts +7 -0
  83. package/dist/types/components/Icon/Icon.test.d.ts +1 -0
  84. package/dist/types/components/Icon/IconStyle.d.ts +1 -0
  85. package/dist/types/components/Icon/index.d.ts +2 -0
  86. package/dist/types/components/Icon/types.d.ts +13 -0
  87. package/dist/types/components/Image/Image.d.ts +17 -0
  88. package/dist/types/components/Image/Image.stories.d.ts +6 -0
  89. package/dist/types/components/Image/Image.test.d.ts +1 -0
  90. package/dist/types/components/Image/index.d.ts +1 -0
  91. package/dist/types/components/Label/Label.d.ts +13 -0
  92. package/dist/types/components/Label/Label.stories.d.ts +6 -0
  93. package/dist/types/components/Label/Label.test.d.ts +1 -0
  94. package/dist/types/components/Label/index.d.ts +1 -0
  95. package/dist/types/components/Link/Link.d.ts +24 -0
  96. package/dist/types/components/Link/Link.stories.d.ts +7 -0
  97. package/dist/types/components/Link/Link.test.d.ts +1 -0
  98. package/dist/types/components/Link/index.d.ts +1 -0
  99. package/dist/types/components/LinkButton/LinkButton.d.ts +15 -0
  100. package/dist/types/components/LinkButton/LinkButton.stories.d.ts +6 -0
  101. package/dist/types/components/LinkButton/LinkButton.test.d.ts +1 -0
  102. package/dist/types/components/LinkButton/index.d.ts +1 -0
  103. package/dist/types/components/List/List.d.ts +17 -0
  104. package/dist/types/components/List/List.stories.d.ts +10 -0
  105. package/dist/types/components/List/List.test.d.ts +1 -0
  106. package/dist/types/components/List/ListItem.d.ts +14 -0
  107. package/dist/types/components/List/index.d.ts +2 -0
  108. package/dist/types/components/LoadingIndicator/LoadingIndicator.d.ts +8 -0
  109. package/dist/types/components/LoadingIndicator/LoadingIndicator.stories.d.ts +9 -0
  110. package/dist/types/components/LoadingIndicator/LoadingIndicator.test.d.ts +1 -0
  111. package/dist/types/components/LoadingIndicator/index.d.ts +1 -0
  112. package/dist/types/components/Logo/Logo.d.ts +14 -0
  113. package/dist/types/components/Logo/Logo.stories.d.ts +6 -0
  114. package/dist/types/components/Logo/Logo.test.d.ts +1 -0
  115. package/dist/types/components/Logo/index.d.ts +1 -0
  116. package/dist/types/components/Modal/Content.d.ts +10 -0
  117. package/dist/types/components/Modal/Header.d.ts +10 -0
  118. package/dist/types/components/Modal/Modal.d.ts +6 -0
  119. package/dist/types/components/Modal/Modal.stories.d.ts +10 -0
  120. package/dist/types/components/Modal/Modal.test.d.ts +1 -0
  121. package/dist/types/components/Modal/index.d.ts +9 -0
  122. package/dist/types/components/Modal/types.d.ts +31 -0
  123. package/dist/types/components/NumberField/NumberField.d.ts +35 -0
  124. package/dist/types/components/NumberField/NumberField.stories.d.ts +10 -0
  125. package/dist/types/components/NumberField/NumberField.test.d.ts +1 -0
  126. package/dist/types/components/NumberField/index.d.ts +1 -0
  127. package/dist/types/components/Option/Option.d.ts +10 -0
  128. package/dist/types/components/Option/index.d.ts +1 -0
  129. package/dist/types/components/PasswordField/PasswordField.d.ts +5 -0
  130. package/dist/types/components/PasswordField/PasswordField.stories.d.ts +6 -0
  131. package/dist/types/components/PasswordField/PasswordField.test.d.ts +1 -0
  132. package/dist/types/components/PasswordField/ShowHideButton.d.ts +5 -0
  133. package/dist/types/components/PasswordField/index.d.ts +1 -0
  134. package/dist/types/components/Popover/Popover.d.ts +15 -0
  135. package/dist/types/components/Popover/Popover.stories.d.ts +7 -0
  136. package/dist/types/components/Popover/Popover.test.d.ts +1 -0
  137. package/dist/types/components/Popover/index.d.ts +1 -0
  138. package/dist/types/components/Progress/Progress.d.ts +20 -0
  139. package/dist/types/components/Progress/Progress.stories.d.ts +9 -0
  140. package/dist/types/components/Progress/Progress.test.d.ts +1 -0
  141. package/dist/types/components/Progress/index.d.ts +1 -0
  142. package/dist/types/components/Radio/Radio.d.ts +53 -0
  143. package/dist/types/components/Radio/Radio.stories.d.ts +12 -0
  144. package/dist/types/components/Radio/Radio.test.d.ts +1 -0
  145. package/dist/types/components/Radio/RadioButton.d.ts +3 -0
  146. package/dist/types/components/Radio/RadioButton.stories.d.ts +11 -0
  147. package/dist/types/components/Radio/RadioButton.test.d.ts +1 -0
  148. package/dist/types/components/Radio/RadioGroup.d.ts +30 -0
  149. package/dist/types/components/Radio/index.d.ts +3 -0
  150. package/dist/types/components/SVG/SVG.d.ts +11 -0
  151. package/dist/types/components/SVG/SVG.stories.d.ts +6 -0
  152. package/dist/types/components/SVG/SVG.test.d.ts +1 -0
  153. package/dist/types/components/SVG/index.d.ts +1 -0
  154. package/dist/types/components/Segment/Segment.d.ts +16 -0
  155. package/dist/types/components/Segment/Segment.stories.d.ts +19 -0
  156. package/dist/types/components/Segment/SegmentGroup.d.ts +13 -0
  157. package/dist/types/components/Segment/index.d.ts +2 -0
  158. package/dist/types/components/Select/Select.d.ts +20 -0
  159. package/dist/types/components/Select/Select.stories.d.ts +10 -0
  160. package/dist/types/components/Select/Select.test.d.ts +1 -0
  161. package/dist/types/components/Select/index.d.ts +1 -0
  162. package/dist/types/components/Slider/Slider.d.ts +19 -0
  163. package/dist/types/components/Slider/Slider.stories.d.ts +10 -0
  164. package/dist/types/components/Slider/Slider.test.d.ts +1 -0
  165. package/dist/types/components/Slider/helpers.d.ts +5 -0
  166. package/dist/types/components/Slider/helpers.test.d.ts +1 -0
  167. package/dist/types/components/Slider/index.d.ts +1 -0
  168. package/dist/types/components/Table/Body.d.ts +9 -0
  169. package/dist/types/components/Table/Cell.d.ts +11 -0
  170. package/dist/types/components/Table/Foot.d.ts +9 -0
  171. package/dist/types/components/Table/Head.d.ts +9 -0
  172. package/dist/types/components/Table/HeaderCell.d.ts +9 -0
  173. package/dist/types/components/Table/Row.d.ts +9 -0
  174. package/dist/types/components/Table/Table.d.ts +11 -0
  175. package/dist/types/components/Table/Table.stories.d.ts +7 -0
  176. package/dist/types/components/Table/Table.test.d.ts +1 -0
  177. package/dist/types/components/Table/index.d.ts +20 -0
  178. package/dist/types/components/Text/Text.d.ts +21 -0
  179. package/dist/types/components/Text/Text.stories.d.ts +10 -0
  180. package/dist/types/components/Text/Text.test.d.ts +1 -0
  181. package/dist/types/components/Text/index.d.ts +1 -0
  182. package/dist/types/components/TextArea/TextArea.d.ts +13 -0
  183. package/dist/types/components/TextArea/TextArea.stories.d.ts +11 -0
  184. package/dist/types/components/TextArea/TextArea.test.d.ts +1 -0
  185. package/dist/types/components/TextArea/index.d.ts +1 -0
  186. package/dist/types/components/TextAreaInput/TextAreaInput.d.ts +14 -0
  187. package/dist/types/components/TextAreaInput/TextAreaInput.test.d.ts +1 -0
  188. package/dist/types/components/TextAreaInput/index.d.ts +1 -0
  189. package/dist/types/components/TextField/TextField.d.ts +19 -0
  190. package/dist/types/components/TextField/TextField.stories.d.ts +20 -0
  191. package/dist/types/components/TextField/TextField.test.d.ts +1 -0
  192. package/dist/types/components/TextField/adornmentWithClassName.d.ts +2 -0
  193. package/dist/types/components/TextField/index.d.ts +1 -0
  194. package/dist/types/components/Title/Title.d.ts +15 -0
  195. package/dist/types/components/Title/Title.stories.d.ts +6 -0
  196. package/dist/types/components/Title/Title.test.d.ts +1 -0
  197. package/dist/types/components/Title/index.d.ts +1 -0
  198. package/dist/types/components/VisuallyHidden/VisuallyHidden.d.ts +11 -0
  199. package/dist/types/components/VisuallyHidden/VisuallyHidden.stories.d.ts +6 -0
  200. package/dist/types/components/VisuallyHidden/index.d.ts +1 -0
  201. package/dist/types/components/index.d.ts +40 -0
  202. package/dist/types/hooks/index.d.ts +7 -0
  203. package/dist/types/hooks/useBodyScrollLock/index.d.ts +1 -0
  204. package/dist/types/hooks/useBodyScrollLock/useBodyScrollLock.d.ts +3 -0
  205. package/dist/types/hooks/useBodyScrollLock/useBodyScrollLock.test.d.ts +1 -0
  206. package/dist/types/hooks/useBreakpoint/index.d.ts +1 -0
  207. package/dist/types/hooks/useBreakpoint/useBreakpoint.d.ts +14 -0
  208. package/dist/types/hooks/useBreakpoint/useBreakpoint.stories.d.ts +7 -0
  209. package/dist/types/hooks/useBreakpoint/useBreakpoint.test.d.ts +1 -0
  210. package/dist/types/hooks/useButton/index.d.ts +1 -0
  211. package/dist/types/hooks/useButton/useButton.d.ts +35 -0
  212. package/dist/types/hooks/useButton/useButton.test.d.ts +1 -0
  213. package/dist/types/hooks/useLabel/index.d.ts +1 -0
  214. package/dist/types/hooks/useLabel/useLabel.d.ts +27 -0
  215. package/dist/types/hooks/useLabel/useLabel.test.d.ts +1 -0
  216. package/dist/types/hooks/useOnClickOutside/index.d.ts +1 -0
  217. package/dist/types/hooks/useOnClickOutside/useOnClickOutside.d.ts +2 -0
  218. package/dist/types/hooks/useTextField/index.d.ts +2 -0
  219. package/dist/types/hooks/useTextField/types.d.ts +26 -0
  220. package/dist/types/hooks/useTextField/useTextField.d.ts +2 -0
  221. package/dist/types/hooks/useTextField/useTextField.test.d.ts +1 -0
  222. package/dist/types/hooks/useWindowEvent/index.d.ts +1 -0
  223. package/dist/types/hooks/useWindowEvent/useWindowEvent.d.ts +1 -0
  224. package/dist/types/index.d.ts +3 -0
  225. package/dist/types/types/components.d.ts +2 -0
  226. package/dist/types/types/dom.d.ts +3 -0
  227. package/dist/types/types/events.d.ts +45 -0
  228. package/dist/types/types/icon.d.ts +9 -0
  229. package/dist/types/types/index.d.ts +5 -0
  230. package/dist/types/types/size.d.ts +1 -0
  231. package/dist/types/utils/StoryContainer.d.ts +1 -0
  232. package/dist/types/utils/changeCSS.d.ts +1 -0
  233. package/dist/types/utils/excludeControls.d.ts +1 -0
  234. package/dist/types/utils/excludeControls.test.d.ts +1 -0
  235. package/dist/types/utils/index.d.ts +7 -0
  236. package/dist/types/utils/jestHTMLDialogPolyfill.d.ts +1 -0
  237. package/dist/types/utils/jestMockMatchMedia.d.ts +1 -0
  238. package/dist/types/utils/mergeRefs.d.ts +2 -0
  239. package/dist/types/utils/polyfill-tests.d.ts +1 -0
  240. package/dist/types/utils/sizeClasses.d.ts +16 -0
  241. package/dist/types/utils/sizeClasses.test.d.ts +1 -0
  242. package/dist/types/utils/spaceDelimitedList.d.ts +1 -0
  243. package/dist/types/utils/spaceDelimitedList.test.d.ts +1 -0
  244. package/package.json +9 -11
  245. package/src/components/Drawer/Drawer.tsx +40 -20
  246. package/src/components/Modal/Modal.mdx +0 -1
  247. package/src/components/Modal/Modal.stories.tsx +1 -1
  248. package/src/components/Modal/Modal.test.tsx +0 -13
  249. package/src/components/Modal/Modal.tsx +31 -19
package/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # Changelog
2
2
 
3
+ ## 4.3.2
4
+
5
+ ### Patch Changes
6
+
7
+ - 047db6d: Fix intermittent iOS <=15.2 issue when dialog-polyfill loads
8
+ - 424ba56: Fix exported types
9
+ - Updated dependencies [424ba56]
10
+ - @simplybusiness/icons@4.2.8
11
+
12
+ ## 4.3.1
13
+
14
+ ### Patch Changes
15
+
16
+ - ee6a685: Fix an issue where `<Drawer>` positions incorrectly on iPhone/iPad rotation. This also fixes `<Modal>` positioning in iOS <= 15.2
17
+ - 7af10a5: Fix runtime errors for `<Modal>` and `<Drawer>` when using dialog-polyfill on iOS <= 15.2
18
+
3
19
  ## 4.3.0
4
20
 
5
21
  ### Minor Changes
@@ -62,11 +62,12 @@ function _interop_require_wildcard(obj, nodeInterop) {
62
62
  }
63
63
  return newObj;
64
64
  }
65
+ const TRANSITION_CLASS_NAME = "--transition";
65
66
  const Drawer = /*#__PURE__*/ (0, _react.forwardRef)((props, ref)=>{
66
67
  const { isOpen, className, closeLabel, direction, announce = "Drawer opened on screen", onOpen, onClose, children } = props;
67
68
  const hasOpened = (0, _react.useRef)(false);
68
69
  const modalRef = (0, _react.useRef)(null);
69
- const dialog = modalRef.current;
70
+ const hasDialogSupport = (0, _polyfilltests.supportsDialog)();
70
71
  // Fire onOpen once
71
72
  if (onOpen && !hasOpened.current) {
72
73
  onOpen();
@@ -75,43 +76,58 @@ const Drawer = /*#__PURE__*/ (0, _react.forwardRef)((props, ref)=>{
75
76
  (0, _useBodyScrollLock.useBodyScrollLock)({
76
77
  enabled: isOpen
77
78
  });
78
- // Add close handler, to enable closing animations
79
+ // Add close handler, to enable closing transitions
79
80
  const handleClose = (0, _react.useCallback)((event)=>{
80
81
  if (event) {
81
82
  event.preventDefault();
82
83
  event.stopPropagation();
83
84
  }
84
85
  const doClose = ()=>{
85
- dialog === null || dialog === void 0 ? void 0 : dialog.close();
86
+ var _modalRef_current;
87
+ (_modalRef_current = modalRef.current) === null || _modalRef_current === void 0 ? void 0 : _modalRef_current.close();
86
88
  onClose === null || onClose === void 0 ? void 0 : onClose();
87
89
  };
88
- // Delay close to allow exit animation
89
- dialog === null || dialog === void 0 ? void 0 : dialog.classList.add("close");
90
- dialog === null || dialog === void 0 ? void 0 : dialog.addEventListener("animationend", ()=>{
91
- dialog.classList.remove("close");
90
+ // Delay close to allow backdrop exit transition
91
+ if (hasDialogSupport) {
92
+ var _modalRef_current, _modalRef_current1;
93
+ (_modalRef_current = modalRef.current) === null || _modalRef_current === void 0 ? void 0 : _modalRef_current.classList.remove(TRANSITION_CLASS_NAME);
94
+ (_modalRef_current1 = modalRef.current) === null || _modalRef_current1 === void 0 ? void 0 : _modalRef_current1.addEventListener("transitionend", ()=>{
95
+ doClose();
96
+ }, {
97
+ once: true
98
+ });
99
+ } else {
92
100
  doClose();
93
- }, {
94
- once: true
95
- });
101
+ }
96
102
  }, [
97
103
  onClose,
98
- dialog
104
+ hasDialogSupport
99
105
  ]);
100
- const modalClasses = (0, _dedupe.default)("mobius", "mobius/Drawer", `--${direction}`, className);
106
+ const modalClasses = (0, _dedupe.default)("mobius", "mobius/Drawer", `--${direction}`, className, {
107
+ "--should-transition": hasDialogSupport
108
+ });
101
109
  // Add polyfill for HTML Dialog in old browsers
102
110
  (0, _react.useEffect)(()=>{
103
111
  async function toggleModal() {
104
- var _modalRef_current;
105
- if (!(0, _polyfilltests.supportsDialog)() && typeof window !== "undefined") {
112
+ var _modalRef_current, _modalRef_current1;
113
+ if (!hasDialogSupport && typeof window !== "undefined" && modalRef.current !== null) {
106
114
  // eslint-disable-next-line import/no-extraneous-dependencies
107
115
  const { default: dialogPolyfill } = await Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard(require("dialog-polyfill")));
108
- dialogPolyfill.registerDialog(modalRef.current);
116
+ try {
117
+ dialogPolyfill.registerDialog(modalRef.current);
118
+ } catch (error) {
119
+ // In iOS 15 <= 15.2 this intermittently fails with
120
+ // TypeError: null is not an object (evaluating 'element.showModal')
121
+ // Checking showModal presence through hasOwnProperty is falsy natively, truthy with polyfill 🤷🏼‍♂️
122
+ console.error("Failed to load dialog-polyfill", error);
123
+ }
109
124
  }
110
- if (isOpen) {
111
- var _modalRef_current1;
112
- (_modalRef_current1 = modalRef.current) === null || _modalRef_current1 === void 0 ? void 0 : _modalRef_current1.showModal();
125
+ if (isOpen && !((_modalRef_current = modalRef.current) === null || _modalRef_current === void 0 ? void 0 : _modalRef_current.open)) {
126
+ var _modalRef_current2, _modalRef_current3;
127
+ (_modalRef_current2 = modalRef.current) === null || _modalRef_current2 === void 0 ? void 0 : _modalRef_current2.showModal();
128
+ (_modalRef_current3 = modalRef.current) === null || _modalRef_current3 === void 0 ? void 0 : _modalRef_current3.classList.add(TRANSITION_CLASS_NAME);
113
129
  onOpen === null || onOpen === void 0 ? void 0 : onOpen();
114
- } else if ((_modalRef_current = modalRef.current) === null || _modalRef_current === void 0 ? void 0 : _modalRef_current.open) {
130
+ } else if (!isOpen && ((_modalRef_current1 = modalRef.current) === null || _modalRef_current1 === void 0 ? void 0 : _modalRef_current1.open)) {
115
131
  handleClose();
116
132
  }
117
133
  }
@@ -119,7 +135,8 @@ const Drawer = /*#__PURE__*/ (0, _react.forwardRef)((props, ref)=>{
119
135
  }, [
120
136
  isOpen,
121
137
  onOpen,
122
- handleClose
138
+ handleClose,
139
+ hasDialogSupport
123
140
  ]);
124
141
  return /*#__PURE__*/ (0, _jsxruntime.jsxs)("dialog", {
125
142
  ref: (0, _utils.mergeRefs)([
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Drawer/Drawer.tsx"],"sourcesContent":["\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport {\n Children,\n Ref,\n SyntheticEvent,\n cloneElement,\n forwardRef,\n isValidElement,\n useCallback,\n useEffect,\n useRef,\n} from \"react\";\nimport { useBodyScrollLock } from \"../../hooks/useBodyScrollLock\";\nimport { supportsDialog } from \"../../utils/polyfill-tests\";\nimport { VisuallyHidden } from \"../VisuallyHidden\";\nimport { DrawerProps } from \"./types\";\nimport { mergeRefs } from \"../../utils\";\n\nexport type DialogElementType = HTMLDialogElement;\nexport type DialogRef = Ref<DialogElementType>;\n\nconst Drawer = forwardRef((props: DrawerProps, ref: DialogRef) => {\n const {\n isOpen,\n className,\n closeLabel,\n direction,\n announce = \"Drawer opened on screen\",\n onOpen,\n onClose,\n children,\n } = props;\n const hasOpened = useRef<boolean>(false);\n const modalRef = useRef<HTMLDialogElement>(null);\n const dialog = modalRef.current as HTMLDialogElement;\n\n // Fire onOpen once\n if (onOpen && !hasOpened.current) {\n onOpen();\n hasOpened.current = true;\n }\n\n useBodyScrollLock({ enabled: isOpen });\n\n // Add close handler, to enable closing animations\n const handleClose = useCallback(\n (event?: SyntheticEvent<HTMLElement, Event>) => {\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n const doClose = () => {\n dialog?.close();\n onClose?.();\n };\n\n // Delay close to allow exit animation\n dialog?.classList.add(\"close\");\n dialog?.addEventListener(\n \"animationend\",\n () => {\n dialog.classList.remove(\"close\");\n doClose();\n },\n { once: true },\n );\n },\n [onClose, dialog],\n );\n\n const modalClasses = classNames(\n \"mobius\",\n \"mobius/Drawer\",\n `--${direction}`,\n className,\n );\n\n // Add polyfill for HTML Dialog in old browsers\n useEffect(() => {\n async function toggleModal() {\n if (!supportsDialog() && typeof window !== \"undefined\") {\n // eslint-disable-next-line import/no-extraneous-dependencies\n const { default: dialogPolyfill } = await import(\"dialog-polyfill\");\n dialogPolyfill.registerDialog(modalRef.current as HTMLDialogElement);\n }\n\n if (isOpen) {\n modalRef.current?.showModal();\n onOpen?.();\n } else if (modalRef.current?.open) {\n handleClose();\n }\n }\n\n toggleModal();\n }, [isOpen, onOpen, handleClose]);\n\n return (\n <dialog\n ref={mergeRefs([modalRef, ref])}\n onCancel={handleClose}\n className={modalClasses}\n aria-describedby=\"screen-reader-announce\"\n >\n <VisuallyHidden>\n <div id=\"screen-reader-announce\">{announce}</div>\n </VisuallyHidden>\n {Children.map(children, child => {\n if (isValidElement(child)) {\n return cloneElement(child, {\n onClose: handleClose,\n closeLabel,\n } as any);\n }\n\n return child;\n })}\n </dialog>\n );\n});\n\nDrawer.displayName = \"Drawer\";\nexport { Drawer };\n"],"names":["Drawer","forwardRef","props","ref","isOpen","className","closeLabel","direction","announce","onOpen","onClose","children","hasOpened","useRef","modalRef","dialog","current","useBodyScrollLock","enabled","handleClose","useCallback","event","preventDefault","stopPropagation","doClose","close","classList","add","addEventListener","remove","once","modalClasses","classNames","useEffect","toggleModal","supportsDialog","window","default","dialogPolyfill","registerDialog","showModal","open","mergeRefs","onCancel","aria-describedby","VisuallyHidden","div","id","Children","map","child","isValidElement","cloneElement","displayName"],"mappings":"AAAA;;;;;+BA6HSA;;;eAAAA;;;;+DA3Hc;uBAWhB;mCAC2B;+BACH;gCACA;uBAEL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAK1B,MAAMA,uBAASC,IAAAA,iBAAU,EAAC,CAACC,OAAoBC;IAC7C,MAAM,EACJC,MAAM,EACNC,SAAS,EACTC,UAAU,EACVC,SAAS,EACTC,WAAW,yBAAyB,EACpCC,MAAM,EACNC,OAAO,EACPC,QAAQ,EACT,GAAGT;IACJ,MAAMU,YAAYC,IAAAA,aAAM,EAAU;IAClC,MAAMC,WAAWD,IAAAA,aAAM,EAAoB;IAC3C,MAAME,SAASD,SAASE,OAAO;IAE/B,mBAAmB;IACnB,IAAIP,UAAU,CAACG,UAAUI,OAAO,EAAE;QAChCP;QACAG,UAAUI,OAAO,GAAG;IACtB;IAEAC,IAAAA,oCAAiB,EAAC;QAAEC,SAASd;IAAO;IAEpC,kDAAkD;IAClD,MAAMe,cAAcC,IAAAA,kBAAW,EAC7B,CAACC;QACC,IAAIA,OAAO;YACTA,MAAMC,cAAc;YACpBD,MAAME,eAAe;QACvB;QAEA,MAAMC,UAAU;YACdT,mBAAAA,6BAAAA,OAAQU,KAAK;YACbf,oBAAAA,8BAAAA;QACF;QAEA,sCAAsC;QACtCK,mBAAAA,6BAAAA,OAAQW,SAAS,CAACC,GAAG,CAAC;QACtBZ,mBAAAA,6BAAAA,OAAQa,gBAAgB,CACtB,gBACA;YACEb,OAAOW,SAAS,CAACG,MAAM,CAAC;YACxBL;QACF,GACA;YAAEM,MAAM;QAAK;IAEjB,GACA;QAACpB;QAASK;KAAO;IAGnB,MAAMgB,eAAeC,IAAAA,eAAU,EAC7B,UACA,iBACA,CAAC,EAAE,EAAEzB,UAAU,CAAC,EAChBF;IAGF,+CAA+C;IAC/C4B,IAAAA,gBAAS,EAAC;QACR,eAAeC;gBAUFpB;YATX,IAAI,CAACqB,IAAAA,6BAAc,OAAM,OAAOC,WAAW,aAAa;gBACtD,6DAA6D;gBAC7D,MAAM,EAAEC,SAASC,cAAc,EAAE,GAAG,MAAM,mEAAA,QAAO;gBACjDA,eAAeC,cAAc,CAACzB,SAASE,OAAO;YAChD;YAEA,IAAIZ,QAAQ;oBACVU;iBAAAA,qBAAAA,SAASE,OAAO,cAAhBF,yCAAAA,mBAAkB0B,SAAS;gBAC3B/B,mBAAAA,6BAAAA;YACF,OAAO,KAAIK,oBAAAA,SAASE,OAAO,cAAhBF,wCAAAA,kBAAkB2B,IAAI,EAAE;gBACjCtB;YACF;QACF;QAEAe;IACF,GAAG;QAAC9B;QAAQK;QAAQU;KAAY;IAEhC,qBACE,sBAACJ;QACCZ,KAAKuC,IAAAA,gBAAS,EAAC;YAAC5B;YAAUX;SAAI;QAC9BwC,UAAUxB;QACVd,WAAW0B;QACXa,oBAAiB;;0BAEjB,qBAACC,8BAAc;0BACb,cAAA,qBAACC;oBAAIC,IAAG;8BAA0BvC;;;YAEnCwC,eAAQ,CAACC,GAAG,CAACtC,UAAUuC,CAAAA;gBACtB,kBAAIC,IAAAA,qBAAc,EAACD,QAAQ;oBACzB,qBAAOE,IAAAA,mBAAY,EAACF,OAAO;wBACzBxC,SAASS;wBACTb;oBACF;gBACF;gBAEA,OAAO4C;YACT;;;AAGN;AAEAlD,OAAOqD,WAAW,GAAG"}
1
+ {"version":3,"sources":["../../../../src/components/Drawer/Drawer.tsx"],"sourcesContent":["\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport {\n Children,\n Ref,\n SyntheticEvent,\n cloneElement,\n forwardRef,\n isValidElement,\n useCallback,\n useEffect,\n useRef,\n} from \"react\";\nimport { useBodyScrollLock } from \"../../hooks/useBodyScrollLock\";\nimport { supportsDialog } from \"../../utils/polyfill-tests\";\nimport { VisuallyHidden } from \"../VisuallyHidden\";\nimport { DrawerProps } from \"./types\";\nimport { mergeRefs } from \"../../utils\";\n\nexport type DialogElementType = HTMLDialogElement;\nexport type DialogRef = Ref<DialogElementType>;\n\nconst TRANSITION_CLASS_NAME = \"--transition\";\n\nconst Drawer = forwardRef((props: DrawerProps, ref: DialogRef) => {\n const {\n isOpen,\n className,\n closeLabel,\n direction,\n announce = \"Drawer opened on screen\",\n onOpen,\n onClose,\n children,\n } = props;\n const hasOpened = useRef<boolean>(false);\n const modalRef = useRef<HTMLDialogElement | null>(null);\n const hasDialogSupport = supportsDialog();\n\n // Fire onOpen once\n if (onOpen && !hasOpened.current) {\n onOpen();\n hasOpened.current = true;\n }\n\n useBodyScrollLock({ enabled: isOpen });\n\n // Add close handler, to enable closing transitions\n const handleClose = useCallback(\n (event?: SyntheticEvent<HTMLElement, Event>) => {\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n const doClose = () => {\n modalRef.current?.close();\n onClose?.();\n };\n\n // Delay close to allow backdrop exit transition\n if (hasDialogSupport) {\n modalRef.current?.classList.remove(TRANSITION_CLASS_NAME);\n modalRef.current?.addEventListener(\n \"transitionend\",\n () => {\n doClose();\n },\n { once: true },\n );\n } else {\n doClose();\n }\n },\n [onClose, hasDialogSupport],\n );\n\n const modalClasses = classNames(\n \"mobius\",\n \"mobius/Drawer\",\n `--${direction}`,\n className,\n {\n \"--should-transition\": hasDialogSupport,\n },\n );\n\n // Add polyfill for HTML Dialog in old browsers\n useEffect(() => {\n async function toggleModal() {\n if (\n !hasDialogSupport &&\n typeof window !== \"undefined\" &&\n modalRef.current !== null\n ) {\n // eslint-disable-next-line import/no-extraneous-dependencies\n const { default: dialogPolyfill } = await import(\"dialog-polyfill\");\n try {\n dialogPolyfill.registerDialog(modalRef.current);\n } catch (error) {\n // In iOS 15 <= 15.2 this intermittently fails with\n // TypeError: null is not an object (evaluating 'element.showModal')\n // Checking showModal presence through hasOwnProperty is falsy natively, truthy with polyfill 🤷🏼‍♂️\n console.error(\"Failed to load dialog-polyfill\", error);\n }\n }\n\n if (isOpen && !modalRef.current?.open) {\n modalRef.current?.showModal();\n modalRef.current?.classList.add(TRANSITION_CLASS_NAME);\n onOpen?.();\n } else if (!isOpen && modalRef.current?.open) {\n handleClose();\n }\n }\n\n toggleModal();\n }, [isOpen, onOpen, handleClose, hasDialogSupport]);\n\n return (\n <dialog\n ref={mergeRefs([modalRef, ref])}\n onCancel={handleClose}\n className={modalClasses}\n aria-describedby=\"screen-reader-announce\"\n >\n <VisuallyHidden>\n <div id=\"screen-reader-announce\">{announce}</div>\n </VisuallyHidden>\n {Children.map(children, child => {\n if (isValidElement(child)) {\n return cloneElement(child, {\n onClose: handleClose,\n closeLabel,\n } as any);\n }\n\n return child;\n })}\n </dialog>\n );\n});\n\nDrawer.displayName = \"Drawer\";\nexport { Drawer };\n"],"names":["Drawer","TRANSITION_CLASS_NAME","forwardRef","props","ref","isOpen","className","closeLabel","direction","announce","onOpen","onClose","children","hasOpened","useRef","modalRef","hasDialogSupport","supportsDialog","current","useBodyScrollLock","enabled","handleClose","useCallback","event","preventDefault","stopPropagation","doClose","close","classList","remove","addEventListener","once","modalClasses","classNames","useEffect","toggleModal","window","default","dialogPolyfill","registerDialog","error","console","open","showModal","add","dialog","mergeRefs","onCancel","aria-describedby","VisuallyHidden","div","id","Children","map","child","isValidElement","cloneElement","displayName"],"mappings":"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"}
@@ -61,8 +61,8 @@ function _interop_require_wildcard(obj, nodeInterop) {
61
61
  }
62
62
  return newObj;
63
63
  }
64
+ const TRANSITION_CLASS_NAME = "--transition";
64
65
  const Modal = /*#__PURE__*/ (0, _react.forwardRef)((props, ref)=>{
65
- var _window;
66
66
  const { isOpen, onClose, onOpen, children, className, closeLabel, isFullScreen, animation, // Deprecated props below
67
67
  size, appElement, preventCloseOnEsc, shouldFocusAfterRender, parentSelector } = props;
68
68
  const hasWarnedAboutMissingLabels = (0, _react.useRef)(false);
@@ -75,8 +75,7 @@ const Modal = /*#__PURE__*/ (0, _react.forwardRef)((props, ref)=>{
75
75
  }
76
76
  const hasOpened = (0, _react.useRef)(false);
77
77
  const modalRef = (0, _react.useRef)(null);
78
- const dialog = modalRef.current;
79
- const noPreference = (_window = window) === null || _window === void 0 ? void 0 : _window.matchMedia("(prefers-reduced-motion: no-preference)");
78
+ const hasDialogSupport = (0, _polyfilltests.supportsDialog)();
80
79
  // Fire onOpen once
81
80
  if (onOpen && !hasOpened.current) {
82
81
  onOpen();
@@ -92,13 +91,15 @@ const Modal = /*#__PURE__*/ (0, _react.forwardRef)((props, ref)=>{
92
91
  event.stopPropagation();
93
92
  }
94
93
  const doClose = ()=>{
95
- dialog === null || dialog === void 0 ? void 0 : dialog.close();
94
+ var _modalRef_current;
95
+ (_modalRef_current = modalRef.current) === null || _modalRef_current === void 0 ? void 0 : _modalRef_current.close();
96
96
  onClose === null || onClose === void 0 ? void 0 : onClose();
97
97
  };
98
- if (animation) {
99
- dialog === null || dialog === void 0 ? void 0 : dialog.classList.add("close");
100
- dialog === null || dialog === void 0 ? void 0 : dialog.addEventListener("animationend", ()=>{
101
- dialog.classList.remove("close");
98
+ // Delay close to allow backdrop exit transition
99
+ if (hasDialogSupport && animation) {
100
+ var _modalRef_current, _modalRef_current1;
101
+ (_modalRef_current = modalRef.current) === null || _modalRef_current === void 0 ? void 0 : _modalRef_current.classList.remove(TRANSITION_CLASS_NAME);
102
+ (_modalRef_current1 = modalRef.current) === null || _modalRef_current1 === void 0 ? void 0 : _modalRef_current1.addEventListener("transitionend", ()=>{
102
103
  doClose();
103
104
  }, {
104
105
  once: true
@@ -107,31 +108,39 @@ const Modal = /*#__PURE__*/ (0, _react.forwardRef)((props, ref)=>{
107
108
  doClose();
108
109
  }
109
110
  }, [
110
- animation,
111
- dialog,
112
- onClose
111
+ onClose,
112
+ hasDialogSupport,
113
+ animation
113
114
  ]);
114
115
  const modalClasses = (0, _dedupe.default)("mobius", "mobius/Modal", {
115
- animation,
116
+ "--no-dialog-support": !hasDialogSupport,
117
+ "--should-transition": hasDialogSupport && animation,
116
118
  "--slide-up": animation === "slideUp",
117
119
  "--fade": animation === "fade",
118
- "--has-reduced-motion": !noPreference.matches,
119
120
  "--is-fullscreen": isFullScreen
120
121
  }, className);
121
122
  // Add polyfill for HTML Dialog in old browsers
122
123
  (0, _react.useEffect)(()=>{
123
124
  async function toggleModal() {
124
- var _modalRef_current;
125
- if (!(0, _polyfilltests.supportsDialog)() && typeof window !== "undefined") {
125
+ var _modalRef_current, _modalRef_current1;
126
+ if (!hasDialogSupport && typeof window !== "undefined" && modalRef.current !== null) {
126
127
  // eslint-disable-next-line import/no-extraneous-dependencies
127
128
  const { default: dialogPolyfill } = await Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard(require("dialog-polyfill")));
128
- dialogPolyfill.registerDialog(modalRef.current);
129
+ try {
130
+ dialogPolyfill.registerDialog(modalRef.current);
131
+ } catch (error) {
132
+ // In iOS 15 <= 15.2 this intermittently fails with
133
+ // TypeError: null is not an object (evaluating 'element.showModal')
134
+ // Checking showModal presence through hasOwnProperty is falsy natively, truthy with polyfill 🤷🏼‍♂️
135
+ console.error("Failed to load dialog-polyfill", error);
136
+ }
129
137
  }
130
- if (isOpen) {
131
- var _modalRef_current1;
132
- (_modalRef_current1 = modalRef.current) === null || _modalRef_current1 === void 0 ? void 0 : _modalRef_current1.showModal();
138
+ if (isOpen && !((_modalRef_current = modalRef.current) === null || _modalRef_current === void 0 ? void 0 : _modalRef_current.open)) {
139
+ var _modalRef_current2, _modalRef_current3;
140
+ (_modalRef_current2 = modalRef.current) === null || _modalRef_current2 === void 0 ? void 0 : _modalRef_current2.showModal();
141
+ (_modalRef_current3 = modalRef.current) === null || _modalRef_current3 === void 0 ? void 0 : _modalRef_current3.classList.add(TRANSITION_CLASS_NAME);
133
142
  onOpen === null || onOpen === void 0 ? void 0 : onOpen();
134
- } else if ((_modalRef_current = modalRef.current) === null || _modalRef_current === void 0 ? void 0 : _modalRef_current.open) {
143
+ } else if (!isOpen && ((_modalRef_current1 = modalRef.current) === null || _modalRef_current1 === void 0 ? void 0 : _modalRef_current1.open)) {
135
144
  handleClose();
136
145
  }
137
146
  }
@@ -139,7 +148,8 @@ const Modal = /*#__PURE__*/ (0, _react.forwardRef)((props, ref)=>{
139
148
  }, [
140
149
  isOpen,
141
150
  onOpen,
142
- handleClose
151
+ handleClose,
152
+ hasDialogSupport
143
153
  ]);
144
154
  return /*#__PURE__*/ (0, _jsxruntime.jsx)("dialog", {
145
155
  ref: (0, _utils.mergeRefs)([
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Modal/Modal.tsx"],"sourcesContent":["\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport {\n Children,\n Ref,\n SyntheticEvent,\n cloneElement,\n forwardRef,\n isValidElement,\n useCallback,\n useEffect,\n useRef,\n} from \"react\";\nimport { useBodyScrollLock } from \"../../hooks/useBodyScrollLock\";\nimport { supportsDialog } from \"../../utils/polyfill-tests\";\nimport { ModalProps } from \"./types\";\nimport { mergeRefs } from \"../../utils\";\n\nexport type ModalElementType = HTMLDialogElement;\nexport type ModalRef = Ref<ModalElementType>;\n\nconst Modal = forwardRef((props: ModalProps, ref: ModalRef) => {\n const {\n isOpen,\n onClose,\n onOpen,\n children,\n className,\n closeLabel,\n isFullScreen,\n animation,\n // Deprecated props below\n size,\n appElement,\n preventCloseOnEsc,\n shouldFocusAfterRender,\n parentSelector,\n } = props;\n const hasWarnedAboutMissingLabels = useRef<boolean>(false);\n // Handle deprecated props\n if (!hasWarnedAboutMissingLabels.current) {\n if (\n size ||\n appElement ||\n preventCloseOnEsc ||\n shouldFocusAfterRender ||\n parentSelector\n ) {\n console.warn(\n `Deprecation warning: Mobius Modal no longer supports the following props: size, appElement, preventCloseOnEsc, shouldFocusAfterRender and parentSelector.`,\n );\n hasWarnedAboutMissingLabels.current = true;\n }\n }\n\n const hasOpened = useRef<boolean>(false);\n const modalRef = useRef<HTMLDialogElement>(null);\n const dialog = modalRef.current as HTMLDialogElement;\n const noPreference = window?.matchMedia(\n \"(prefers-reduced-motion: no-preference)\",\n );\n\n // Fire onOpen once\n if (onOpen && !hasOpened.current) {\n onOpen();\n hasOpened.current = true;\n }\n\n useBodyScrollLock({ enabled: isOpen });\n\n // Add close handler, to enable closing animations\n const handleClose = useCallback(\n (event?: SyntheticEvent<HTMLElement, Event>) => {\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n const doClose = () => {\n dialog?.close();\n onClose?.();\n };\n\n if (animation) {\n dialog?.classList.add(\"close\");\n dialog?.addEventListener(\n \"animationend\",\n () => {\n dialog.classList.remove(\"close\");\n doClose();\n },\n { once: true },\n );\n } else {\n doClose();\n }\n },\n [animation, dialog, onClose],\n );\n\n const modalClasses = classNames(\n \"mobius\",\n \"mobius/Modal\",\n {\n animation,\n \"--slide-up\": animation === \"slideUp\",\n \"--fade\": animation === \"fade\",\n \"--has-reduced-motion\": !noPreference.matches,\n \"--is-fullscreen\": isFullScreen,\n },\n className,\n );\n\n // Add polyfill for HTML Dialog in old browsers\n useEffect(() => {\n async function toggleModal() {\n if (!supportsDialog() && typeof window !== \"undefined\") {\n // eslint-disable-next-line import/no-extraneous-dependencies\n const { default: dialogPolyfill } = await import(\"dialog-polyfill\");\n dialogPolyfill.registerDialog(modalRef.current as HTMLDialogElement);\n }\n\n if (isOpen) {\n modalRef.current?.showModal();\n onOpen?.();\n } else if (modalRef.current?.open) {\n handleClose();\n }\n }\n\n toggleModal();\n }, [isOpen, onOpen, handleClose]);\n\n return (\n <dialog\n ref={mergeRefs([modalRef, ref])}\n onCancel={handleClose}\n className={modalClasses}\n >\n {Children.map(children, child => {\n if (isValidElement(child)) {\n return cloneElement(child, {\n onClose: handleClose,\n closeLabel,\n } as any);\n }\n\n return child;\n })}\n </dialog>\n );\n});\n\nModal.displayName = \"Modal\";\nexport { Modal };\n"],"names":["Modal","forwardRef","props","ref","window","isOpen","onClose","onOpen","children","className","closeLabel","isFullScreen","animation","size","appElement","preventCloseOnEsc","shouldFocusAfterRender","parentSelector","hasWarnedAboutMissingLabels","useRef","current","console","warn","hasOpened","modalRef","dialog","noPreference","matchMedia","useBodyScrollLock","enabled","handleClose","useCallback","event","preventDefault","stopPropagation","doClose","close","classList","add","addEventListener","remove","once","modalClasses","classNames","matches","useEffect","toggleModal","supportsDialog","default","dialogPolyfill","registerDialog","showModal","open","mergeRefs","onCancel","Children","map","child","isValidElement","cloneElement","displayName"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/components/Modal/Modal.tsx"],"sourcesContent":["\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport {\n Children,\n Ref,\n SyntheticEvent,\n cloneElement,\n forwardRef,\n isValidElement,\n useCallback,\n useEffect,\n useRef,\n} from \"react\";\nimport { useBodyScrollLock } from \"../../hooks/useBodyScrollLock\";\nimport { supportsDialog } from \"../../utils/polyfill-tests\";\nimport { ModalProps } from \"./types\";\nimport { mergeRefs } from \"../../utils\";\n\nexport type ModalElementType = HTMLDialogElement;\nexport type ModalRef = Ref<ModalElementType>;\n\nconst TRANSITION_CLASS_NAME = \"--transition\";\n\nconst Modal = forwardRef((props: ModalProps, ref: ModalRef) => {\n const {\n isOpen,\n onClose,\n onOpen,\n children,\n className,\n closeLabel,\n isFullScreen,\n animation,\n // Deprecated props below\n size,\n appElement,\n preventCloseOnEsc,\n shouldFocusAfterRender,\n parentSelector,\n } = props;\n const hasWarnedAboutMissingLabels = useRef<boolean>(false);\n // Handle deprecated props\n if (!hasWarnedAboutMissingLabels.current) {\n if (\n size ||\n appElement ||\n preventCloseOnEsc ||\n shouldFocusAfterRender ||\n parentSelector\n ) {\n console.warn(\n `Deprecation warning: Mobius Modal no longer supports the following props: size, appElement, preventCloseOnEsc, shouldFocusAfterRender and parentSelector.`,\n );\n hasWarnedAboutMissingLabels.current = true;\n }\n }\n\n const hasOpened = useRef<boolean>(false);\n const modalRef = useRef<HTMLDialogElement | null>(null);\n const hasDialogSupport = supportsDialog();\n\n // Fire onOpen once\n if (onOpen && !hasOpened.current) {\n onOpen();\n hasOpened.current = true;\n }\n\n useBodyScrollLock({ enabled: isOpen });\n\n // Add close handler, to enable closing animations\n const handleClose = useCallback(\n (event?: SyntheticEvent<HTMLElement, Event>) => {\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n const doClose = () => {\n modalRef.current?.close();\n onClose?.();\n };\n\n // Delay close to allow backdrop exit transition\n if (hasDialogSupport && animation) {\n modalRef.current?.classList.remove(TRANSITION_CLASS_NAME);\n modalRef.current?.addEventListener(\n \"transitionend\",\n () => {\n doClose();\n },\n { once: true },\n );\n } else {\n doClose();\n }\n },\n [onClose, hasDialogSupport, animation],\n );\n\n const modalClasses = classNames(\n \"mobius\",\n \"mobius/Modal\",\n {\n \"--no-dialog-support\": !hasDialogSupport, // This class is used to correctly position modal in x/y middle on iOS <= 15.2\n \"--should-transition\": hasDialogSupport && animation,\n \"--slide-up\": animation === \"slideUp\",\n \"--fade\": animation === \"fade\",\n \"--is-fullscreen\": isFullScreen,\n },\n className,\n );\n\n // Add polyfill for HTML Dialog in old browsers\n useEffect(() => {\n async function toggleModal() {\n if (\n !hasDialogSupport &&\n typeof window !== \"undefined\" &&\n modalRef.current !== null\n ) {\n // eslint-disable-next-line import/no-extraneous-dependencies\n const { default: dialogPolyfill } = await import(\"dialog-polyfill\");\n\n try {\n dialogPolyfill.registerDialog(modalRef.current);\n } catch (error) {\n // In iOS 15 <= 15.2 this intermittently fails with\n // TypeError: null is not an object (evaluating 'element.showModal')\n // Checking showModal presence through hasOwnProperty is falsy natively, truthy with polyfill 🤷🏼‍♂️\n console.error(\"Failed to load dialog-polyfill\", error);\n }\n }\n\n if (isOpen && !modalRef.current?.open) {\n modalRef.current?.showModal();\n modalRef.current?.classList.add(TRANSITION_CLASS_NAME);\n onOpen?.();\n } else if (!isOpen && modalRef.current?.open) {\n handleClose();\n }\n }\n\n toggleModal();\n }, [isOpen, onOpen, handleClose, hasDialogSupport]);\n\n return (\n <dialog\n ref={mergeRefs([modalRef, ref])}\n onCancel={handleClose}\n className={modalClasses}\n >\n {Children.map(children, child => {\n if (isValidElement(child)) {\n return cloneElement(child, {\n onClose: handleClose,\n closeLabel,\n } as any);\n }\n\n return child;\n })}\n </dialog>\n );\n});\n\nModal.displayName = \"Modal\";\nexport { Modal };\n"],"names":["Modal","TRANSITION_CLASS_NAME","forwardRef","props","ref","isOpen","onClose","onOpen","children","className","closeLabel","isFullScreen","animation","size","appElement","preventCloseOnEsc","shouldFocusAfterRender","parentSelector","hasWarnedAboutMissingLabels","useRef","current","console","warn","hasOpened","modalRef","hasDialogSupport","supportsDialog","useBodyScrollLock","enabled","handleClose","useCallback","event","preventDefault","stopPropagation","doClose","close","classList","remove","addEventListener","once","modalClasses","classNames","useEffect","toggleModal","window","default","dialogPolyfill","registerDialog","error","open","showModal","add","dialog","mergeRefs","onCancel","Children","map","child","isValidElement","cloneElement","displayName"],"mappings":"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"}