@simplybusiness/mobius 4.4.6 → 4.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/cjs/components/Drawer/Content.js +2 -9
  3. package/dist/cjs/components/Drawer/Content.js.map +1 -1
  4. package/dist/cjs/components/Drawer/Drawer.js +28 -134
  5. package/dist/cjs/components/Drawer/Drawer.js.map +1 -1
  6. package/dist/cjs/components/Drawer/DrawerContext.js +2 -2
  7. package/dist/cjs/components/Drawer/DrawerContext.js.map +1 -1
  8. package/dist/cjs/components/Drawer/Header.js +6 -2
  9. package/dist/cjs/components/Drawer/Header.js.map +1 -1
  10. package/dist/cjs/components/Drawer/index.js +12 -3
  11. package/dist/cjs/components/Drawer/index.js.map +1 -1
  12. package/dist/cjs/components/Drawer/useDrawer.js +2 -2
  13. package/dist/cjs/components/Drawer/useDrawer.js.map +1 -1
  14. package/dist/cjs/components/Modal/Content.js +2 -9
  15. package/dist/cjs/components/Modal/Content.js.map +1 -1
  16. package/dist/cjs/components/Modal/Header.js +6 -2
  17. package/dist/cjs/components/Modal/Header.js.map +1 -1
  18. package/dist/cjs/components/Modal/Modal.js +27 -133
  19. package/dist/cjs/components/Modal/Modal.js.map +1 -1
  20. package/dist/cjs/components/Modal/ModalContext.js +17 -0
  21. package/dist/cjs/components/Modal/ModalContext.js.map +1 -0
  22. package/dist/cjs/components/Modal/index.js +12 -3
  23. package/dist/cjs/components/Modal/index.js.map +1 -1
  24. package/dist/cjs/components/Modal/useModal.js +21 -0
  25. package/dist/cjs/components/Modal/useModal.js.map +1 -0
  26. package/dist/cjs/hooks/index.js +1 -0
  27. package/dist/cjs/hooks/index.js.map +1 -1
  28. package/dist/cjs/hooks/useDialog/index.js +20 -0
  29. package/dist/cjs/hooks/useDialog/index.js.map +1 -0
  30. package/dist/cjs/hooks/useDialog/useDialog.js +94 -0
  31. package/dist/cjs/hooks/useDialog/useDialog.js.map +1 -0
  32. package/dist/cjs/hooks/useDialogPolyfill/index.js +20 -0
  33. package/dist/cjs/hooks/useDialogPolyfill/index.js.map +1 -0
  34. package/dist/cjs/hooks/useDialogPolyfill/useDialogPolyfill.js +77 -0
  35. package/dist/cjs/hooks/useDialogPolyfill/useDialogPolyfill.js.map +1 -0
  36. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  37. package/dist/esm/components/Drawer/Content.js +3 -10
  38. package/dist/esm/components/Drawer/Content.js.map +1 -1
  39. package/dist/esm/components/Drawer/Drawer.js +30 -95
  40. package/dist/esm/components/Drawer/Drawer.js.map +1 -1
  41. package/dist/esm/components/Drawer/DrawerContext.js +2 -2
  42. package/dist/esm/components/Drawer/DrawerContext.js.map +1 -1
  43. package/dist/esm/components/Drawer/Header.js +6 -2
  44. package/dist/esm/components/Drawer/Header.js.map +1 -1
  45. package/dist/esm/components/Drawer/index.js +2 -1
  46. package/dist/esm/components/Drawer/index.js.map +1 -1
  47. package/dist/esm/components/Drawer/types.js.map +1 -1
  48. package/dist/esm/components/Drawer/useDrawer.js +2 -2
  49. package/dist/esm/components/Drawer/useDrawer.js.map +1 -1
  50. package/dist/esm/components/Modal/Content.js +3 -10
  51. package/dist/esm/components/Modal/Content.js.map +1 -1
  52. package/dist/esm/components/Modal/Header.js +6 -2
  53. package/dist/esm/components/Modal/Header.js.map +1 -1
  54. package/dist/esm/components/Modal/Modal.js +28 -93
  55. package/dist/esm/components/Modal/Modal.js.map +1 -1
  56. package/dist/esm/components/Modal/ModalContext.js +7 -0
  57. package/dist/esm/components/Modal/ModalContext.js.map +1 -0
  58. package/dist/esm/components/Modal/index.js +2 -1
  59. package/dist/esm/components/Modal/index.js.map +1 -1
  60. package/dist/esm/components/Modal/types.js.map +1 -1
  61. package/dist/esm/components/Modal/useModal.js +11 -0
  62. package/dist/esm/components/Modal/useModal.js.map +1 -0
  63. package/dist/esm/hooks/index.js +1 -0
  64. package/dist/esm/hooks/index.js.map +1 -1
  65. package/dist/esm/hooks/useDialog/index.js +3 -0
  66. package/dist/esm/hooks/useDialog/index.js.map +1 -0
  67. package/dist/esm/hooks/useDialog/useDialog.js +84 -0
  68. package/dist/esm/hooks/useDialog/useDialog.js.map +1 -0
  69. package/dist/esm/hooks/useDialogPolyfill/index.js +3 -0
  70. package/dist/esm/hooks/useDialogPolyfill/index.js.map +1 -0
  71. package/dist/esm/hooks/useDialogPolyfill/useDialogPolyfill.js +27 -0
  72. package/dist/esm/hooks/useDialogPolyfill/useDialogPolyfill.js.map +1 -0
  73. package/dist/types/components/Drawer/Content.d.ts +0 -2
  74. package/dist/types/components/Drawer/DrawerContext.d.ts +2 -0
  75. package/dist/types/components/Drawer/Header.d.ts +0 -2
  76. package/dist/types/components/Drawer/index.d.ts +4 -3
  77. package/dist/types/components/Drawer/types.d.ts +5 -1
  78. package/dist/types/components/Drawer/useDrawer.d.ts +4 -0
  79. package/dist/types/components/Modal/Content.d.ts +0 -2
  80. package/dist/types/components/Modal/Header.d.ts +0 -2
  81. package/dist/types/components/Modal/ModalContext.d.ts +2 -0
  82. package/dist/types/components/Modal/index.d.ts +4 -3
  83. package/dist/types/components/Modal/types.d.ts +5 -1
  84. package/dist/types/components/Modal/useModal.d.ts +4 -0
  85. package/dist/types/hooks/index.d.ts +1 -0
  86. package/dist/types/hooks/useDialog/index.d.ts +1 -0
  87. package/dist/types/hooks/useDialog/useDialog.d.ts +16 -0
  88. package/dist/types/hooks/useDialogPolyfill/index.d.ts +1 -0
  89. package/dist/types/hooks/useDialogPolyfill/useDialogPolyfill.d.ts +2 -0
  90. package/package.json +2 -1
  91. package/src/components/Drawer/Content.tsx +4 -26
  92. package/src/components/Drawer/Drawer.mdx +62 -0
  93. package/src/components/Drawer/Drawer.stories.tsx +1 -1
  94. package/src/components/Drawer/Drawer.tsx +31 -113
  95. package/src/components/Drawer/DrawerContext.tsx +7 -0
  96. package/src/components/Drawer/Header.tsx +19 -20
  97. package/src/components/Drawer/index.tsx +4 -2
  98. package/src/components/Drawer/types.ts +6 -1
  99. package/src/components/Drawer/useDrawer.ts +8 -0
  100. package/src/components/Modal/Content.tsx +4 -26
  101. package/src/components/Modal/Header.tsx +19 -20
  102. package/src/components/Modal/Modal.mdx +57 -0
  103. package/src/components/Modal/Modal.tsx +29 -111
  104. package/src/components/Modal/ModalContext.tsx +7 -0
  105. package/src/components/Modal/index.tsx +4 -2
  106. package/src/components/Modal/types.ts +6 -1
  107. package/src/components/Modal/useModal.ts +8 -0
  108. package/src/hooks/index.tsx +1 -0
  109. package/src/hooks/useDialog/index.ts +1 -0
  110. package/src/hooks/useDialog/useDialog.ts +98 -0
  111. package/src/hooks/useDialogPolyfill/index.ts +1 -0
  112. package/src/hooks/useDialogPolyfill/useDialogPolyfill.ts +32 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 4.5.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 8a50b45: Fix `<Drawer>`, `<Modal>` transition-in not working in Safari
