newspack-components 4.6.2 → 4.7.0-alpha.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 (148) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/colors/colors.module.scss +13 -7
  3. package/dist/cjs/autocomplete-tokenfield/style.scss +4 -2
  4. package/dist/cjs/breadcrumbs/format-count.js +33 -0
  5. package/dist/cjs/breadcrumbs/index.js +78 -20
  6. package/dist/cjs/breadcrumbs/index.test.js +110 -0
  7. package/dist/cjs/breadcrumbs/style.scss +6 -0
  8. package/dist/cjs/button/index.js +41 -17
  9. package/dist/cjs/button/index.test.js +273 -0
  10. package/dist/cjs/card/core-card.js +9 -4
  11. package/dist/cjs/card/core-card.test.js +29 -0
  12. package/dist/cjs/card/index.js +4 -2
  13. package/dist/cjs/card/style-core.scss +59 -0
  14. package/dist/cjs/card-feature/index.js +7 -1
  15. package/dist/cjs/card-feature/index.test.js +92 -0
  16. package/dist/cjs/color-picker/index.js +1 -1
  17. package/dist/cjs/confirm-dialog/index.js +26 -9
  18. package/dist/cjs/confirm-dialog/index.test.js +176 -0
  19. package/dist/cjs/dataviews/index.js +11 -2
  20. package/dist/cjs/divider/index.js +13 -0
  21. package/dist/cjs/drawer/action.js +74 -0
  22. package/dist/cjs/drawer/body.js +79 -0
  23. package/dist/cjs/drawer/close-icon.js +45 -0
  24. package/dist/cjs/drawer/content.js +72 -0
  25. package/dist/cjs/drawer/context.js +23 -0
  26. package/dist/cjs/drawer/context.test.js +43 -0
  27. package/dist/cjs/drawer/divider.js +24 -0
  28. package/dist/cjs/drawer/footer.js +26 -0
  29. package/dist/cjs/drawer/header.js +26 -0
  30. package/dist/cjs/drawer/index.js +42 -0
  31. package/dist/cjs/drawer/index.test.js +1287 -0
  32. package/dist/cjs/drawer/root.js +350 -0
  33. package/dist/cjs/drawer/slots.test.js +422 -0
  34. package/dist/cjs/drawer/style.scss +205 -0
  35. package/dist/cjs/drawer/title.js +54 -0
  36. package/dist/cjs/drawer/types.js +5 -0
  37. package/dist/cjs/drawer/use-exit-animation.js +59 -0
  38. package/dist/cjs/hooks/use-confirm-dialog.js +15 -3
  39. package/dist/cjs/hooks/use-unsaved-changes-dialog.js +19 -4
  40. package/dist/cjs/index.js +28 -1
  41. package/dist/cjs/page/index.js +1 -1
  42. package/dist/cjs/page-control/index.js +82 -0
  43. package/dist/cjs/plugin-settings/SettingsSection.js +7 -1
  44. package/dist/cjs/section-header/index.js +5 -2
  45. package/dist/cjs/section-header/style.scss +25 -12
  46. package/dist/cjs/table-card/index.js +67 -0
  47. package/dist/cjs/table-card/index.test.js +153 -0
  48. package/dist/cjs/with-wizard-screen/style.scss +8 -0
  49. package/dist/cjs/wizard/index.js +102 -38
  50. package/dist/esm/autocomplete-tokenfield/style.scss +4 -2
  51. package/dist/esm/breadcrumbs/format-count.js +27 -0
  52. package/dist/esm/breadcrumbs/index.js +81 -20
  53. package/dist/esm/breadcrumbs/index.test.js +110 -0
  54. package/dist/esm/breadcrumbs/style.scss +6 -0
  55. package/dist/esm/button/index.js +42 -18
  56. package/dist/esm/button/index.test.js +273 -0
  57. package/dist/esm/card/core-card.js +9 -4
  58. package/dist/esm/card/core-card.test.js +29 -0
  59. package/dist/esm/card/index.js +4 -2
  60. package/dist/esm/card/style-core.scss +59 -0
  61. package/dist/esm/card-feature/index.js +8 -2
  62. package/dist/esm/card-feature/index.test.js +96 -0
  63. package/dist/esm/color-picker/index.js +1 -1
  64. package/dist/esm/confirm-dialog/index.js +26 -9
  65. package/dist/esm/confirm-dialog/index.test.js +176 -0
  66. package/dist/esm/dataviews/index.js +11 -2
  67. package/dist/esm/divider/index.js +14 -0
  68. package/dist/esm/drawer/action.js +68 -0
  69. package/dist/esm/drawer/body.js +70 -0
  70. package/dist/esm/drawer/close-icon.js +37 -0
  71. package/dist/esm/drawer/content.js +63 -0
  72. package/dist/esm/drawer/context.js +17 -0
  73. package/dist/esm/drawer/context.test.js +40 -0
  74. package/dist/esm/drawer/divider.js +16 -0
  75. package/dist/esm/drawer/footer.js +18 -0
  76. package/dist/esm/drawer/header.js +18 -0
  77. package/dist/esm/drawer/index.js +35 -0
  78. package/dist/esm/drawer/index.test.js +1285 -0
  79. package/dist/esm/drawer/root.js +342 -0
  80. package/dist/esm/drawer/slots.test.js +422 -0
  81. package/dist/esm/drawer/style.scss +205 -0
  82. package/dist/esm/drawer/title.js +46 -0
  83. package/dist/esm/drawer/types.js +1 -0
  84. package/dist/esm/drawer/use-exit-animation.js +52 -0
  85. package/dist/esm/hooks/use-confirm-dialog.js +15 -3
  86. package/dist/esm/hooks/use-unsaved-changes-dialog.js +20 -5
  87. package/dist/esm/index.js +4 -0
  88. package/dist/esm/page/index.js +1 -1
  89. package/dist/esm/page-control/index.js +82 -0
  90. package/dist/esm/plugin-settings/SettingsSection.js +8 -2
  91. package/dist/esm/section-header/index.js +5 -2
  92. package/dist/esm/section-header/style.scss +25 -12
  93. package/dist/esm/table-card/index.js +60 -0
  94. package/dist/esm/table-card/index.test.js +150 -0
  95. package/dist/esm/with-wizard-screen/style.scss +8 -0
  96. package/dist/esm/wizard/index.js +104 -38
  97. package/package.json +2 -2
  98. package/src/autocomplete-tokenfield/style.scss +4 -2
  99. package/src/breadcrumbs/format-count.js +27 -0
  100. package/src/breadcrumbs/index.js +68 -8
  101. package/src/breadcrumbs/index.test.js +57 -0
  102. package/src/breadcrumbs/style.scss +6 -0
  103. package/src/button/index.test.js +143 -0
  104. package/src/button/index.tsx +32 -7
  105. package/src/card/core-card.js +15 -2
  106. package/src/card/core-card.test.js +19 -0
  107. package/src/card/index.js +3 -0
  108. package/src/card/style-core.scss +59 -0
  109. package/src/card-feature/README.md +4 -0
  110. package/src/card-feature/index.test.js +65 -0
  111. package/src/card-feature/index.tsx +13 -2
  112. package/src/color-picker/index.js +1 -1
  113. package/src/confirm-dialog/README.md +3 -2
  114. package/src/confirm-dialog/index.test.js +146 -0
  115. package/src/confirm-dialog/index.tsx +23 -9
  116. package/src/dataviews/index.tsx +11 -2
  117. package/src/divider/index.js +13 -0
  118. package/src/drawer/README.md +454 -0
  119. package/src/drawer/action.tsx +67 -0
  120. package/src/drawer/body.tsx +60 -0
  121. package/src/drawer/close-icon.tsx +37 -0
  122. package/src/drawer/content.tsx +54 -0
  123. package/src/drawer/context.test.js +31 -0
  124. package/src/drawer/context.ts +25 -0
  125. package/src/drawer/divider.tsx +13 -0
  126. package/src/drawer/footer.tsx +15 -0
  127. package/src/drawer/header.tsx +15 -0
  128. package/src/drawer/index.test.js +1012 -0
  129. package/src/drawer/index.tsx +33 -0
  130. package/src/drawer/root.tsx +328 -0
  131. package/src/drawer/slots.test.js +314 -0
  132. package/src/drawer/style.scss +205 -0
  133. package/src/drawer/title.tsx +40 -0
  134. package/src/drawer/types.ts +79 -0
  135. package/src/drawer/use-exit-animation.ts +46 -0
  136. package/src/hooks/use-confirm-dialog.tsx +14 -3
  137. package/src/hooks/use-unsaved-changes-dialog.tsx +17 -5
  138. package/src/index.js +4 -0
  139. package/src/page/index.js +1 -1
  140. package/src/page-control/index.js +63 -0
  141. package/src/plugin-settings/SettingsSection.js +8 -2
  142. package/src/section-header/index.js +5 -2
  143. package/src/section-header/style.scss +25 -12
  144. package/src/table-card/README.md +100 -0
  145. package/src/table-card/index.test.js +112 -0
  146. package/src/table-card/index.tsx +56 -0
  147. package/src/with-wizard-screen/style.scss +8 -0
  148. package/src/wizard/index.js +95 -34
@@ -0,0 +1,350 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports["default"] = void 0;
8
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
9
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
+ var _components = require("@wordpress/components");
11
+ var _compose = require("@wordpress/compose");
12
+ var _element = require("@wordpress/element");
13
+ var _i18n = require("@wordpress/i18n");
14
+ var _classnames = _interopRequireDefault(require("classnames"));
15
+ var _useConfirmDialog2 = _interopRequireDefault(require("../hooks/use-confirm-dialog"));
16
+ var _context = require("./context");
17
+ var _body = _interopRequireDefault(require("./body"));
18
+ var _content = _interopRequireDefault(require("./content"));
19
+ var _divider = _interopRequireDefault(require("./divider"));
20
+ var _useExitAnimation2 = _interopRequireDefault(require("./use-exit-animation"));
21
+ require("./style.scss");
22
+ var _jsxRuntime = require("react/jsx-runtime");
23
+ /**
24
+ * WordPress dependencies.
25
+ */
26
+
27
+ /**
28
+ * External dependencies.
29
+ */
30
+
31
+ /**
32
+ * Internal dependencies.
33
+ */
34
+
35
+ var sizeClassMap = {
36
+ small: 'newspack-drawer--size-small',
37
+ medium: 'newspack-drawer--size-medium',
38
+ large: 'newspack-drawer--size-large',
39
+ 'x-large': 'newspack-drawer--size-x-large',
40
+ full: 'newspack-drawer--size-full'
41
+ };
42
+ var captureOptions = {
43
+ capture: true
44
+ };
45
+ var Root = (0, _element.forwardRef)(function Root(_ref, forwardedRef) {
46
+ var _ref$isOpen = _ref.isOpen,
47
+ isOpen = _ref$isOpen === void 0 ? false : _ref$isOpen,
48
+ _ref$size = _ref.size,
49
+ size = _ref$size === void 0 ? 'medium' : _ref$size,
50
+ onRequestClose = _ref.onRequestClose,
51
+ _ref$isDirty = _ref.isDirty,
52
+ isDirty = _ref$isDirty === void 0 ? false : _ref$isDirty,
53
+ _ref$confirmCloseMess = _ref.confirmCloseMessage,
54
+ confirmCloseMessage = _ref$confirmCloseMess === void 0 ? (0, _i18n.__)('You have unsaved changes that will be lost. Discard changes?', 'newspack-plugin') : _ref$confirmCloseMess,
55
+ _ref$confirmButtonTex = _ref.confirmButtonText,
56
+ confirmButtonText = _ref$confirmButtonTex === void 0 ? (0, _i18n.__)('Discard Changes', 'newspack-plugin') : _ref$confirmButtonTex,
57
+ requestConfirm = _ref.requestConfirm,
58
+ contentLabel = _ref.contentLabel,
59
+ describedBy = _ref.describedBy,
60
+ className = _ref.className,
61
+ style = _ref.style,
62
+ children = _ref.children;
63
+ var _useState = (0, _element.useState)(null),
64
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
65
+ title = _useState2[0],
66
+ setTitle = _useState2[1];
67
+ var titleRef = (0, _element.useRef)(null);
68
+ var titlesRef = (0, _element.useRef)([]);
69
+ var registerTitle = (0, _element.useCallback)(function (info, forId) {
70
+ var _titlesRef$current;
71
+ if (info) {
72
+ var at = titlesRef.current.findIndex(function (entry) {
73
+ return entry.id === info.id;
74
+ });
75
+ if (at === -1) {
76
+ titlesRef.current = [].concat((0, _toConsumableArray2["default"])(titlesRef.current), [info]);
77
+ } else {
78
+ titlesRef.current = titlesRef.current.map(function (entry) {
79
+ return entry.id === info.id ? info : entry;
80
+ });
81
+ }
82
+ } else if (forId) {
83
+ titlesRef.current = titlesRef.current.filter(function (entry) {
84
+ return entry.id !== forId;
85
+ });
86
+ } else {
87
+ titlesRef.current = [];
88
+ }
89
+ var current = (_titlesRef$current = titlesRef.current[titlesRef.current.length - 1]) !== null && _titlesRef$current !== void 0 ? _titlesRef$current : null;
90
+ titleRef.current = current;
91
+ setTitle(current);
92
+ }, []);
93
+ (0, _element.useEffect)(function () {
94
+ if ('production' === process.env.NODE_ENV || !isOpen) {
95
+ return;
96
+ }
97
+ if (!titleRef.current && !contentLabel) {
98
+ // eslint-disable-next-line no-console
99
+ console.warn('Drawer: render a Drawer.Title or pass `contentLabel`. Without one the panel has no accessible name.');
100
+ }
101
+ }, [isOpen, title, contentLabel]);
102
+ (0, _element.useEffect)(function () {
103
+ if ('production' === process.env.NODE_ENV || sizeClassMap[size]) {
104
+ return;
105
+ }
106
+ // eslint-disable-next-line no-console
107
+ console.warn("Drawer: unknown size \"".concat(size, "\", falling back to medium. Use one of ").concat(Object.keys(sizeClassMap).join(', '), "."));
108
+ }, [size]);
109
+
110
+ // No `when`: it installs a history.block guard that fights the wizard's own.
111
+ var _useConfirmDialog = (0, _useConfirmDialog2["default"])({
112
+ message: confirmCloseMessage,
113
+ confirmButtonText: confirmButtonText,
114
+ // Hidden, but still the dialog's accessible name.
115
+ title: (0, _i18n.__)('Unsaved changes', 'newspack-plugin'),
116
+ hideTitle: true
117
+ }),
118
+ confirmDialog = _useConfirmDialog.confirmDialog,
119
+ ownRequestConfirm = _useConfirmDialog.requestConfirm,
120
+ ownCancelConfirm = _useConfirmDialog.cancelConfirm;
121
+ var confirm = requestConfirm || ownRequestConfirm;
122
+ var requestClose = (0, _element.useCallback)(function () {
123
+ if (!isOpen) {
124
+ return;
125
+ }
126
+ if (isDirty) {
127
+ var prompted = true;
128
+ confirm(function () {
129
+ prompted = false;
130
+ onRequestClose();
131
+ });
132
+ if ('production' !== process.env.NODE_ENV && !prompted) {
133
+ // eslint-disable-next-line no-console
134
+ console.warn('Drawer: `requestConfirm` closed the panel without prompting, so `isDirty` is set while its own `when` is not. ' + 'Unsaved changes are being discarded silently. Drive both from the same state.');
135
+ }
136
+ return;
137
+ }
138
+ onRequestClose();
139
+ }, [isOpen, isDirty, confirm, onRequestClose]);
140
+
141
+ // Core fills its dismisser ref in a passive effect and siblings call it from
142
+ // theirs, so a closure would go stale by tree order. Layout effects run first.
143
+ var dismissRef = (0, _element.useRef)({
144
+ isOpen: isOpen,
145
+ isDirty: isDirty,
146
+ onRequestClose: onRequestClose
147
+ });
148
+ (0, _element.useLayoutEffect)(function () {
149
+ dismissRef.current = {
150
+ isOpen: isOpen,
151
+ isDirty: isDirty,
152
+ onRequestClose: onRequestClose
153
+ };
154
+ });
155
+
156
+ // Core calls this as another Modal mounts. A dirty panel cannot answer: its own
157
+ // confirmation would land under that Modal, and a delegated one is that Modal.
158
+ var dismiss = (0, _element.useCallback)(function () {
159
+ var current = dismissRef.current;
160
+ if (current.isOpen && !current.isDirty) {
161
+ current.onRequestClose();
162
+ }
163
+ }, []);
164
+ var onKeyDown = (0, _element.useCallback)(function (event) {
165
+ var _event$nativeEvent;
166
+ // Cancelling a CJK composition raises an Escape of its own.
167
+ if ((_event$nativeEvent = event.nativeEvent) !== null && _event$nativeEvent !== void 0 && _event$nativeEvent.isComposing || 229 === event.keyCode) {
168
+ return;
169
+ }
170
+ if ('Escape' !== event.key && 'Escape' !== event.code || event.defaultPrevented) {
171
+ return;
172
+ }
173
+ event.preventDefault();
174
+ requestClose();
175
+ }, [requestClose]);
176
+ var _useState3 = (0, _element.useState)(null),
177
+ _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
178
+ node = _useState4[0],
179
+ setNode = _useState4[1];
180
+ var frameRefs = (0, _compose.useMergeRefs)([setNode, forwardedRef]);
181
+ var _useExitAnimation = (0, _useExitAnimation2["default"])(isOpen, node),
182
+ isRendered = _useExitAnimation.isRendered,
183
+ isExiting = _useExitAnimation.isExiting;
184
+ var openerRef = (0, _element.useRef)(null);
185
+ var _useState5 = (0, _element.useState)(false),
186
+ _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
187
+ wasOpenForFocus = _useState6[0],
188
+ setWasOpenForFocus = _useState6[1];
189
+ if (wasOpenForFocus !== isOpen) {
190
+ setWasOpenForFocus(isOpen);
191
+ if (isOpen) {
192
+ // eslint-disable-next-line @wordpress/no-global-active-element
193
+ openerRef.current = typeof document === 'undefined' ? null : document.activeElement;
194
+ } else {
195
+ // During render, so it is gone in the commit that starts the exit rather
196
+ // than holding focus while the panel goes inert. Only ours to withdraw.
197
+ ownCancelConfirm();
198
+ }
199
+ }
200
+ var movedFocusOut = (0, _element.useRef)(false);
201
+ (0, _element.useEffect)(function () {
202
+ var frame = node === null || node === void 0 ? void 0 : node.querySelector('.components-modal__frame');
203
+ if (!frame) {
204
+ if (node && 'production' !== process.env.NODE_ENV) {
205
+ // eslint-disable-next-line no-console
206
+ console.warn('Drawer: no .components-modal__frame inside the overlay. Focus return and `inert` are both off. ' + 'Check this against the installed @wordpress/components.');
207
+ }
208
+ return;
209
+ }
210
+ if (isExiting) {
211
+ // Focus goes home before `inert` blurs it, unless parked elsewhere:
212
+ // reclaiming it from a sibling frame would take it from an open modal.
213
+ var active = frame.ownerDocument.activeElement;
214
+ if (frame.contains(active) || !active || active === frame.ownerDocument.body) {
215
+ movedFocusOut.current = true;
216
+ var opener = openerRef.current;
217
+ if (opener !== null && opener !== void 0 && opener.isConnected) {
218
+ var _opener$focus;
219
+ (_opener$focus = opener.focus) === null || _opener$focus === void 0 || _opener$focus.call(opener);
220
+ }
221
+ }
222
+ frame.toggleAttribute('inert', true);
223
+ return;
224
+ }
225
+ frame.toggleAttribute('inert', false);
226
+ // Reopened mid-exit: the same Modal instance, so focus-on-mount never re-runs.
227
+ var restore = movedFocusOut.current;
228
+ movedFocusOut.current = false;
229
+ if (restore && frame.isConnected && !frame.contains(frame.ownerDocument.activeElement)) {
230
+ frame.focus({
231
+ preventScroll: true
232
+ });
233
+ }
234
+ }, [node, isExiting]);
235
+
236
+ // Reduced motion has no exit to hand focus back during.
237
+ (0, _element.useLayoutEffect)(function () {
238
+ if (!isRendered) {
239
+ return;
240
+ }
241
+ return function () {
242
+ var _opener$focus2;
243
+ var opener = openerRef.current;
244
+ if (!(opener !== null && opener !== void 0 && opener.isConnected)) {
245
+ return;
246
+ }
247
+ var active = opener.ownerDocument.activeElement;
248
+ if (active && active !== opener.ownerDocument.body && active.isConnected) {
249
+ return;
250
+ }
251
+ (_opener$focus2 = opener.focus) === null || _opener$focus2 === void 0 || _opener$focus2.call(opener);
252
+ };
253
+ }, [isRendered]);
254
+ var pressedOverlay = (0, _element.useRef)(false);
255
+ // On commit, not after paint: a release in the gap would close a drawer that
256
+ // has just turned dirty.
257
+ var requestCloseRef = (0, _element.useRef)(requestClose);
258
+ (0, _element.useLayoutEffect)(function () {
259
+ requestCloseRef.current = requestClose;
260
+ }, [requestClose]);
261
+ (0, _element.useEffect)(function () {
262
+ if (!node) {
263
+ return;
264
+ }
265
+ var ownerDocument = node.ownerDocument;
266
+ pressedOverlay.current = false;
267
+ var onPointerDown = function onPointerDown(event) {
268
+ pressedOverlay.current = 0 === event.button && event.target === node;
269
+ if (pressedOverlay.current) {
270
+ // Touch and pen capture implicitly, reporting the release on the overlay.
271
+ if ('function' === typeof node.hasPointerCapture && node.hasPointerCapture(event.pointerId)) {
272
+ node.releasePointerCapture(event.pointerId);
273
+ }
274
+ event.preventDefault();
275
+ }
276
+ };
277
+ var onPointerUp = function onPointerUp(event) {
278
+ var closes = pressedOverlay.current && 0 === event.button && event.target === node;
279
+ pressedOverlay.current = false;
280
+ if (closes) {
281
+ requestCloseRef.current();
282
+ }
283
+ };
284
+ var onPointerCancel = function onPointerCancel() {
285
+ pressedOverlay.current = false;
286
+ };
287
+ node.addEventListener('pointerdown', onPointerDown);
288
+ ownerDocument.addEventListener('pointerup', onPointerUp, captureOptions);
289
+ ownerDocument.addEventListener('pointercancel', onPointerCancel, captureOptions);
290
+ return function () {
291
+ pressedOverlay.current = false;
292
+ node.removeEventListener('pointerdown', onPointerDown);
293
+ ownerDocument.removeEventListener('pointerup', onPointerUp, captureOptions);
294
+ ownerDocument.removeEventListener('pointercancel', onPointerCancel, captureOptions);
295
+ };
296
+ }, [node]);
297
+ var contextValue = (0, _element.useMemo)(function () {
298
+ return {
299
+ requestClose: requestClose,
300
+ title: title,
301
+ setTitle: registerTitle
302
+ };
303
+ }, [requestClose, title, registerTitle]);
304
+ if (!isRendered) {
305
+ return null;
306
+ }
307
+ var grouped = [];
308
+ var run = [];
309
+ var bodyIndex = 0;
310
+ var flushRun = function flushRun() {
311
+ if (run.length) {
312
+ grouped.push(/*#__PURE__*/(0, _jsxRuntime.jsx)(_body["default"], {
313
+ children: run
314
+ }, "body-".concat(bodyIndex++)));
315
+ run = [];
316
+ }
317
+ };
318
+ _element.Children.toArray(children).forEach(function (child) {
319
+ if ((0, _element.isValidElement)(child) && (child.type === _content["default"] || child.type === _divider["default"])) {
320
+ run.push(child);
321
+ } else {
322
+ flushRun();
323
+ grouped.push(child);
324
+ }
325
+ });
326
+ flushRun();
327
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_context.DrawerContext.Provider, {
328
+ value: contextValue,
329
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.Modal, {
330
+ __experimentalHideHeader: true,
331
+ ref: frameRefs,
332
+ className: (0, _classnames["default"])('newspack-drawer', sizeClassMap[size] || sizeClassMap.medium, isExiting && 'is-exiting', className),
333
+ overlayClassName: (0, _classnames["default"])('newspack-drawer__overlay', isExiting && 'is-exiting'),
334
+ style: style,
335
+ contentLabel: title ? undefined : contentLabel,
336
+ aria: {
337
+ labelledby: title ? title.id : undefined,
338
+ describedby: describedBy
339
+ },
340
+ shouldCloseOnEsc: false,
341
+ shouldCloseOnClickOutside: false,
342
+ onRequestClose: dismiss,
343
+ onKeyDown: onKeyDown,
344
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_components.SlotFillProvider, {
345
+ children: [grouped, !requestConfirm && confirmDialog, /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.Popover.Slot, {})]
346
+ })
347
+ })
348
+ });
349
+ });
350
+ var _default = exports["default"] = Root;