8
+
9
+ ## 4.5.0
10
+
11
+ ### Minor Changes
12
+
13
+ - d1ba747: Refactor `onClose`, `closeLabel` child props in `<Drawer>` / `<Modal>`
14
+
3
15
  ## 4.4.6
4
16
 
5
17
  ### Patch Changes
@@ -10,18 +10,11 @@ Object.defineProperty(exports, "Content", {
10
10
  });
11
11
  const _jsxruntime = require("react/jsx-runtime");
12
12
  const _react = require("react");
13
- const Content = /*#__PURE__*/ (0, _react.forwardRef)(({ children, onClose, closeLabel: _, ...otherProps }, ref)=>/*#__PURE__*/ (0, _jsxruntime.jsx)("div", {
13
+ const Content = /*#__PURE__*/ (0, _react.forwardRef)(({ children, ...otherProps }, ref)=>/*#__PURE__*/ (0, _jsxruntime.jsx)("div", {
14
14
  ref: ref,
15
15
  ...otherProps,
16
16
  className: "mobius/DrawerContent",
17
- children: _react.Children.map(children, (child)=>{
18
- if (/*#__PURE__*/ (0, _react.isValidElement)(child)) {
19
- return /*#__PURE__*/ (0, _react.cloneElement)(child, {
20
- onClose
21
- });
22
- }
23
- return child;
24
- })
17
+ children: children
25
18
  }));
26
19
  Content.displayName = "Content";
27
20
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Drawer/Content.tsx"],"sourcesContent":["import {\n Children,\n PropsWithChildren,\n Ref,\n RefAttributes,\n cloneElement,\n forwardRef,\n isValidElement,\n} from \"react\";\nimport { DOMProps } from \"../../types/dom\";\n\nexport type DivRef = Ref<HTMLDivElement>;\nexport type DivElementType = HTMLDivElement;\nexport interface ContentProps\n extends DOMProps,\n RefAttributes<DivElementType>,\n PropsWithChildren {\n onClose?: () => void;\n closeLabel?: string;\n}\n\nconst Content = forwardRef(\n (\n { children, onClose, closeLabel: _, ...otherProps }: ContentProps,\n ref: DivRef,\n ) => (\n <div ref={ref} {...otherProps} className=\"mobius/DrawerContent\">\n {Children.map(children, child => {\n if (isValidElement(child)) {\n return cloneElement(child, {\n onClose,\n } as any);\n }\n\n return child;\n })}\n </div>\n ),\n);\n\nContent.displayName = \"Content\";\nexport { Content };\n"],"names":["Content","forwardRef","children","onClose","closeLabel","_","otherProps","ref","div","className","Children","map","child","isValidElement","cloneElement","displayName"],"mappings":";;;;+BAyCSA;;;eAAAA;;;;uBAjCF;AAaP,MAAMA,wBAAUC,IAAAA,iBAAU,EACxB,CACE,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,YAAYC,CAAC,EAAE,GAAGC,YAA0B,EACjEC,oBAEA,qBAACC;QAAID,KAAKA;QAAM,GAAGD,UAAU;QAAEG,WAAU;kBACtCC,eAAQ,CAACC,GAAG,CAACT,UAAUU,CAAAA;YACtB,kBAAIC,IAAAA,qBAAc,EAACD,QAAQ;gBACzB,qBAAOE,IAAAA,mBAAY,EAACF,OAAO;oBACzBT;gBACF;YACF;YAEA,OAAOS;QACT;;AAKNZ,QAAQe,WAAW,GAAG"}
1
+ {"version":3,"sources":["../../../../src/components/Drawer/Content.tsx"],"sourcesContent":["import { PropsWithChildren, Ref, RefAttributes, forwardRef } from \"react\";\nimport { DOMProps } from \"../../types/dom\";\n\nexport type DivRef = Ref<HTMLDivElement>;\nexport type DivElementType = HTMLDivElement;\nexport interface ContentProps\n extends DOMProps,\n RefAttributes<DivElementType>,\n PropsWithChildren {}\n\nconst Content = forwardRef(\n ({ children, ...otherProps }: ContentProps, ref: DivRef) => (\n <div ref={ref} {...otherProps} className=\"mobius/DrawerContent\">\n {children}\n </div>\n ),\n);\n\nContent.displayName = \"Content\";\nexport { Content };\n"],"names":["Content","forwardRef","children","otherProps","ref","div","className","displayName"],"mappings":";;;;+BAmBSA;;;eAAAA;;;;uBAnByD;AAUlE,MAAMA,wBAAUC,IAAAA,iBAAU,EACxB,CAAC,EAAEC,QAAQ,EAAE,GAAGC,YAA0B,EAAEC,oBAC1C,qBAACC;QAAID,KAAKA;QAAM,GAAGD,UAAU;QAAEG,WAAU;kBACtCJ;;AAKPF,QAAQO,WAAW,GAAG"}
@@ -12,148 +12,47 @@ Object.defineProperty(exports, "Drawer", {
12
12
  const _jsxruntime = require("react/jsx-runtime");
13
13
  const _dedupe = /*#__PURE__*/ _interop_require_default(require("classnames/dedupe"));
14
14
  const _react = require("react");
15
- const _useBodyScrollLock = require("../../hooks/useBodyScrollLock");
16
- const _polyfilltests = require("../../utils/polyfill-tests");
17
15
  const _VisuallyHidden = require("../VisuallyHidden");
18
16
  const _utils = require("../../utils");
17
+ const _DrawerContext = require("./DrawerContext");
18
+ const _hooks = require("../../hooks");
19
19
  function _interop_require_default(obj) {
20
20
  return obj && obj.__esModule ? obj : {
21
21
  default: obj
22
22
  };
23
23
  }
24
- function _getRequireWildcardCache(nodeInterop) {
25
- if (typeof WeakMap !== "function") return null;
26
- var cacheBabelInterop = new WeakMap();
27
- var cacheNodeInterop = new WeakMap();
28
- return (_getRequireWildcardCache = function(nodeInterop) {
29
- return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
30
- })(nodeInterop);
31
- }
32
- function _interop_require_wildcard(obj, nodeInterop) {
33
- if (!nodeInterop && obj && obj.__esModule) {
34
- return obj;
35
- }
36
- if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
37
- return {
38
- default: obj
39
- };
40
- }
41
- var cache = _getRequireWildcardCache(nodeInterop);
42
- if (cache && cache.has(obj)) {
43
- return cache.get(obj);
44
- }
45
- var newObj = {
46
- __proto__: null
47
- };
48
- var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
49
- for(var key in obj){
50
- if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
51
- var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
52
- if (desc && (desc.get || desc.set)) {
53
- Object.defineProperty(newObj, key, desc);
54
- } else {
55
- newObj[key] = obj[key];
56
- }
57
- }
58
- }
59
- newObj.default = obj;
60
- if (cache) {
61
- cache.set(obj, newObj);
62
- }
63
- return newObj;
64
- }
65
- const TRANSITION_CLASS_NAME = "--transition";
24
+ const TRANSITION_CSS_VARIABLE = "--drawer-transition-duration";
66
25
  const Drawer = /*#__PURE__*/ (0, _react.forwardRef)((props, ref)=>{
67
26
  const { isOpen, className, closeLabel, direction, announce = "Drawer opened on screen", onOpen, onClose, children } = props;
68
- const hasOpened = (0, _react.useRef)(false);
69
- const modalRef = (0, _react.useRef)(null);
70
- const hasDialogSupport = (0, _polyfilltests.supportsDialog)();
71
- // Fire onOpen once
72
- if (onOpen && !hasOpened.current) {
73
- onOpen();
74
- hasOpened.current = true;
75
- }
76
- (0, _useBodyScrollLock.useBodyScrollLock)({
77
- enabled: isOpen
78
- });
79
- // Add close handler, to enable closing transitions
80
- const handleClose = (0, _react.useCallback)((event)=>{
81
- // `transitionend` may be called from another component but `event` may be undefined.
82
- // This fixes an issue where closing `<Accordion>` inside `<Drawer>` will close both
83
- if (!event) return;
84
- if (event) {
85
- event.preventDefault();
86
- event.stopPropagation();
87
- }
88
- // Name the callback function, so we can add and remove event listener
89
- const transitionCallback = (e)=>{
90
- // Close drawer only if the transition is on the dialog element
91
- // As it can be on a child element (ie `<Button>` inside the drawer)
92
- if (e.target === modalRef.current) {
93
- // eslint-disable-next-line @typescript-eslint/no-use-before-define
94
- doClose();
95
- }
96
- };
97
- const doClose = ()=>{
98
- var _modalRef_current, _modalRef_current1;
99
- (_modalRef_current = modalRef.current) === null || _modalRef_current === void 0 ? void 0 : _modalRef_current.close();
100
- onClose === null || onClose === void 0 ? void 0 : onClose();
101
- (_modalRef_current1 = modalRef.current) === null || _modalRef_current1 === void 0 ? void 0 : _modalRef_current1.removeEventListener("transitionend", transitionCallback);
102
- };
103
- // Delay close to allow backdrop exit transition
104
- if (hasDialogSupport) {
105
- var _modalRef_current, _modalRef_current1;
106
- (_modalRef_current = modalRef.current) === null || _modalRef_current === void 0 ? void 0 : _modalRef_current.classList.remove(TRANSITION_CLASS_NAME);
107
- (_modalRef_current1 = modalRef.current) === null || _modalRef_current1 === void 0 ? void 0 : _modalRef_current1.addEventListener("transitionend", transitionCallback);
108
- } else {
109
- doClose();
110
- }
111
- }, [
112
- onClose,
113
- hasDialogSupport
114
- ]);
115
- const modalClasses = (0, _dedupe.default)("mobius", "mobius/Drawer", `--${direction}`, className, {
116
- "--should-transition": hasDialogSupport
117
- });
118
- // Add polyfill for HTML Dialog in old browsers
119
- (0, _react.useEffect)(()=>{
120
- async function toggleModal() {
121
- var _modalRef_current, _modalRef_current1;
122
- if (!hasDialogSupport && typeof window !== "undefined" && modalRef.current !== null) {
123
- // eslint-disable-next-line import/no-extraneous-dependencies
124
- const { default: dialogPolyfill } = await Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard(require("dialog-polyfill")));
125
- try {
126
- dialogPolyfill.registerDialog(modalRef.current);
127
- } catch (error) {
128
- // In iOS 15 <= 15.2 this intermittently fails with
129
- // TypeError: null is not an object (evaluating 'element.showModal')
130
- // Checking showModal presence through hasOwnProperty is falsy natively, truthy with polyfill 🤷🏼‍♂️
131
- console.error("Failed to load dialog-polyfill", error);
132
- }
133
- }
134
- if (isOpen && !((_modalRef_current = modalRef.current) === null || _modalRef_current === void 0 ? void 0 : _modalRef_current.open)) {
135
- var _modalRef_current2, _modalRef_current3;
136
- (_modalRef_current2 = modalRef.current) === null || _modalRef_current2 === void 0 ? void 0 : _modalRef_current2.showModal();
137
- (_modalRef_current3 = modalRef.current) === null || _modalRef_current3 === void 0 ? void 0 : _modalRef_current3.classList.add(TRANSITION_CLASS_NAME);
138
- onOpen === null || onOpen === void 0 ? void 0 : onOpen();
139
- } else if (!isOpen && ((_modalRef_current1 = modalRef.current) === null || _modalRef_current1 === void 0 ? void 0 : _modalRef_current1.open)) {
140
- handleClose();
141
- }
142
- }
143
- toggleModal();
144
- }, [
27
+ const shouldTransition = (0, _utils.supportsDialog)();
28
+ const dialogRef = (0, _react.useRef)(null);
29
+ const { close } = (0, _hooks.useDialog)({
30
+ ref: dialogRef,
145
31
  isOpen,
146
32
  onOpen,
147
- handleClose,
148
- hasDialogSupport
33
+ onClose,
34
+ transition: {
35
+ isEnabled: true,
36
+ CSSVariable: TRANSITION_CSS_VARIABLE
37
+ }
38
+ });
39
+ const dialogClasses = (0, _dedupe.default)("mobius", "mobius/Drawer", `--${direction}`, className, {
40
+ "--should-transition": shouldTransition
41
+ });
42
+ const contextValue = (0, _react.useMemo)(()=>({
43
+ onClose: close,
44
+ closeLabel
45
+ }), [
46
+ close,
47
+ closeLabel
149
48
  ]);
150
49
  return /*#__PURE__*/ (0, _jsxruntime.jsxs)("dialog", {
151
50
  ref: (0, _utils.mergeRefs)([
152
- modalRef,
51
+ dialogRef,
153
52
  ref
154
53
  ]),
155
- onCancel: handleClose,
156
- className: modalClasses,
54
+ onCancel: close,
55
+ className: dialogClasses,
157
56
  "aria-describedby": "screen-reader-announce",
158
57
  children: [
159
58
  /*#__PURE__*/ (0, _jsxruntime.jsx)(_VisuallyHidden.VisuallyHidden, {
@@ -162,14 +61,9 @@ const Drawer = /*#__PURE__*/ (0, _react.forwardRef)((props, ref)=>{
162
61
  children: announce
163
62
  })
164
63
  }),
165
- _react.Children.map(children, (child)=>{
166
- if (/*#__PURE__*/ (0, _react.isValidElement)(child)) {
167
- return /*#__PURE__*/ (0, _react.cloneElement)(child, {
168
- onClose: handleClose,
169
- closeLabel
170
- });
171
- }
172
- return child;
64
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_DrawerContext.DrawerContext.Provider, {
65
+ value: contextValue,
66
+ children: children
173
67
  })
174
68
  ]
175
69
  });
@@ -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 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 // `transitionend` may be called from another component but `event` may be undefined.\n // This fixes an issue where closing `<Accordion>` inside `<Drawer>` will close both\n if (!event) return;\n\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n // Name the callback function, so we can add and remove event listener\n const transitionCallback = (e: Event) => {\n // Close drawer only if the transition is on the dialog element\n // As it can be on a child element (ie `<Button>` inside the drawer)\n if (e.target === modalRef.current) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n doClose();\n }\n };\n\n const doClose = () => {\n modalRef.current?.close();\n onClose?.();\n modalRef.current?.removeEventListener(\n \"transitionend\",\n transitionCallback,\n );\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(\"transitionend\", transitionCallback);\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","transitionCallback","e","target","doClose","close","removeEventListener","classList","remove","addEventListener","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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"}
1
+ {"version":3,"sources":["../../../../src/components/Drawer/Drawer.tsx"],"sourcesContent":["\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport { Ref, forwardRef, useMemo, useRef } from \"react\";\nimport { VisuallyHidden } from \"../VisuallyHidden\";\nimport { DrawerProps } from \"./types\";\nimport { mergeRefs, supportsDialog } from \"../../utils\";\nimport { DrawerContext } from \"./DrawerContext\";\nimport { useDialog } from \"../../hooks\";\n\nexport type DialogElementType = HTMLDialogElement;\nexport type DialogRef = Ref<DialogElementType>;\n\nconst TRANSITION_CSS_VARIABLE = \"--drawer-transition-duration\";\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 shouldTransition = supportsDialog();\n const dialogRef = useRef<HTMLDialogElement | null>(null);\n const { close } = useDialog({\n ref: dialogRef,\n isOpen,\n onOpen,\n onClose,\n transition: {\n isEnabled: true,\n CSSVariable: TRANSITION_CSS_VARIABLE,\n },\n });\n\n const dialogClasses = classNames(\n \"mobius\",\n \"mobius/Drawer\",\n `--${direction}`,\n className,\n {\n \"--should-transition\": shouldTransition,\n },\n );\n\n const contextValue = useMemo(\n () => ({\n onClose: close,\n closeLabel,\n }),\n [close, closeLabel],\n );\n\n return (\n <dialog\n ref={mergeRefs([dialogRef, ref])}\n onCancel={close}\n className={dialogClasses}\n aria-describedby=\"screen-reader-announce\"\n >\n <VisuallyHidden>\n <div id=\"screen-reader-announce\">{announce}</div>\n </VisuallyHidden>\n <DrawerContext.Provider value={contextValue}>\n {children}\n </DrawerContext.Provider>\n </dialog>\n );\n});\n\nDrawer.displayName = \"Drawer\";\nexport { Drawer };\n"],"names":["Drawer","TRANSITION_CSS_VARIABLE","forwardRef","props","ref","isOpen","className","closeLabel","direction","announce","onOpen","onClose","children","shouldTransition","supportsDialog","dialogRef","useRef","close","useDialog","transition","isEnabled","CSSVariable","dialogClasses","classNames","contextValue","useMemo","dialog","mergeRefs","onCancel","aria-describedby","VisuallyHidden","div","id","DrawerContext","Provider","value","displayName"],"mappings":"AAAA;;;;;+BA2ESA;;;eAAAA;;;;+DAzEc;uBAC0B;gCAClB;uBAEW;+BACZ;uBACJ;;;;;;AAK1B,MAAMC,0BAA0B;AAEhC,MAAMD,uBAASE,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,mBAAmBC,IAAAA,qBAAc;IACvC,MAAMC,YAAYC,IAAAA,aAAM,EAA2B;IACnD,MAAM,EAAEC,KAAK,EAAE,GAAGC,IAAAA,gBAAS,EAAC;QAC1Bd,KAAKW;QACLV;QACAK;QACAC;QACAQ,YAAY;YACVC,WAAW;YACXC,aAAapB;QACf;IACF;IAEA,MAAMqB,gBAAgBC,IAAAA,eAAU,EAC9B,UACA,iBACA,CAAC,EAAE,EAAEf,UAAU,CAAC,EAChBF,WACA;QACE,uBAAuBO;IACzB;IAGF,MAAMW,eAAeC,IAAAA,cAAO,EAC1B,IAAO,CAAA;YACLd,SAASM;YACTV;QACF,CAAA,GACA;QAACU;QAAOV;KAAW;IAGrB,qBACE,sBAACmB;QACCtB,KAAKuB,IAAAA,gBAAS,EAAC;YAACZ;YAAWX;SAAI;QAC/BwB,UAAUX;QACVX,WAAWgB;QACXO,oBAAiB;;0BAEjB,qBAACC,8BAAc;0BACb,cAAA,qBAACC;oBAAIC,IAAG;8BAA0BvB;;;0BAEpC,qBAACwB,4BAAa,CAACC,QAAQ;gBAACC,OAAOX;0BAC5BZ;;;;AAIT;AAEAZ,OAAOoC,WAAW,GAAG"}
@@ -10,8 +10,8 @@ Object.defineProperty(exports, "DrawerContext", {
10
10
  });
11
11
  const _react = require("react");
12
12
  const DrawerContext = /*#__PURE__*/ (0, _react.createContext)({
13
- closeDrawer: ()=>{},
14
- closeLabel: ""
13
+ onClose: ()=>{},
14
+ closeLabel: undefined
15
15
  });
16
16
 
17
17
  //# sourceMappingURL=DrawerContext.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Drawer/DrawerContext.tsx"],"sourcesContent":["import { SyntheticEvent, createContext } from \"react\";\nimport { DrawerProps } from \"./types\";\n\nexport interface DrawerContextProps extends Pick<DrawerProps, \"closeLabel\"> {\n closeDrawer: (event?: SyntheticEvent<HTMLElement, Event>) => void;\n}\n\nexport const DrawerContext = createContext<DrawerContextProps>({\n closeDrawer: () => {},\n closeLabel: \"\",\n});\n"],"names":["DrawerContext","createContext","closeDrawer","closeLabel"],"mappings":";;;;+BAOaA;;;eAAAA;;;uBAPiC;AAOvC,MAAMA,8BAAgBC,IAAAA,oBAAa,EAAqB;IAC7DC,aAAa,KAAO;IACpBC,YAAY;AACd"}
1
+ {"version":3,"sources":["../../../../src/components/Drawer/DrawerContext.tsx"],"sourcesContent":["import { createContext } from \"react\";\nimport { DrawerContextProps } from \"./types\";\n\nexport const DrawerContext = createContext<DrawerContextProps>({\n onClose: () => {},\n closeLabel: undefined,\n});\n"],"names":["DrawerContext","createContext","onClose","closeLabel","undefined"],"mappings":";;;;+BAGaA;;;eAAAA;;;uBAHiB;AAGvB,MAAMA,8BAAgBC,IAAAA,oBAAa,EAAqB;IAC7DC,SAAS,KAAO;IAChBC,YAAYC;AACd"}
@@ -13,7 +13,10 @@ const _react = require("react");
13
13
  const _icons = require("@simplybusiness/icons");
14
14
  const _Button = require("../Button");
15
15
  const _Icon = require("../Icon");
16
- const Header = /*#__PURE__*/ (0, _react.forwardRef)(({ children, onClose, closeLabel, ...otherProps }, ref)=>/*#__PURE__*/ (0, _jsxruntime.jsxs)("header", {
16
+ const _useDrawer = require("./useDrawer");
17
+ const Header = /*#__PURE__*/ (0, _react.forwardRef)(({ children, ...otherProps }, ref)=>{
18
+ const { onClose, closeLabel } = (0, _useDrawer.useDrawer)();
19
+ return /*#__PURE__*/ (0, _jsxruntime.jsxs)("header", {
17
20
  ref: ref,
18
21
  ...otherProps,
19
22
  className: "mobius/DrawerHeader",
@@ -33,7 +36,8 @@ const Header = /*#__PURE__*/ (0, _react.forwardRef)(({ children, onClose, closeL
33
36
  ]
34
37
  })
35
38
  ]
36
- }));
39
+ });
40
+ });
37
41
  Header.displayName = "Header";
38
42
 
39
43
  //# sourceMappingURL=Header.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Drawer/Header.tsx"],"sourcesContent":["import { PropsWithChildren, Ref, RefAttributes, forwardRef } from \"react\";\n\nimport { cross } from \"@simplybusiness/icons\";\nimport { DOMProps } from \"../../types/dom\";\nimport { Button } from \"../Button\";\nimport { Icon } from \"../Icon\";\n\nexport type HeaderElementType = HTMLDivElement;\nexport type HeaderRef = Ref<HTMLElement>;\n\nexport interface HeaderProps\n extends DOMProps,\n RefAttributes<HeaderElementType>,\n PropsWithChildren {\n onClose?: () => void;\n closeLabel?: string;\n}\n\nconst Header = forwardRef(\n (\n { children, onClose, closeLabel, ...otherProps }: HeaderProps,\n ref: HeaderRef,\n ) => (\n <header ref={ref} {...otherProps} className=\"mobius/DrawerHeader\">\n {children}\n <Button\n aria-label=\"Close\"\n variant=\"basic\"\n onPress={onClose}\n className=\"mobius/DrawerClose\"\n >\n <Icon icon={cross} /> {closeLabel}\n </Button>\n </header>\n ),\n);\n\nHeader.displayName = \"Header\";\nexport { Header };\n"],"names":["Header","forwardRef","children","onClose","closeLabel","otherProps","ref","header","className","Button","aria-label","variant","onPress","Icon","icon","cross","displayName"],"mappings":";;;;+BAsCSA;;;eAAAA;;;;uBAtCyD;uBAE5C;wBAEC;sBACF;AAarB,MAAMA,uBAASC,IAAAA,iBAAU,EACvB,CACE,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,UAAU,EAAE,GAAGC,YAAyB,EAC7DC,oBAEA,sBAACC;QAAOD,KAAKA;QAAM,GAAGD,UAAU;QAAEG,WAAU;;YACzCN;0BACD,sBAACO,cAAM;gBACLC,cAAW;gBACXC,SAAQ;gBACRC,SAAST;gBACTK,WAAU;;kCAEV,qBAACK,UAAI;wBAACC,MAAMC,YAAK;;oBAAI;oBAAEX;;;;;AAM/BJ,OAAOgB,WAAW,GAAG"}
1
+ {"version":3,"sources":["../../../../src/components/Drawer/Header.tsx"],"sourcesContent":["import { PropsWithChildren, Ref, RefAttributes, forwardRef } from \"react\";\n\nimport { cross } from \"@simplybusiness/icons\";\nimport { DOMProps } from \"../../types/dom\";\nimport { Button } from \"../Button\";\nimport { Icon } from \"../Icon\";\nimport { useDrawer } from \"./useDrawer\";\n\nexport type HeaderElementType = HTMLDivElement;\nexport type HeaderRef = Ref<HTMLElement>;\n\nexport interface HeaderProps\n extends DOMProps,\n RefAttributes<HeaderElementType>,\n PropsWithChildren {}\n\nconst Header = forwardRef(\n ({ children, ...otherProps }: HeaderProps, ref: HeaderRef) => {\n const { onClose, closeLabel } = useDrawer();\n\n return (\n <header ref={ref} {...otherProps} className=\"mobius/DrawerHeader\">\n {children}\n <Button\n aria-label=\"Close\"\n variant=\"basic\"\n onPress={onClose}\n className=\"mobius/DrawerClose\"\n >\n <Icon icon={cross} /> {closeLabel}\n </Button>\n </header>\n );\n },\n);\n\nHeader.displayName = \"Header\";\nexport { Header };\n"],"names":["Header","forwardRef","children","otherProps","ref","onClose","closeLabel","useDrawer","header","className","Button","aria-label","variant","onPress","Icon","icon","cross","displayName"],"mappings":";;;;+BAqCSA;;;eAAAA;;;;uBArCyD;uBAE5C;wBAEC;sBACF;2BACK;AAU1B,MAAMA,uBAASC,IAAAA,iBAAU,EACvB,CAAC,EAAEC,QAAQ,EAAE,GAAGC,YAAyB,EAAEC;IACzC,MAAM,EAAEC,OAAO,EAAEC,UAAU,EAAE,GAAGC,IAAAA,oBAAS;IAEzC,qBACE,sBAACC;QAAOJ,KAAKA;QAAM,GAAGD,UAAU;QAAEM,WAAU;;YACzCP;0BACD,sBAACQ,cAAM;gBACLC,cAAW;gBACXC,SAAQ;gBACRC,SAASR;gBACTI,WAAU;;kCAEV,qBAACK,UAAI;wBAACC,MAAMC,YAAK;;oBAAI;oBAAEV;;;;;AAI/B;AAGFN,OAAOiB,WAAW,GAAG"}
@@ -2,14 +2,23 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
- Object.defineProperty(exports, "Drawer", {
6
- enumerable: true,
7
- get: function() {
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: all[name]
9
+ });
10
+ }
11
+ _export(exports, {
12
+ Drawer: function() {
8
13
  return Drawer;
14
+ },
15
+ useDrawer: function() {
16
+ return _useDrawer.useDrawer;
9
17
  }
10
18
  });
11
19
  const _Content = require("./Content");
12
20
  const _Drawer = require("./Drawer");
21
+ const _useDrawer = require("./useDrawer");
13
22
  const _Header = require("./Header");
14
23
  const Drawer = Object.assign(_Drawer.Drawer, {
15
24
  Header: _Header.Header,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Drawer/index.tsx"],"sourcesContent":["import {\n Content,\n DivElementType as DrawerContentDivElementType,\n ContentProps as DrawerContentProps,\n} from \"./Content\";\nimport { Drawer as DrawerComponent } from \"./Drawer\";\nimport { DrawerProps } from \"./types\";\nimport {\n HeaderElementType as DrawerHeaderElementType,\n HeaderProps as DrawerHeaderProps,\n Header,\n} from \"./Header\";\n\nconst Drawer = Object.assign(DrawerComponent, {\n Header,\n Content,\n});\n\nDrawer.displayName = \"Drawer\";\nexport { Drawer };\n\nexport type {\n DrawerContentDivElementType,\n DrawerContentProps,\n DrawerHeaderElementType,\n DrawerHeaderProps,\n DrawerProps,\n};\n"],"names":["Drawer","Object","assign","DrawerComponent","Header","Content","displayName"],"mappings":";;;;+BAmBSA;;;eAAAA;;;yBAfF;wBACmC;wBAMnC;AAEP,MAAMA,SAASC,OAAOC,MAAM,CAACC,cAAe,EAAE;IAC5CC,QAAAA,cAAM;IACNC,SAAAA,gBAAO;AACT;AAEAL,OAAOM,WAAW,GAAG"}
1
+ {"version":3,"sources":["../../../../src/components/Drawer/index.tsx"],"sourcesContent":["import {\n Content,\n DivElementType as DrawerContentDivElementType,\n ContentProps as DrawerContentProps,\n} from \"./Content\";\nimport { Drawer as DrawerComponent } from \"./Drawer\";\nimport { DrawerProps, DrawerContextProps } from \"./types\";\nimport { useDrawer } from \"./useDrawer\";\nimport {\n HeaderElementType as DrawerHeaderElementType,\n HeaderProps as DrawerHeaderProps,\n Header,\n} from \"./Header\";\n\nconst Drawer = Object.assign(DrawerComponent, {\n Header,\n Content,\n});\n\nDrawer.displayName = \"Drawer\";\nexport { Drawer, useDrawer };\n\nexport type {\n DrawerContextProps,\n DrawerContentDivElementType,\n DrawerContentProps,\n DrawerHeaderElementType,\n DrawerHeaderProps,\n DrawerProps,\n};\n"],"names":["Drawer","useDrawer","Object","assign","DrawerComponent","Header","Content","displayName"],"mappings":";;;;;;;;;;;IAoBSA,MAAM;eAANA;;IAAQC,SAAS;eAATA,oBAAS;;;yBAhBnB;wBACmC;2BAEhB;wBAKnB;AAEP,MAAMD,SAASE,OAAOC,MAAM,CAACC,cAAe,EAAE;IAC5CC,QAAAA,cAAM;IACNC,SAAAA,gBAAO;AACT;AAEAN,OAAOO,WAAW,GAAG"}
@@ -11,9 +11,9 @@ Object.defineProperty(exports, "useDrawer", {
11
11
  const _react = require("react");
12
12
  const _DrawerContext = require("./DrawerContext");
13
13
  const useDrawer = ()=>{
14
- const { closeDrawer, closeLabel } = (0, _react.useContext)(_DrawerContext.DrawerContext);
14
+ const { onClose, closeLabel } = (0, _react.useContext)(_DrawerContext.DrawerContext);
15
15
  return {
16
- closeDrawer,
16
+ onClose,
17
17
  closeLabel
18
18
  };
19
19
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Drawer/useDrawer.ts"],"sourcesContent":["import { useContext } from \"react\";\nimport { DrawerContext } from \"./DrawerContext\";\n\nexport const useDrawer = () => {\n const { closeDrawer, closeLabel } = useContext(DrawerContext);\n\n return {\n closeDrawer,\n closeLabel,\n };\n};\n"],"names":["useDrawer","closeDrawer","closeLabel","useContext","DrawerContext"],"mappings":";;;;+BAGaA;;;eAAAA;;;uBAHc;+BACG;AAEvB,MAAMA,YAAY;IACvB,MAAM,EAAEC,WAAW,EAAEC,UAAU,EAAE,GAAGC,IAAAA,iBAAU,EAACC,4BAAa;IAE5D,OAAO;QACLH;QACAC;IACF;AACF"}
1
+ {"version":3,"sources":["../../../../src/components/Drawer/useDrawer.ts"],"sourcesContent":["import { useContext } from \"react\";\nimport { DrawerContext } from \"./DrawerContext\";\n\nexport const useDrawer = () => {\n const { onClose, closeLabel } = useContext(DrawerContext);\n\n return { onClose, closeLabel };\n};\n"],"names":["useDrawer","onClose","closeLabel","useContext","DrawerContext"],"mappings":";;;;+BAGaA;;;eAAAA;;;uBAHc;+BACG;AAEvB,MAAMA,YAAY;IACvB,MAAM,EAAEC,OAAO,EAAEC,UAAU,EAAE,GAAGC,IAAAA,iBAAU,EAACC,4BAAa;IAExD,OAAO;QAAEH;QAASC;IAAW;AAC/B"}
@@ -10,18 +10,11 @@ Object.defineProperty(exports, "Content", {
10
10
  });
11
11
  const _jsxruntime = require("react/jsx-runtime");
12
12
  const _react = require("react");
13
- const Content = /*#__PURE__*/ (0, _react.forwardRef)(({ children, onClose, closeLabel: _, ...otherProps }, ref)=>/*#__PURE__*/ (0, _jsxruntime.jsx)("div", {
13
+ const Content = /*#__PURE__*/ (0, _react.forwardRef)(({ children, ...otherProps }, ref)=>/*#__PURE__*/ (0, _jsxruntime.jsx)("div", {
14
14
  ref: ref,
15
15
  ...otherProps,
16
16
  className: "mobius/ModalContent",
17
- children: _react.Children.map(children, (child)=>{
18
- if (/*#__PURE__*/ (0, _react.isValidElement)(child)) {
19
- return /*#__PURE__*/ (0, _react.cloneElement)(child, {
20
- onClose
21
- });
22
- }
23
- return child;
24
- })
17
+ children: children
25
18
  }));
26
19
  Content.displayName = "Content";
27
20
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Modal/Content.tsx"],"sourcesContent":["import {\n Children,\n PropsWithChildren,\n Ref,\n RefAttributes,\n cloneElement,\n forwardRef,\n isValidElement,\n} from \"react\";\nimport { DOMProps } from \"../../types/dom\";\n\nexport type DivRef = Ref<HTMLDivElement>;\nexport type DivElementType = HTMLDivElement;\nexport interface ContentProps\n extends DOMProps,\n RefAttributes<DivElementType>,\n PropsWithChildren {\n onClose?: () => void;\n closeLabel?: string;\n}\n\nconst Content = forwardRef(\n (\n { children, onClose, closeLabel: _, ...otherProps }: ContentProps,\n ref: DivRef,\n ) => (\n <div ref={ref} {...otherProps} className=\"mobius/ModalContent\">\n {Children.map(children, child => {\n if (isValidElement(child)) {\n return cloneElement(child, {\n onClose,\n } as any);\n }\n\n return child;\n })}\n </div>\n ),\n);\n\nContent.displayName = \"Content\";\nexport { Content };\n"],"names":["Content","forwardRef","children","onClose","closeLabel","_","otherProps","ref","div","className","Children","map","child","isValidElement","cloneElement","displayName"],"mappings":";;;;+BAyCSA;;;eAAAA;;;;uBAjCF;AAaP,MAAMA,wBAAUC,IAAAA,iBAAU,EACxB,CACE,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,YAAYC,CAAC,EAAE,GAAGC,YAA0B,EACjEC,oBAEA,qBAACC;QAAID,KAAKA;QAAM,GAAGD,UAAU;QAAEG,WAAU;kBACtCC,eAAQ,CAACC,GAAG,CAACT,UAAUU,CAAAA;YACtB,kBAAIC,IAAAA,qBAAc,EAACD,QAAQ;gBACzB,qBAAOE,IAAAA,mBAAY,EAACF,OAAO;oBACzBT;gBACF;YACF;YAEA,OAAOS;QACT;;AAKNZ,QAAQe,WAAW,GAAG"}
1
+ {"version":3,"sources":["../../../../src/components/Modal/Content.tsx"],"sourcesContent":["import { PropsWithChildren, Ref, RefAttributes, forwardRef } from \"react\";\nimport { DOMProps } from \"../../types/dom\";\n\nexport type DivRef = Ref<HTMLDivElement>;\nexport type DivElementType = HTMLDivElement;\nexport interface ContentProps\n extends DOMProps,\n RefAttributes<DivElementType>,\n PropsWithChildren {}\n\nconst Content = forwardRef(\n ({ children, ...otherProps }: ContentProps, ref: DivRef) => (\n <div ref={ref} {...otherProps} className=\"mobius/ModalContent\">\n {children}\n </div>\n ),\n);\n\nContent.displayName = \"Content\";\nexport { Content };\n"],"names":["Content","forwardRef","children","otherProps","ref","div","className","displayName"],"mappings":";;;;+BAmBSA;;;eAAAA;;;;uBAnByD;AAUlE,MAAMA,wBAAUC,IAAAA,iBAAU,EACxB,CAAC,EAAEC,QAAQ,EAAE,GAAGC,YAA0B,EAAEC,oBAC1C,qBAACC;QAAID,KAAKA;QAAM,GAAGD,UAAU;QAAEG,WAAU;kBACtCJ;;AAKPF,QAAQO,WAAW,GAAG"}
@@ -13,7 +13,10 @@ const _react = require("react");
13
13
  const _icons = require("@simplybusiness/icons");
14
14
  const _Button = require("../Button");
15
15
  const _Icon = require("../Icon");
16
- const Header = /*#__PURE__*/ (0, _react.forwardRef)(({ children, onClose, closeLabel, ...otherProps }, ref)=>/*#__PURE__*/ (0, _jsxruntime.jsxs)("header", {
16
+ const _useModal = require("./useModal");
17
+ const Header = /*#__PURE__*/ (0, _react.forwardRef)(({ children, ...otherProps }, ref)=>{
18
+ const { onClose, closeLabel } = (0, _useModal.useModal)();
19
+ return /*#__PURE__*/ (0, _jsxruntime.jsxs)("header", {
17
20
  ref: ref,
18
21
  ...otherProps,
19
22
  className: "mobius/ModalHeader",
@@ -33,7 +36,8 @@ const Header = /*#__PURE__*/ (0, _react.forwardRef)(({ children, onClose, closeL
33
36
  ]
34
37
  })
35
38
  ]
36
- }));
39
+ });
40
+ });
37
41
  Header.displayName = "Header";
38
42
 
39
43
  //# sourceMappingURL=Header.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Modal/Header.tsx"],"sourcesContent":["import { PropsWithChildren, Ref, RefAttributes, forwardRef } from \"react\";\n\nimport { cross } from \"@simplybusiness/icons\";\nimport { DOMProps } from \"../../types/dom\";\nimport { Button } from \"../Button\";\nimport { Icon } from \"../Icon\";\n\nexport type HeaderElementType = HTMLDivElement;\nexport type HeaderRef = Ref<HTMLElement>;\n\nexport interface HeaderProps\n extends DOMProps,\n RefAttributes<HeaderElementType>,\n PropsWithChildren {\n onClose?: () => void;\n closeLabel?: string;\n}\n\nconst Header = forwardRef(\n (\n { children, onClose, closeLabel, ...otherProps }: HeaderProps,\n ref: HeaderRef,\n ) => (\n <header ref={ref} {...otherProps} className=\"mobius/ModalHeader\">\n {children}\n <Button\n aria-label=\"Close\"\n variant=\"basic\"\n onPress={onClose}\n className=\"mobius/ModalClose\"\n >\n <Icon icon={cross} /> {closeLabel}\n </Button>\n </header>\n ),\n);\n\nHeader.displayName = \"Header\";\nexport { Header };\n"],"names":["Header","forwardRef","children","onClose","closeLabel","otherProps","ref","header","className","Button","aria-label","variant","onPress","Icon","icon","cross","displayName"],"mappings":";;;;+BAsCSA;;;eAAAA;;;;uBAtCyD;uBAE5C;wBAEC;sBACF;AAarB,MAAMA,uBAASC,IAAAA,iBAAU,EACvB,CACE,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,UAAU,EAAE,GAAGC,YAAyB,EAC7DC,oBAEA,sBAACC;QAAOD,KAAKA;QAAM,GAAGD,UAAU;QAAEG,WAAU;;YACzCN;0BACD,sBAACO,cAAM;gBACLC,cAAW;gBACXC,SAAQ;gBACRC,SAAST;gBACTK,WAAU;;kCAEV,qBAACK,UAAI;wBAACC,MAAMC,YAAK;;oBAAI;oBAAEX;;;;;AAM/BJ,OAAOgB,WAAW,GAAG"}
1
+ {"version":3,"sources":["../../../../src/components/Modal/Header.tsx"],"sourcesContent":["import { PropsWithChildren, Ref, RefAttributes, forwardRef } from \"react\";\n\nimport { cross } from \"@simplybusiness/icons\";\nimport { DOMProps } from \"../../types/dom\";\nimport { Button } from \"../Button\";\nimport { Icon } from \"../Icon\";\nimport { useModal } from \"./useModal\";\n\nexport type HeaderElementType = HTMLDivElement;\nexport type HeaderRef = Ref<HTMLElement>;\n\nexport interface HeaderProps\n extends DOMProps,\n RefAttributes<HeaderElementType>,\n PropsWithChildren {}\n\nconst Header = forwardRef(\n ({ children, ...otherProps }: HeaderProps, ref: HeaderRef) => {\n const { onClose, closeLabel } = useModal();\n\n return (\n <header ref={ref} {...otherProps} className=\"mobius/ModalHeader\">\n {children}\n <Button\n aria-label=\"Close\"\n variant=\"basic\"\n onPress={onClose}\n className=\"mobius/ModalClose\"\n >\n <Icon icon={cross} /> {closeLabel}\n </Button>\n </header>\n );\n },\n);\n\nHeader.displayName = \"Header\";\nexport { Header };\n"],"names":["Header","forwardRef","children","otherProps","ref","onClose","closeLabel","useModal","header","className","Button","aria-label","variant","onPress","Icon","icon","cross","displayName"],"mappings":";;;;+BAqCSA;;;eAAAA;;;;uBArCyD;uBAE5C;wBAEC;sBACF;0BACI;AAUzB,MAAMA,uBAASC,IAAAA,iBAAU,EACvB,CAAC,EAAEC,QAAQ,EAAE,GAAGC,YAAyB,EAAEC;IACzC,MAAM,EAAEC,OAAO,EAAEC,UAAU,EAAE,GAAGC,IAAAA,kBAAQ;IAExC,qBACE,sBAACC;QAAOJ,KAAKA;QAAM,GAAGD,UAAU;QAAEM,WAAU;;YACzCP;0BACD,sBAACQ,cAAM;gBACLC,cAAW;gBACXC,SAAQ;gBACRC,SAASR;gBACTI,WAAU;;kCAEV,qBAACK,UAAI;wBAACC,MAAMC,YAAK;;oBAAI;oBAAEV;;;;;AAI/B;AAGFN,OAAOiB,WAAW,GAAG"}