PluginProbe
Gutenberg / 24.1.0
Gutenberg v24.1.0
24.1.0 24.0.0 23.9.1 23.9.0 23.8.0 23.7.2 23.7.1 23.7.0 23.6.1 23.6.2 23.6.0 23.5.3 23.5.2 23.5.1 23.5.0 23.4.0 23.3.2 23.3.1 23.3.0 23.2.0 23.2.1 23.2.2 23.1.1 23.1.0 23.0.1 All 404 releases
gutenberg / build / scripts / edit-widgets / index.js

index.js in Gutenberg 24.1.0, at build/scripts/edit-widgets/index.js

16,703 lines 698.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 (function() {
2 var wp;
3 (wp ||= {}).editWidgets = (() => {
4 var __create = Object.create;
5 var __defProp = Object.defineProperty;
6 var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
7 var __getOwnPropNames = Object.getOwnPropertyNames;
8 var __getProtoOf = Object.getPrototypeOf;
9 var __hasOwnProp = Object.prototype.hasOwnProperty;
10 var __commonJS = (cb, mod) => function __require() {
11 return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
12 };
13 var __export = (target, all) => {
14 for (var name2 in all)
15 __defProp(target, name2, { get: all[name2], enumerable: true });
16 };
17 var __copyProps = (to, from, except, desc) => {
18 if (from && typeof from === "object" || typeof from === "function") {
19 for (let key of __getOwnPropNames(from))
20 if (!__hasOwnProp.call(to, key) && key !== except)
21 __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
22 }
23 return to;
24 };
25 var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
26 // If the importer is in node compatibility mode or this is not an ESM
27 // file that has been converted to a CommonJS file using a Babel-
28 // compatible transform (i.e. "__esModule" has not been set), then set
29 // "default" to the CommonJS "module.exports" for node compatibility.
30 isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
31 mod
32 ));
33 var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
34
35 // package-external:@wordpress/blocks
36 var require_blocks = __commonJS({
37 "package-external:@wordpress/blocks"(exports, module) {
38 module.exports = window.wp.blocks;
39 }
40 });
41
42 // package-external:@wordpress/data
43 var require_data = __commonJS({
44 "package-external:@wordpress/data"(exports, module) {
45 module.exports = window.wp.data;
46 }
47 });
48
49 // package-external:@wordpress/deprecated
50 var require_deprecated = __commonJS({
51 "package-external:@wordpress/deprecated"(exports, module) {
52 module.exports = window.wp.deprecated;
53 }
54 });
55
56 // package-external:@wordpress/element
57 var require_element = __commonJS({
58 "package-external:@wordpress/element"(exports, module) {
59 module.exports = window.wp.element;
60 }
61 });
62
63 // package-external:@wordpress/block-library
64 var require_block_library = __commonJS({
65 "package-external:@wordpress/block-library"(exports, module) {
66 module.exports = window.wp.blockLibrary;
67 }
68 });
69
70 // package-external:@wordpress/core-data
71 var require_core_data = __commonJS({
72 "package-external:@wordpress/core-data"(exports, module) {
73 module.exports = window.wp.coreData;
74 }
75 });
76
77 // package-external:@wordpress/widgets
78 var require_widgets = __commonJS({
79 "package-external:@wordpress/widgets"(exports, module) {
80 module.exports = window.wp.widgets;
81 }
82 });
83
84 // package-external:@wordpress/preferences
85 var require_preferences = __commonJS({
86 "package-external:@wordpress/preferences"(exports, module) {
87 module.exports = window.wp.preferences;
88 }
89 });
90
91 // package-external:@wordpress/api-fetch
92 var require_api_fetch = __commonJS({
93 "package-external:@wordpress/api-fetch"(exports, module) {
94 module.exports = window.wp.apiFetch;
95 }
96 });
97
98 // package-external:@wordpress/i18n
99 var require_i18n = __commonJS({
100 "package-external:@wordpress/i18n"(exports, module) {
101 module.exports = window.wp.i18n;
102 }
103 });
104
105 // package-external:@wordpress/notices
106 var require_notices = __commonJS({
107 "package-external:@wordpress/notices"(exports, module) {
108 module.exports = window.wp.notices;
109 }
110 });
111
112 // package-external:@wordpress/components
113 var require_components = __commonJS({
114 "package-external:@wordpress/components"(exports, module) {
115 module.exports = window.wp.components;
116 }
117 });
118
119 // package-external:@wordpress/primitives
120 var require_primitives = __commonJS({
121 "package-external:@wordpress/primitives"(exports, module) {
122 module.exports = window.wp.primitives;
123 }
124 });
125
126 // vendor-external:react/jsx-runtime
127 var require_jsx_runtime = __commonJS({
128 "vendor-external:react/jsx-runtime"(exports, module) {
129 module.exports = window.ReactJSXRuntime;
130 }
131 });
132
133 // package-external:@wordpress/viewport
134 var require_viewport = __commonJS({
135 "package-external:@wordpress/viewport"(exports, module) {
136 module.exports = window.wp.viewport;
137 }
138 });
139
140 // package-external:@wordpress/compose
141 var require_compose = __commonJS({
142 "package-external:@wordpress/compose"(exports, module) {
143 module.exports = window.wp.compose;
144 }
145 });
146
147 // package-external:@wordpress/plugins
148 var require_plugins = __commonJS({
149 "package-external:@wordpress/plugins"(exports, module) {
150 module.exports = window.wp.plugins;
151 }
152 });
153
154 // vendor-external:react
155 var require_react = __commonJS({
156 "vendor-external:react"(exports, module) {
157 module.exports = window.React;
158 }
159 });
160
161 // vendor-external:react-dom
162 var require_react_dom = __commonJS({
163 "vendor-external:react-dom"(exports, module) {
164 module.exports = window.ReactDOM;
165 }
166 });
167
168 // node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js
169 var require_use_sync_external_store_shim_development = __commonJS({
170 "node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js"(exports) {
171 "use strict";
172 (function() {
173 function is(x, y) {
174 return x === y && (0 !== x || 1 / x === 1 / y) || x !== x && y !== y;
175 }
176 function useSyncExternalStore$2(subscribe, getSnapshot) {
177 didWarnOld18Alpha || void 0 === React59.startTransition || (didWarnOld18Alpha = true, console.error(
178 "You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release."
179 ));
180 var value = getSnapshot();
181 if (!didWarnUncachedGetSnapshot) {
182 var cachedValue = getSnapshot();
183 objectIs(value, cachedValue) || (console.error(
184 "The result of getSnapshot should be cached to avoid an infinite loop"
185 ), didWarnUncachedGetSnapshot = true);
186 }
187 cachedValue = useState21({
188 inst: { value, getSnapshot }
189 });
190 var inst = cachedValue[0].inst, forceUpdate = cachedValue[1];
191 useLayoutEffect4(
192 function() {
193 inst.value = value;
194 inst.getSnapshot = getSnapshot;
195 checkIfSnapshotChanged(inst) && forceUpdate({ inst });
196 },
197 [subscribe, value, getSnapshot]
198 );
199 useEffect26(
200 function() {
201 checkIfSnapshotChanged(inst) && forceUpdate({ inst });
202 return subscribe(function() {
203 checkIfSnapshotChanged(inst) && forceUpdate({ inst });
204 });
205 },
206 [subscribe]
207 );
208 useDebugValue2(value);
209 return value;
210 }
211 function checkIfSnapshotChanged(inst) {
212 var latestGetSnapshot = inst.getSnapshot;
213 inst = inst.value;
214 try {
215 var nextValue = latestGetSnapshot();
216 return !objectIs(inst, nextValue);
217 } catch (error2) {
218 return true;
219 }
220 }
221 function useSyncExternalStore$1(subscribe, getSnapshot) {
222 return getSnapshot();
223 }
224 "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());
225 var React59 = require_react(), objectIs = "function" === typeof Object.is ? Object.is : is, useState21 = React59.useState, useEffect26 = React59.useEffect, useLayoutEffect4 = React59.useLayoutEffect, useDebugValue2 = React59.useDebugValue, didWarnOld18Alpha = false, didWarnUncachedGetSnapshot = false, shim = "undefined" === typeof window || "undefined" === typeof window.document || "undefined" === typeof window.document.createElement ? useSyncExternalStore$1 : useSyncExternalStore$2;
226 exports.useSyncExternalStore = void 0 !== React59.useSyncExternalStore ? React59.useSyncExternalStore : shim;
227 "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());
228 })();
229 }
230 });
231
232 // node_modules/use-sync-external-store/shim/index.js
233 var require_shim = __commonJS({
234 "node_modules/use-sync-external-store/shim/index.js"(exports, module) {
235 "use strict";
236 if (false) {
237 module.exports = null;
238 } else {
239 module.exports = require_use_sync_external_store_shim_development();
240 }
241 }
242 });
243
244 // node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js
245 var require_with_selector_development = __commonJS({
246 "node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js"(exports) {
247 "use strict";
248 (function() {
249 function is(x, y) {
250 return x === y && (0 !== x || 1 / x === 1 / y) || x !== x && y !== y;
251 }
252 "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());
253 var React59 = require_react(), shim = require_shim(), objectIs = "function" === typeof Object.is ? Object.is : is, useSyncExternalStore3 = shim.useSyncExternalStore, useRef27 = React59.useRef, useEffect26 = React59.useEffect, useMemo24 = React59.useMemo, useDebugValue2 = React59.useDebugValue;
254 exports.useSyncExternalStoreWithSelector = function(subscribe, getSnapshot, getServerSnapshot, selector, isEqual) {
255 var instRef = useRef27(null);
256 if (null === instRef.current) {
257 var inst = { hasValue: false, value: null };
258 instRef.current = inst;
259 } else inst = instRef.current;
260 instRef = useMemo24(
261 function() {
262 function memoizedSelector(nextSnapshot) {
263 if (!hasMemo) {
264 hasMemo = true;
265 memoizedSnapshot = nextSnapshot;
266 nextSnapshot = selector(nextSnapshot);
267 if (void 0 !== isEqual && inst.hasValue) {
268 var currentSelection = inst.value;
269 if (isEqual(currentSelection, nextSnapshot))
270 return memoizedSelection = currentSelection;
271 }
272 return memoizedSelection = nextSnapshot;
273 }
274 currentSelection = memoizedSelection;
275 if (objectIs(memoizedSnapshot, nextSnapshot))
276 return currentSelection;
277 var nextSelection = selector(nextSnapshot);
278 if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))
279 return memoizedSnapshot = nextSnapshot, currentSelection;
280 memoizedSnapshot = nextSnapshot;
281 return memoizedSelection = nextSelection;
282 }
283 var hasMemo = false, memoizedSnapshot, memoizedSelection, maybeGetServerSnapshot = void 0 === getServerSnapshot ? null : getServerSnapshot;
284 return [
285 function() {
286 return memoizedSelector(getSnapshot());
287 },
288 null === maybeGetServerSnapshot ? void 0 : function() {
289 return memoizedSelector(maybeGetServerSnapshot());
290 }
291 ];
292 },
293 [getSnapshot, getServerSnapshot, selector, isEqual]
294 );
295 var value = useSyncExternalStore3(subscribe, instRef[0], instRef[1]);
296 useEffect26(
297 function() {
298 inst.hasValue = true;
299 inst.value = value;
300 },
301 [value]
302 );
303 useDebugValue2(value);
304 return value;
305 };
306 "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());
307 })();
308 }
309 });
310
311 // node_modules/use-sync-external-store/shim/with-selector.js
312 var require_with_selector = __commonJS({
313 "node_modules/use-sync-external-store/shim/with-selector.js"(exports, module) {
314 "use strict";
315 if (false) {
316 module.exports = null;
317 } else {
318 module.exports = require_with_selector_development();
319 }
320 }
321 });
322
323 // package-external:@wordpress/theme
324 var require_theme = __commonJS({
325 "package-external:@wordpress/theme"(exports, module) {
326 module.exports = window.wp.theme;
327 }
328 });
329
330 // package-external:@wordpress/private-apis
331 var require_private_apis = __commonJS({
332 "package-external:@wordpress/private-apis"(exports, module) {
333 module.exports = window.wp.privateApis;
334 }
335 });
336
337 // package-external:@wordpress/a11y
338 var require_a11y = __commonJS({
339 "package-external:@wordpress/a11y"(exports, module) {
340 module.exports = window.wp.a11y;
341 }
342 });
343
344 // package-external:@wordpress/block-editor
345 var require_block_editor = __commonJS({
346 "package-external:@wordpress/block-editor"(exports, module) {
347 module.exports = window.wp.blockEditor;
348 }
349 });
350
351 // package-external:@wordpress/hooks
352 var require_hooks = __commonJS({
353 "package-external:@wordpress/hooks"(exports, module) {
354 module.exports = window.wp.hooks;
355 }
356 });
357
358 // package-external:@wordpress/media-utils
359 var require_media_utils = __commonJS({
360 "package-external:@wordpress/media-utils"(exports, module) {
361 module.exports = window.wp.mediaUtils;
362 }
363 });
364
365 // package-external:@wordpress/patterns
366 var require_patterns = __commonJS({
367 "package-external:@wordpress/patterns"(exports, module) {
368 module.exports = window.wp.patterns;
369 }
370 });
371
372 // package-external:@wordpress/keyboard-shortcuts
373 var require_keyboard_shortcuts = __commonJS({
374 "package-external:@wordpress/keyboard-shortcuts"(exports, module) {
375 module.exports = window.wp.keyboardShortcuts;
376 }
377 });
378
379 // package-external:@wordpress/keycodes
380 var require_keycodes = __commonJS({
381 "package-external:@wordpress/keycodes"(exports, module) {
382 module.exports = window.wp.keycodes;
383 }
384 });
385
386 // package-external:@wordpress/url
387 var require_url = __commonJS({
388 "package-external:@wordpress/url"(exports, module) {
389 module.exports = window.wp.url;
390 }
391 });
392
393 // package-external:@wordpress/dom
394 var require_dom = __commonJS({
395 "package-external:@wordpress/dom"(exports, module) {
396 module.exports = window.wp.dom;
397 }
398 });
399
400 // packages/edit-widgets/build-module/index.mjs
401 var index_exports = {};
402 __export(index_exports, {
403 initialize: () => initialize,
404 initializeEditor: () => initializeEditor,
405 reinitializeEditor: () => reinitializeEditor,
406 store: () => store2
407 });
408 var import_blocks3 = __toESM(require_blocks(), 1);
409 var import_data33 = __toESM(require_data(), 1);
410 var import_deprecated6 = __toESM(require_deprecated(), 1);
411 var import_element70 = __toESM(require_element(), 1);
412 var import_block_library = __toESM(require_block_library(), 1);
413 var import_core_data12 = __toESM(require_core_data(), 1);
414 var import_widgets5 = __toESM(require_widgets(), 1);
415 var import_preferences10 = __toESM(require_preferences(), 1);
416
417 // packages/edit-widgets/build-module/store/index.mjs
418 var import_api_fetch = __toESM(require_api_fetch(), 1);
419 var import_data8 = __toESM(require_data(), 1);
420
421 // packages/edit-widgets/build-module/store/reducer.mjs
422 var import_data = __toESM(require_data(), 1);
423 function widgetAreasOpenState(state = {}, action) {
424 const { type } = action;
425 switch (type) {
426 case "SET_WIDGET_AREAS_OPEN_STATE": {
427 return action.widgetAreasOpenState;
428 }
429 case "SET_IS_WIDGET_AREA_OPEN": {
430 const { clientId, isOpen } = action;
431 return {
432 ...state,
433 [clientId]: isOpen
434 };
435 }
436 default: {
437 return state;
438 }
439 }
440 }
441 function blockInserterPanel(state = false, action) {
442 switch (action.type) {
443 case "SET_IS_LIST_VIEW_OPENED":
444 return action.isOpen ? false : state;
445 case "SET_IS_INSERTER_OPENED":
446 return action.value;
447 }
448 return state;
449 }
450 function listViewPanel(state = false, action) {
451 switch (action.type) {
452 case "SET_IS_INSERTER_OPENED":
453 return action.value ? false : state;
454 case "SET_IS_LIST_VIEW_OPENED":
455 return action.isOpen;
456 }
457 return state;
458 }
459 function listViewToggleRef(state = { current: null }) {
460 return state;
461 }
462 function inserterSidebarToggleRef(state = { current: null }) {
463 return state;
464 }
465 function widgetSavingLock(state = {}, action) {
466 switch (action.type) {
467 case "LOCK_WIDGET_SAVING":
468 return { ...state, [action.lockName]: true };
469 case "UNLOCK_WIDGET_SAVING": {
470 const { [action.lockName]: removedLockName, ...restState } = state;
471 return restState;
472 }
473 }
474 return state;
475 }
476 var reducer_default = (0, import_data.combineReducers)({
477 blockInserterPanel,
478 inserterSidebarToggleRef,
479 listViewPanel,
480 listViewToggleRef,
481 widgetAreasOpenState,
482 widgetSavingLock
483 });
484
485 // packages/edit-widgets/build-module/store/resolvers.mjs
486 var resolvers_exports = {};
487 __export(resolvers_exports, {
488 getWidgetAreas: () => getWidgetAreas,
489 getWidgets: () => getWidgets
490 });
491 var import_blocks2 = __toESM(require_blocks(), 1);
492 var import_core_data2 = __toESM(require_core_data(), 1);
493
494 // packages/edit-widgets/build-module/store/actions.mjs
495 var actions_exports2 = {};
496 __export(actions_exports2, {
497 closeGeneralSidebar: () => closeGeneralSidebar,
498 lockWidgetSaving: () => lockWidgetSaving,
499 moveBlockToWidgetArea: () => moveBlockToWidgetArea,
500 persistStubPost: () => persistStubPost,
501 saveEditedWidgetAreas: () => saveEditedWidgetAreas,
502 saveWidgetArea: () => saveWidgetArea,
503 saveWidgetAreas: () => saveWidgetAreas,
504 setIsInserterOpened: () => setIsInserterOpened,
505 setIsListViewOpened: () => setIsListViewOpened,
506 setIsWidgetAreaOpen: () => setIsWidgetAreaOpen,
507 setWidgetAreasOpenState: () => setWidgetAreasOpenState,
508 setWidgetIdForClientId: () => setWidgetIdForClientId,
509 unlockWidgetSaving: () => unlockWidgetSaving
510 });
511 var import_i18n8 = __toESM(require_i18n(), 1);
512 var import_notices = __toESM(require_notices(), 1);
513
514 // node_modules/clsx/dist/clsx.mjs
515 function r(e) {
516 var t, f, n = "";
517 if ("string" == typeof e || "number" == typeof e) n += e;
518 else if ("object" == typeof e) if (Array.isArray(e)) {
519 var o = e.length;
520 for (t = 0; t < o; t++) e[t] && (f = r(e[t])) && (n && (n += " "), n += f);
521 } else for (f in e) e[f] && (n && (n += " "), n += f);
522 return n;
523 }
524 function clsx() {
525 for (var e, t, f = 0, n = "", o = arguments.length; f < o; f++) (e = arguments[f]) && (t = r(e)) && (n && (n += " "), n += t);
526 return n;
527 }
528 var clsx_default = clsx;
529
530 // packages/interface/build-module/components/complementary-area/index.mjs
531 var import_components4 = __toESM(require_components(), 1);
532 var import_data6 = __toESM(require_data(), 1);
533 var import_i18n = __toESM(require_i18n(), 1);
534
535 // packages/icons/build-module/library/caution.mjs
536 var import_primitives = __toESM(require_primitives(), 1);
537 var import_jsx_runtime = __toESM(require_jsx_runtime(), 1);
538 var caution_default = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_primitives.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_primitives.Path, { d: "M12 8L12 13M12 14.5L12 16M4.75 12C4.75 7.99593 7.99594 4.75 12 4.75C16.0041 4.75 19.25 7.99594 19.25 12C19.25 16.0041 16.0041 19.25 12 19.25C7.99594 19.25 4.75 16.0041 4.75 12Z", strokeLinejoin: "round", vectorEffect: "non-scaling-stroke" }) });
539
540 // packages/icons/build-module/library/check.mjs
541 var import_primitives2 = __toESM(require_primitives(), 1);
542 var import_jsx_runtime2 = __toESM(require_jsx_runtime(), 1);
543 var check_default = /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_primitives2.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_primitives2.Path, { d: "M7 12L10 15L17 8", vectorEffect: "non-scaling-stroke" }) });
544
545 // packages/icons/build-module/library/chevron-down.mjs
546 var import_primitives3 = __toESM(require_primitives(), 1);
547 var import_jsx_runtime3 = __toESM(require_jsx_runtime(), 1);
548 var chevron_down_default = /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_primitives3.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_primitives3.Path, { d: "M7 11L12 15L17 11", vectorEffect: "non-scaling-stroke" }) });
549
550 // packages/icons/build-module/library/close-small.mjs
551 var import_primitives4 = __toESM(require_primitives(), 1);
552 var import_jsx_runtime4 = __toESM(require_jsx_runtime(), 1);
553 var close_small_default = /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_primitives4.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_primitives4.Path, { d: "M7.75 16.25L16.25 7.75M16.25 16.25L7.75 7.75", vectorEffect: "non-scaling-stroke" }) });
554
555 // packages/icons/build-module/library/drawer-left.mjs
556 var import_primitives5 = __toESM(require_primitives(), 1);
557 var import_jsx_runtime5 = __toESM(require_jsx_runtime(), 1);
558 var drawer_left_default = /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_primitives5.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_primitives5.Path, { d: "M9.75 4.75H6C5.30964 4.75 4.75 5.30964 4.75 6V18C4.75 18.6904 5.30964 19.25 6 19.25H9.75M9.75 4.75H18C18.6904 4.75 19.25 5.30964 19.25 6V18C19.25 18.6904 18.6904 19.25 18 19.25H9.75M9.75 4.75V19.25", vectorEffect: "non-scaling-stroke" }) });
559
560 // packages/icons/build-module/library/drawer-right.mjs
561 var import_primitives6 = __toESM(require_primitives(), 1);
562 var import_jsx_runtime6 = __toESM(require_jsx_runtime(), 1);
563 var drawer_right_default = /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_primitives6.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_primitives6.Path, { d: "M14.25 19.25L18 19.25C18.6904 19.25 19.25 18.6904 19.25 18L19.25 6C19.25 5.30964 18.6904 4.75 18 4.75L14.25 4.75M14.25 19.25L6 19.25C5.30964 19.25 4.75 18.6904 4.75 18L4.75 6C4.75 5.30964 5.30965 4.75 6 4.75L14.25 4.75M14.25 19.25L14.25 4.75", vectorEffect: "non-scaling-stroke" }) });
564
565 // packages/icons/build-module/library/error.mjs
566 var import_primitives7 = __toESM(require_primitives(), 1);
567 var import_jsx_runtime7 = __toESM(require_jsx_runtime(), 1);
568 var error_default = /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_primitives7.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_primitives7.Path, { d: "M12 9L12 14M12 15.5V17M11.1284 5.04947L3.83827 18.0097C3.46331 18.6763 3.94502 19.5 4.70985 19.5H19.2902C20.055 19.5 20.5367 18.6763 20.1617 18.0097L12.8716 5.04947C12.4893 4.36982 11.5107 4.36982 11.1284 5.04947Z", vectorEffect: "non-scaling-stroke" }) });
569
570 // packages/icons/build-module/library/external.mjs
571 var import_primitives8 = __toESM(require_primitives(), 1);
572 var import_jsx_runtime8 = __toESM(require_jsx_runtime(), 1);
573 var external_default = /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_primitives8.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_primitives8.Path, { d: "M9.5 6.25H6.5C5.80964 6.25 5.25 6.80964 5.25 7.5V17.5C5.25 18.1904 5.80964 18.75 6.5 18.75H16.5C17.1904 18.75 17.75 18.1904 17.75 17.5V14.5M11.5 12.5L18.75 5.25M12.5 5.25H18.75V11.5", vectorEffect: "non-scaling-stroke" }) });
574
575 // packages/icons/build-module/library/info.mjs
576 var import_primitives9 = __toESM(require_primitives(), 1);
577 var import_jsx_runtime9 = __toESM(require_jsx_runtime(), 1);
578 var info_default = /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_primitives9.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_primitives9.Path, { d: "M12 16V11M12 9.5V8M19.25 12C19.25 16.0041 16.0041 19.25 12 19.25C7.99594 19.25 4.75 16.0041 4.75 12C4.75 7.99594 7.99594 4.75 12 4.75C16.0041 4.75 19.25 7.99594 19.25 12Z", strokeLinejoin: "round", vectorEffect: "non-scaling-stroke" }) });
579
580 // packages/icons/build-module/library/layout.mjs
581 var import_primitives10 = __toESM(require_primitives(), 1);
582 var import_jsx_runtime10 = __toESM(require_jsx_runtime(), 1);
583 var layout_default = /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_primitives10.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_primitives10.Path, { d: "M9.75 19.25H18C18.6904 19.25 19.25 18.6904 19.25 18V9.75M9.75 19.25H6C5.30964 19.25 4.75 18.6904 4.75 18V9.75M9.75 19.25V9.75M19.25 9.75V6C19.25 5.30964 18.6904 4.75 18 4.75H6C5.30964 4.75 4.75 5.30964 4.75 6V9.75M19.25 9.75H9.75M9.75 9.75H4.75", vectorEffect: "non-scaling-stroke" }) });
584
585 // packages/icons/build-module/library/list-view.mjs
586 var import_primitives11 = __toESM(require_primitives(), 1);
587 var import_jsx_runtime11 = __toESM(require_jsx_runtime(), 1);
588 var list_view_default = /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_primitives11.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_primitives11.Path, { d: "M10 17.5H21M6.5 12H17.5M3 6.5H14", strokeLinejoin: "round", vectorEffect: "non-scaling-stroke" }) });
589
590 // packages/icons/build-module/library/more-vertical.mjs
591 var import_primitives12 = __toESM(require_primitives(), 1);
592 var import_jsx_runtime12 = __toESM(require_jsx_runtime(), 1);
593 var more_vertical_default = /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_primitives12.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: [
594 /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_primitives12.Path, { d: "M11.75 18.25L12.25 18.25L12.25 17.75L11.75 17.75L11.75 18.25Z", fill: "currentColor", stroke: "none" }),
595 /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_primitives12.Path, { d: "M11.75 12.25L12.25 12.25L12.25 11.75L11.75 11.75L11.75 12.25Z", fill: "currentColor", stroke: "none" }),
596 /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_primitives12.Path, { d: "M11.75 6.25L12.25 6.25L12.25 5.75L11.75 5.75L11.75 6.25Z", fill: "currentColor", stroke: "none" }),
597 /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_primitives12.Path, { d: "M11.75 18.25L12.25 18.25L12.25 17.75L11.75 17.75L11.75 18.25Z", vectorEffect: "non-scaling-stroke" }),
598 /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_primitives12.Path, { d: "M11.75 12.25L12.25 12.25L12.25 11.75L11.75 11.75L11.75 12.25Z", vectorEffect: "non-scaling-stroke" }),
599 /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_primitives12.Path, { d: "M11.75 6.25L12.25 6.25L12.25 5.75L11.75 5.75L11.75 6.25Z", vectorEffect: "non-scaling-stroke" })
600 ] });
601
602 // packages/icons/build-module/library/plus.mjs
603 var import_primitives13 = __toESM(require_primitives(), 1);
604 var import_jsx_runtime13 = __toESM(require_jsx_runtime(), 1);
605 var plus_default = /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_primitives13.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_primitives13.Path, { d: "M12 18V6M18 12H6", vectorEffect: "non-scaling-stroke" }) });
606
607 // packages/icons/build-module/library/published.mjs
608 var import_primitives14 = __toESM(require_primitives(), 1);
609 var import_jsx_runtime14 = __toESM(require_jsx_runtime(), 1);
610 var published_default = /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_primitives14.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: [
611 /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_primitives14.Path, { d: "M12 19.25C16.0041 19.25 19.25 16.0041 19.25 12C19.25 7.99594 16.0041 4.75 12 4.75C7.99594 4.75 4.75 7.99594 4.75 12C4.75 16.0041 7.99594 19.25 12 19.25Z", strokeLinejoin: "round", vectorEffect: "non-scaling-stroke" }),
612 /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_primitives14.Path, { d: "M9 12L11 14L15 10", vectorEffect: "non-scaling-stroke" })
613 ] });
614
615 // packages/icons/build-module/library/redo.mjs
616 var import_primitives15 = __toESM(require_primitives(), 1);
617 var import_jsx_runtime15 = __toESM(require_jsx_runtime(), 1);
618 var redo_default = /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_primitives15.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_primitives15.Path, { d: "M15 15L18.5 11L15 7M18.5 11H8C5 11 4.75 13.8 4.75 17", vectorEffect: "non-scaling-stroke" }) });
619
620 // packages/icons/build-module/library/star-empty.mjs
621 var import_primitives16 = __toESM(require_primitives(), 1);
622 var import_jsx_runtime16 = __toESM(require_jsx_runtime(), 1);
623 var star_empty_default = /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_primitives16.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_primitives16.Path, { d: "M12 5.71576L13.6106 8.97924C13.7563 9.27438 14.0379 9.47895 14.3636 9.52628L17.965 10.0496L15.359 12.5899C15.1233 12.8196 15.0157 13.1506 15.0714 13.475L15.6866 17.0619L12.4653 15.3684C12.174 15.2152 11.826 15.2152 11.5347 15.3684L8.31341 17.0619L8.92861 13.475C8.98425 13.1506 8.8767 12.8196 8.64102 12.5899L6.03497 10.0496L9.63644 9.52628C9.96215 9.47895 10.2437 9.27438 10.3894 8.97924L12 5.71576Z", vectorEffect: "non-scaling-stroke" }) });
624
625 // packages/icons/build-module/library/star-filled.mjs
626 var import_primitives17 = __toESM(require_primitives(), 1);
627 var import_jsx_runtime17 = __toESM(require_jsx_runtime(), 1);
628 var star_filled_default = /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_primitives17.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_primitives17.Path, { d: "M12 5.71576L13.6106 8.97924C13.7563 9.27438 14.0379 9.47895 14.3636 9.52628L17.965 10.0496L15.359 12.5899C15.1233 12.8196 15.0157 13.1506 15.0714 13.475L15.6866 17.0619L12.4653 15.3684C12.174 15.2152 11.826 15.2152 11.5347 15.3684L8.31341 17.0619L8.92861 13.475C8.98425 13.1506 8.8767 12.8196 8.64102 12.5899L6.03497 10.0496L9.63644 9.52628C9.96215 9.47895 10.2437 9.27438 10.3894 8.97924L12 5.71576Z", fill: "currentColor", vectorEffect: "non-scaling-stroke" }) });
629
630 // packages/icons/build-module/library/undo.mjs
631 var import_primitives18 = __toESM(require_primitives(), 1);
632 var import_jsx_runtime18 = __toESM(require_jsx_runtime(), 1);
633 var undo_default = /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_primitives18.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_primitives18.Path, { d: "M8.25 15L4.75 11L8.25 7M4.75 11H15.25C18.25 11 18.5 13.8 18.5 17", vectorEffect: "non-scaling-stroke" }) });
634
635 // packages/interface/build-module/components/complementary-area/index.mjs
636 var import_element3 = __toESM(require_element(), 1);
637 var import_viewport = __toESM(require_viewport(), 1);
638 var import_preferences3 = __toESM(require_preferences(), 1);
639 var import_compose2 = __toESM(require_compose(), 1);
640 var import_plugins2 = __toESM(require_plugins(), 1);
641
642 // packages/interface/build-module/components/complementary-area-toggle/index.mjs
643 var import_components = __toESM(require_components(), 1);
644 var import_data5 = __toESM(require_data(), 1);
645 var import_plugins = __toESM(require_plugins(), 1);
646
647 // packages/interface/build-module/store/index.mjs
648 var import_data4 = __toESM(require_data(), 1);
649
650 // packages/interface/build-module/store/actions.mjs
651 var actions_exports = {};
652 __export(actions_exports, {
653 closeModal: () => closeModal,
654 disableComplementaryArea: () => disableComplementaryArea,
655 enableComplementaryArea: () => enableComplementaryArea,
656 openModal: () => openModal,
657 pinItem: () => pinItem,
658 setDefaultComplementaryArea: () => setDefaultComplementaryArea,
659 setFeatureDefaults: () => setFeatureDefaults,
660 setFeatureValue: () => setFeatureValue,
661 toggleFeature: () => toggleFeature,
662 unpinItem: () => unpinItem
663 });
664 var import_deprecated2 = __toESM(require_deprecated(), 1);
665 var import_preferences = __toESM(require_preferences(), 1);
666
667 // packages/interface/build-module/store/deprecated.mjs
668 var import_deprecated = __toESM(require_deprecated(), 1);
669 function normalizeComplementaryAreaScope(scope) {
670 if (["core/edit-post", "core/edit-site"].includes(scope)) {
671 (0, import_deprecated.default)(`${scope} interface scope`, {
672 alternative: "core interface scope",
673 hint: "core/edit-post and core/edit-site are merging.",
674 version: "6.6"
675 });
676 return "core";
677 }
678 return scope;
679 }
680 function normalizeComplementaryAreaName(scope, name2) {
681 if (scope === "core" && name2 === "edit-site/template") {
682 (0, import_deprecated.default)(`edit-site/template sidebar`, {
683 alternative: "edit-post/document",
684 version: "6.6"
685 });
686 return "edit-post/document";
687 }
688 if (scope === "core" && name2 === "edit-site/block-inspector") {
689 (0, import_deprecated.default)(`edit-site/block-inspector sidebar`, {
690 alternative: "edit-post/block",
691 version: "6.6"
692 });
693 return "edit-post/block";
694 }
695 return name2;
696 }
697
698 // packages/interface/build-module/store/actions.mjs
699 var setDefaultComplementaryArea = (scope, area) => {
700 scope = normalizeComplementaryAreaScope(scope);
701 area = normalizeComplementaryAreaName(scope, area);
702 return {
703 type: "SET_DEFAULT_COMPLEMENTARY_AREA",
704 scope,
705 area
706 };
707 };
708 var enableComplementaryArea = (scope, area) => ({ registry, dispatch: dispatch2 }) => {
709 if (!area) {
710 return;
711 }
712 scope = normalizeComplementaryAreaScope(scope);
713 area = normalizeComplementaryAreaName(scope, area);
714 const isComplementaryAreaVisible = registry.select(import_preferences.store).get(scope, "isComplementaryAreaVisible");
715 if (!isComplementaryAreaVisible) {
716 registry.dispatch(import_preferences.store).set(scope, "isComplementaryAreaVisible", true);
717 }
718 dispatch2({
719 type: "ENABLE_COMPLEMENTARY_AREA",
720 scope,
721 area
722 });
723 };
724 var disableComplementaryArea = (scope) => ({ registry }) => {
725 scope = normalizeComplementaryAreaScope(scope);
726 const isComplementaryAreaVisible = registry.select(import_preferences.store).get(scope, "isComplementaryAreaVisible");
727 if (isComplementaryAreaVisible) {
728 registry.dispatch(import_preferences.store).set(scope, "isComplementaryAreaVisible", false);
729 }
730 };
731 var pinItem = (scope, item) => ({ registry }) => {
732 if (!item) {
733 return;
734 }
735 scope = normalizeComplementaryAreaScope(scope);
736 item = normalizeComplementaryAreaName(scope, item);
737 const pinnedItems = registry.select(import_preferences.store).get(scope, "pinnedItems");
738 if (pinnedItems?.[item] === true) {
739 return;
740 }
741 registry.dispatch(import_preferences.store).set(scope, "pinnedItems", {
742 ...pinnedItems,
743 [item]: true
744 });
745 };
746 var unpinItem = (scope, item) => ({ registry }) => {
747 if (!item) {
748 return;
749 }
750 scope = normalizeComplementaryAreaScope(scope);
751 item = normalizeComplementaryAreaName(scope, item);
752 const pinnedItems = registry.select(import_preferences.store).get(scope, "pinnedItems");
753 registry.dispatch(import_preferences.store).set(scope, "pinnedItems", {
754 ...pinnedItems,
755 [item]: false
756 });
757 };
758 function toggleFeature(scope, featureName) {
759 return function({ registry }) {
760 (0, import_deprecated2.default)(`dispatch( 'core/interface' ).toggleFeature`, {
761 since: "6.0",
762 alternative: `dispatch( 'core/preferences' ).toggle`
763 });
764 registry.dispatch(import_preferences.store).toggle(scope, featureName);
765 };
766 }
767 function setFeatureValue(scope, featureName, value) {
768 return function({ registry }) {
769 (0, import_deprecated2.default)(`dispatch( 'core/interface' ).setFeatureValue`, {
770 since: "6.0",
771 alternative: `dispatch( 'core/preferences' ).set`
772 });
773 registry.dispatch(import_preferences.store).set(scope, featureName, !!value);
774 };
775 }
776 function setFeatureDefaults(scope, defaults) {
777 return function({ registry }) {
778 (0, import_deprecated2.default)(`dispatch( 'core/interface' ).setFeatureDefaults`, {
779 since: "6.0",
780 alternative: `dispatch( 'core/preferences' ).setDefaults`
781 });
782 registry.dispatch(import_preferences.store).setDefaults(scope, defaults);
783 };
784 }
785 function openModal(name2) {
786 return {
787 type: "OPEN_MODAL",
788 name: name2
789 };
790 }
791 function closeModal() {
792 return {
793 type: "CLOSE_MODAL"
794 };
795 }
796
797 // packages/interface/build-module/store/selectors.mjs
798 var selectors_exports = {};
799 __export(selectors_exports, {
800 getActiveComplementaryArea: () => getActiveComplementaryArea,
801 isComplementaryAreaLoading: () => isComplementaryAreaLoading,
802 isFeatureActive: () => isFeatureActive,
803 isItemPinned: () => isItemPinned,
804 isModalActive: () => isModalActive
805 });
806 var import_data2 = __toESM(require_data(), 1);
807 var import_deprecated4 = __toESM(require_deprecated(), 1);
808 var import_preferences2 = __toESM(require_preferences(), 1);
809 var getActiveComplementaryArea = (0, import_data2.createRegistrySelector)(
810 (select) => (state, scope) => {
811 scope = normalizeComplementaryAreaScope(scope);
812 const isComplementaryAreaVisible = select(import_preferences2.store).get(
813 scope,
814 "isComplementaryAreaVisible"
815 );
816 if (isComplementaryAreaVisible === void 0) {
817 return void 0;
818 }
819 if (isComplementaryAreaVisible === false) {
820 return null;
821 }
822 return state?.complementaryAreas?.[scope];
823 }
824 );
825 var isComplementaryAreaLoading = (0, import_data2.createRegistrySelector)(
826 (select) => (state, scope) => {
827 scope = normalizeComplementaryAreaScope(scope);
828 const isVisible = select(import_preferences2.store).get(
829 scope,
830 "isComplementaryAreaVisible"
831 );
832 const identifier = state?.complementaryAreas?.[scope];
833 return isVisible && identifier === void 0;
834 }
835 );
836 var isItemPinned = (0, import_data2.createRegistrySelector)(
837 (select) => (state, scope, item) => {
838 scope = normalizeComplementaryAreaScope(scope);
839 item = normalizeComplementaryAreaName(scope, item);
840 const pinnedItems = select(
841 import_preferences2.store
842 ).get(scope, "pinnedItems");
843 return pinnedItems?.[item] ?? true;
844 }
845 );
846 var isFeatureActive = (0, import_data2.createRegistrySelector)(
847 (select) => (state, scope, featureName) => {
848 (0, import_deprecated4.default)(
849 `select( 'core/interface' ).isFeatureActive( scope, featureName )`,
850 {
851 since: "6.0",
852 alternative: `select( 'core/preferences' ).get( scope, featureName )`
853 }
854 );
855 return !!select(import_preferences2.store).get(scope, featureName);
856 }
857 );
858 function isModalActive(state, modalName) {
859 return state.activeModal === modalName;
860 }
861
862 // packages/interface/build-module/store/reducer.mjs
863 var import_data3 = __toESM(require_data(), 1);
864 function complementaryAreas(state = {}, action) {
865 switch (action.type) {
866 case "SET_DEFAULT_COMPLEMENTARY_AREA": {
867 const { scope, area } = action;
868 if (state[scope]) {
869 return state;
870 }
871 return {
872 ...state,
873 [scope]: area
874 };
875 }
876 case "ENABLE_COMPLEMENTARY_AREA": {
877 const { scope, area } = action;
878 return {
879 ...state,
880 [scope]: area
881 };
882 }
883 }
884 return state;
885 }
886 function activeModal(state = null, action) {
887 switch (action.type) {
888 case "OPEN_MODAL":
889 return action.name;
890 case "CLOSE_MODAL":
891 return null;
892 }
893 return state;
894 }
895 var reducer_default2 = (0, import_data3.combineReducers)({
896 complementaryAreas,
897 activeModal
898 });
899
900 // packages/interface/build-module/store/constants.mjs
901 var STORE_NAME = "core/interface";
902
903 // packages/interface/build-module/store/index.mjs
904 var store = (0, import_data4.createReduxStore)(STORE_NAME, {
905 reducer: reducer_default2,
906 actions: actions_exports,
907 selectors: selectors_exports
908 });
909 (0, import_data4.register)(store);
910
911 // packages/interface/build-module/components/complementary-area-toggle/index.mjs
912 var import_jsx_runtime19 = __toESM(require_jsx_runtime(), 1);
913 function roleSupportsCheckedState(role) {
914 return [
915 "checkbox",
916 "option",
917 "radio",
918 "switch",
919 "menuitemcheckbox",
920 "menuitemradio",
921 "treeitem"
922 ].includes(role);
923 }
924 function ComplementaryAreaToggle({
925 as = import_components.Button,
926 scope,
927 identifier: identifierProp,
928 icon: iconProp,
929 selectedIcon,
930 name: name2,
931 shortcut,
932 ...props
933 }) {
934 const ComponentToUse = as;
935 const context = (0, import_plugins.usePluginContext)();
936 const icon = iconProp || context.icon;
937 const identifier = identifierProp || `${context.name}/${name2}`;
938 const isSelected = (0, import_data5.useSelect)(
939 (select) => select(store).getActiveComplementaryArea(scope) === identifier,
940 [identifier, scope]
941 );
942 const { enableComplementaryArea: enableComplementaryArea2, disableComplementaryArea: disableComplementaryArea2 } = (0, import_data5.useDispatch)(store);
943 return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
944 ComponentToUse,
945 {
946 icon: selectedIcon && isSelected ? selectedIcon : icon,
947 "aria-controls": identifier.replace("/", ":"),
948 "aria-checked": roleSupportsCheckedState(props.role) ? isSelected : void 0,
949 onClick: () => {
950 if (isSelected) {
951 disableComplementaryArea2(scope);
952 } else {
953 enableComplementaryArea2(scope, identifier);
954 }
955 },
956 shortcut,
957 ...props
958 }
959 );
960 }
961
962 // packages/interface/build-module/components/complementary-area-header/index.mjs
963 var import_jsx_runtime20 = __toESM(require_jsx_runtime(), 1);
964 var ComplementaryAreaHeader = ({
965 children,
966 className,
967 toggleButtonProps
968 }) => {
969 const toggleButton = /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(ComplementaryAreaToggle, { icon: close_small_default, ...toggleButtonProps });
970 return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
971 "div",
972 {
973 className: clsx_default(
974 "components-panel__header",
975 "interface-complementary-area-header",
976 className
977 ),
978 tabIndex: -1,
979 children: [
980 children,
981 toggleButton
982 ]
983 }
984 );
985 };
986 var complementary_area_header_default = ComplementaryAreaHeader;
987
988 // packages/interface/build-module/components/complementary-area-more-menu-item/index.mjs
989 var import_compose = __toESM(require_compose(), 1);
990 var import_element2 = __toESM(require_element(), 1);
991
992 // packages/interface/build-module/components/action-item/index.mjs
993 var import_components2 = __toESM(require_components(), 1);
994 var import_element = __toESM(require_element(), 1);
995 var import_jsx_runtime21 = __toESM(require_jsx_runtime(), 1);
996 function ActionItemSlot({
997 name: name2,
998 as: Component2 = import_components2.MenuGroup,
999 fillProps = {},
1000 children,
1001 ...props
1002 }) {
1003 return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_components2.Slot, { name: name2, fillProps, children: (fills) => {
1004 const items = import_element.Children.toArray(fills);
1005 if (!items.length) {
1006 return null;
1007 }
1008 if (typeof children === "function") {
1009 return children(items);
1010 }
1011 return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Component2, { ...props, children: items });
1012 } });
1013 }
1014 function ActionItem({ name: name2, as, onClick, ...props }) {
1015 return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_components2.Fill, { name: name2, children: ({ as: slotAs = import_components2.MenuItem, onClick: slotOnClick }) => {
1016 const Component2 = as ?? slotAs;
1017 const handlers = [onClick, slotOnClick].filter(Boolean);
1018 return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1019 Component2,
1020 {
1021 onClick: handlers.length ? (...args) => handlers.forEach(
1022 (handler) => handler(...args)
1023 ) : void 0,
1024 ...props
1025 }
1026 );
1027 } });
1028 }
1029 ActionItem.Slot = ActionItemSlot;
1030 var action_item_default = ActionItem;
1031
1032 // packages/interface/build-module/components/complementary-area-more-menu-item/index.mjs
1033 var import_jsx_runtime22 = __toESM(require_jsx_runtime(), 1);
1034 var menuItems = (0, import_compose.observableMap)();
1035 function useHasComplementaryAreaMenuItem(scope, target) {
1036 return !!(0, import_compose.useObservableValue)(menuItems, `${scope}/${target}`);
1037 }
1038 function DefaultComplementaryAreaMoreMenuItem({
1039 scope,
1040 target,
1041 ...props
1042 }) {
1043 return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1044 ComplementaryAreaToggle,
1045 {
1046 as: (toggleProps) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1047 action_item_default,
1048 {
1049 name: `${scope}/plugin-more-menu`,
1050 ...toggleProps
1051 }
1052 ),
1053 role: "menuitemcheckbox",
1054 name: target,
1055 scope,
1056 ...props
1057 }
1058 );
1059 }
1060
1061 // packages/interface/build-module/components/pinned-items/index.mjs
1062 var import_components3 = __toESM(require_components(), 1);
1063 var import_jsx_runtime23 = __toESM(require_jsx_runtime(), 1);
1064 function PinnedItems({ scope, ...props }) {
1065 return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_components3.Fill, { name: `PinnedItems/${scope}`, ...props });
1066 }
1067 function PinnedItemsSlot({
1068 scope,
1069 className,
1070 ...props
1071 }) {
1072 return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_components3.Slot, { name: `PinnedItems/${scope}`, ...props, children: (fills) => fills?.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1073 "div",
1074 {
1075 className: clsx_default(
1076 className,
1077 "interface-pinned-items"
1078 ),
1079 children: fills
1080 }
1081 ) });
1082 }
1083 PinnedItems.Slot = PinnedItemsSlot;
1084 var pinned_items_default = PinnedItems;
1085
1086 // packages/interface/build-module/components/complementary-area/index.mjs
1087 var import_jsx_runtime24 = __toESM(require_jsx_runtime(), 1);
1088 var ANIMATION_DURATION = 0.3;
1089 function ComplementaryAreaSlot({
1090 scope,
1091 ...props
1092 }) {
1093 return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_components4.Slot, { name: `ComplementaryArea/${scope}`, ...props });
1094 }
1095 var variants = {
1096 // `auto` leaves the width to the area's own stylesheet, so it stays in one
1097 // place. framer-motion measures the element to animate, then restores
1098 // `auto`.
1099 open: { width: "auto" },
1100 // Resolved with the `custom` value passed to `AnimatePresence`, which is
1101 // the only way an already removed element can be given a fresh transition.
1102 closed: (transition) => ({
1103 width: 0,
1104 transition
1105 })
1106 };
1107 function renderContainer(render, props) {
1108 if ((0, import_element3.isValidElement)(render)) {
1109 return (0, import_element3.cloneElement)(render, {
1110 ...props,
1111 className: clsx_default(render.props.className, props.className),
1112 style: { ...render.props.style, ...props.style }
1113 });
1114 }
1115 return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { ...props });
1116 }
1117 function ComplementaryAreaFill({
1118 activeArea,
1119 isActive,
1120 scope,
1121 children,
1122 className,
1123 id,
1124 render
1125 }) {
1126 const disableMotion = (0, import_compose2.useReducedMotion)();
1127 const isMobileViewport = (0, import_compose2.useViewportMatch)("medium", "<");
1128 const previousActiveArea = (0, import_compose2.usePrevious)(activeArea);
1129 const isSwitchingAreas = !!previousActiveArea && !!activeArea && activeArea !== previousActiveArea;
1130 const transition = {
1131 type: "tween",
1132 duration: disableMotion || isMobileViewport || isSwitchingAreas ? 0 : ANIMATION_DURATION,
1133 ease: [0.6, 0, 0.4, 1]
1134 };
1135 return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_components4.Fill, { name: `ComplementaryArea/${scope}`, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_components4.__unstableAnimatePresence, { initial: false, custom: transition, children: isActive && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1136 import_components4.__unstableMotion.div,
1137 {
1138 variants,
1139 initial: "closed",
1140 animate: "open",
1141 exit: "closed",
1142 transition,
1143 className: "interface-complementary-area__fill",
1144 children: renderContainer(render, {
1145 id,
1146 className,
1147 children
1148 })
1149 }
1150 ) }) });
1151 }
1152 function useAdjustComplementaryListener(scope, identifier, activeArea, isActive, isSmall) {
1153 const previousIsSmallRef = (0, import_element3.useRef)(false);
1154 const shouldOpenWhenNotSmallRef = (0, import_element3.useRef)(false);
1155 const { enableComplementaryArea: enableComplementaryArea2, disableComplementaryArea: disableComplementaryArea2 } = (0, import_data6.useDispatch)(store);
1156 (0, import_element3.useEffect)(() => {
1157 if (isActive && isSmall && !previousIsSmallRef.current) {
1158 disableComplementaryArea2(scope);
1159 shouldOpenWhenNotSmallRef.current = true;
1160 } else if (
1161 // If there is a flag indicating the complementary area should be
1162 // enabled when we go from small to big window size and we are going
1163 // from a small to big window size.
1164 shouldOpenWhenNotSmallRef.current && !isSmall && previousIsSmallRef.current
1165 ) {
1166 shouldOpenWhenNotSmallRef.current = false;
1167 enableComplementaryArea2(scope, identifier);
1168 } else if (
1169 // If the flag is indicating the current complementary should be
1170 // reopened but another complementary area becomes active, remove
1171 // the flag.
1172 shouldOpenWhenNotSmallRef.current && activeArea && activeArea !== identifier
1173 ) {
1174 shouldOpenWhenNotSmallRef.current = false;
1175 }
1176 if (isSmall !== previousIsSmallRef.current) {
1177 previousIsSmallRef.current = isSmall;
1178 }
1179 }, [
1180 isActive,
1181 isSmall,
1182 scope,
1183 identifier,
1184 activeArea,
1185 disableComplementaryArea2,
1186 enableComplementaryArea2
1187 ]);
1188 }
1189 function ComplementaryArea({
1190 children,
1191 className,
1192 closeLabel = (0, import_i18n.__)("Close plugin"),
1193 identifier: identifierProp,
1194 header,
1195 headerClassName,
1196 icon: iconProp,
1197 isPinnable = true,
1198 panelClassName,
1199 render,
1200 scope,
1201 name: name2,
1202 title,
1203 toggleShortcut,
1204 isActiveByDefault
1205 }) {
1206 const context = (0, import_plugins2.usePluginContext)();
1207 const icon = iconProp || context.icon;
1208 const identifier = identifierProp || `${context.name}/${name2}`;
1209 const [isReady, setIsReady] = (0, import_element3.useState)(false);
1210 const {
1211 isLoading,
1212 isActive,
1213 isPinned,
1214 activeArea,
1215 isSmall,
1216 isLarge,
1217 showIconLabels
1218 } = (0, import_data6.useSelect)(
1219 (select) => {
1220 const {
1221 getActiveComplementaryArea: getActiveComplementaryArea2,
1222 isComplementaryAreaLoading: isComplementaryAreaLoading2,
1223 isItemPinned: isItemPinned2
1224 } = select(store);
1225 const { get } = select(import_preferences3.store);
1226 const _activeArea = getActiveComplementaryArea2(scope);
1227 return {
1228 isLoading: isComplementaryAreaLoading2(scope),
1229 isActive: _activeArea === identifier,
1230 isPinned: isItemPinned2(scope, identifier),
1231 activeArea: _activeArea,
1232 isSmall: select(import_viewport.store).isViewportMatch("< medium"),
1233 isLarge: select(import_viewport.store).isViewportMatch("large"),
1234 showIconLabels: get("core", "showIconLabels")
1235 };
1236 },
1237 [identifier, scope]
1238 );
1239 const hasMenuItem = useHasComplementaryAreaMenuItem(scope, name2);
1240 const isMobileViewport = (0, import_compose2.useViewportMatch)("medium", "<");
1241 useAdjustComplementaryListener(
1242 scope,
1243 identifier,
1244 activeArea,
1245 isActive,
1246 isSmall
1247 );
1248 const {
1249 enableComplementaryArea: enableComplementaryArea2,
1250 disableComplementaryArea: disableComplementaryArea2,
1251 pinItem: pinItem2,
1252 unpinItem: unpinItem2
1253 } = (0, import_data6.useDispatch)(store);
1254 (0, import_element3.useEffect)(() => {
1255 if (isActiveByDefault && activeArea === void 0 && !isSmall) {
1256 enableComplementaryArea2(scope, identifier);
1257 } else if (activeArea === void 0 && isSmall) {
1258 disableComplementaryArea2(scope);
1259 }
1260 setIsReady(true);
1261 }, [
1262 activeArea,
1263 isActiveByDefault,
1264 scope,
1265 identifier,
1266 isSmall,
1267 enableComplementaryArea2,
1268 disableComplementaryArea2
1269 ]);
1270 if (!isReady) {
1271 return;
1272 }
1273 return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(import_jsx_runtime24.Fragment, { children: [
1274 isPinnable && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(pinned_items_default, { scope, children: isPinned && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1275 ComplementaryAreaToggle,
1276 {
1277 scope,
1278 identifier,
1279 isPressed: isActive && (!showIconLabels || isLarge),
1280 "aria-expanded": isActive,
1281 "aria-disabled": isLoading,
1282 label: title,
1283 icon: showIconLabels ? check_default : icon,
1284 showTooltip: !showIconLabels,
1285 variant: showIconLabels ? "tertiary" : void 0,
1286 size: "compact",
1287 shortcut: toggleShortcut
1288 }
1289 ) }),
1290 name2 && isPinnable && !hasMenuItem && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1291 DefaultComplementaryAreaMoreMenuItem,
1292 {
1293 target: name2,
1294 scope,
1295 icon,
1296 identifier,
1297 children: title
1298 }
1299 ),
1300 /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
1301 ComplementaryAreaFill,
1302 {
1303 activeArea,
1304 isActive,
1305 className: clsx_default("interface-complementary-area", className),
1306 scope,
1307 id: identifier.replace("/", ":"),
1308 render,
1309 children: [
1310 /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1311 complementary_area_header_default,
1312 {
1313 className: headerClassName,
1314 toggleButtonProps: {
1315 label: closeLabel,
1316 size: "compact",
1317 shortcut: toggleShortcut,
1318 scope,
1319 identifier
1320 },
1321 children: header || /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(import_jsx_runtime24.Fragment, { children: [
1322 /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("h2", { className: "interface-complementary-area-header__title", children: title }),
1323 isPinnable && !isMobileViewport && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1324 import_components4.Button,
1325 {
1326 className: "interface-complementary-area__pin-unpin-item",
1327 icon: isPinned ? star_filled_default : star_empty_default,
1328 label: isPinned ? (0, import_i18n.__)("Unpin from toolbar") : (0, import_i18n.__)("Pin to toolbar"),
1329 onClick: () => (isPinned ? unpinItem2 : pinItem2)(
1330 scope,
1331 identifier
1332 ),
1333 isPressed: isPinned,
1334 size: "compact"
1335 }
1336 )
1337 ] })
1338 }
1339 ),
1340 /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_components4.Panel, { className: panelClassName, children })
1341 ]
1342 }
1343 )
1344 ] });
1345 }
1346 ComplementaryArea.Slot = ComplementaryAreaSlot;
1347 var complementary_area_default = ComplementaryArea;
1348
1349 // node_modules/@base-ui/utils/useControlled.mjs
1350 var React = __toESM(require_react(), 1);
1351
1352 // node_modules/@base-ui/utils/createLogOnce.mjs
1353 var loggedMessages;
1354 if (true) {
1355 loggedMessages = /* @__PURE__ */ new Set();
1356 }
1357 function createLogOnce(severity, prefix) {
1358 return function logOnce(...messages) {
1359 if (true) {
1360 const message = messages.join(" ");
1361 const output = prefix ? `${prefix}: ${message}` : message;
1362 const key = `${severity}:${output}`;
1363 if (!loggedMessages.has(key)) {
1364 loggedMessages.add(key);
1365 if (severity === "warn") {
1366 console.warn(output);
1367 } else {
1368 console.error(output);
1369 }
1370 }
1371 }
1372 };
1373 }
1374
1375 // node_modules/@base-ui/utils/error.mjs
1376 var error = createLogOnce("error", "Base UI");
1377
1378 // node_modules/@base-ui/utils/useControlled.mjs
1379 function useControlled({
1380 controlled,
1381 default: defaultProp,
1382 name: name2,
1383 state = "value"
1384 }) {
1385 const {
1386 current: isControlled
1387 } = React.useRef(controlled !== void 0);
1388 const [valueState, setValue] = React.useState(defaultProp);
1389 const value = isControlled && controlled !== void 0 ? controlled : valueState;
1390 if (true) {
1391 React.useEffect(() => {
1392 if (isControlled !== (controlled !== void 0)) {
1393 error([`A component is changing the ${isControlled ? "" : "un"}controlled ${state} state of ${name2} to be ${isControlled ? "un" : ""}controlled.`, "Elements should not switch from uncontrolled to controlled (or vice versa).", `Decide between using a controlled or uncontrolled ${name2} element for the lifetime of the component.`, "The nature of the state is determined during the first render. It's considered controlled if the value is not `undefined`.", "More info: https://fb.me/react-controlled-components"].join("\n"));
1394 }
1395 }, [state, name2, controlled]);
1396 const {
1397 current: defaultValue
1398 } = React.useRef(defaultProp);
1399 React.useEffect(() => {
1400 if (!isControlled && serializeToDevModeString(defaultValue) !== serializeToDevModeString(defaultProp)) {
1401 error([`A component is changing the default ${state} state of an uncontrolled ${name2} after being initialized. To suppress this warning opt to use a controlled ${name2}.`].join("\n"));
1402 }
1403 }, [defaultProp]);
1404 }
1405 const setValueIfUncontrolled = React.useCallback((newValue) => {
1406 if (!isControlled) {
1407 setValue(newValue);
1408 }
1409 }, []);
1410 return [value, setValueIfUncontrolled];
1411 }
1412 function serializeToDevModeString(input) {
1413 let nextId = 0;
1414 const seen = /* @__PURE__ */ new WeakMap();
1415 try {
1416 const result = JSON.stringify(input, function replacer(key, value) {
1417 if (key === "_owner" && this != null && typeof this === "object" && "$$typeof" in this) {
1418 return void 0;
1419 }
1420 if (typeof value === "bigint") {
1421 return `__bigint__:${value}`;
1422 }
1423 if (value !== null && typeof value === "object") {
1424 const id = seen.get(value);
1425 if (id !== void 0) {
1426 return `__object__:${id}`;
1427 }
1428 seen.set(value, nextId);
1429 nextId += 1;
1430 }
1431 return value;
1432 });
1433 return result ?? `__top__:${typeof input}`;
1434 } catch {
1435 return "__unserializable__";
1436 }
1437 }
1438
1439 // node_modules/@base-ui/utils/safeReact.mjs
1440 var React2 = __toESM(require_react(), 1);
1441 var SafeReact = {
1442 ...React2
1443 };
1444
1445 // node_modules/@base-ui/utils/useRefWithInit.mjs
1446 var React3 = __toESM(require_react(), 1);
1447 var UNINITIALIZED = {};
1448 function useRefWithInit(init, initArg) {
1449 const ref = React3.useRef(UNINITIALIZED);
1450 if (ref.current === UNINITIALIZED) {
1451 ref.current = init(initArg);
1452 }
1453 return ref;
1454 }
1455
1456 // node_modules/@base-ui/utils/useStableCallback.mjs
1457 var useInsertionEffect = SafeReact.useInsertionEffect;
1458 var useSafeInsertionEffect = (
1459 // React 17 doesn't have useInsertionEffect.
1460 useInsertionEffect && // Preact replaces useInsertionEffect with useLayoutEffect and fires too late.
1461 useInsertionEffect !== SafeReact.useLayoutEffect ? useInsertionEffect : (fn) => fn()
1462 );
1463 function useStableCallback(callback) {
1464 const stable = useRefWithInit(createStableCallback).current;
1465 stable.next = callback;
1466 useSafeInsertionEffect(stable.effect);
1467 return stable.trampoline;
1468 }
1469 function createStableCallback() {
1470 const stable = {
1471 next: void 0,
1472 callback: assertNotCalled,
1473 trampoline: (...args) => stable.callback?.(...args),
1474 effect: () => {
1475 stable.callback = stable.next;
1476 }
1477 };
1478 return stable;
1479 }
1480 function assertNotCalled() {
1481 if (true) {
1482 throw (
1483 /* minify-error-disabled */
1484 new Error("Base UI: Cannot call an event handler while rendering.")
1485 );
1486 }
1487 }
1488
1489 // node_modules/@base-ui/utils/warn.mjs
1490 var warn = createLogOnce("warn", "Base UI");
1491
1492 // node_modules/@base-ui/utils/empty.mjs
1493 function NOOP() {
1494 }
1495 var EMPTY_ARRAY = Object.freeze([]);
1496 var EMPTY_OBJECT = Object.freeze({});
1497
1498 // node_modules/@base-ui/utils/useIsoLayoutEffect.mjs
1499 var React4 = __toESM(require_react(), 1);
1500 var noop = () => {
1501 };
1502 var useIsoLayoutEffect = typeof document !== "undefined" ? React4.useLayoutEffect : noop;
1503
1504 // node_modules/@base-ui/react/internals/useRenderElement.mjs
1505 var React7 = __toESM(require_react(), 1);
1506
1507 // node_modules/@base-ui/utils/useMergedRefs.mjs
1508 function useMergedRefs(a, b, c, d) {
1509 const forkRef = useRefWithInit(createForkRef).current;
1510 if (didChange(forkRef, a, b, c, d)) {
1511 update(forkRef, [a, b, c, d]);
1512 }
1513 return forkRef.callback;
1514 }
1515 function useMergedRefsN(refs) {
1516 const forkRef = useRefWithInit(createForkRef).current;
1517 if (didChangeN(forkRef, refs)) {
1518 update(forkRef, refs);
1519 }
1520 return forkRef.callback;
1521 }
1522 function createForkRef() {
1523 return {
1524 callback: null,
1525 cleanup: null,
1526 refs: []
1527 };
1528 }
1529 function didChange(forkRef, a, b, c, d) {
1530 return forkRef.refs[0] !== a || forkRef.refs[1] !== b || forkRef.refs[2] !== c || forkRef.refs[3] !== d;
1531 }
1532 function didChangeN(forkRef, newRefs) {
1533 return forkRef.refs.length !== newRefs.length || forkRef.refs.some((ref, index2) => ref !== newRefs[index2]);
1534 }
1535 function update(forkRef, refs) {
1536 forkRef.refs = refs;
1537 if (refs.every((ref) => ref == null)) {
1538 forkRef.callback = null;
1539 return;
1540 }
1541 forkRef.callback = (instance) => {
1542 if (forkRef.cleanup) {
1543 forkRef.cleanup();
1544 forkRef.cleanup = null;
1545 }
1546 if (instance != null) {
1547 const cleanupCallbacks = Array(refs.length).fill(null);
1548 for (let i = 0; i < refs.length; i += 1) {
1549 const ref = refs[i];
1550 if (ref == null) {
1551 continue;
1552 }
1553 switch (typeof ref) {
1554 case "function": {
1555 const refCleanup = ref(instance);
1556 if (typeof refCleanup === "function") {
1557 cleanupCallbacks[i] = refCleanup;
1558 }
1559 break;
1560 }
1561 case "object": {
1562 ref.current = instance;
1563 break;
1564 }
1565 default:
1566 }
1567 }
1568 forkRef.cleanup = () => {
1569 for (let i = 0; i < refs.length; i += 1) {
1570 const ref = refs[i];
1571 if (ref == null) {
1572 continue;
1573 }
1574 switch (typeof ref) {
1575 case "function": {
1576 const cleanupCallback = cleanupCallbacks[i];
1577 if (typeof cleanupCallback === "function") {
1578 cleanupCallback();
1579 } else {
1580 void ref(null);
1581 }
1582 break;
1583 }
1584 case "object": {
1585 ref.current = null;
1586 break;
1587 }
1588 default:
1589 }
1590 }
1591 };
1592 }
1593 };
1594 }
1595
1596 // node_modules/@base-ui/utils/getReactElementRef.mjs
1597 var React6 = __toESM(require_react(), 1);
1598
1599 // node_modules/@base-ui/utils/reactVersion.mjs
1600 var React5 = __toESM(require_react(), 1);
1601 var majorVersion = parseInt(React5.version, 10);
1602 function isReactVersionAtLeast(reactVersionToCheck) {
1603 return majorVersion >= reactVersionToCheck;
1604 }
1605
1606 // node_modules/@base-ui/utils/getReactElementRef.mjs
1607 function getReactElementRef(element) {
1608 if (!/* @__PURE__ */ React6.isValidElement(element)) {
1609 return null;
1610 }
1611 const reactElement = element;
1612 const propsWithRef = reactElement.props;
1613 return (isReactVersionAtLeast(19) ? propsWithRef?.ref : reactElement.ref) ?? null;
1614 }
1615
1616 // node_modules/@base-ui/utils/mergeObjects.mjs
1617 function mergeObjects(a, b) {
1618 if (a && !b) {
1619 return a;
1620 }
1621 if (!a && b) {
1622 return b;
1623 }
1624 if (a || b) {
1625 return {
1626 ...a,
1627 ...b
1628 };
1629 }
1630 return void 0;
1631 }
1632
1633 // node_modules/@base-ui/react/internals/getStateAttributesProps.mjs
1634 function getStateAttributesProps(state, customMapping) {
1635 const props = {};
1636 for (const key in state) {
1637 const value = state[key];
1638 if (customMapping?.hasOwnProperty(key)) {
1639 const customProps = customMapping[key](value);
1640 if (customProps != null) {
1641 Object.assign(props, customProps);
1642 }
1643 continue;
1644 }
1645 if (value === true) {
1646 props[`data-${key.toLowerCase()}`] = "";
1647 } else if (value) {
1648 props[`data-${key.toLowerCase()}`] = value.toString();
1649 }
1650 }
1651 return props;
1652 }
1653
1654 // node_modules/@base-ui/react/utils/resolveClassName.mjs
1655 function resolveClassName(className, state) {
1656 return typeof className === "function" ? className(state) : className;
1657 }
1658
1659 // node_modules/@base-ui/react/utils/resolveStyle.mjs
1660 function resolveStyle(style, state) {
1661 return typeof style === "function" ? style(state) : style;
1662 }
1663
1664 // node_modules/@base-ui/react/merge-props/mergeProps.mjs
1665 var EMPTY_PROPS = {};
1666 function mergeProps(a, b, c, d, e) {
1667 if (!c && !d && !e && !a) {
1668 return createInitialMergedProps(b);
1669 }
1670 let merged = createInitialMergedProps(a);
1671 if (b) {
1672 merged = mergeInto(merged, b);
1673 }
1674 if (c) {
1675 merged = mergeInto(merged, c);
1676 }
1677 if (d) {
1678 merged = mergeInto(merged, d);
1679 }
1680 if (e) {
1681 merged = mergeInto(merged, e);
1682 }
1683 return merged;
1684 }
1685 function mergePropsN(props) {
1686 if (props.length === 0) {
1687 return EMPTY_PROPS;
1688 }
1689 if (props.length === 1) {
1690 return createInitialMergedProps(props[0]);
1691 }
1692 let merged = createInitialMergedProps(props[0]);
1693 for (let i = 1; i < props.length; i += 1) {
1694 merged = mergeInto(merged, props[i]);
1695 }
1696 return merged;
1697 }
1698 function createInitialMergedProps(inputProps) {
1699 if (isPropsGetter(inputProps)) {
1700 return {
1701 ...resolvePropsGetter(inputProps, EMPTY_PROPS)
1702 };
1703 }
1704 return copyInitialProps(inputProps);
1705 }
1706 function mergeInto(merged, inputProps) {
1707 if (isPropsGetter(inputProps)) {
1708 return resolvePropsGetter(inputProps, merged);
1709 }
1710 return mutablyMergeInto(merged, inputProps);
1711 }
1712 function copyInitialProps(inputProps) {
1713 const copiedProps = {
1714 ...inputProps
1715 };
1716 for (const propName in copiedProps) {
1717 const propValue = copiedProps[propName];
1718 if (isEventHandler(propName, propValue)) {
1719 copiedProps[propName] = wrapEventHandler(propValue);
1720 }
1721 }
1722 return copiedProps;
1723 }
1724 function mutablyMergeInto(mergedProps, externalProps) {
1725 if (!externalProps) {
1726 return mergedProps;
1727 }
1728 for (const propName in externalProps) {
1729 const externalPropValue = externalProps[propName];
1730 switch (propName) {
1731 case "style": {
1732 mergedProps[propName] = mergeObjects(mergedProps.style, externalPropValue);
1733 break;
1734 }
1735 case "className": {
1736 mergedProps[propName] = mergeClassNames(mergedProps.className, externalPropValue);
1737 break;
1738 }
1739 default: {
1740 if (isEventHandler(propName, externalPropValue)) {
1741 mergedProps[propName] = mergeEventHandlers(mergedProps[propName], externalPropValue);
1742 } else {
1743 mergedProps[propName] = externalPropValue;
1744 }
1745 }
1746 }
1747 }
1748 return mergedProps;
1749 }
1750 function isEventHandler(key, value) {
1751 const code0 = key.charCodeAt(0);
1752 const code1 = key.charCodeAt(1);
1753 const code2 = key.charCodeAt(2);
1754 return code0 === 111 && code1 === 110 && code2 >= 65 && code2 <= 90 && (typeof value === "function" || typeof value === "undefined");
1755 }
1756 function isPropsGetter(inputProps) {
1757 return typeof inputProps === "function";
1758 }
1759 function resolvePropsGetter(inputProps, previousProps) {
1760 if (isPropsGetter(inputProps)) {
1761 return inputProps(previousProps);
1762 }
1763 return inputProps ?? EMPTY_PROPS;
1764 }
1765 function mergeEventHandlers(ourHandler, theirHandler) {
1766 if (!theirHandler) {
1767 return ourHandler;
1768 }
1769 if (!ourHandler) {
1770 return wrapEventHandler(theirHandler);
1771 }
1772 return (...args) => {
1773 const event = args[0];
1774 if (isSyntheticEvent(event)) {
1775 const baseUIEvent = event;
1776 makeEventPreventable(baseUIEvent);
1777 const result2 = theirHandler(...args);
1778 if (!baseUIEvent.baseUIHandlerPrevented) {
1779 ourHandler?.(...args);
1780 }
1781 return result2;
1782 }
1783 const result = theirHandler(...args);
1784 ourHandler?.(...args);
1785 return result;
1786 };
1787 }
1788 function wrapEventHandler(handler) {
1789 if (!handler) {
1790 return handler;
1791 }
1792 return (...args) => {
1793 const event = args[0];
1794 if (isSyntheticEvent(event)) {
1795 makeEventPreventable(event);
1796 }
1797 return handler(...args);
1798 };
1799 }
1800 function makeEventPreventable(event) {
1801 event.preventBaseUIHandler = () => {
1802 event.baseUIHandlerPrevented = true;
1803 };
1804 return event;
1805 }
1806 function mergeClassNames(ourClassName, theirClassName) {
1807 if (theirClassName) {
1808 if (ourClassName) {
1809 return theirClassName + " " + ourClassName;
1810 }
1811 return theirClassName;
1812 }
1813 return ourClassName;
1814 }
1815 function isSyntheticEvent(event) {
1816 return event != null && typeof event === "object" && "nativeEvent" in event;
1817 }
1818
1819 // node_modules/@base-ui/react/internals/useRenderElement.mjs
1820 var import_react = __toESM(require_react(), 1);
1821 function useRenderElement(element, componentProps, params = {}) {
1822 let renderProp = componentProps.render;
1823 if (params.enabled !== false) {
1824 renderProp = unwrapLazyRenderProp(renderProp);
1825 }
1826 const outProps = useRenderElementProps(componentProps, params, renderProp);
1827 if (params.enabled === false) {
1828 return null;
1829 }
1830 const state = params.state ?? EMPTY_OBJECT;
1831 return evaluateRenderProp(element, renderProp, outProps, state);
1832 }
1833 function useRenderElementProps(componentProps, params, renderProp) {
1834 const {
1835 className: classNameProp,
1836 style: styleProp
1837 } = componentProps;
1838 const {
1839 state = EMPTY_OBJECT,
1840 ref,
1841 props,
1842 stateAttributesMapping: stateAttributesMapping2,
1843 enabled = true
1844 } = params;
1845 const className = enabled ? resolveClassName(classNameProp, state) : void 0;
1846 const style = enabled ? resolveStyle(styleProp, state) : void 0;
1847 const stateProps = enabled ? getStateAttributesProps(state, stateAttributesMapping2) : EMPTY_OBJECT;
1848 const resolvedProps = enabled && props ? resolveRenderFunctionProps(props) : void 0;
1849 const outProps = enabled ? mergeObjects(stateProps, resolvedProps) ?? {} : EMPTY_OBJECT;
1850 if (typeof document !== "undefined") {
1851 if (!enabled) {
1852 void useMergedRefs(null, null);
1853 } else if (Array.isArray(ref)) {
1854 outProps.ref = useMergedRefsN([outProps.ref, getReactElementRef(renderProp), ...ref]);
1855 } else {
1856 outProps.ref = useMergedRefs(outProps.ref, getReactElementRef(renderProp), ref);
1857 }
1858 }
1859 if (!enabled) {
1860 return EMPTY_OBJECT;
1861 }
1862 if (className !== void 0) {
1863 outProps.className = mergeClassNames(outProps.className, className);
1864 }
1865 if (style !== void 0) {
1866 outProps.style = mergeObjects(outProps.style, style);
1867 }
1868 return outProps;
1869 }
1870 function resolveRenderFunctionProps(props) {
1871 if (Array.isArray(props)) {
1872 return mergePropsN(props);
1873 }
1874 return mergeProps(void 0, props);
1875 }
1876 var REACT_LAZY_TYPE = /* @__PURE__ */ Symbol.for("react.lazy");
1877 var COMPONENT_IDENTIFIER_PATTERN = /^[A-Z][A-Za-z0-9$]*$/;
1878 var LOWERCASE_CHARACTER_PATTERN = /[a-z]/;
1879 function unwrapLazyRenderProp(render) {
1880 if (render?.$$typeof !== REACT_LAZY_TYPE) {
1881 return render;
1882 }
1883 const unwrapped = React7.Children.toArray(render)[0];
1884 return /* @__PURE__ */ React7.isValidElement(unwrapped) ? unwrapped : render;
1885 }
1886 function evaluateRenderProp(element, render, props, state) {
1887 if (render) {
1888 if (typeof render === "function") {
1889 if (true) {
1890 warnIfRenderPropLooksLikeComponent(render);
1891 }
1892 return render(props, state);
1893 }
1894 const mergedProps = mergeProps(props, render.props);
1895 mergedProps.ref = props.ref;
1896 if (true) {
1897 if (!/* @__PURE__ */ React7.isValidElement(render)) {
1898 throw new Error(["Base UI: The `render` prop was provided an invalid React element as `React.isValidElement(render)` is `false`.", "A valid React element must be provided to the `render` prop because it is cloned with props to replace the default element.", "https://base-ui.com/r/invalid-render-prop"].join("\n"));
1899 }
1900 }
1901 return /* @__PURE__ */ React7.cloneElement(render, mergedProps);
1902 }
1903 if (element) {
1904 if (typeof element === "string") {
1905 return renderTag(element, props);
1906 }
1907 }
1908 throw new Error(true ? "Base UI: Render element or function are not defined." : formatErrorMessage_default(8));
1909 }
1910 function warnIfRenderPropLooksLikeComponent(renderFn) {
1911 const functionName = renderFn.name;
1912 if (functionName.length === 0) {
1913 return;
1914 }
1915 if (!COMPONENT_IDENTIFIER_PATTERN.test(functionName)) {
1916 return;
1917 }
1918 if (!LOWERCASE_CHARACTER_PATTERN.test(functionName)) {
1919 return;
1920 }
1921 warn(`The \`render\` prop received a function named \`${functionName}\` that starts with an uppercase letter.`, "This usually means a React component was passed directly as `render={Component}`.", "Base UI calls `render` as a plain function, which can break the Rules of Hooks during reconciliation.", "If this is an intentional render callback, rename it to start with a lowercase letter.", "Use `render={<Component />}` or `render={(props) => <Component {...props} />}` instead.", "https://base-ui.com/r/invalid-render-prop");
1922 }
1923 function renderTag(Tag, props) {
1924 if (Tag === "button") {
1925 return /* @__PURE__ */ (0, import_react.createElement)("button", {
1926 type: "button",
1927 ...props,
1928 key: props.key
1929 });
1930 }
1931 if (Tag === "img") {
1932 return /* @__PURE__ */ (0, import_react.createElement)("img", {
1933 alt: "",
1934 ...props,
1935 key: props.key
1936 });
1937 }
1938 return /* @__PURE__ */ React7.createElement(Tag, props);
1939 }
1940
1941 // node_modules/@base-ui/utils/useId.mjs
1942 var React8 = __toESM(require_react(), 1);
1943 var globalId = 0;
1944 function useGlobalId(idOverride, prefix = "mui") {
1945 const [defaultId, setDefaultId] = React8.useState(idOverride);
1946 const id = idOverride || defaultId;
1947 React8.useEffect(() => {
1948 if (defaultId == null) {
1949 globalId += 1;
1950 setDefaultId(`${prefix}-${globalId}`);
1951 }
1952 }, [defaultId, prefix]);
1953 return id;
1954 }
1955 var maybeReactUseId = SafeReact.useId;
1956 function useId(idOverride, prefix) {
1957 if (maybeReactUseId !== void 0) {
1958 const reactId = maybeReactUseId();
1959 return idOverride ?? (prefix ? `${prefix}-${reactId}` : reactId);
1960 }
1961 return useGlobalId(idOverride, prefix);
1962 }
1963
1964 // node_modules/@base-ui/react/internals/useBaseUiId.mjs
1965 function useBaseUiId(idOverride) {
1966 return useId(idOverride, "base-ui");
1967 }
1968
1969 // node_modules/@base-ui/react/collapsible/root/useCollapsibleRoot.mjs
1970 var React11 = __toESM(require_react(), 1);
1971
1972 // node_modules/@base-ui/react/internals/reason-parts.mjs
1973 var reason_parts_exports = {};
1974 __export(reason_parts_exports, {
1975 cancelOpen: () => cancelOpen,
1976 chipRemovePress: () => chipRemovePress,
1977 clearPress: () => clearPress,
1978 closePress: () => closePress,
1979 closeWatcher: () => closeWatcher,
1980 decrementPress: () => decrementPress,
1981 disabled: () => disabled,
1982 drag: () => drag,
1983 escapeKey: () => escapeKey,
1984 focusOut: () => focusOut,
1985 imperativeAction: () => imperativeAction,
1986 incrementPress: () => incrementPress,
1987 initial: () => initial,
1988 inputBlur: () => inputBlur,
1989 inputChange: () => inputChange,
1990 inputClear: () => inputClear,
1991 inputPaste: () => inputPaste,
1992 inputPress: () => inputPress,
1993 itemPress: () => itemPress,
1994 keyboard: () => keyboard,
1995 linkPress: () => linkPress,
1996 listNavigation: () => listNavigation,
1997 missing: () => missing,
1998 none: () => none,
1999 outsidePress: () => outsidePress,
2000 pointer: () => pointer,
2001 scrub: () => scrub,
2002 siblingOpen: () => siblingOpen,
2003 swipe: () => swipe,
2004 trackPress: () => trackPress,
2005 triggerFocus: () => triggerFocus,
2006 triggerHover: () => triggerHover,
2007 triggerPress: () => triggerPress,
2008 wheel: () => wheel,
2009 windowResize: () => windowResize
2010 });
2011 var none = "none";
2012 var triggerPress = "trigger-press";
2013 var triggerHover = "trigger-hover";
2014 var triggerFocus = "trigger-focus";
2015 var outsidePress = "outside-press";
2016 var itemPress = "item-press";
2017 var closePress = "close-press";
2018 var linkPress = "link-press";
2019 var clearPress = "clear-press";
2020 var chipRemovePress = "chip-remove-press";
2021 var trackPress = "track-press";
2022 var incrementPress = "increment-press";
2023 var decrementPress = "decrement-press";
2024 var inputChange = "input-change";
2025 var inputClear = "input-clear";
2026 var inputBlur = "input-blur";
2027 var inputPaste = "input-paste";
2028 var inputPress = "input-press";
2029 var focusOut = "focus-out";
2030 var escapeKey = "escape-key";
2031 var closeWatcher = "close-watcher";
2032 var listNavigation = "list-navigation";
2033 var keyboard = "keyboard";
2034 var pointer = "pointer";
2035 var drag = "drag";
2036 var wheel = "wheel";
2037 var scrub = "scrub";
2038 var cancelOpen = "cancel-open";
2039 var siblingOpen = "sibling-open";
2040 var disabled = "disabled";
2041 var missing = "missing";
2042 var initial = "initial";
2043 var imperativeAction = "imperative-action";
2044 var swipe = "swipe";
2045 var windowResize = "window-resize";
2046
2047 // node_modules/@base-ui/react/internals/createBaseUIEventDetails.mjs
2048 function createChangeEventDetails(reason, event, trigger, customProperties) {
2049 let canceled = false;
2050 let allowPropagation = false;
2051 const custom = customProperties ?? EMPTY_OBJECT;
2052 const details = {
2053 reason,
2054 event: event ?? new Event("base-ui"),
2055 cancel() {
2056 canceled = true;
2057 },
2058 allowPropagation() {
2059 allowPropagation = true;
2060 },
2061 get isCanceled() {
2062 return canceled;
2063 },
2064 get isPropagationAllowed() {
2065 return allowPropagation;
2066 },
2067 trigger,
2068 ...custom
2069 };
2070 return details;
2071 }
2072
2073 // node_modules/@base-ui/react/internals/useTransitionStatus.mjs
2074 var React10 = __toESM(require_react(), 1);
2075
2076 // node_modules/@base-ui/utils/useOnMount.mjs
2077 var React9 = __toESM(require_react(), 1);
2078 function useOnMount(fn) {
2079 React9.useEffect(fn, EMPTY_ARRAY);
2080 }
2081
2082 // node_modules/@base-ui/utils/useAnimationFrame.mjs
2083 var EMPTY = null;
2084 var LAST_RAF = globalThis.requestAnimationFrame;
2085 var Scheduler = class {
2086 /* This implementation uses an array as a backing data-structure for frame callbacks.
2087 * It allows `O(1)` callback cancelling by inserting a `null` in the array, though it
2088 * never calls the native `cancelAnimationFrame` if there are no frames left. This can
2089 * be much more efficient if there is a call pattern that alterns as
2090 * "request-cancel-request-cancel-…".
2091 * But in the case of "request-request-…-cancel-cancel-…", it leaves the final animation
2092 * frame to run anyway. We turn that frame into a `O(1)` no-op via `callbacksCount`. */
2093 callbacks = [];
2094 callbacksCount = 0;
2095 nextId = 1;
2096 startId = 1;
2097 isScheduled = false;
2098 tick = (timestamp) => {
2099 this.isScheduled = false;
2100 const currentCallbacks = this.callbacks;
2101 const currentCallbacksCount = this.callbacksCount;
2102 this.callbacks = [];
2103 this.callbacksCount = 0;
2104 this.startId = this.nextId;
2105 if (currentCallbacksCount > 0) {
2106 for (let i = 0; i < currentCallbacks.length; i += 1) {
2107 currentCallbacks[i]?.(timestamp);
2108 }
2109 }
2110 };
2111 request(fn) {
2112 const id = this.nextId;
2113 this.nextId += 1;
2114 this.callbacks.push(fn);
2115 this.callbacksCount += 1;
2116 const didRAFChange = LAST_RAF !== requestAnimationFrame && (LAST_RAF = requestAnimationFrame, true);
2117 if (!this.isScheduled || didRAFChange) {
2118 requestAnimationFrame(this.tick);
2119 this.isScheduled = true;
2120 }
2121 return id;
2122 }
2123 cancel(id) {
2124 const index2 = id - this.startId;
2125 if (index2 < 0 || index2 >= this.callbacks.length) {
2126 return;
2127 }
2128 if (this.callbacks[index2] === null) {
2129 return;
2130 }
2131 this.callbacks[index2] = null;
2132 this.callbacksCount -= 1;
2133 }
2134 };
2135 var scheduler = new Scheduler();
2136 var AnimationFrame = class _AnimationFrame {
2137 static create() {
2138 return new _AnimationFrame();
2139 }
2140 static request(fn) {
2141 return scheduler.request(fn);
2142 }
2143 static cancel(id) {
2144 return scheduler.cancel(id);
2145 }
2146 currentId = EMPTY;
2147 /**
2148 * Executes `fn` after `delay`, clearing any previously scheduled call.
2149 */
2150 request(fn) {
2151 this.cancel();
2152 this.currentId = scheduler.request(() => {
2153 this.currentId = EMPTY;
2154 fn();
2155 });
2156 }
2157 cancel = () => {
2158 if (this.currentId !== EMPTY) {
2159 scheduler.cancel(this.currentId);
2160 this.currentId = EMPTY;
2161 }
2162 };
2163 disposeEffect = () => {
2164 return this.cancel;
2165 };
2166 };
2167 function useAnimationFrame() {
2168 const timeout = useRefWithInit(AnimationFrame.create).current;
2169 useOnMount(timeout.disposeEffect);
2170 return timeout;
2171 }
2172
2173 // node_modules/@base-ui/react/internals/useTransitionStatus.mjs
2174 function useTransitionStatus(open3, enableIdleState = false, deferEndingState = false, animateInitialOpen = false) {
2175 const [transitionStatus, setTransitionStatus] = React10.useState(open3 && enableIdleState ? "idle" : void 0);
2176 const [mounted, setMounted] = React10.useState(open3 && !animateInitialOpen);
2177 if (open3 && !mounted) {
2178 setMounted(true);
2179 setTransitionStatus("starting");
2180 }
2181 if (!open3 && mounted && transitionStatus !== "ending" && !deferEndingState) {
2182 setTransitionStatus("ending");
2183 }
2184 if (!open3 && !mounted && transitionStatus === "ending") {
2185 setTransitionStatus(void 0);
2186 }
2187 useIsoLayoutEffect(() => {
2188 if (!open3 && mounted && transitionStatus !== "ending" && deferEndingState) {
2189 const frame = AnimationFrame.request(() => {
2190 setTransitionStatus("ending");
2191 });
2192 return () => {
2193 AnimationFrame.cancel(frame);
2194 };
2195 }
2196 return void 0;
2197 }, [open3, mounted, transitionStatus, deferEndingState]);
2198 useIsoLayoutEffect(() => {
2199 if (!open3 || enableIdleState) {
2200 return void 0;
2201 }
2202 const frame = AnimationFrame.request(() => {
2203 setTransitionStatus(void 0);
2204 });
2205 return () => {
2206 AnimationFrame.cancel(frame);
2207 };
2208 }, [enableIdleState, open3]);
2209 useIsoLayoutEffect(() => {
2210 if (!open3 || !enableIdleState) {
2211 return void 0;
2212 }
2213 if (open3 && mounted && transitionStatus !== "idle") {
2214 setTransitionStatus("starting");
2215 }
2216 const frame = AnimationFrame.request(() => {
2217 setTransitionStatus("idle");
2218 });
2219 return () => {
2220 AnimationFrame.cancel(frame);
2221 };
2222 }, [enableIdleState, open3, mounted, transitionStatus]);
2223 return {
2224 mounted,
2225 setMounted,
2226 transitionStatus
2227 };
2228 }
2229
2230 // node_modules/@base-ui/react/collapsible/root/useCollapsibleRoot.mjs
2231 function useCollapsibleRoot(parameters) {
2232 const {
2233 open: openParam,
2234 defaultOpen = false,
2235 onOpenChange,
2236 disabled: disabled2
2237 } = parameters;
2238 const [open3, setOpen] = useControlled({
2239 controlled: openParam,
2240 default: defaultOpen,
2241 name: "Collapsible",
2242 state: "open"
2243 });
2244 const {
2245 mounted,
2246 setMounted,
2247 transitionStatus
2248 } = useTransitionStatus(open3, true, true);
2249 const defaultPanelId = useBaseUiId();
2250 const [registeredPanelId, setPanelIdState] = React11.useState();
2251 const panelId = registeredPanelId === null ? void 0 : registeredPanelId ?? defaultPanelId;
2252 const handleTrigger = useStableCallback((event) => {
2253 const nextOpen = !open3;
2254 const eventDetails = createChangeEventDetails(reason_parts_exports.triggerPress, event.nativeEvent);
2255 onOpenChange(nextOpen, eventDetails);
2256 if (eventDetails.isCanceled) {
2257 return;
2258 }
2259 setOpen(nextOpen);
2260 });
2261 return React11.useMemo(() => ({
2262 defaultPanelId,
2263 disabled: disabled2,
2264 handleTrigger,
2265 mounted,
2266 open: open3,
2267 panelId,
2268 setMounted,
2269 setOpen,
2270 setPanelIdState,
2271 transitionStatus
2272 }), [defaultPanelId, disabled2, handleTrigger, mounted, open3, panelId, setMounted, setOpen, setPanelIdState, transitionStatus]);
2273 }
2274
2275 // node_modules/@base-ui/react/collapsible/root/CollapsibleRootContext.mjs
2276 var React12 = __toESM(require_react(), 1);
2277 var CollapsibleRootContext = /* @__PURE__ */ React12.createContext(void 0);
2278 if (true) CollapsibleRootContext.displayName = "CollapsibleRootContext";
2279 function useCollapsibleRootContext() {
2280 const context = React12.useContext(CollapsibleRootContext);
2281 if (context === void 0) {
2282 throw new Error(true ? "Base UI: CollapsibleRootContext is missing. Collapsible parts must be placed within <Collapsible.Root>." : formatErrorMessage_default(15));
2283 }
2284 return context;
2285 }
2286
2287 // node_modules/@base-ui/react/internals/TransitionStatusDataAttributes.mjs
2288 var TransitionStatusDataAttributes_exports = {};
2289 __export(TransitionStatusDataAttributes_exports, {
2290 endingStyle: () => endingStyle,
2291 startingStyle: () => startingStyle
2292 });
2293 var startingStyle = "data-starting-style";
2294 var endingStyle = "data-ending-style";
2295
2296 // node_modules/@base-ui/react/internals/stateAttributesMapping.mjs
2297 var STARTING_HOOK = {
2298 [startingStyle]: ""
2299 };
2300 var ENDING_HOOK = {
2301 [endingStyle]: ""
2302 };
2303 var transitionStatusMapping = {
2304 transitionStatus(value) {
2305 if (value === "starting") {
2306 return STARTING_HOOK;
2307 }
2308 if (value === "ending") {
2309 return ENDING_HOOK;
2310 }
2311 return null;
2312 }
2313 };
2314
2315 // node_modules/@base-ui/react/collapsible/panel/CollapsiblePanelDataAttributes.mjs
2316 var open = "data-open";
2317 var closed = "data-closed";
2318 var startingStyle2 = TransitionStatusDataAttributes_exports.startingStyle;
2319 var endingStyle2 = TransitionStatusDataAttributes_exports.endingStyle;
2320
2321 // node_modules/@base-ui/react/collapsible/trigger/CollapsibleTriggerDataAttributes.mjs
2322 var panelOpen = "data-panel-open";
2323
2324 // node_modules/@base-ui/react/utils/collapsibleOpenStateMapping.mjs
2325 var PANEL_OPEN_HOOK = {
2326 [open]: ""
2327 };
2328 var PANEL_CLOSED_HOOK = {
2329 [closed]: ""
2330 };
2331 var triggerOpenStateMapping = {
2332 open(value) {
2333 if (value) {
2334 return {
2335 [panelOpen]: ""
2336 };
2337 }
2338 return null;
2339 }
2340 };
2341 var collapsibleOpenStateMapping = {
2342 open(value) {
2343 if (value) {
2344 return PANEL_OPEN_HOOK;
2345 }
2346 return PANEL_CLOSED_HOOK;
2347 }
2348 };
2349
2350 // node_modules/@base-ui/react/internals/use-button/useButton.mjs
2351 var React15 = __toESM(require_react(), 1);
2352
2353 // node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs
2354 function hasWindow() {
2355 return typeof window !== "undefined";
2356 }
2357 function getNodeName(node) {
2358 if (isNode(node)) {
2359 return (node.nodeName || "").toLowerCase();
2360 }
2361 return "#document";
2362 }
2363 function getWindow(node) {
2364 var _node$ownerDocument;
2365 return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;
2366 }
2367 function getDocumentElement(node) {
2368 var _ref;
2369 return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;
2370 }
2371 function isNode(value) {
2372 if (!hasWindow()) {
2373 return false;
2374 }
2375 return value instanceof Node || value instanceof getWindow(value).Node;
2376 }
2377 function isElement(value) {
2378 if (!hasWindow()) {
2379 return false;
2380 }
2381 return value instanceof Element || value instanceof getWindow(value).Element;
2382 }
2383 function isHTMLElement(value) {
2384 if (!hasWindow()) {
2385 return false;
2386 }
2387 return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;
2388 }
2389 function isShadowRoot(value) {
2390 if (!hasWindow() || typeof ShadowRoot === "undefined") {
2391 return false;
2392 }
2393 return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;
2394 }
2395 function isOverflowElement(element) {
2396 const {
2397 overflow,
2398 overflowX,
2399 overflowY,
2400 display
2401 } = getComputedStyle2(element);
2402 return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && display !== "inline" && display !== "contents";
2403 }
2404 function isTableElement(element) {
2405 return /^(table|td|th)$/.test(getNodeName(element));
2406 }
2407 function isTopLayer(element) {
2408 try {
2409 if (element.matches(":popover-open")) {
2410 return true;
2411 }
2412 } catch (_e) {
2413 }
2414 try {
2415 return element.matches(":modal");
2416 } catch (_e) {
2417 return false;
2418 }
2419 }
2420 var willChangeRe = /transform|translate|scale|rotate|perspective|filter/;
2421 var containRe = /paint|layout|strict|content/;
2422 var isNotNone = (value) => !!value && value !== "none";
2423 var isWebKitValue;
2424 function isContainingBlock(elementOrCss) {
2425 const css = isElement(elementOrCss) ? getComputedStyle2(elementOrCss) : elementOrCss;
2426 return isNotNone(css.transform) || isNotNone(css.translate) || isNotNone(css.scale) || isNotNone(css.rotate) || isNotNone(css.perspective) || !isWebKit() && (isNotNone(css.backdropFilter) || isNotNone(css.filter)) || willChangeRe.test(css.willChange || "") || containRe.test(css.contain || "");
2427 }
2428 function getContainingBlock(element) {
2429 let currentNode = getParentNode(element);
2430 while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {
2431 if (isContainingBlock(currentNode)) {
2432 return currentNode;
2433 } else if (isTopLayer(currentNode)) {
2434 return null;
2435 }
2436 currentNode = getParentNode(currentNode);
2437 }
2438 return null;
2439 }
2440 function isWebKit() {
2441 if (isWebKitValue == null) {
2442 isWebKitValue = typeof CSS !== "undefined" && CSS.supports && CSS.supports("-webkit-backdrop-filter", "none");
2443 }
2444 return isWebKitValue;
2445 }
2446 function isLastTraversableNode(node) {
2447 return /^(html|body|#document)$/.test(getNodeName(node));
2448 }
2449 function getComputedStyle2(element) {
2450 return getWindow(element).getComputedStyle(element);
2451 }
2452 function getNodeScroll(element) {
2453 if (isElement(element)) {
2454 return {
2455 scrollLeft: element.scrollLeft,
2456 scrollTop: element.scrollTop
2457 };
2458 }
2459 return {
2460 scrollLeft: element.scrollX,
2461 scrollTop: element.scrollY
2462 };
2463 }
2464 function getParentNode(node) {
2465 if (getNodeName(node) === "html") {
2466 return node;
2467 }
2468 const result = (
2469 // Step into the shadow DOM of the parent of a slotted node.
2470 node.assignedSlot || // DOM Element detected.
2471 node.parentNode || // ShadowRoot detected.
2472 isShadowRoot(node) && node.host || // Fallback.
2473 getDocumentElement(node)
2474 );
2475 return isShadowRoot(result) ? result.host : result;
2476 }
2477 function getNearestOverflowAncestor(node) {
2478 const parentNode = getParentNode(node);
2479 if (isLastTraversableNode(parentNode)) {
2480 return (node.ownerDocument || node).body;
2481 }
2482 if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {
2483 return parentNode;
2484 }
2485 return getNearestOverflowAncestor(parentNode);
2486 }
2487 function getOverflowAncestors(node, list, traverseIframes) {
2488 var _node$ownerDocument2;
2489 if (list === void 0) {
2490 list = [];
2491 }
2492 if (traverseIframes === void 0) {
2493 traverseIframes = true;
2494 }
2495 const scrollableAncestor = getNearestOverflowAncestor(node);
2496 const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);
2497 const win = getWindow(scrollableAncestor);
2498 if (isBody) {
2499 const frameElement = getFrameElement(win);
2500 return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);
2501 } else {
2502 return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));
2503 }
2504 }
2505 function getFrameElement(win) {
2506 return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;
2507 }
2508
2509 // node_modules/@base-ui/react/internals/composite/root/CompositeRootContext.mjs
2510 var React13 = __toESM(require_react(), 1);
2511 var CompositeRootContext = /* @__PURE__ */ React13.createContext(void 0);
2512 if (true) CompositeRootContext.displayName = "CompositeRootContext";
2513 function useCompositeRootContext(optional = false) {
2514 const context = React13.useContext(CompositeRootContext);
2515 if (context === void 0 && !optional) {
2516 throw new Error(true ? "Base UI: CompositeRootContext is missing. Composite parts must be placed within <Composite.Root>." : formatErrorMessage_default(16));
2517 }
2518 return context;
2519 }
2520
2521 // node_modules/@base-ui/react/utils/useFocusableWhenDisabled.mjs
2522 var React14 = __toESM(require_react(), 1);
2523 function useFocusableWhenDisabled(parameters) {
2524 const {
2525 focusableWhenDisabled,
2526 disabled: disabled2,
2527 composite = false,
2528 tabIndex: tabIndexProp = 0,
2529 isNativeButton
2530 } = parameters;
2531 const isFocusableComposite = composite && focusableWhenDisabled !== false;
2532 const isNonFocusableComposite = composite && focusableWhenDisabled === false;
2533 const props = React14.useMemo(() => {
2534 const additionalProps = {
2535 // allow Tabbing away from focusableWhenDisabled elements
2536 onKeyDown(event) {
2537 if (disabled2 && focusableWhenDisabled && event.key !== "Tab") {
2538 event.preventDefault();
2539 }
2540 }
2541 };
2542 if (!composite) {
2543 additionalProps.tabIndex = tabIndexProp;
2544 if (!isNativeButton && disabled2) {
2545 additionalProps.tabIndex = focusableWhenDisabled ? tabIndexProp : -1;
2546 }
2547 }
2548 if (isNativeButton && (focusableWhenDisabled || isFocusableComposite) || !isNativeButton && disabled2) {
2549 additionalProps["aria-disabled"] = disabled2;
2550 }
2551 if (isNativeButton && (!focusableWhenDisabled || isNonFocusableComposite)) {
2552 additionalProps.disabled = disabled2;
2553 }
2554 return additionalProps;
2555 }, [composite, disabled2, focusableWhenDisabled, isFocusableComposite, isNonFocusableComposite, isNativeButton, tabIndexProp]);
2556 return {
2557 props
2558 };
2559 }
2560
2561 // node_modules/@base-ui/utils/owner.mjs
2562 function ownerDocument(node) {
2563 return node?.ownerDocument || document;
2564 }
2565
2566 // node_modules/@base-ui/react/utils/dispatchClickWithModifiers.mjs
2567 function dispatchClickWithModifiers(target, sourceEvent, {
2568 detail = 0
2569 } = {}) {
2570 target.dispatchEvent(new (getWindow(target)).PointerEvent("click", {
2571 bubbles: true,
2572 cancelable: true,
2573 composed: true,
2574 detail,
2575 shiftKey: sourceEvent.shiftKey,
2576 ctrlKey: sourceEvent.ctrlKey,
2577 altKey: sourceEvent.altKey,
2578 metaKey: sourceEvent.metaKey
2579 }));
2580 }
2581
2582 // node_modules/@base-ui/react/internals/use-button/useButton.mjs
2583 function useButton(parameters = {}) {
2584 const {
2585 disabled: disabled2 = false,
2586 focusableWhenDisabled,
2587 tabIndex = 0,
2588 native: isNativeButton = true,
2589 composite: compositeProp
2590 } = parameters;
2591 const elementRef = React15.useRef(null);
2592 const compositeRootContext = useCompositeRootContext(true);
2593 const isCompositeItem = compositeProp ?? compositeRootContext !== void 0;
2594 const {
2595 props: focusableWhenDisabledProps
2596 } = useFocusableWhenDisabled({
2597 focusableWhenDisabled,
2598 disabled: disabled2,
2599 composite: isCompositeItem,
2600 tabIndex,
2601 isNativeButton
2602 });
2603 if (true) {
2604 React15.useEffect(() => {
2605 if (!elementRef.current) {
2606 return;
2607 }
2608 const isButtonTag = isButtonElement(elementRef.current);
2609 if (isNativeButton) {
2610 if (!isButtonTag) {
2611 const ownerStackMessage = SafeReact.captureOwnerStack?.() || "";
2612 const message = "A component that acts as a button expected a native <button> because the `nativeButton` prop is true. Rendering a non-<button> removes native button semantics, which can impact forms and accessibility. Use a real <button> in the `render` prop, or set `nativeButton` to `false`.";
2613 error(`${message}${ownerStackMessage}`);
2614 }
2615 } else if (isButtonTag) {
2616 const ownerStackMessage = SafeReact.captureOwnerStack?.() || "";
2617 const message = "A component that acts as a button expected a non-<button> because the `nativeButton` prop is false. Rendering a <button> keeps native behavior while Base UI applies non-native attributes and handlers, which can add unintended extra attributes (such as `role` or `aria-disabled`). Use a non-<button> in the `render` prop, or set `nativeButton` to `true`.";
2618 error(`${message}${ownerStackMessage}`);
2619 }
2620 }, [isNativeButton]);
2621 }
2622 const updateDisabled = React15.useCallback(() => {
2623 const element = elementRef.current;
2624 if (!isButtonElement(element)) {
2625 return;
2626 }
2627 if (isCompositeItem && disabled2 && focusableWhenDisabledProps.disabled === void 0 && element.disabled) {
2628 element.disabled = false;
2629 }
2630 }, [disabled2, focusableWhenDisabledProps.disabled, isCompositeItem]);
2631 useIsoLayoutEffect(updateDisabled, [updateDisabled]);
2632 const getButtonProps = React15.useCallback((externalProps = {}) => {
2633 const {
2634 onClick: externalOnClick,
2635 onMouseDown: externalOnMouseDown,
2636 onKeyUp: externalOnKeyUp,
2637 onKeyDown: externalOnKeyDown,
2638 onPointerDown: externalOnPointerDown,
2639 ...otherExternalProps
2640 } = externalProps;
2641 return mergeProps({
2642 onClick(event) {
2643 if (disabled2) {
2644 event.preventDefault();
2645 return;
2646 }
2647 externalOnClick?.(event);
2648 },
2649 onMouseDown(event) {
2650 if (!disabled2) {
2651 externalOnMouseDown?.(event);
2652 }
2653 },
2654 onKeyDown(event) {
2655 if (disabled2) {
2656 return;
2657 }
2658 makeEventPreventable(event);
2659 externalOnKeyDown?.(event);
2660 if (event.baseUIHandlerPrevented) {
2661 return;
2662 }
2663 const isCurrentTarget = event.target === event.currentTarget;
2664 const currentTarget = event.currentTarget;
2665 const isButton = isButtonElement(currentTarget);
2666 const isLink = !isNativeButton && isValidLinkElement(currentTarget);
2667 const shouldClick = isCurrentTarget && (isNativeButton ? isButton : !isLink);
2668 const isEnterKey = event.key === "Enter";
2669 const isSpaceKey = event.key === " ";
2670 const role = currentTarget.getAttribute("role");
2671 const isTextNavigationRole = role?.startsWith("menuitem") || role === "option" || role === "gridcell";
2672 if (isCurrentTarget && isCompositeItem && isSpaceKey) {
2673 if (event.defaultPrevented && isTextNavigationRole) {
2674 return;
2675 }
2676 event.preventDefault();
2677 if (!isNativeButton || isButton) {
2678 event.preventBaseUIHandler();
2679 dispatchClickWithModifiers(currentTarget, event);
2680 }
2681 return;
2682 }
2683 if (!shouldClick || isNativeButton || !isSpaceKey && !isEnterKey) {
2684 if (isCurrentTarget && isLink && isSpaceKey) {
2685 event.preventDefault();
2686 }
2687 return;
2688 }
2689 if (event.defaultPrevented) {
2690 return;
2691 }
2692 event.preventDefault();
2693 if (isEnterKey) {
2694 event.preventBaseUIHandler();
2695 dispatchClickWithModifiers(currentTarget, event);
2696 }
2697 },
2698 onKeyUp(event) {
2699 if (disabled2) {
2700 return;
2701 }
2702 makeEventPreventable(event);
2703 externalOnKeyUp?.(event);
2704 if (event.target === event.currentTarget && isNativeButton && isCompositeItem && isButtonElement(event.currentTarget) && event.key === " ") {
2705 event.preventDefault();
2706 return;
2707 }
2708 if (event.baseUIHandlerPrevented) {
2709 return;
2710 }
2711 if (event.target === event.currentTarget && !isNativeButton && !isCompositeItem && !event.defaultPrevented && event.key === " ") {
2712 event.preventBaseUIHandler();
2713 dispatchClickWithModifiers(event.currentTarget, event);
2714 }
2715 },
2716 onPointerDown(event) {
2717 if (disabled2) {
2718 event.preventDefault();
2719 return;
2720 }
2721 externalOnPointerDown?.(event);
2722 }
2723 }, isNativeButton ? {
2724 type: "button"
2725 } : {
2726 role: "button"
2727 }, focusableWhenDisabledProps, otherExternalProps);
2728 }, [disabled2, focusableWhenDisabledProps, isCompositeItem, isNativeButton]);
2729 const buttonRef = useStableCallback((element) => {
2730 elementRef.current = element;
2731 updateDisabled();
2732 });
2733 return {
2734 getButtonProps,
2735 buttonRef
2736 };
2737 }
2738 function isButtonElement(elem) {
2739 return isHTMLElement(elem) && elem.tagName === "BUTTON";
2740 }
2741 function isValidLinkElement(elem) {
2742 return isHTMLElement(elem) && elem.tagName === "A" && Boolean(elem.href);
2743 }
2744
2745 // node_modules/@base-ui/react/collapsible/panel/useCollapsiblePanel.mjs
2746 var React17 = __toESM(require_react(), 1);
2747
2748 // node_modules/@base-ui/utils/addEventListener.mjs
2749 function addEventListener(target, type, listener, options) {
2750 target.addEventListener(type, listener, options);
2751 return () => {
2752 target.removeEventListener(type, listener, options);
2753 };
2754 }
2755
2756 // node_modules/@base-ui/utils/useValueAsRef.mjs
2757 function useValueAsRef(value) {
2758 const latest = useRefWithInit(createLatestRef, value).current;
2759 latest.next = value;
2760 useIsoLayoutEffect(latest.effect);
2761 return latest;
2762 }
2763 function createLatestRef(value) {
2764 const latest = {
2765 current: value,
2766 next: value,
2767 effect: () => {
2768 latest.current = latest.next;
2769 }
2770 };
2771 return latest;
2772 }
2773
2774 // node_modules/@base-ui/react/internals/useOpenChangeComplete.mjs
2775 var React16 = __toESM(require_react(), 1);
2776
2777 // node_modules/@base-ui/react/internals/useAnimationsFinished.mjs
2778 var ReactDOM = __toESM(require_react_dom(), 1);
2779
2780 // node_modules/@base-ui/react/utils/resolveRef.mjs
2781 function resolveRef(maybeRef) {
2782 if (maybeRef == null) {
2783 return maybeRef;
2784 }
2785 return "current" in maybeRef ? maybeRef.current : maybeRef;
2786 }
2787
2788 // node_modules/@base-ui/react/internals/useAnimationsFinished.mjs
2789 var pendingCallbacks = null;
2790 function flushBeforePaint(fn) {
2791 if (!pendingCallbacks) {
2792 const callbacks = [];
2793 pendingCallbacks = callbacks;
2794 queueMicrotask(() => {
2795 pendingCallbacks = null;
2796 ReactDOM.flushSync(() => {
2797 for (const callback of callbacks) {
2798 callback();
2799 }
2800 });
2801 });
2802 }
2803 pendingCallbacks.push(fn);
2804 }
2805 function useAnimationsFinished(elementOrRef, waitForStartingStyleRemoved = false, batch = false) {
2806 const frame = useAnimationFrame();
2807 return useStableCallback((fnToExecute, signal = null) => {
2808 frame.cancel();
2809 const element = resolveRef(elementOrRef);
2810 if (element == null) {
2811 return;
2812 }
2813 const resolvedElement = element;
2814 const done = () => {
2815 if (!batch) {
2816 ReactDOM.flushSync(fnToExecute);
2817 return;
2818 }
2819 flushBeforePaint(() => {
2820 if (!signal?.aborted) {
2821 fnToExecute();
2822 }
2823 });
2824 };
2825 if (typeof resolvedElement.getAnimations !== "function" || globalThis.BASE_UI_ANIMATIONS_DISABLED) {
2826 fnToExecute();
2827 return;
2828 }
2829 function exec() {
2830 Promise.all(resolvedElement.getAnimations().map((animation) => animation.finished)).then(() => {
2831 if (!signal?.aborted) {
2832 done();
2833 }
2834 }, () => {
2835 if (signal?.aborted) {
2836 return;
2837 }
2838 const currentAnimations = resolvedElement.getAnimations();
2839 if (currentAnimations.some((animation) => animation.pending || animation.playState !== "finished")) {
2840 exec();
2841 return;
2842 }
2843 done();
2844 });
2845 }
2846 if (waitForStartingStyleRemoved) {
2847 const startingStyleAttribute = startingStyle;
2848 if (!resolvedElement.hasAttribute(startingStyleAttribute)) {
2849 frame.request(exec);
2850 return;
2851 }
2852 const attributeObserver = new MutationObserver(() => {
2853 if (!resolvedElement.hasAttribute(startingStyleAttribute)) {
2854 attributeObserver.disconnect();
2855 exec();
2856 }
2857 });
2858 attributeObserver.observe(resolvedElement, {
2859 attributes: true,
2860 attributeFilter: [startingStyleAttribute]
2861 });
2862 signal?.addEventListener("abort", () => attributeObserver.disconnect(), {
2863 once: true
2864 });
2865 return;
2866 }
2867 frame.request(exec);
2868 });
2869 }
2870
2871 // node_modules/@base-ui/react/internals/useOpenChangeComplete.mjs
2872 function useOpenChangeComplete(parameters) {
2873 const {
2874 enabled = true,
2875 open: open3,
2876 ref,
2877 batch = false,
2878 onComplete: onCompleteParam
2879 } = parameters;
2880 const onComplete = useStableCallback(onCompleteParam);
2881 const runOnceAnimationsFinish = useAnimationsFinished(ref, open3, batch);
2882 React16.useEffect(() => {
2883 if (!enabled) {
2884 return void 0;
2885 }
2886 const abortController = new AbortController();
2887 runOnceAnimationsFinish(onComplete, abortController.signal);
2888 return () => {
2889 abortController.abort();
2890 };
2891 }, [enabled, open3, onComplete, runOnceAnimationsFinish]);
2892 }
2893
2894 // node_modules/@base-ui/react/collapsible/panel/useCollapsiblePanel.mjs
2895 var EMPTY_DIMENSIONS = {
2896 height: void 0,
2897 width: void 0
2898 };
2899 function useCollapsiblePanel(parameters) {
2900 const {
2901 externalRef,
2902 hiddenUntilFound,
2903 id: idParam,
2904 keepMounted,
2905 mounted,
2906 onOpenChange,
2907 open: open3,
2908 setMounted,
2909 setOpen,
2910 transitionStatus
2911 } = parameters;
2912 const panelRef = React17.useRef(null);
2913 const animationTypeRef = React17.useRef(null);
2914 const [dimensions, setDimensionsUnwrapped] = React17.useState(EMPTY_DIMENSIONS);
2915 const lastMeasuredDimensionsRef = React17.useRef(EMPTY_DIMENSIONS);
2916 const shouldSkipNextOpenRef = React17.useRef(false);
2917 const shouldPreventMountAnimationRef = React17.useRef(open3);
2918 const shouldPreventActivityResumeAnimationRef = React17.useRef(false);
2919 const [forcePanelIdle, setForcePanelIdle] = React17.useState(false);
2920 const pendingTemporaryStyleRestoreRef = React17.useRef(null);
2921 const mergedPanelRef = useMergedRefs(externalRef, panelRef);
2922 const latestOpenRef = useValueAsRef(open3);
2923 const runOnceCloseAnimationsFinish = useAnimationsFinished(panelRef);
2924 const hidden = !open3 && !mounted;
2925 const panelTransitionStatus = forcePanelIdle ? "idle" : transitionStatus;
2926 const shouldPreventOpenAnimation = open3 && // These 2 refs are safe to read in render, they are only written from committed
2927 // layout/effect paths and gate one-shot motion suppression for the next open
2928 // lifecycle. They intentionally expose the last committed motion snapshot.
2929 (shouldPreventMountAnimationRef.current || shouldPreventActivityResumeAnimationRef.current);
2930 const renderedDimensions = !open3 && mounted && // These 2 refs are also safe to read in render, both hold the last committed
2931 // animation mode and measurement. This fallback only restores a previously
2932 // measured pixel size after the live dimensions state has been reset back to `auto`.
2933 animationTypeRef.current === "css-animation" && dimensions.height === void 0 && dimensions.width === void 0 ? lastMeasuredDimensionsRef.current : dimensions;
2934 const shouldPersistHiddenTransitionStyles = hiddenUntilFound && hidden && animationTypeRef.current !== "css-animation";
2935 const setDimensions = useStableCallback((nextDimensions, shouldCacheMeasurement = true) => {
2936 if (shouldCacheMeasurement) {
2937 lastMeasuredDimensionsRef.current = nextDimensions;
2938 }
2939 setDimensionsUnwrapped(nextDimensions);
2940 });
2941 const restorePendingTemporaryStyle = useStableCallback(() => {
2942 pendingTemporaryStyleRestoreRef.current?.();
2943 pendingTemporaryStyleRestoreRef.current = null;
2944 });
2945 const setPendingTemporaryStyleRestore = useStableCallback((restore) => {
2946 restorePendingTemporaryStyle();
2947 pendingTemporaryStyleRestoreRef.current = () => {
2948 pendingTemporaryStyleRestoreRef.current = null;
2949 restore();
2950 };
2951 });
2952 const markActivityResumeAnimationSuppressed = useStableCallback(() => {
2953 if (open3 && mounted && animationTypeRef.current === "css-animation") {
2954 shouldPreventActivityResumeAnimationRef.current = true;
2955 }
2956 });
2957 useIsoLayoutEffect(() => {
2958 if (!forcePanelIdle || transitionStatus === "starting") {
2959 return;
2960 }
2961 setForcePanelIdle(false);
2962 }, [forcePanelIdle, transitionStatus]);
2963 React17.useEffect(() => {
2964 return () => {
2965 markActivityResumeAnimationSuppressed();
2966 restorePendingTemporaryStyle();
2967 };
2968 }, [markActivityResumeAnimationSuppressed, restorePendingTemporaryStyle]);
2969 useIsoLayoutEffect(() => {
2970 const panel = panelRef.current;
2971 if (!panel) {
2972 return void 0;
2973 }
2974 if (!open3 && pendingTemporaryStyleRestoreRef.current) {
2975 restorePendingTemporaryStyle();
2976 }
2977 const animationType = getAnimationType(panel, shouldPreventOpenAnimation);
2978 animationTypeRef.current = animationType;
2979 if (open3 && transitionStatus === "idle" && shouldPreventMountAnimationRef.current && animationType === "css-animation") {
2980 lastMeasuredDimensionsRef.current = getDimensions(panel);
2981 return void 0;
2982 }
2983 if (open3 && transitionStatus === "starting") {
2984 const skipNextOpen = shouldSkipNextOpenRef.current;
2985 shouldSkipNextOpenRef.current = false;
2986 if (animationType === "none") {
2987 setDimensions(getDimensions(panel));
2988 setForcePanelIdle(true);
2989 return void 0;
2990 }
2991 if (animationType === "css-transition") {
2992 const restoreLayoutStyles = resetLayoutStyles(panel);
2993 setDimensions(getDimensions(panel));
2994 if (!skipNextOpen) {
2995 return restoreLayoutStyles;
2996 }
2997 const restoreTransitionDuration = setTemporaryStyle(panel, "transition-duration", "0s");
2998 setPendingTemporaryStyleRestore(restoreTransitionDuration);
2999 setForcePanelIdle(true);
3000 return restoreLayoutStyles;
3001 }
3002 setDimensions(getDimensions(panel));
3003 const restoreAnimationName = setTemporaryStyle(panel, "animation-name", "none");
3004 if (!skipNextOpen) {
3005 restoreAnimationName();
3006 return void 0;
3007 }
3008 const restoreAnimationDuration = setTemporaryStyle(panel, "animation-duration", "0s");
3009 restoreAnimationName();
3010 setPendingTemporaryStyleRestore(restoreAnimationDuration);
3011 setForcePanelIdle(true);
3012 return void 0;
3013 }
3014 if (!open3 && mounted && (transitionStatus === "idle" || transitionStatus === "starting")) {
3015 shouldPreventMountAnimationRef.current = false;
3016 shouldPreventActivityResumeAnimationRef.current = false;
3017 if (animationType === "none") {
3018 setDimensions(EMPTY_DIMENSIONS, false);
3019 setMounted(false);
3020 return void 0;
3021 }
3022 setDimensions(getDimensions(panel));
3023 return void 0;
3024 }
3025 if (transitionStatus !== "ending") {
3026 return void 0;
3027 }
3028 if (animationType === "none") {
3029 setMounted(false);
3030 return void 0;
3031 }
3032 const nextDimensions = getDimensions(panel);
3033 const hasMeasuredSize = nextDimensions.height > 0 || nextDimensions.width > 0;
3034 if (!hasMeasuredSize) {
3035 setMounted(false);
3036 return void 0;
3037 }
3038 setDimensions(nextDimensions);
3039 if (animationType === "css-animation") {
3040 const restoreAnimationName = setTemporaryStyle(panel, "animation-name", "none");
3041 restoreAnimationName();
3042 }
3043 return void 0;
3044 }, [mounted, open3, restorePendingTemporaryStyle, setDimensions, setMounted, setPendingTemporaryStyleRestore, shouldPreventOpenAnimation, transitionStatus]);
3045 useOpenChangeComplete({
3046 enabled: open3 && mounted && panelTransitionStatus === "idle",
3047 open: true,
3048 ref: panelRef,
3049 onComplete() {
3050 if (!open3) {
3051 return;
3052 }
3053 setDimensions(EMPTY_DIMENSIONS, false);
3054 }
3055 });
3056 React17.useEffect(() => {
3057 if (open3 || !mounted || panelTransitionStatus !== "ending") {
3058 return void 0;
3059 }
3060 const panel = panelRef.current;
3061 if (!panel) {
3062 return void 0;
3063 }
3064 const abortController = new AbortController();
3065 let endingStyleFrame = -1;
3066 function handleComplete() {
3067 if (latestOpenRef.current) {
3068 return;
3069 }
3070 setMounted(false);
3071 setDimensions(EMPTY_DIMENSIONS, false);
3072 }
3073 endingStyleFrame = AnimationFrame.request(() => {
3074 runOnceCloseAnimationsFinish(handleComplete, abortController.signal);
3075 });
3076 return () => {
3077 AnimationFrame.cancel(endingStyleFrame);
3078 abortController.abort();
3079 };
3080 }, [latestOpenRef, mounted, open3, panelTransitionStatus, runOnceCloseAnimationsFinish, setDimensions, setMounted]);
3081 useIsoLayoutEffect(() => {
3082 const panel = panelRef.current;
3083 if (!panel || !hiddenUntilFound || !hidden) {
3084 return;
3085 }
3086 panel.setAttribute("hidden", "until-found");
3087 }, [hidden, hiddenUntilFound]);
3088 React17.useEffect(function registerBeforeMatchListener() {
3089 const panel = panelRef.current;
3090 if (!panel) {
3091 return void 0;
3092 }
3093 function handleBeforeMatch(event) {
3094 const eventDetails = createChangeEventDetails(reason_parts_exports.none, event);
3095 onOpenChange(true, eventDetails);
3096 if (eventDetails.isCanceled) {
3097 return;
3098 }
3099 shouldSkipNextOpenRef.current = true;
3100 setOpen(true);
3101 }
3102 return addEventListener(panel, "beforematch", handleBeforeMatch);
3103 }, [onOpenChange, setOpen]);
3104 const shouldRender = keepMounted || hiddenUntilFound || mounted || open3;
3105 return {
3106 height: renderedDimensions.height,
3107 props: {
3108 ...shouldPersistHiddenTransitionStyles ? {
3109 [startingStyle2]: ""
3110 } : void 0,
3111 hidden,
3112 id: idParam
3113 },
3114 ref: mergedPanelRef,
3115 shouldPreventOpenAnimation,
3116 shouldRender,
3117 transitionStatus: panelTransitionStatus,
3118 width: renderedDimensions.width
3119 };
3120 }
3121 function getDimensions(element) {
3122 return {
3123 height: element.scrollHeight,
3124 width: element.scrollWidth
3125 };
3126 }
3127 function getAnimationType(element, hasSuppressedMountAnimation) {
3128 const panelStyles = getWindow(element).getComputedStyle(element);
3129 const hasAnimation = (panelStyles.animationName.split(",").map((name2) => name2.trim()).some((name2) => name2 !== "" && name2 !== "none") || hasSuppressedMountAnimation) && hasNonZeroDuration(panelStyles.animationDuration);
3130 const hasTransition = hasNonZeroDuration(panelStyles.transitionDuration);
3131 if (hasAnimation && hasTransition) {
3132 if (true) {
3133 warn("CSS transitions and CSS animations both detected on Collapsible or Accordion panel.", "Only one of either animation type should be used.");
3134 }
3135 return "css-transition";
3136 }
3137 if (hasTransition) {
3138 return "css-transition";
3139 }
3140 if (hasAnimation) {
3141 return "css-animation";
3142 }
3143 return "none";
3144 }
3145 function hasNonZeroDuration(value) {
3146 return value.split(",").map((part) => part.trim()).some((part) => part !== "" && Number.parseFloat(part) > 0);
3147 }
3148 function setTemporaryStyle(element, property, value) {
3149 const previousValue = element.style.getPropertyValue(property);
3150 const previousPriority = element.style.getPropertyPriority(property);
3151 element.style.setProperty(property, value);
3152 return () => {
3153 if (previousValue === "") {
3154 element.style.removeProperty(property);
3155 return;
3156 }
3157 element.style.setProperty(property, previousValue, previousPriority);
3158 };
3159 }
3160 function resetLayoutStyles(element) {
3161 const originalLayoutStyles = {
3162 "justify-content": element.style.justifyContent,
3163 "align-items": element.style.alignItems,
3164 "align-content": element.style.alignContent,
3165 "justify-items": element.style.justifyItems
3166 };
3167 Object.keys(originalLayoutStyles).forEach((key) => {
3168 element.style.setProperty(key, "initial", "important");
3169 });
3170 function restoreLayoutStyles() {
3171 Object.entries(originalLayoutStyles).forEach(([key, value]) => {
3172 if (value === "") {
3173 element.style.removeProperty(key);
3174 return;
3175 }
3176 element.style.setProperty(key, value);
3177 });
3178 }
3179 const frame = AnimationFrame.request(restoreLayoutStyles);
3180 return () => {
3181 AnimationFrame.cancel(frame);
3182 restoreLayoutStyles();
3183 };
3184 }
3185
3186 // node_modules/@base-ui/utils/platform/parts.mjs
3187 var parts_exports = {};
3188 __export(parts_exports, {
3189 engine: () => engine_exports,
3190 env: () => env_exports,
3191 mediaQuery: () => media_query_exports,
3192 os: () => os_exports,
3193 screenReader: () => screen_reader_exports
3194 });
3195
3196 // node_modules/@base-ui/utils/platform/os.mjs
3197 var os_exports = {};
3198 __export(os_exports, {
3199 android: () => android,
3200 apple: () => apple,
3201 ios: () => ios,
3202 linux: () => linux,
3203 mac: () => mac,
3204 windows: () => windows
3205 });
3206
3207 // node_modules/@base-ui/utils/platform/shared.mjs
3208 function readRawData() {
3209 if (typeof navigator === "undefined") {
3210 return {
3211 userAgent: "",
3212 platform: "",
3213 maxTouchPoints: 0
3214 };
3215 }
3216 if (true) {
3217 const uaData = navigator.userAgentData;
3218 if (uaData && Array.isArray(uaData.brands)) {
3219 return {
3220 userAgent: uaData.brands.map(({
3221 brand,
3222 version: version2
3223 }) => `${brand}/${version2}`).join(" "),
3224 platform: uaData.platform ?? navigator.platform ?? "",
3225 maxTouchPoints: navigator.maxTouchPoints ?? 0
3226 };
3227 }
3228 }
3229 return {
3230 userAgent: navigator.userAgent,
3231 platform: navigator.platform ?? "",
3232 maxTouchPoints: navigator.maxTouchPoints ?? 0
3233 };
3234 }
3235 var {
3236 userAgent,
3237 platform,
3238 maxTouchPoints
3239 } = readRawData();
3240 var lowerUserAgent = userAgent.toLowerCase();
3241 var lowerPlatform = platform.toLowerCase();
3242
3243 // node_modules/@base-ui/utils/platform/os.mjs
3244 var ios = /^i(os$|p)/.test(lowerPlatform) || lowerPlatform === "macintel" && maxTouchPoints > 1;
3245 var ANDROID_STRING = "android";
3246 var android = lowerPlatform === ANDROID_STRING || lowerUserAgent.includes(ANDROID_STRING);
3247 var mac = !ios && lowerPlatform.startsWith("mac");
3248 var windows = lowerPlatform.startsWith("win");
3249 var linux = !android && /^(linux|chrome os)/.test(lowerPlatform);
3250 var apple = mac || ios;
3251
3252 // node_modules/@base-ui/utils/platform/engine.mjs
3253 var engine_exports = {};
3254 __export(engine_exports, {
3255 blink: () => blink,
3256 gecko: () => gecko,
3257 webkit: () => webkit
3258 });
3259 var webkit = typeof CSS !== "undefined" && !!CSS.supports?.("-webkit-backdrop-filter:none");
3260 var gecko = !webkit && lowerUserAgent.includes("firefox");
3261 var blink = !webkit && lowerUserAgent.includes("chrom");
3262
3263 // node_modules/@base-ui/utils/platform/screen-reader.mjs
3264 var screen_reader_exports = {};
3265 __export(screen_reader_exports, {
3266 voiceOver: () => voiceOver
3267 });
3268 var voiceOver = apple;
3269
3270 // node_modules/@base-ui/utils/platform/env.mjs
3271 var env_exports = {};
3272 __export(env_exports, {
3273 jsdom: () => jsdom
3274 });
3275 var jsdom = /jsdom|happydom/.test(lowerUserAgent);
3276
3277 // node_modules/@base-ui/utils/platform/media-query.mjs
3278 var media_query_exports = {};
3279 __export(media_query_exports, {
3280 iOS: () => iOS
3281 });
3282 var iOS = "@supports (-webkit-touch-callout: none)";
3283
3284 // node_modules/@base-ui/utils/useTimeout.mjs
3285 var EMPTY2 = 0;
3286 var Timeout = class _Timeout {
3287 static create() {
3288 return new _Timeout();
3289 }
3290 currentId = EMPTY2;
3291 /**
3292 * Executes `fn` after `delay`, clearing any previously scheduled call.
3293 */
3294 start(delay, fn) {
3295 this.clear();
3296 this.currentId = setTimeout(() => {
3297 this.currentId = EMPTY2;
3298 fn();
3299 }, delay);
3300 }
3301 isStarted() {
3302 return this.currentId !== EMPTY2;
3303 }
3304 clear = () => {
3305 if (this.currentId !== EMPTY2) {
3306 clearTimeout(this.currentId);
3307 this.currentId = EMPTY2;
3308 }
3309 };
3310 disposeEffect = () => {
3311 return this.clear;
3312 };
3313 };
3314 function useTimeout() {
3315 const timeout = useRefWithInit(Timeout.create).current;
3316 useOnMount(timeout.disposeEffect);
3317 return timeout;
3318 }
3319
3320 // node_modules/@base-ui/react/floating-ui-react/components/FloatingDelayGroup.mjs
3321 var React18 = __toESM(require_react(), 1);
3322
3323 // node_modules/@base-ui/react/floating-ui-react/utils/event.mjs
3324 function isReactEvent(event) {
3325 return "nativeEvent" in event;
3326 }
3327 function isVirtualClick(event) {
3328 if (event.pointerType === "" && event.isTrusted) {
3329 return true;
3330 }
3331 if (parts_exports.os.android && event.pointerType) {
3332 return event.type === "click" && event.buttons === 1;
3333 }
3334 return event.detail === 0 && !event.pointerType;
3335 }
3336 function isMouseLikePointerType(pointerType, strict) {
3337 const values = ["mouse", "pen"];
3338 if (!strict) {
3339 values.push("", void 0);
3340 }
3341 return values.includes(pointerType);
3342 }
3343 function isClickLikeEvent(event) {
3344 const type = event.type;
3345 return type === "click" || type === "mousedown" || type === "keydown" || type === "keyup";
3346 }
3347
3348 // node_modules/@base-ui/utils/shadowDom.mjs
3349 function activeElement(doc) {
3350 let element = doc.activeElement;
3351 while (element?.shadowRoot?.activeElement != null) {
3352 element = element.shadowRoot.activeElement;
3353 }
3354 return element;
3355 }
3356 function contains(parent, child) {
3357 if (!parent || !child) {
3358 return false;
3359 }
3360 const rootNode = child.getRootNode?.();
3361 if (parent.contains(child)) {
3362 return true;
3363 }
3364 if (rootNode && isShadowRoot(rootNode)) {
3365 let next = child;
3366 while (next) {
3367 if (parent === next) {
3368 return true;
3369 }
3370 next = next.parentNode || next.host;
3371 }
3372 }
3373 return false;
3374 }
3375 function getTarget(event) {
3376 if ("composedPath" in event) {
3377 return event.composedPath()[0] ?? event.target;
3378 }
3379 return event.target;
3380 }
3381
3382 // node_modules/@base-ui/react/floating-ui-react/utils/constants.mjs
3383 var FOCUSABLE_ATTRIBUTE = "data-base-ui-focusable";
3384 var TYPEABLE_SELECTOR = "input:not([type='hidden']):not([disabled]),[contenteditable]:not([contenteditable='false']),textarea:not([disabled])";
3385
3386 // node_modules/@base-ui/react/utils/CommonPopupDataAttributes.mjs
3387 var open2 = "data-open";
3388 var closed2 = "data-closed";
3389 var anchorHidden = "data-anchor-hidden";
3390
3391 // node_modules/@base-ui/react/utils/CommonTriggerDataAttributes.mjs
3392 var CommonTriggerDataAttributes_exports = {};
3393 __export(CommonTriggerDataAttributes_exports, {
3394 popupOpen: () => popupOpen,
3395 pressed: () => pressed
3396 });
3397 var popupOpen = "data-popup-open";
3398 var pressed = "data-pressed";
3399
3400 // node_modules/@base-ui/react/utils/popupStateMapping.mjs
3401 var TRIGGER_HOOK = {
3402 [popupOpen]: ""
3403 };
3404 var PRESSABLE_TRIGGER_HOOK = {
3405 [popupOpen]: "",
3406 [pressed]: ""
3407 };
3408 var POPUP_OPEN_HOOK = {
3409 [open2]: ""
3410 };
3411 var POPUP_CLOSED_HOOK = {
3412 [closed2]: ""
3413 };
3414 var ANCHOR_HIDDEN_HOOK = {
3415 [anchorHidden]: ""
3416 };
3417 var triggerOpenStateMapping2 = {
3418 open(value) {
3419 if (value) {
3420 return TRIGGER_HOOK;
3421 }
3422 return null;
3423 }
3424 };
3425 var popupStateMapping = {
3426 open(value) {
3427 if (value) {
3428 return POPUP_OPEN_HOOK;
3429 }
3430 return POPUP_CLOSED_HOOK;
3431 },
3432 anchorHidden(value) {
3433 if (value) {
3434 return ANCHOR_HIDDEN_HOOK;
3435 }
3436 return null;
3437 }
3438 };
3439 var popupTransitionStateMapping = {
3440 ...popupStateMapping,
3441 ...transitionStatusMapping
3442 };
3443
3444 // node_modules/@base-ui/react/tooltip/trigger/TooltipTriggerDataAttributes.mjs
3445 var popupOpen2 = CommonTriggerDataAttributes_exports.popupOpen;
3446 var triggerDisabled = "data-trigger-disabled";
3447
3448 // node_modules/@base-ui/react/floating-ui-react/utils/element.mjs
3449 function isTargetInsideEnabledTrigger(target, triggerElements) {
3450 if (!isElement(target)) {
3451 return false;
3452 }
3453 const targetElement = target;
3454 if (triggerElements.hasElement(targetElement)) {
3455 return !targetElement.hasAttribute(triggerDisabled);
3456 }
3457 for (const [, trigger] of triggerElements.entries()) {
3458 if (contains(trigger, targetElement)) {
3459 return !trigger.hasAttribute(triggerDisabled);
3460 }
3461 }
3462 return false;
3463 }
3464 function isEventTargetWithin(event, node) {
3465 if (node == null) {
3466 return false;
3467 }
3468 if ("composedPath" in event) {
3469 return event.composedPath().includes(node);
3470 }
3471 const eventAgain = event;
3472 return eventAgain.target != null && node.contains(eventAgain.target);
3473 }
3474 function isRootElement(element) {
3475 return element.matches("html,body");
3476 }
3477 function isTypeableElement(element) {
3478 return isHTMLElement(element) && element.matches(TYPEABLE_SELECTOR);
3479 }
3480 function isInteractiveElement(element) {
3481 return element?.closest(`button,a[href],[role="button"],select,[tabindex]:not([tabindex="-1"]),${TYPEABLE_SELECTOR}`) != null;
3482 }
3483 function matchesFocusVisible(element) {
3484 if (!element || parts_exports.env.jsdom) {
3485 return true;
3486 }
3487 try {
3488 return element.matches(":focus-visible");
3489 } catch (_e) {
3490 return true;
3491 }
3492 }
3493
3494 // node_modules/@base-ui/react/floating-ui-react/hooks/useHoverShared.mjs
3495 function resolveValue(value, pointerType) {
3496 if (pointerType != null && !isMouseLikePointerType(pointerType)) {
3497 return 0;
3498 }
3499 if (typeof value === "function") {
3500 return value();
3501 }
3502 return value;
3503 }
3504 function getDelay(value, prop, pointerType) {
3505 const result = resolveValue(value, pointerType);
3506 if (typeof result === "number") {
3507 return result;
3508 }
3509 return result?.[prop];
3510 }
3511 function getRestMs(value) {
3512 if (typeof value === "function") {
3513 return value();
3514 }
3515 return value;
3516 }
3517 function isClickLikeOpenEvent(openEventType, interactedInside) {
3518 return interactedInside || openEventType === "click" || openEventType === "mousedown";
3519 }
3520 function isHoverOpenEvent(openEventType) {
3521 return openEventType?.includes("mouse") && openEventType !== "mousedown";
3522 }
3523
3524 // node_modules/@base-ui/react/floating-ui-react/components/FloatingDelayGroup.mjs
3525 var import_jsx_runtime25 = __toESM(require_jsx_runtime(), 1);
3526 var FloatingDelayGroupContext = /* @__PURE__ */ React18.createContext({
3527 hasProvider: false,
3528 timeoutMs: 0,
3529 delayRef: {
3530 current: 0
3531 },
3532 initialDelayRef: {
3533 current: 0
3534 },
3535 timeout: new Timeout(),
3536 currentIdRef: {
3537 current: null
3538 },
3539 currentContextRef: {
3540 current: null
3541 }
3542 });
3543 if (true) FloatingDelayGroupContext.displayName = "FloatingDelayGroupContext";
3544 function resetDelayRef(delayRef, initialDelayRef) {
3545 delayRef.current = initialDelayRef.current;
3546 }
3547 function FloatingDelayGroup(props) {
3548 const {
3549 children,
3550 delay,
3551 timeoutMs = 0
3552 } = props;
3553 const delayRef = React18.useRef(delay);
3554 const initialDelayRef = React18.useRef(delay);
3555 const currentIdRef = React18.useRef(null);
3556 const currentContextRef = React18.useRef(null);
3557 const timeout = useTimeout();
3558 useIsoLayoutEffect(() => {
3559 initialDelayRef.current = delay;
3560 if (!currentIdRef.current) {
3561 delayRef.current = delay;
3562 return;
3563 }
3564 delayRef.current = {
3565 open: getDelay(delayRef.current, "open"),
3566 close: getDelay(delay, "close")
3567 };
3568 }, [delay, currentIdRef, delayRef, initialDelayRef]);
3569 return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(FloatingDelayGroupContext.Provider, {
3570 value: React18.useMemo(() => ({
3571 hasProvider: true,
3572 delayRef,
3573 initialDelayRef,
3574 currentIdRef,
3575 timeoutMs,
3576 currentContextRef,
3577 timeout
3578 }), [timeoutMs, timeout]),
3579 children
3580 });
3581 }
3582 function useDelayGroup(context, options = {
3583 open: false
3584 }) {
3585 const {
3586 open: open3
3587 } = options;
3588 const store3 = "rootStore" in context ? context.rootStore : context;
3589 const floatingId = store3.useState("floatingId");
3590 const groupContext = React18.useContext(FloatingDelayGroupContext);
3591 const {
3592 currentIdRef,
3593 delayRef,
3594 timeoutMs,
3595 initialDelayRef,
3596 currentContextRef,
3597 hasProvider,
3598 timeout
3599 } = groupContext;
3600 const [isInstantPhase, setIsInstantPhase] = React18.useState(false);
3601 const openRef = React18.useRef(open3);
3602 useIsoLayoutEffect(() => {
3603 openRef.current = open3;
3604 }, [open3]);
3605 useIsoLayoutEffect(() => {
3606 function unset() {
3607 currentContextRef.current?.setIsInstantPhase(false);
3608 currentIdRef.current = null;
3609 currentContextRef.current = null;
3610 delayRef.current = initialDelayRef.current;
3611 timeout.clear();
3612 }
3613 if (!currentIdRef.current) {
3614 return void 0;
3615 }
3616 if (!open3 && currentIdRef.current === floatingId) {
3617 setIsInstantPhase(false);
3618 if (timeoutMs) {
3619 const closingId = floatingId;
3620 timeout.start(timeoutMs, () => {
3621 if (store3.select("open") || currentIdRef.current && currentIdRef.current !== closingId) {
3622 return;
3623 }
3624 unset();
3625 });
3626 return () => {
3627 if (openRef.current || currentIdRef.current !== closingId) {
3628 timeout.clear();
3629 }
3630 };
3631 }
3632 unset();
3633 }
3634 return void 0;
3635 }, [open3, floatingId, currentIdRef, delayRef, timeoutMs, initialDelayRef, currentContextRef, timeout, store3]);
3636 useIsoLayoutEffect(() => {
3637 if (!open3) {
3638 return;
3639 }
3640 const prevContext = currentContextRef.current;
3641 const prevId = currentIdRef.current;
3642 timeout.clear();
3643 currentContextRef.current = {
3644 onOpenChange: store3.setOpen,
3645 setIsInstantPhase
3646 };
3647 currentIdRef.current = floatingId;
3648 delayRef.current = {
3649 open: 0,
3650 close: getDelay(initialDelayRef.current, "close")
3651 };
3652 if (prevId !== null && prevId !== floatingId) {
3653 setIsInstantPhase(true);
3654 prevContext?.setIsInstantPhase(true);
3655 prevContext?.onOpenChange(false, createChangeEventDetails(reason_parts_exports.none));
3656 } else {
3657 setIsInstantPhase(false);
3658 prevContext?.setIsInstantPhase(false);
3659 }
3660 }, [open3, floatingId, store3, currentIdRef, delayRef, initialDelayRef, currentContextRef, timeout]);
3661 useIsoLayoutEffect(() => {
3662 return () => {
3663 if (currentIdRef.current === floatingId) {
3664 currentContextRef.current = null;
3665 if (!openRef.current) {
3666 return;
3667 }
3668 currentIdRef.current = null;
3669 resetDelayRef(delayRef, initialDelayRef);
3670 timeout.clear();
3671 }
3672 };
3673 }, [currentContextRef, currentIdRef, delayRef, floatingId, initialDelayRef, timeout]);
3674 return React18.useMemo(() => ({
3675 activeIdRef: currentIdRef,
3676 hasProvider,
3677 delayRef,
3678 isInstantPhase
3679 }), [currentIdRef, hasProvider, delayRef, isInstantPhase]);
3680 }
3681
3682 // node_modules/@base-ui/utils/mergeCleanups.mjs
3683 function mergeCleanups(...cleanups) {
3684 return () => {
3685 for (let i = 0; i < cleanups.length; i += 1) {
3686 const cleanup = cleanups[i];
3687 if (cleanup) {
3688 cleanup();
3689 }
3690 }
3691 };
3692 }
3693
3694 // node_modules/@base-ui/react/utils/FocusGuard.mjs
3695 var React19 = __toESM(require_react(), 1);
3696
3697 // node_modules/@base-ui/utils/visuallyHidden.mjs
3698 var visuallyHiddenBase = {
3699 clipPath: "inset(50%)",
3700 overflow: "hidden",
3701 whiteSpace: "nowrap",
3702 border: 0,
3703 padding: 0,
3704 width: 1,
3705 height: 1,
3706 margin: -1
3707 };
3708 var visuallyHidden = {
3709 ...visuallyHiddenBase,
3710 position: "fixed",
3711 top: 0,
3712 left: 0
3713 };
3714 var visuallyHiddenInput = {
3715 ...visuallyHiddenBase,
3716 position: "absolute"
3717 };
3718
3719 // node_modules/@base-ui/react/utils/FocusGuard.mjs
3720 var import_jsx_runtime26 = __toESM(require_jsx_runtime(), 1);
3721 var FocusGuard = /* @__PURE__ */ React19.forwardRef(function FocusGuard2(props, ref) {
3722 const [role, setRole] = React19.useState();
3723 useIsoLayoutEffect(() => {
3724 if (parts_exports.screenReader.voiceOver && parts_exports.engine.webkit) {
3725 setRole("button");
3726 }
3727 }, []);
3728 const restProps = {
3729 tabIndex: 0,
3730 // Role is only for VoiceOver
3731 role
3732 };
3733 return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", {
3734 ...props,
3735 ref,
3736 style: visuallyHidden,
3737 "aria-hidden": role ? void 0 : true,
3738 ...restProps,
3739 "data-base-ui-focus-guard": ""
3740 });
3741 });
3742 if (true) FocusGuard.displayName = "FocusGuard";
3743
3744 // node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs
3745 var min = Math.min;
3746 var max = Math.max;
3747 var round = Math.round;
3748 var floor = Math.floor;
3749 var createCoords = (v) => ({
3750 x: v,
3751 y: v
3752 });
3753 var oppositeSideMap = {
3754 left: "right",
3755 right: "left",
3756 bottom: "top",
3757 top: "bottom"
3758 };
3759 function clamp(start, value, end) {
3760 return max(start, min(value, end));
3761 }
3762 function evaluate(value, param) {
3763 return typeof value === "function" ? value(param) : value;
3764 }
3765 function getSide(placement) {
3766 return placement.split("-")[0];
3767 }
3768 function getAlignment(placement) {
3769 return placement.split("-")[1];
3770 }
3771 function getOppositeAxis(axis) {
3772 return axis === "x" ? "y" : "x";
3773 }
3774 function getAxisLength(axis) {
3775 return axis === "y" ? "height" : "width";
3776 }
3777 function getSideAxis(placement) {
3778 const firstChar = placement[0];
3779 return firstChar === "t" || firstChar === "b" ? "y" : "x";
3780 }
3781 function getAlignmentAxis(placement) {
3782 return getOppositeAxis(getSideAxis(placement));
3783 }
3784 function getAlignmentSides(placement, rects, rtl) {
3785 if (rtl === void 0) {
3786 rtl = false;
3787 }
3788 const alignment = getAlignment(placement);
3789 const alignmentAxis = getAlignmentAxis(placement);
3790 const length = getAxisLength(alignmentAxis);
3791 let mainAlignmentSide = alignmentAxis === "x" ? alignment === (rtl ? "end" : "start") ? "right" : "left" : alignment === "start" ? "bottom" : "top";
3792 if (rects.reference[length] > rects.floating[length]) {
3793 mainAlignmentSide = getOppositePlacement(mainAlignmentSide);
3794 }
3795 return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];
3796 }
3797 function getExpandedPlacements(placement) {
3798 const oppositePlacement = getOppositePlacement(placement);
3799 return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];
3800 }
3801 function getOppositeAlignmentPlacement(placement) {
3802 return placement.includes("start") ? placement.replace("start", "end") : placement.replace("end", "start");
3803 }
3804 var lrPlacement = ["left", "right"];
3805 var rlPlacement = ["right", "left"];
3806 var tbPlacement = ["top", "bottom"];
3807 var btPlacement = ["bottom", "top"];
3808 function getSideList(side, isStart, rtl) {
3809 switch (side) {
3810 case "top":
3811 case "bottom":
3812 if (rtl) return isStart ? rlPlacement : lrPlacement;
3813 return isStart ? lrPlacement : rlPlacement;
3814 case "left":
3815 case "right":
3816 return isStart ? tbPlacement : btPlacement;
3817 default:
3818 return [];
3819 }
3820 }
3821 function getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {
3822 const alignment = getAlignment(placement);
3823 let list = getSideList(getSide(placement), direction === "start", rtl);
3824 if (alignment) {
3825 list = list.map((side) => side + "-" + alignment);
3826 if (flipAlignment) {
3827 list = list.concat(list.map(getOppositeAlignmentPlacement));
3828 }
3829 }
3830 return list;
3831 }
3832 function getOppositePlacement(placement) {
3833 const side = getSide(placement);
3834 return oppositeSideMap[side] + placement.slice(side.length);
3835 }
3836 function expandPaddingObject(padding) {
3837 var _padding$top, _padding$right, _padding$bottom, _padding$left;
3838 return {
3839 top: (_padding$top = padding.top) != null ? _padding$top : 0,
3840 right: (_padding$right = padding.right) != null ? _padding$right : 0,
3841 bottom: (_padding$bottom = padding.bottom) != null ? _padding$bottom : 0,
3842 left: (_padding$left = padding.left) != null ? _padding$left : 0
3843 };
3844 }
3845 function getPaddingObject(padding) {
3846 return typeof padding !== "number" ? expandPaddingObject(padding) : {
3847 top: padding,
3848 right: padding,
3849 bottom: padding,
3850 left: padding
3851 };
3852 }
3853 function rectToClientRect(rect) {
3854 const {
3855 x,
3856 y,
3857 width,
3858 height
3859 } = rect;
3860 return {
3861 width,
3862 height,
3863 top: y,
3864 left: x,
3865 right: x + width,
3866 bottom: y + height,
3867 x,
3868 y
3869 };
3870 }
3871
3872 // node_modules/@base-ui/react/floating-ui-react/utils/composite.mjs
3873 function isHiddenByStyles(styles) {
3874 return styles.visibility === "hidden" || styles.visibility === "collapse";
3875 }
3876 function isElementVisible(element, styles = element ? getComputedStyle2(element) : null) {
3877 if (!element || !element.isConnected || !styles || isHiddenByStyles(styles)) {
3878 return false;
3879 }
3880 if (typeof element.checkVisibility === "function") {
3881 return element.checkVisibility();
3882 }
3883 return styles.display !== "none" && styles.display !== "contents";
3884 }
3885
3886 // node_modules/@base-ui/react/floating-ui-react/utils/tabbable.mjs
3887 var CANDIDATE_SELECTOR = 'a[href],button,input,select,textarea,summary,details,iframe,object,embed,[tabindex],[contenteditable]:not([contenteditable="false"]),audio[controls],video[controls]';
3888 function getParentElement(element) {
3889 const assignedSlot = element.assignedSlot;
3890 if (assignedSlot) {
3891 return assignedSlot;
3892 }
3893 if (element.parentElement) {
3894 return element.parentElement;
3895 }
3896 const rootNode = element.getRootNode();
3897 return isShadowRoot(rootNode) ? rootNode.host : null;
3898 }
3899 function getDetailsSummary(details) {
3900 for (const child of Array.from(details.children)) {
3901 if (getNodeName(child) === "summary") {
3902 return child;
3903 }
3904 }
3905 return null;
3906 }
3907 function isWithinOpenDetailsSummary(element, details) {
3908 const summary = getDetailsSummary(details);
3909 return !!summary && (element === summary || contains(summary, element));
3910 }
3911 function isFocusableCandidate(element) {
3912 const nodeName = element ? getNodeName(element) : "";
3913 return element != null && element.matches(CANDIDATE_SELECTOR) && (nodeName !== "summary" || element.parentElement != null && getNodeName(element.parentElement) === "details" && getDetailsSummary(element.parentElement) === element) && (nodeName !== "details" || getDetailsSummary(element) == null) && (nodeName !== "input" || element.type !== "hidden");
3914 }
3915 function isFocusableElement(element) {
3916 if (!isFocusableCandidate(element) || !element.isConnected || element.matches(":disabled")) {
3917 return false;
3918 }
3919 for (let current = element; current; current = getParentElement(current)) {
3920 const isAncestor = current !== element;
3921 const isSlot = getNodeName(current) === "slot";
3922 if (current.hasAttribute("inert")) {
3923 return false;
3924 }
3925 if (isAncestor && getNodeName(current) === "details" && !current.open && !isWithinOpenDetailsSummary(element, current) || current.hasAttribute("hidden") || !isSlot && !isVisibleInTabbableTree(current, isAncestor)) {
3926 return false;
3927 }
3928 }
3929 return true;
3930 }
3931 function isVisibleInTabbableTree(element, isAncestor) {
3932 const styles = getComputedStyle2(element);
3933 if (!isAncestor) {
3934 return isElementVisible(element, styles);
3935 }
3936 return styles.display !== "none";
3937 }
3938 function getTabIndex(element) {
3939 const tabIndex = element.tabIndex;
3940 if (tabIndex < 0) {
3941 const nodeName = getNodeName(element);
3942 if (nodeName === "details" || nodeName === "audio" || nodeName === "video" || isHTMLElement(element) && element.isContentEditable) {
3943 return 0;
3944 }
3945 }
3946 return tabIndex;
3947 }
3948 function getNamedRadioInput(element) {
3949 if (getNodeName(element) !== "input") {
3950 return null;
3951 }
3952 const input = element;
3953 return input.type === "radio" && input.name !== "" ? input : null;
3954 }
3955 function isTabbableRadio(element, candidates) {
3956 const input = getNamedRadioInput(element);
3957 if (!input) {
3958 return true;
3959 }
3960 const checkedRadio = candidates.find((candidate) => {
3961 const radio = getNamedRadioInput(candidate);
3962 return radio?.name === input.name && radio.form === input.form && radio.checked;
3963 });
3964 if (checkedRadio) {
3965 return checkedRadio === input;
3966 }
3967 return candidates.find((candidate) => {
3968 const radio = getNamedRadioInput(candidate);
3969 return radio?.name === input.name && radio.form === input.form;
3970 }) === input;
3971 }
3972 function getComposedChildren(container) {
3973 if (isHTMLElement(container) && getNodeName(container) === "slot") {
3974 const assignedElements = container.assignedElements({
3975 flatten: true
3976 });
3977 if (assignedElements.length > 0) {
3978 return assignedElements;
3979 }
3980 }
3981 if (isHTMLElement(container) && container.shadowRoot) {
3982 return Array.from(container.shadowRoot.children);
3983 }
3984 return Array.from(container.children);
3985 }
3986 function appendCandidates(container, list) {
3987 getComposedChildren(container).forEach((child) => {
3988 if (isFocusableCandidate(child)) {
3989 list.push(child);
3990 }
3991 appendCandidates(child, list);
3992 });
3993 }
3994 function appendMatchingElements(container, selector, list) {
3995 getComposedChildren(container).forEach((child) => {
3996 if (isHTMLElement(child) && child.matches(selector)) {
3997 list.push(child);
3998 }
3999 appendMatchingElements(child, selector, list);
4000 });
4001 }
4002 function focusable(container) {
4003 const candidates = [];
4004 appendCandidates(container, candidates);
4005 return candidates.filter(isFocusableElement);
4006 }
4007 function tabbable(container) {
4008 const candidates = focusable(container);
4009 return candidates.filter((element) => getTabIndex(element) >= 0 && isTabbableRadio(element, candidates));
4010 }
4011 function getTabbableIn(container, dir) {
4012 const list = tabbable(container);
4013 const len = list.length;
4014 if (len === 0) {
4015 return void 0;
4016 }
4017 const active = activeElement(ownerDocument(container));
4018 const index2 = list.indexOf(active);
4019 const nextIndex = index2 === -1 ? dir === 1 ? 0 : len - 1 : index2 + dir;
4020 return list[nextIndex];
4021 }
4022 function getNextTabbable(referenceElement) {
4023 return getTabbableIn(ownerDocument(referenceElement).body, 1) || referenceElement;
4024 }
4025 function getPreviousTabbable(referenceElement) {
4026 return getTabbableIn(ownerDocument(referenceElement).body, -1) || referenceElement;
4027 }
4028 function isOutsideEvent(event, container) {
4029 const containerElement = container || event.currentTarget;
4030 const relatedTarget = event.relatedTarget;
4031 return !relatedTarget || !contains(containerElement, relatedTarget);
4032 }
4033 function disableFocusInside(container) {
4034 const tabbableElements = tabbable(container);
4035 tabbableElements.forEach((element) => {
4036 element.dataset.tabindex = element.getAttribute("tabindex") || "";
4037 element.setAttribute("tabindex", "-1");
4038 });
4039 }
4040 function enableFocusInside(container) {
4041 const elements = [];
4042 appendMatchingElements(container, "[data-tabindex]", elements);
4043 elements.forEach((element) => {
4044 const tabindex = element.dataset.tabindex;
4045 delete element.dataset.tabindex;
4046 if (tabindex) {
4047 element.setAttribute("tabindex", tabindex);
4048 } else {
4049 element.removeAttribute("tabindex");
4050 }
4051 });
4052 }
4053
4054 // node_modules/@base-ui/react/floating-ui-react/utils/nodes.mjs
4055 function getNodeChildren(nodes, id, onlyOpenChildren = true) {
4056 const directChildren = nodes.filter((node) => node.parentId === id);
4057 return directChildren.flatMap((child) => [...!onlyOpenChildren || child.context?.open ? [child] : [], ...getNodeChildren(nodes, child.id, onlyOpenChildren)]);
4058 }
4059
4060 // node_modules/@base-ui/react/floating-ui-react/utils/createAttribute.mjs
4061 function createAttribute(name2) {
4062 return `data-base-ui-${name2}`;
4063 }
4064
4065 // node_modules/@base-ui/react/floating-ui-react/components/FloatingPortal.mjs
4066 var React20 = __toESM(require_react(), 1);
4067 var ReactDOM2 = __toESM(require_react_dom(), 1);
4068
4069 // node_modules/@base-ui/react/internals/constants.mjs
4070 var DISABLED_TRANSITIONS_STYLE = {
4071 style: {
4072 transition: "none"
4073 }
4074 };
4075 var BASE_UI_SWIPE_IGNORE_ATTRIBUTE = "data-base-ui-swipe-ignore";
4076 var LEGACY_SWIPE_IGNORE_ATTRIBUTE = "data-swipe-ignore";
4077 var BASE_UI_SWIPE_IGNORE_SELECTOR = `[${BASE_UI_SWIPE_IGNORE_ATTRIBUTE}]`;
4078 var LEGACY_SWIPE_IGNORE_SELECTOR = `[${LEGACY_SWIPE_IGNORE_ATTRIBUTE}]`;
4079 var POPUP_COLLISION_AVOIDANCE = {
4080 fallbackAxisSide: "end"
4081 };
4082 var ownerVisuallyHidden = {
4083 clipPath: "inset(50%)",
4084 position: "fixed",
4085 top: 0,
4086 left: 0
4087 };
4088
4089 // node_modules/@base-ui/react/floating-ui-react/components/FloatingPortal.mjs
4090 var import_jsx_runtime27 = __toESM(require_jsx_runtime(), 1);
4091 var PortalContext = /* @__PURE__ */ React20.createContext(null);
4092 if (true) PortalContext.displayName = "PortalContext";
4093 var usePortalContext = () => React20.useContext(PortalContext);
4094 var attr = createAttribute("portal");
4095 function useFloatingPortalNode(props = {}) {
4096 const {
4097 ref,
4098 container: containerProp,
4099 componentProps = EMPTY_OBJECT,
4100 elementProps
4101 } = props;
4102 const uniqueId = useId();
4103 const portalContext = usePortalContext();
4104 const parentPortalNode = portalContext?.portalNode;
4105 const [containerElement, setContainerElement] = React20.useState(null);
4106 const [portalNode, setPortalNode] = React20.useState(null);
4107 const setPortalNodeRef = useStableCallback((node) => {
4108 if (node !== null) {
4109 setPortalNode(node);
4110 }
4111 });
4112 const containerRef = React20.useRef(null);
4113 useIsoLayoutEffect(() => {
4114 if (containerProp === null) {
4115 if (containerRef.current) {
4116 containerRef.current = null;
4117 setPortalNode(null);
4118 setContainerElement(null);
4119 }
4120 return;
4121 }
4122 const resolvedContainer = (containerProp && (isNode(containerProp) ? containerProp : containerProp.current)) ?? parentPortalNode ?? document.body;
4123 if (resolvedContainer == null) {
4124 if (containerRef.current) {
4125 containerRef.current = null;
4126 setPortalNode(null);
4127 setContainerElement(null);
4128 }
4129 return;
4130 }
4131 if (containerRef.current !== resolvedContainer) {
4132 containerRef.current = resolvedContainer;
4133 setPortalNode(null);
4134 setContainerElement(resolvedContainer);
4135 }
4136 }, [containerProp, parentPortalNode]);
4137 const portalElement = useRenderElement("div", componentProps, {
4138 ref: [ref, setPortalNodeRef],
4139 props: [{
4140 id: uniqueId,
4141 [attr]: ""
4142 }, elementProps]
4143 });
4144 const portalSubtree = containerElement && portalElement ? /* @__PURE__ */ ReactDOM2.createPortal(portalElement, containerElement) : null;
4145 return {
4146 node: portalNode,
4147 // `id` and `render` props can override or remove the generated ID. Use the exact
4148 // rendered value so `aria-owns` never points at an ID absent from the DOM.
4149 nodeId: /* @__PURE__ */ React20.isValidElement(portalElement) ? portalElement.props.id : void 0,
4150 subtree: portalSubtree
4151 };
4152 }
4153 var FloatingPortal = /* @__PURE__ */ React20.forwardRef(function FloatingPortal2(componentProps, forwardedRef) {
4154 const {
4155 render,
4156 className,
4157 style,
4158 children,
4159 container,
4160 portalOwnerRole,
4161 ...elementProps
4162 } = componentProps;
4163 const {
4164 node: portalNode,
4165 nodeId: portalNodeId,
4166 subtree: portalSubtree
4167 } = useFloatingPortalNode({
4168 container,
4169 ref: forwardedRef,
4170 componentProps,
4171 elementProps
4172 });
4173 const beforeOutsideRef = React20.useRef(null);
4174 const afterOutsideRef = React20.useRef(null);
4175 const beforeInsideRef = React20.useRef(null);
4176 const afterInsideRef = React20.useRef(null);
4177 const [focusManagerState, setFocusManagerState] = React20.useState(null);
4178 const focusInsideDisabledRef = React20.useRef(false);
4179 const modal = focusManagerState?.modal;
4180 const open3 = focusManagerState?.open;
4181 const shouldRenderGuards = !!focusManagerState && !focusManagerState.modal && focusManagerState.open && !!portalNode;
4182 React20.useEffect(() => {
4183 if (!portalNode || modal) {
4184 return void 0;
4185 }
4186 function onFocus(event) {
4187 if (portalNode && event.relatedTarget && isOutsideEvent(event)) {
4188 if (event.type === "focusin") {
4189 if (focusInsideDisabledRef.current) {
4190 enableFocusInside(portalNode);
4191 focusInsideDisabledRef.current = false;
4192 }
4193 } else {
4194 disableFocusInside(portalNode);
4195 focusInsideDisabledRef.current = true;
4196 }
4197 }
4198 }
4199 return mergeCleanups(addEventListener(portalNode, "focusin", onFocus, true), addEventListener(portalNode, "focusout", onFocus, true));
4200 }, [portalNode, modal]);
4201 useIsoLayoutEffect(() => {
4202 if (!portalNode || open3 !== true || !focusInsideDisabledRef.current) {
4203 return;
4204 }
4205 enableFocusInside(portalNode);
4206 focusInsideDisabledRef.current = false;
4207 }, [open3, portalNode]);
4208 const portalContextValue = React20.useMemo(() => ({
4209 beforeOutsideRef,
4210 afterOutsideRef,
4211 beforeInsideRef,
4212 afterInsideRef,
4213 portalNode,
4214 setFocusManagerState
4215 }), [portalNode]);
4216 return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(React20.Fragment, {
4217 children: [portalSubtree, /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(PortalContext.Provider, {
4218 value: portalContextValue,
4219 children: [shouldRenderGuards && portalNode && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(FocusGuard, {
4220 "data-type": "outside",
4221 ref: beforeOutsideRef,
4222 onFocus: (event) => {
4223 if (isOutsideEvent(event, portalNode)) {
4224 beforeInsideRef.current?.focus();
4225 } else {
4226 const domReference = focusManagerState ? focusManagerState.domReference : null;
4227 const prevTabbable = getPreviousTabbable(domReference);
4228 prevTabbable?.focus();
4229 }
4230 }
4231 }), shouldRenderGuards && portalNode && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", {
4232 role: portalOwnerRole,
4233 "aria-owns": portalNodeId,
4234 style: ownerVisuallyHidden
4235 }), portalNode && /* @__PURE__ */ ReactDOM2.createPortal(children, portalNode), shouldRenderGuards && portalNode && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(FocusGuard, {
4236 "data-type": "outside",
4237 ref: afterOutsideRef,
4238 onFocus: (event) => {
4239 if (isOutsideEvent(event, portalNode)) {
4240 afterInsideRef.current?.focus();
4241 } else {
4242 const domReference = focusManagerState ? focusManagerState.domReference : null;
4243 const nextTabbable = getNextTabbable(domReference);
4244 nextTabbable?.focus();
4245 if (focusManagerState?.closeOnFocusOut) {
4246 focusManagerState?.onOpenChange(false, createChangeEventDetails(reason_parts_exports.focusOut, event.nativeEvent));
4247 }
4248 }
4249 }
4250 })]
4251 })]
4252 });
4253 });
4254 if (true) FloatingPortal.displayName = "FloatingPortal";
4255
4256 // node_modules/@base-ui/react/floating-ui-react/components/FloatingTree.mjs
4257 var React21 = __toESM(require_react(), 1);
4258
4259 // node_modules/@base-ui/react/floating-ui-react/utils/createEventEmitter.mjs
4260 function createEventEmitter() {
4261 const map = /* @__PURE__ */ new Map();
4262 return {
4263 emit(event, data) {
4264 map.get(event)?.forEach((listener) => listener(data));
4265 },
4266 on(event, listener) {
4267 if (!map.has(event)) {
4268 map.set(event, /* @__PURE__ */ new Set());
4269 }
4270 map.get(event).add(listener);
4271 },
4272 off(event, listener) {
4273 map.get(event)?.delete(listener);
4274 }
4275 };
4276 }
4277
4278 // node_modules/@base-ui/react/floating-ui-react/components/FloatingTree.mjs
4279 var import_jsx_runtime28 = __toESM(require_jsx_runtime(), 1);
4280 var FloatingNodeContext = /* @__PURE__ */ React21.createContext(null);
4281 if (true) FloatingNodeContext.displayName = "FloatingNodeContext";
4282 var FloatingTreeContext = /* @__PURE__ */ React21.createContext(null);
4283 if (true) FloatingTreeContext.displayName = "FloatingTreeContext";
4284 var useFloatingParentNodeId = () => React21.useContext(FloatingNodeContext)?.id || null;
4285 var useFloatingTree = (externalTree) => {
4286 const contextTree = React21.useContext(FloatingTreeContext);
4287 return externalTree ?? contextTree;
4288 };
4289
4290 // node_modules/@base-ui/react/floating-ui-react/hooks/useClientPoint.mjs
4291 var React22 = __toESM(require_react(), 1);
4292 function createVirtualElement(domElement, data) {
4293 let offsetX = null;
4294 let offsetY = null;
4295 let isAutoUpdateEvent = false;
4296 return {
4297 contextElement: domElement || void 0,
4298 getBoundingClientRect() {
4299 const domRect = domElement?.getBoundingClientRect() || {
4300 width: 0,
4301 height: 0,
4302 x: 0,
4303 y: 0
4304 };
4305 const isXAxis = data.axis === "x" || data.axis === "both";
4306 const isYAxis = data.axis === "y" || data.axis === "both";
4307 const canTrackCursorOnAutoUpdate = ["mouseenter", "mousemove"].includes(data.dataRef.current.openEvent?.type || "") && data.pointerType !== "touch";
4308 let width = domRect.width;
4309 let height = domRect.height;
4310 let x = domRect.x;
4311 let y = domRect.y;
4312 if (offsetX == null && data.x && isXAxis) {
4313 offsetX = domRect.x - data.x;
4314 }
4315 if (offsetY == null && data.y && isYAxis) {
4316 offsetY = domRect.y - data.y;
4317 }
4318 x -= offsetX || 0;
4319 y -= offsetY || 0;
4320 width = 0;
4321 height = 0;
4322 if (!isAutoUpdateEvent || canTrackCursorOnAutoUpdate) {
4323 width = data.axis === "y" ? domRect.width : 0;
4324 height = data.axis === "x" ? domRect.height : 0;
4325 x = isXAxis && data.x != null ? data.x : x;
4326 y = isYAxis && data.y != null ? data.y : y;
4327 } else if (isAutoUpdateEvent && !canTrackCursorOnAutoUpdate) {
4328 height = data.axis === "x" ? domRect.height : height;
4329 width = data.axis === "y" ? domRect.width : width;
4330 }
4331 isAutoUpdateEvent = true;
4332 return {
4333 width,
4334 height,
4335 x,
4336 y,
4337 top: y,
4338 right: x + width,
4339 bottom: y + height,
4340 left: x
4341 };
4342 }
4343 };
4344 }
4345 function isMouseBasedEvent(event) {
4346 return event != null && event.clientX != null;
4347 }
4348 function useClientPoint(context, props = {}) {
4349 const {
4350 enabled = true,
4351 axis = "both"
4352 } = props;
4353 const store3 = "rootStore" in context ? context.rootStore : context;
4354 const open3 = store3.useState("open");
4355 const floating = store3.useState("floatingElement");
4356 const domReference = store3.useState("domReferenceElement");
4357 const dataRef = store3.context.dataRef;
4358 const initialRef = React22.useRef(false);
4359 const cleanupListenerRef = React22.useRef(null);
4360 const [pointerType, setPointerType] = React22.useState();
4361 const [reactive, setReactive] = React22.useState([]);
4362 const resetReference = useStableCallback((reference2) => {
4363 store3.set("positionReference", reference2);
4364 });
4365 const setReference = useStableCallback((newX, newY, referenceElement) => {
4366 if (initialRef.current) {
4367 return;
4368 }
4369 if (dataRef.current.openEvent && !isMouseBasedEvent(dataRef.current.openEvent)) {
4370 return;
4371 }
4372 store3.set("positionReference", createVirtualElement(referenceElement ?? domReference, {
4373 x: newX,
4374 y: newY,
4375 axis,
4376 dataRef,
4377 pointerType
4378 }));
4379 });
4380 const handleReferenceEnterOrMove = useStableCallback((event) => {
4381 if (!open3) {
4382 setReference(event.clientX, event.clientY, event.currentTarget);
4383 } else if (!cleanupListenerRef.current) {
4384 setReference(event.clientX, event.clientY, event.currentTarget);
4385 setReactive([]);
4386 }
4387 });
4388 const openCheck = isMouseLikePointerType(pointerType) ? floating : open3;
4389 React22.useEffect(() => {
4390 if (!enabled) {
4391 resetReference(domReference);
4392 return void 0;
4393 }
4394 if (!openCheck) {
4395 return void 0;
4396 }
4397 function cleanupListener() {
4398 cleanupListenerRef.current?.();
4399 cleanupListenerRef.current = null;
4400 }
4401 const win = getWindow(floating);
4402 function handleMouseMove(event) {
4403 const target = getTarget(event);
4404 if (!contains(floating, target)) {
4405 setReference(event.clientX, event.clientY);
4406 } else {
4407 cleanupListener();
4408 }
4409 }
4410 if (!dataRef.current.openEvent || isMouseBasedEvent(dataRef.current.openEvent)) {
4411 cleanupListenerRef.current = addEventListener(win, "mousemove", handleMouseMove);
4412 } else {
4413 resetReference(domReference);
4414 }
4415 return cleanupListener;
4416 }, [openCheck, enabled, floating, dataRef, domReference, store3, setReference, resetReference, reactive]);
4417 React22.useEffect(() => () => {
4418 store3.set("positionReference", null);
4419 }, [store3]);
4420 React22.useEffect(() => {
4421 if (enabled && !floating) {
4422 initialRef.current = false;
4423 }
4424 }, [enabled, floating]);
4425 React22.useEffect(() => {
4426 if (!enabled && open3) {
4427 initialRef.current = true;
4428 }
4429 }, [enabled, open3]);
4430 const reference = React22.useMemo(() => {
4431 function setPointerTypeRef(event) {
4432 setPointerType(event.pointerType);
4433 }
4434 return {
4435 onPointerDown: setPointerTypeRef,
4436 onPointerEnter: setPointerTypeRef,
4437 onMouseMove: handleReferenceEnterOrMove,
4438 onMouseEnter: handleReferenceEnterOrMove
4439 };
4440 }, [handleReferenceEnterOrMove]);
4441 return React22.useMemo(() => enabled ? {
4442 reference,
4443 trigger: reference
4444 } : {}, [enabled, reference]);
4445 }
4446
4447 // node_modules/@base-ui/react/floating-ui-react/hooks/useDismiss.mjs
4448 var React23 = __toESM(require_react(), 1);
4449 function alwaysFalse() {
4450 return false;
4451 }
4452 function normalizeProp(normalizable) {
4453 return {
4454 escapeKey: typeof normalizable === "boolean" ? normalizable : normalizable?.escapeKey ?? false,
4455 outsidePress: typeof normalizable === "boolean" ? normalizable : normalizable?.outsidePress ?? true
4456 };
4457 }
4458 function useDismiss(context, props = {}) {
4459 const {
4460 enabled = true,
4461 escapeKey: escapeKey2 = true,
4462 outsidePress: outsidePressProp = true,
4463 outsidePressEvent = "sloppy",
4464 referencePress = alwaysFalse,
4465 bubbles,
4466 externalTree
4467 } = props;
4468 const store3 = "rootStore" in context ? context.rootStore : context;
4469 const open3 = store3.useState("open");
4470 const floatingElement = store3.useState("floatingElement");
4471 const {
4472 dataRef,
4473 events
4474 } = store3.context;
4475 const tree = useFloatingTree(externalTree);
4476 const outsidePressFn = useStableCallback(typeof outsidePressProp === "function" ? outsidePressProp : () => false);
4477 const outsidePress2 = typeof outsidePressProp === "function" ? outsidePressFn : outsidePressProp;
4478 const outsidePressEnabled = outsidePress2 !== false;
4479 const getOutsidePressEventProp = useStableCallback(() => outsidePressEvent);
4480 const {
4481 escapeKey: escapeKeyBubbles,
4482 outsidePress: outsidePressBubbles
4483 } = normalizeProp(bubbles);
4484 const pressStartedInsideRef = React23.useRef(false);
4485 const pressStartPreventedRef = React23.useRef(false);
4486 const suppressNextOutsideClickRef = React23.useRef(false);
4487 const sawPressWhileOpenRef = React23.useRef(false);
4488 const isComposingRef = React23.useRef(false);
4489 const currentPointerTypeRef = React23.useRef("");
4490 const touchStateRef = React23.useRef(null);
4491 const cancelDismissOnEndTimeout = useTimeout();
4492 const clearInsideReactTreeTimeout = useTimeout();
4493 const clearInsideReactTree = useStableCallback(() => {
4494 clearInsideReactTreeTimeout.clear();
4495 dataRef.current.insideReactTree = false;
4496 });
4497 const hasBlockingChild = useStableCallback((bubbleKey) => {
4498 const nodeId = dataRef.current.floatingContext?.nodeId;
4499 const children = tree ? getNodeChildren(tree.nodesRef.current, nodeId) : [];
4500 return children.some((child) => child.context?.open && !child.context.dataRef.current[bubbleKey]);
4501 });
4502 const isEventWithinOwnElements = useStableCallback((event) => {
4503 return isEventTargetWithin(event, store3.select("floatingElement")) || isEventTargetWithin(event, store3.select("domReferenceElement"));
4504 });
4505 const closeOnReferencePress = useStableCallback((event) => {
4506 if (!referencePress()) {
4507 return;
4508 }
4509 store3.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerPress, event.nativeEvent));
4510 });
4511 const closeOnEscapeKeyDown = useStableCallback((event) => {
4512 if (!open3 || !enabled || !escapeKey2 || event.key !== "Escape") {
4513 return;
4514 }
4515 if (isComposingRef.current) {
4516 return;
4517 }
4518 if (!escapeKeyBubbles && hasBlockingChild("__escapeKeyBubbles")) {
4519 return;
4520 }
4521 const native = isReactEvent(event) ? event.nativeEvent : event;
4522 const eventDetails = createChangeEventDetails(reason_parts_exports.escapeKey, native);
4523 store3.setOpen(false, eventDetails);
4524 if (!eventDetails.isCanceled) {
4525 event.preventDefault();
4526 }
4527 if (!escapeKeyBubbles && !eventDetails.isPropagationAllowed) {
4528 event.stopPropagation();
4529 }
4530 });
4531 const markInsideReactTree = useStableCallback(() => {
4532 dataRef.current.insideReactTree = true;
4533 clearInsideReactTreeTimeout.start(0, clearInsideReactTree);
4534 });
4535 const markPressStartedInsideReactTree = useStableCallback((event) => {
4536 if (!open3 || !enabled || event.button !== 0) {
4537 return;
4538 }
4539 const target = getTarget(event.nativeEvent);
4540 if (!contains(store3.select("floatingElement"), target)) {
4541 return;
4542 }
4543 if (!pressStartedInsideRef.current) {
4544 pressStartedInsideRef.current = true;
4545 pressStartPreventedRef.current = false;
4546 }
4547 });
4548 const markInsidePressStartPrevented = useStableCallback((event) => {
4549 if (!open3 || !enabled) {
4550 return;
4551 }
4552 if (!(event.defaultPrevented || event.nativeEvent.defaultPrevented)) {
4553 return;
4554 }
4555 if (pressStartedInsideRef.current) {
4556 pressStartPreventedRef.current = true;
4557 }
4558 });
4559 React23.useEffect(() => {
4560 function handleOpenChange(details) {
4561 if (!details.open) {
4562 sawPressWhileOpenRef.current = false;
4563 }
4564 }
4565 events.on("openchange", handleOpenChange);
4566 return () => {
4567 events.off("openchange", handleOpenChange);
4568 };
4569 }, [events]);
4570 React23.useEffect(() => {
4571 if (!open3 || !enabled) {
4572 if (!open3) {
4573 sawPressWhileOpenRef.current = false;
4574 }
4575 return clearInsideReactTree;
4576 }
4577 dataRef.current.__escapeKeyBubbles = escapeKeyBubbles;
4578 dataRef.current.__outsidePressBubbles = outsidePressBubbles;
4579 const compositionTimeout = new Timeout();
4580 const preventedPressSuppressionTimeout = new Timeout();
4581 const doc = ownerDocument(floatingElement);
4582 function handleCompositionStart() {
4583 compositionTimeout.clear();
4584 isComposingRef.current = true;
4585 }
4586 function handleCompositionEnd() {
4587 compositionTimeout.start(
4588 // 0ms or 1ms don't work in Safari. 5ms appears to consistently work.
4589 // Only apply to WebKit for the test to remain 0ms.
4590 parts_exports.engine.webkit ? 5 : 0,
4591 () => {
4592 isComposingRef.current = false;
4593 }
4594 );
4595 }
4596 function suppressImmediateOutsideClickAfterPreventedStart() {
4597 suppressNextOutsideClickRef.current = true;
4598 preventedPressSuppressionTimeout.start(0, () => {
4599 suppressNextOutsideClickRef.current = false;
4600 });
4601 }
4602 function resetPressStartState() {
4603 pressStartedInsideRef.current = false;
4604 pressStartPreventedRef.current = false;
4605 }
4606 function getOutsidePressEvent() {
4607 const type = currentPointerTypeRef.current;
4608 const computedType = type === "pen" || !type ? "mouse" : type;
4609 const outsidePressEventValue = getOutsidePressEventProp();
4610 const resolved = typeof outsidePressEventValue === "function" ? outsidePressEventValue() : outsidePressEventValue;
4611 if (typeof resolved === "string") {
4612 return resolved;
4613 }
4614 return resolved[computedType];
4615 }
4616 function shouldIgnoreEvent(event) {
4617 const computedOutsidePressEvent = getOutsidePressEvent();
4618 return computedOutsidePressEvent === "intentional" && event.type !== "click" || computedOutsidePressEvent === "sloppy" && event.type === "click";
4619 }
4620 function isEventWithinFloatingTree(event) {
4621 const nodeId = dataRef.current.floatingContext?.nodeId;
4622 const targetIsInsideChildren = tree && getNodeChildren(tree.nodesRef.current, nodeId).some((node) => isEventTargetWithin(event, node.context?.elements.floating));
4623 return isEventWithinOwnElements(event) || targetIsInsideChildren;
4624 }
4625 function closeOnPressOutside(event) {
4626 if (shouldIgnoreEvent(event)) {
4627 if (event.type !== "click" && !isEventWithinOwnElements(event)) {
4628 preventedPressSuppressionTimeout.clear();
4629 suppressNextOutsideClickRef.current = false;
4630 }
4631 clearInsideReactTree();
4632 return;
4633 }
4634 if (dataRef.current.insideReactTree) {
4635 clearInsideReactTree();
4636 return;
4637 }
4638 const target = getTarget(event);
4639 const inertSelector = `[${createAttribute("inert")}]`;
4640 const targetRoot = isElement(target) ? target.getRootNode() : null;
4641 const markers = Array.from((isShadowRoot(targetRoot) ? targetRoot : ownerDocument(store3.select("floatingElement"))).querySelectorAll(inertSelector));
4642 const triggers = store3.context.triggerElements;
4643 if (target && (triggers.hasElement(target) || triggers.hasMatchingElement((trigger) => contains(trigger, target)))) {
4644 return;
4645 }
4646 let targetRootAncestor = isElement(target) ? target : null;
4647 while (targetRootAncestor && !isLastTraversableNode(targetRootAncestor)) {
4648 const nextParent = getParentNode(targetRootAncestor);
4649 if (isLastTraversableNode(nextParent) || !isElement(nextParent)) {
4650 break;
4651 }
4652 targetRootAncestor = nextParent;
4653 }
4654 if (markers.length && isElement(target) && !isRootElement(target) && // Clicked on a direct ancestor (e.g. FloatingOverlay).
4655 !contains(target, store3.select("floatingElement")) && // If the target root element contains none of the markers, then the
4656 // element was injected after the floating element rendered.
4657 markers.every((marker) => !contains(targetRootAncestor, marker))) {
4658 return;
4659 }
4660 if (isHTMLElement(target) && !("touches" in event)) {
4661 const lastTraversableNode = isLastTraversableNode(target);
4662 const style = getComputedStyle2(target);
4663 const scrollRe = /auto|scroll/;
4664 const isScrollableX = lastTraversableNode || scrollRe.test(style.overflowX);
4665 const isScrollableY = lastTraversableNode || scrollRe.test(style.overflowY);
4666 const canScrollX = isScrollableX && target.clientWidth > 0 && target.scrollWidth > target.clientWidth;
4667 const canScrollY = isScrollableY && target.clientHeight > 0 && target.scrollHeight > target.clientHeight;
4668 const isRTL6 = style.direction === "rtl";
4669 const pressedVerticalScrollbar = canScrollY && (isRTL6 ? event.offsetX <= target.offsetWidth - target.clientWidth : event.offsetX > target.clientWidth);
4670 const pressedHorizontalScrollbar = canScrollX && event.offsetY > target.clientHeight;
4671 if (pressedVerticalScrollbar || pressedHorizontalScrollbar) {
4672 return;
4673 }
4674 }
4675 if (isEventWithinFloatingTree(event)) {
4676 return;
4677 }
4678 if (getOutsidePressEvent() === "intentional") {
4679 if (event.detail !== 0 && !isVirtualClick(event) && !sawPressWhileOpenRef.current) {
4680 return;
4681 }
4682 if (suppressNextOutsideClickRef.current) {
4683 preventedPressSuppressionTimeout.clear();
4684 suppressNextOutsideClickRef.current = false;
4685 return;
4686 }
4687 }
4688 if (typeof outsidePress2 === "function" && !outsidePress2(event)) {
4689 return;
4690 }
4691 if (hasBlockingChild("__outsidePressBubbles")) {
4692 return;
4693 }
4694 store3.setOpen(false, createChangeEventDetails(reason_parts_exports.outsidePress, event));
4695 clearInsideReactTree();
4696 }
4697 function handlePointerDown(event) {
4698 if (getOutsidePressEvent() !== "sloppy" || event.pointerType === "touch" || !store3.select("open") || !enabled || isEventWithinOwnElements(event)) {
4699 return;
4700 }
4701 closeOnPressOutside(event);
4702 }
4703 function handleTouchStart(event) {
4704 if (getOutsidePressEvent() !== "sloppy" || !store3.select("open") || !enabled || isEventWithinOwnElements(event)) {
4705 return;
4706 }
4707 const touch = event.touches[0];
4708 if (touch) {
4709 touchStateRef.current = {
4710 startTime: Date.now(),
4711 startX: touch.clientX,
4712 startY: touch.clientY,
4713 dismissOnTouchEnd: false,
4714 dismissOnMouseDown: true
4715 };
4716 cancelDismissOnEndTimeout.start(1e3, () => {
4717 if (touchStateRef.current) {
4718 touchStateRef.current.dismissOnTouchEnd = false;
4719 touchStateRef.current.dismissOnMouseDown = false;
4720 }
4721 });
4722 }
4723 }
4724 function addTargetEventListenerOnce(event, listener) {
4725 const target = getTarget(event);
4726 if (!target) {
4727 return;
4728 }
4729 const unsubscribe2 = addEventListener(target, event.type, () => {
4730 listener(event);
4731 unsubscribe2();
4732 });
4733 }
4734 function handleTouchStartCapture(event) {
4735 currentPointerTypeRef.current = "touch";
4736 addTargetEventListenerOnce(event, handleTouchStart);
4737 }
4738 function closeOnPressOutsideCapture(event) {
4739 cancelDismissOnEndTimeout.clear();
4740 if (event.type === "pointerdown") {
4741 if (event.button === 0) {
4742 sawPressWhileOpenRef.current = true;
4743 }
4744 currentPointerTypeRef.current = event.pointerType;
4745 }
4746 if (event.type === "mousedown" && touchStateRef.current && !touchStateRef.current.dismissOnMouseDown) {
4747 return;
4748 }
4749 addTargetEventListenerOnce(event, (targetEvent) => {
4750 if (targetEvent.type === "pointerdown") {
4751 handlePointerDown(targetEvent);
4752 } else {
4753 closeOnPressOutside(targetEvent);
4754 }
4755 });
4756 }
4757 function handlePressEndCapture(event) {
4758 if (event.type === "pointercancel") {
4759 sawPressWhileOpenRef.current = false;
4760 }
4761 if (!pressStartedInsideRef.current) {
4762 return;
4763 }
4764 const pressStartedInsideDefaultPrevented = pressStartPreventedRef.current;
4765 resetPressStartState();
4766 if (getOutsidePressEvent() !== "intentional") {
4767 return;
4768 }
4769 if (event.type === "pointercancel") {
4770 if (pressStartedInsideDefaultPrevented) {
4771 suppressImmediateOutsideClickAfterPreventedStart();
4772 }
4773 return;
4774 }
4775 if (isEventWithinFloatingTree(event)) {
4776 return;
4777 }
4778 if (pressStartedInsideDefaultPrevented) {
4779 suppressImmediateOutsideClickAfterPreventedStart();
4780 return;
4781 }
4782 if (typeof outsidePress2 === "function" && !outsidePress2(event)) {
4783 return;
4784 }
4785 preventedPressSuppressionTimeout.clear();
4786 suppressNextOutsideClickRef.current = true;
4787 clearInsideReactTree();
4788 }
4789 function handleTouchMove(event) {
4790 if (getOutsidePressEvent() !== "sloppy" || !touchStateRef.current || isEventWithinOwnElements(event)) {
4791 return;
4792 }
4793 const touch = event.touches[0];
4794 if (!touch) {
4795 return;
4796 }
4797 const deltaX = Math.abs(touch.clientX - touchStateRef.current.startX);
4798 const deltaY = Math.abs(touch.clientY - touchStateRef.current.startY);
4799 const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);
4800 if (distance > 5) {
4801 touchStateRef.current.dismissOnTouchEnd = true;
4802 }
4803 if (distance > 10) {
4804 closeOnPressOutside(event);
4805 cancelDismissOnEndTimeout.clear();
4806 touchStateRef.current = null;
4807 }
4808 }
4809 function handleTouchMoveCapture(event) {
4810 addTargetEventListenerOnce(event, handleTouchMove);
4811 }
4812 function handleTouchEnd(event) {
4813 if (getOutsidePressEvent() !== "sloppy" || !touchStateRef.current || isEventWithinOwnElements(event)) {
4814 return;
4815 }
4816 if (touchStateRef.current.dismissOnTouchEnd) {
4817 closeOnPressOutside(event);
4818 }
4819 cancelDismissOnEndTimeout.clear();
4820 touchStateRef.current = null;
4821 }
4822 function handleTouchEndCapture(event) {
4823 addTargetEventListenerOnce(event, handleTouchEnd);
4824 }
4825 const unsubscribe = mergeCleanups(escapeKey2 && mergeCleanups(addEventListener(doc, "keydown", closeOnEscapeKeyDown), addEventListener(doc, "compositionstart", handleCompositionStart), addEventListener(doc, "compositionend", handleCompositionEnd)), outsidePressEnabled && mergeCleanups(addEventListener(doc, "click", closeOnPressOutsideCapture, true), addEventListener(doc, "pointerdown", closeOnPressOutsideCapture, true), addEventListener(doc, "pointerup", handlePressEndCapture, true), addEventListener(doc, "pointercancel", handlePressEndCapture, true), addEventListener(doc, "mousedown", closeOnPressOutsideCapture, true), addEventListener(doc, "mouseup", handlePressEndCapture, true), addEventListener(doc, "touchstart", handleTouchStartCapture, {
4826 capture: true,
4827 passive: true
4828 }), addEventListener(doc, "touchmove", handleTouchMoveCapture, {
4829 capture: true,
4830 passive: true
4831 }), addEventListener(doc, "touchend", handleTouchEndCapture, {
4832 capture: true,
4833 passive: true
4834 })));
4835 return () => {
4836 unsubscribe();
4837 compositionTimeout.clear();
4838 preventedPressSuppressionTimeout.clear();
4839 resetPressStartState();
4840 suppressNextOutsideClickRef.current = false;
4841 clearInsideReactTree();
4842 };
4843 }, [dataRef, floatingElement, escapeKey2, outsidePressEnabled, outsidePress2, open3, enabled, escapeKeyBubbles, outsidePressBubbles, closeOnEscapeKeyDown, clearInsideReactTree, getOutsidePressEventProp, hasBlockingChild, isEventWithinOwnElements, tree, store3, cancelDismissOnEndTimeout]);
4844 const reference = React23.useMemo(() => ({
4845 onKeyDown: closeOnEscapeKeyDown,
4846 onPointerDown: closeOnReferencePress,
4847 onClick: closeOnReferencePress
4848 }), [closeOnEscapeKeyDown, closeOnReferencePress]);
4849 const floating = React23.useMemo(() => ({
4850 onKeyDown: closeOnEscapeKeyDown,
4851 // `onMouseDown` may be blocked if `event.preventDefault()` is called in
4852 // `onPointerDown`, such as with <NumberField.ScrubArea>.
4853 // See https://github.com/mui/base-ui/pull/3379
4854 onPointerDown: markInsidePressStartPrevented,
4855 onMouseDown: markInsidePressStartPrevented,
4856 onClickCapture: markInsideReactTree,
4857 onMouseDownCapture(event) {
4858 markInsideReactTree();
4859 markPressStartedInsideReactTree(event);
4860 },
4861 onPointerDownCapture(event) {
4862 markInsideReactTree();
4863 markPressStartedInsideReactTree(event);
4864 },
4865 onMouseUpCapture: markInsideReactTree,
4866 onTouchEndCapture: markInsideReactTree,
4867 onTouchMoveCapture: markInsideReactTree
4868 }), [closeOnEscapeKeyDown, markInsideReactTree, markPressStartedInsideReactTree, markInsidePressStartPrevented]);
4869 return React23.useMemo(() => enabled ? {
4870 reference,
4871 floating,
4872 trigger: reference
4873 } : {}, [enabled, reference, floating]);
4874 }
4875
4876 // node_modules/@base-ui/react/floating-ui-react/hooks/useFloating.mjs
4877 var React31 = __toESM(require_react(), 1);
4878
4879 // node_modules/@floating-ui/core/dist/floating-ui.core.mjs
4880 function computeCoordsFromPlacement(_ref, placement, rtl) {
4881 let {
4882 reference,
4883 floating
4884 } = _ref;
4885 const sideAxis = getSideAxis(placement);
4886 const alignmentAxis = getAlignmentAxis(placement);
4887 const alignLength = getAxisLength(alignmentAxis);
4888 const side = getSide(placement);
4889 const isVertical = sideAxis === "y";
4890 const commonX = reference.x + reference.width / 2 - floating.width / 2;
4891 const commonY = reference.y + reference.height / 2 - floating.height / 2;
4892 const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;
4893 let coords;
4894 switch (side) {
4895 case "top":
4896 coords = {
4897 x: commonX,
4898 y: reference.y - floating.height
4899 };
4900 break;
4901 case "bottom":
4902 coords = {
4903 x: commonX,
4904 y: reference.y + reference.height
4905 };
4906 break;
4907 case "right":
4908 coords = {
4909 x: reference.x + reference.width,
4910 y: commonY
4911 };
4912 break;
4913 case "left":
4914 coords = {
4915 x: reference.x - floating.width,
4916 y: commonY
4917 };
4918 break;
4919 default:
4920 coords = {
4921 x: reference.x,
4922 y: reference.y
4923 };
4924 }
4925 const alignment = getAlignment(placement);
4926 if (alignment) {
4927 coords[alignmentAxis] += commonAlign * (alignment === "end" ? 1 : -1) * (rtl && isVertical ? -1 : 1);
4928 }
4929 return coords;
4930 }
4931 async function detectOverflow(state, options) {
4932 var _await$platform$isEle;
4933 if (options === void 0) {
4934 options = {};
4935 }
4936 const {
4937 x,
4938 y,
4939 platform: platform3,
4940 rects,
4941 elements,
4942 strategy
4943 } = state;
4944 const {
4945 boundary = "clippingAncestors",
4946 rootBoundary = "viewport",
4947 elementContext = "floating",
4948 altBoundary = false,
4949 padding = 0
4950 } = evaluate(options, state);
4951 const paddingObject = getPaddingObject(padding);
4952 const altContext = elementContext === "floating" ? "reference" : "floating";
4953 const element = elements[altBoundary ? altContext : elementContext];
4954 const clippingClientRect = rectToClientRect(await platform3.getClippingRect({
4955 element: ((_await$platform$isEle = await (platform3.isElement == null ? void 0 : platform3.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || await (platform3.getDocumentElement == null ? void 0 : platform3.getDocumentElement(elements.floating)),
4956 boundary,
4957 rootBoundary,
4958 strategy
4959 }));
4960 const rect = elementContext === "floating" ? {
4961 x,
4962 y,
4963 width: rects.floating.width,
4964 height: rects.floating.height
4965 } : rects.reference;
4966 const offsetParent = await (platform3.getOffsetParent == null ? void 0 : platform3.getOffsetParent(elements.floating));
4967 const offsetScale = await (platform3.isElement == null ? void 0 : platform3.isElement(offsetParent)) && await (platform3.getScale == null ? void 0 : platform3.getScale(offsetParent)) || {
4968 x: 1,
4969 y: 1
4970 };
4971 const elementClientRect = rectToClientRect(platform3.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform3.convertOffsetParentRelativeRectToViewportRelativeRect({
4972 elements,
4973 rect,
4974 offsetParent,
4975 strategy
4976 }) : rect);
4977 return {
4978 top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,
4979 bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,
4980 left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,
4981 right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x
4982 };
4983 }
4984 var MAX_RESET_COUNT = 50;
4985 var computePosition = async (reference, floating, config) => {
4986 const {
4987 placement = "bottom",
4988 strategy = "absolute",
4989 middleware = [],
4990 platform: platform3
4991 } = config;
4992 const platformWithDetectOverflow = platform3.detectOverflow ? platform3 : {
4993 ...platform3,
4994 detectOverflow
4995 };
4996 const rtl = await (platform3.isRTL == null ? void 0 : platform3.isRTL(floating));
4997 let rects = await platform3.getElementRects({
4998 reference,
4999 floating,
5000 strategy
5001 });
5002 let {
5003 x,
5004 y
5005 } = computeCoordsFromPlacement(rects, placement, rtl);
5006 let statefulPlacement = placement;
5007 let resetCount = 0;
5008 const middlewareData = {};
5009 for (let i = 0; i < middleware.length; i++) {
5010 const currentMiddleware = middleware[i];
5011 if (!currentMiddleware) {
5012 continue;
5013 }
5014 const {
5015 name: name2,
5016 fn
5017 } = currentMiddleware;
5018 const {
5019 x: nextX,
5020 y: nextY,
5021 data,
5022 reset
5023 } = await fn({
5024 x,
5025 y,
5026 initialPlacement: placement,
5027 placement: statefulPlacement,
5028 strategy,
5029 middlewareData,
5030 rects,
5031 platform: platformWithDetectOverflow,
5032 elements: {
5033 reference,
5034 floating
5035 }
5036 });
5037 x = nextX != null ? nextX : x;
5038 y = nextY != null ? nextY : y;
5039 middlewareData[name2] = {
5040 ...middlewareData[name2],
5041 ...data
5042 };
5043 if (reset && resetCount < MAX_RESET_COUNT) {
5044 resetCount++;
5045 if (typeof reset === "object") {
5046 if (reset.placement) {
5047 statefulPlacement = reset.placement;
5048 }
5049 if (reset.rects) {
5050 rects = reset.rects === true ? await platform3.getElementRects({
5051 reference,
5052 floating,
5053 strategy
5054 }) : reset.rects;
5055 }
5056 ({
5057 x,
5058 y
5059 } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));
5060 }
5061 i = -1;
5062 }
5063 }
5064 return {
5065 x,
5066 y,
5067 placement: statefulPlacement,
5068 strategy,
5069 middlewareData
5070 };
5071 };
5072 var flip = function(options) {
5073 if (options === void 0) {
5074 options = {};
5075 }
5076 return {
5077 name: "flip",
5078 options,
5079 async fn(state) {
5080 var _middlewareData$arrow, _middlewareData$flip;
5081 const {
5082 placement,
5083 middlewareData,
5084 rects,
5085 initialPlacement,
5086 platform: platform3,
5087 elements
5088 } = state;
5089 const {
5090 mainAxis: checkMainAxis = true,
5091 crossAxis: checkCrossAxis = true,
5092 fallbackPlacements: specifiedFallbackPlacements,
5093 fallbackStrategy = "bestFit",
5094 fallbackAxisSideDirection = "none",
5095 flipAlignment = true,
5096 ...detectOverflowOptions
5097 } = evaluate(options, state);
5098 if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {
5099 return {};
5100 }
5101 const side = getSide(placement);
5102 const initialSideAxis = getSideAxis(initialPlacement);
5103 const isBasePlacement = getSide(initialPlacement) === initialPlacement;
5104 const rtl = await (platform3.isRTL == null ? void 0 : platform3.isRTL(elements.floating));
5105 const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));
5106 const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== "none";
5107 if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {
5108 fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));
5109 }
5110 const placements2 = [initialPlacement, ...fallbackPlacements];
5111 const overflow = await platform3.detectOverflow(state, detectOverflowOptions);
5112 const overflows = [];
5113 let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];
5114 if (checkMainAxis) {
5115 overflows.push(overflow[side]);
5116 }
5117 if (checkCrossAxis) {
5118 const sides2 = getAlignmentSides(placement, rects, rtl);
5119 overflows.push(overflow[sides2[0]], overflow[sides2[1]]);
5120 }
5121 overflowsData = [...overflowsData, {
5122 placement,
5123 overflows
5124 }];
5125 if (!overflows.every((side2) => side2 <= 0)) {
5126 var _middlewareData$flip2, _overflowsData$filter;
5127 const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;
5128 const nextPlacement = placements2[nextIndex];
5129 if (nextPlacement) {
5130 const ignoreCrossAxisOverflow = checkCrossAxis === "alignment" ? initialSideAxis !== getSideAxis(nextPlacement) : false;
5131 if (!ignoreCrossAxisOverflow || // We leave the current main axis only if every placement on that axis
5132 // overflows the main axis.
5133 overflowsData.every((d) => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) {
5134 return {
5135 data: {
5136 index: nextIndex,
5137 overflows: overflowsData
5138 },
5139 reset: {
5140 placement: nextPlacement
5141 }
5142 };
5143 }
5144 }
5145 let resetPlacement = (_overflowsData$filter = overflowsData.filter((d) => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;
5146 if (!resetPlacement) {
5147 switch (fallbackStrategy) {
5148 case "bestFit": {
5149 var _overflowsData$filter2;
5150 const placement2 = (_overflowsData$filter2 = overflowsData.filter((d) => {
5151 if (hasFallbackAxisSideDirection) {
5152 const currentSideAxis = getSideAxis(d.placement);
5153 return currentSideAxis === initialSideAxis || // Create a bias to the `y` side axis due to horizontal
5154 // reading directions favoring greater width.
5155 currentSideAxis === "y";
5156 }
5157 return true;
5158 }).map((d) => [d.placement, d.overflows.filter((overflow2) => overflow2 > 0).reduce((acc, overflow2) => acc + overflow2, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];
5159 if (placement2) {
5160 resetPlacement = placement2;
5161 }
5162 break;
5163 }
5164 case "initialPlacement":
5165 resetPlacement = initialPlacement;
5166 break;
5167 }
5168 }
5169 if (placement !== resetPlacement) {
5170 return {
5171 reset: {
5172 placement: resetPlacement
5173 }
5174 };
5175 }
5176 }
5177 return {};
5178 }
5179 };
5180 };
5181 var originSides = /* @__PURE__ */ new Set(["left", "top"]);
5182 async function convertValueToCoords(state, options) {
5183 const {
5184 placement,
5185 platform: platform3,
5186 elements
5187 } = state;
5188 const rtl = await (platform3.isRTL == null ? void 0 : platform3.isRTL(elements.floating));
5189 const side = getSide(placement);
5190 const alignment = getAlignment(placement);
5191 const isVertical = getSideAxis(placement) === "y";
5192 const mainAxisMulti = originSides.has(side) ? -1 : 1;
5193 const crossAxisMulti = rtl && isVertical ? -1 : 1;
5194 const rawValue = evaluate(options, state);
5195 let {
5196 mainAxis,
5197 crossAxis,
5198 alignmentAxis
5199 } = typeof rawValue === "number" ? {
5200 mainAxis: rawValue,
5201 crossAxis: 0,
5202 alignmentAxis: null
5203 } : {
5204 mainAxis: rawValue.mainAxis || 0,
5205 crossAxis: rawValue.crossAxis || 0,
5206 alignmentAxis: rawValue.alignmentAxis
5207 };
5208 if (alignment && typeof alignmentAxis === "number") {
5209 crossAxis = alignment === "end" ? alignmentAxis * -1 : alignmentAxis;
5210 }
5211 return isVertical ? {
5212 x: crossAxis * crossAxisMulti,
5213 y: mainAxis * mainAxisMulti
5214 } : {
5215 x: mainAxis * mainAxisMulti,
5216 y: crossAxis * crossAxisMulti
5217 };
5218 }
5219 var offset = function(options) {
5220 if (options === void 0) {
5221 options = 0;
5222 }
5223 return {
5224 name: "offset",
5225 options,
5226 async fn(state) {
5227 var _middlewareData$offse, _middlewareData$arrow;
5228 const {
5229 x,
5230 y,
5231 placement,
5232 middlewareData
5233 } = state;
5234 const diffCoords = await convertValueToCoords(state, options);
5235 if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {
5236 return {};
5237 }
5238 return {
5239 x: x + diffCoords.x,
5240 y: y + diffCoords.y,
5241 data: {
5242 ...diffCoords,
5243 placement
5244 }
5245 };
5246 }
5247 };
5248 };
5249 var shift = function(options) {
5250 if (options === void 0) {
5251 options = {};
5252 }
5253 return {
5254 name: "shift",
5255 options,
5256 async fn(state) {
5257 const {
5258 x,
5259 y,
5260 placement,
5261 platform: platform3
5262 } = state;
5263 const {
5264 mainAxis: checkMainAxis = true,
5265 crossAxis: checkCrossAxis = false,
5266 limiter = {
5267 fn: (_ref) => {
5268 let {
5269 x: x2,
5270 y: y2
5271 } = _ref;
5272 return {
5273 x: x2,
5274 y: y2
5275 };
5276 }
5277 },
5278 ...detectOverflowOptions
5279 } = evaluate(options, state);
5280 const coords = {
5281 x,
5282 y
5283 };
5284 const overflow = await platform3.detectOverflow(state, detectOverflowOptions);
5285 const crossAxis = getSideAxis(placement);
5286 const mainAxis = getOppositeAxis(crossAxis);
5287 let mainAxisCoord = coords[mainAxis];
5288 let crossAxisCoord = coords[crossAxis];
5289 const clampCoord = (axis, coord) => clamp(coord + overflow[axis === "y" ? "top" : "left"], coord, coord - overflow[axis === "y" ? "bottom" : "right"]);
5290 if (checkMainAxis) {
5291 mainAxisCoord = clampCoord(mainAxis, mainAxisCoord);
5292 }
5293 if (checkCrossAxis) {
5294 crossAxisCoord = clampCoord(crossAxis, crossAxisCoord);
5295 }
5296 const limitedCoords = limiter.fn({
5297 ...state,
5298 [mainAxis]: mainAxisCoord,
5299 [crossAxis]: crossAxisCoord
5300 });
5301 return {
5302 ...limitedCoords,
5303 data: {
5304 x: limitedCoords.x - x,
5305 y: limitedCoords.y - y,
5306 enabled: {
5307 [mainAxis]: checkMainAxis,
5308 [crossAxis]: checkCrossAxis
5309 }
5310 }
5311 };
5312 }
5313 };
5314 };
5315 var limitShift = function(options) {
5316 if (options === void 0) {
5317 options = {};
5318 }
5319 return {
5320 options,
5321 fn(state) {
5322 var _rawOffset$mainAxis, _rawOffset$crossAxis;
5323 const {
5324 x,
5325 y,
5326 placement,
5327 rects,
5328 middlewareData
5329 } = state;
5330 const {
5331 offset: offset4 = 0,
5332 mainAxis: checkMainAxis = true,
5333 crossAxis: checkCrossAxis = true
5334 } = evaluate(options, state);
5335 const coords = {
5336 x,
5337 y
5338 };
5339 const crossAxis = getSideAxis(placement);
5340 const mainAxis = getOppositeAxis(crossAxis);
5341 let mainAxisCoord = coords[mainAxis];
5342 let crossAxisCoord = coords[crossAxis];
5343 const rawOffset = evaluate(offset4, state);
5344 const computedOffset = typeof rawOffset === "number" ? {
5345 mainAxis: rawOffset,
5346 crossAxis: 0
5347 } : {
5348 mainAxis: (_rawOffset$mainAxis = rawOffset.mainAxis) != null ? _rawOffset$mainAxis : 0,
5349 crossAxis: (_rawOffset$crossAxis = rawOffset.crossAxis) != null ? _rawOffset$crossAxis : 0
5350 };
5351 if (checkMainAxis) {
5352 const len = mainAxis === "y" ? "height" : "width";
5353 const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;
5354 const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;
5355 if (mainAxisCoord < limitMin) {
5356 mainAxisCoord = limitMin;
5357 } else if (mainAxisCoord > limitMax) {
5358 mainAxisCoord = limitMax;
5359 }
5360 }
5361 if (checkCrossAxis) {
5362 var _middlewareData$offse, _middlewareData$offse2;
5363 const len = mainAxis === "y" ? "width" : "height";
5364 const isOriginSide = originSides.has(getSide(placement));
5365 const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);
5366 const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);
5367 if (crossAxisCoord < limitMin) {
5368 crossAxisCoord = limitMin;
5369 } else if (crossAxisCoord > limitMax) {
5370 crossAxisCoord = limitMax;
5371 }
5372 }
5373 return {
5374 [mainAxis]: mainAxisCoord,
5375 [crossAxis]: crossAxisCoord
5376 };
5377 }
5378 };
5379 };
5380 var size = function(options) {
5381 if (options === void 0) {
5382 options = {};
5383 }
5384 return {
5385 name: "size",
5386 options,
5387 async fn(state) {
5388 const {
5389 placement,
5390 rects,
5391 platform: platform3,
5392 elements
5393 } = state;
5394 const {
5395 apply = () => {
5396 },
5397 ...detectOverflowOptions
5398 } = evaluate(options, state);
5399 const overflow = await platform3.detectOverflow(state, detectOverflowOptions);
5400 const side = getSide(placement);
5401 const alignment = getAlignment(placement);
5402 const isYAxis = getSideAxis(placement) === "y";
5403 const {
5404 width,
5405 height
5406 } = rects.floating;
5407 let heightSide;
5408 let widthSide;
5409 if (side === "top" || side === "bottom") {
5410 heightSide = side;
5411 widthSide = alignment === (await (platform3.isRTL == null ? void 0 : platform3.isRTL(elements.floating)) ? "start" : "end") ? "left" : "right";
5412 } else {
5413 widthSide = side;
5414 heightSide = alignment === "end" ? "top" : "bottom";
5415 }
5416 const maximumClippingHeight = height - overflow.top - overflow.bottom;
5417 const maximumClippingWidth = width - overflow.left - overflow.right;
5418 const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);
5419 const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);
5420 const shiftData = state.middlewareData.shift;
5421 const noShift = !shiftData;
5422 let availableHeight2 = overflowAvailableHeight;
5423 let availableWidth2 = overflowAvailableWidth;
5424 if (shiftData != null && shiftData.enabled.x) {
5425 availableWidth2 = maximumClippingWidth;
5426 }
5427 if (shiftData != null && shiftData.enabled.y) {
5428 availableHeight2 = maximumClippingHeight;
5429 }
5430 if (noShift && !alignment) {
5431 if (isYAxis) {
5432 availableWidth2 = width - 2 * max(overflow.left, overflow.right);
5433 } else {
5434 availableHeight2 = height - 2 * max(overflow.top, overflow.bottom);
5435 }
5436 }
5437 await apply({
5438 ...state,
5439 availableWidth: availableWidth2,
5440 availableHeight: availableHeight2
5441 });
5442 const nextDimensions = await platform3.getDimensions(elements.floating);
5443 if (width !== nextDimensions.width || height !== nextDimensions.height) {
5444 return {
5445 reset: {
5446 rects: true
5447 }
5448 };
5449 }
5450 return {};
5451 }
5452 };
5453 };
5454
5455 // node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs
5456 function getCssDimensions(element) {
5457 const css = getComputedStyle2(element);
5458 let width = parseFloat(css.width) || 0;
5459 let height = parseFloat(css.height) || 0;
5460 const hasOffset = isHTMLElement(element);
5461 const offsetWidth = hasOffset ? element.offsetWidth : width;
5462 const offsetHeight = hasOffset ? element.offsetHeight : height;
5463 const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;
5464 if (shouldFallback) {
5465 width = offsetWidth;
5466 height = offsetHeight;
5467 }
5468 return {
5469 width,
5470 height,
5471 $: shouldFallback
5472 };
5473 }
5474 function unwrapElement(element) {
5475 return !isElement(element) ? element.contextElement : element;
5476 }
5477 function getScale(element) {
5478 const domElement = unwrapElement(element);
5479 if (!isHTMLElement(domElement)) {
5480 return createCoords(1);
5481 }
5482 const rect = domElement.getBoundingClientRect();
5483 const {
5484 width,
5485 height,
5486 $
5487 } = getCssDimensions(domElement);
5488 let x = ($ ? round(rect.width) : rect.width) / width;
5489 let y = ($ ? round(rect.height) : rect.height) / height;
5490 if (!x || !Number.isFinite(x)) {
5491 x = 1;
5492 }
5493 if (!y || !Number.isFinite(y)) {
5494 y = 1;
5495 }
5496 return {
5497 x,
5498 y
5499 };
5500 }
5501 var noOffsets = /* @__PURE__ */ createCoords(0);
5502 function getVisualOffsets(element) {
5503 const win = getWindow(element);
5504 if (!isWebKit() || !win.visualViewport) {
5505 return noOffsets;
5506 }
5507 return {
5508 x: win.visualViewport.offsetLeft,
5509 y: win.visualViewport.offsetTop
5510 };
5511 }
5512 function shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {
5513 if (isFixed === void 0) {
5514 isFixed = false;
5515 }
5516 return !!floatingOffsetParent && isFixed && floatingOffsetParent === getWindow(element);
5517 }
5518 function getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {
5519 if (includeScale === void 0) {
5520 includeScale = false;
5521 }
5522 if (isFixedStrategy === void 0) {
5523 isFixedStrategy = false;
5524 }
5525 const clientRect = element.getBoundingClientRect();
5526 const domElement = unwrapElement(element);
5527 let scale = createCoords(1);
5528 if (includeScale) {
5529 if (offsetParent) {
5530 if (isElement(offsetParent)) {
5531 scale = getScale(offsetParent);
5532 }
5533 } else {
5534 scale = getScale(element);
5535 }
5536 }
5537 const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);
5538 let x = (clientRect.left + visualOffsets.x) / scale.x;
5539 let y = (clientRect.top + visualOffsets.y) / scale.y;
5540 let width = clientRect.width / scale.x;
5541 let height = clientRect.height / scale.y;
5542 if (domElement && offsetParent) {
5543 const win = getWindow(domElement);
5544 const offsetWin = isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;
5545 let currentWin = win;
5546 let currentIFrame = getFrameElement(currentWin);
5547 while (currentIFrame && offsetWin !== currentWin) {
5548 const iframeScale = getScale(currentIFrame);
5549 const iframeRect = currentIFrame.getBoundingClientRect();
5550 const css = getComputedStyle2(currentIFrame);
5551 const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;
5552 const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;
5553 x *= iframeScale.x;
5554 y *= iframeScale.y;
5555 width *= iframeScale.x;
5556 height *= iframeScale.y;
5557 x += left;
5558 y += top;
5559 currentWin = getWindow(currentIFrame);
5560 currentIFrame = getFrameElement(currentWin);
5561 }
5562 }
5563 return rectToClientRect({
5564 width,
5565 height,
5566 x,
5567 y
5568 });
5569 }
5570 function getWindowScrollBarX(element, rect) {
5571 const leftScroll = getNodeScroll(element).scrollLeft;
5572 if (!rect) {
5573 return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;
5574 }
5575 return rect.left + leftScroll;
5576 }
5577 function getHTMLOffset(documentElement, scroll) {
5578 const htmlRect = documentElement.getBoundingClientRect();
5579 const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect);
5580 const y = htmlRect.top + scroll.scrollTop;
5581 return {
5582 x,
5583 y
5584 };
5585 }
5586 function convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {
5587 let {
5588 elements,
5589 rect,
5590 offsetParent,
5591 strategy
5592 } = _ref;
5593 const isFixed = strategy === "fixed";
5594 const documentElement = getDocumentElement(offsetParent);
5595 const topLayer = elements ? isTopLayer(elements.floating) : false;
5596 if (offsetParent === documentElement || topLayer && isFixed) {
5597 return rect;
5598 }
5599 let scroll = {
5600 scrollLeft: 0,
5601 scrollTop: 0
5602 };
5603 let scale = createCoords(1);
5604 const offsets = createCoords(0);
5605 const isOffsetParentAnElement = isHTMLElement(offsetParent);
5606 if (isOffsetParentAnElement || !isFixed) {
5607 if (getNodeName(offsetParent) !== "body" || isOverflowElement(documentElement)) {
5608 scroll = getNodeScroll(offsetParent);
5609 }
5610 if (isOffsetParentAnElement) {
5611 const offsetRect = getBoundingClientRect(offsetParent);
5612 scale = getScale(offsetParent);
5613 offsets.x = offsetRect.x + offsetParent.clientLeft;
5614 offsets.y = offsetRect.y + offsetParent.clientTop;
5615 }
5616 }
5617 const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);
5618 return {
5619 width: rect.width * scale.x,
5620 height: rect.height * scale.y,
5621 x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,
5622 y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y
5623 };
5624 }
5625 function getClientRects(element) {
5626 return element.getClientRects ? Array.from(element.getClientRects()) : [];
5627 }
5628 function getDocumentRect(html) {
5629 const scroll = getNodeScroll(html);
5630 const body = html.ownerDocument.body;
5631 const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);
5632 const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);
5633 let x = -scroll.scrollLeft + getWindowScrollBarX(html);
5634 const y = -scroll.scrollTop;
5635 if (getComputedStyle2(body).direction === "rtl") {
5636 x += max(html.clientWidth, body.clientWidth) - width;
5637 }
5638 return {
5639 width,
5640 height,
5641 x,
5642 y
5643 };
5644 }
5645 var SCROLLBAR_MAX = 25;
5646 function getViewportRect(element, strategy, rootBoundary) {
5647 if (rootBoundary === void 0) {
5648 rootBoundary = "viewport";
5649 }
5650 const isLayoutViewport = rootBoundary === "layoutViewport";
5651 const win = getWindow(element);
5652 const html = getDocumentElement(element);
5653 const visualViewport = win.visualViewport;
5654 let width = html.clientWidth;
5655 let height = html.clientHeight;
5656 let x = 0;
5657 let y = 0;
5658 if (visualViewport) {
5659 const layoutRelativeClientCoords = !isWebKit() || strategy === "fixed";
5660 if (isLayoutViewport) {
5661 if (!layoutRelativeClientCoords) {
5662 x = -visualViewport.offsetLeft;
5663 y = -visualViewport.offsetTop;
5664 }
5665 } else {
5666 width = visualViewport.width;
5667 height = visualViewport.height;
5668 if (layoutRelativeClientCoords) {
5669 x = visualViewport.offsetLeft;
5670 y = visualViewport.offsetTop;
5671 }
5672 }
5673 }
5674 const windowScrollbarX = getWindowScrollBarX(html);
5675 if (windowScrollbarX <= 0) {
5676 const doc = html.ownerDocument;
5677 const body = doc.body;
5678 const bodyStyles = getComputedStyle(body);
5679 const bodyMarginInline = doc.compatMode === "CSS1Compat" ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;
5680 const reservedWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);
5681 const gutter = getComputedStyle(html).scrollbarGutter === "stable both-edges" ? reservedWidth / 2 : reservedWidth;
5682 if (gutter <= SCROLLBAR_MAX) {
5683 width -= gutter;
5684 }
5685 }
5686 return {
5687 width,
5688 height,
5689 x,
5690 y
5691 };
5692 }
5693 function getInnerBoundingClientRect(element, strategy) {
5694 const clientRect = getBoundingClientRect(element, true, strategy === "fixed");
5695 const top = clientRect.top + element.clientTop;
5696 const left = clientRect.left + element.clientLeft;
5697 const scale = getScale(element);
5698 const width = element.clientWidth * scale.x;
5699 const height = element.clientHeight * scale.y;
5700 const x = left * scale.x;
5701 const y = top * scale.y;
5702 return {
5703 width,
5704 height,
5705 x,
5706 y
5707 };
5708 }
5709 function getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {
5710 let rect;
5711 if (clippingAncestor === "viewport" || clippingAncestor === "layoutViewport") {
5712 rect = getViewportRect(element, strategy, clippingAncestor);
5713 } else if (clippingAncestor === "document") {
5714 rect = getDocumentRect(getDocumentElement(element));
5715 } else if (isElement(clippingAncestor)) {
5716 rect = getInnerBoundingClientRect(clippingAncestor, strategy);
5717 } else {
5718 const visualOffsets = getVisualOffsets(element);
5719 rect = {
5720 x: clippingAncestor.x - visualOffsets.x,
5721 y: clippingAncestor.y - visualOffsets.y,
5722 width: clippingAncestor.width,
5723 height: clippingAncestor.height
5724 };
5725 }
5726 return rectToClientRect(rect);
5727 }
5728 function getClippingElementAncestors(element, cache) {
5729 const cachedResult = cache.get(element);
5730 if (cachedResult) {
5731 return cachedResult;
5732 }
5733 let result = getOverflowAncestors(element, [], false).filter((el) => isElement(el) && getNodeName(el) !== "body");
5734 let lastKeptComputedStyle = null;
5735 const elementIsFixed = getComputedStyle2(element).position === "fixed";
5736 let currentNode = elementIsFixed ? getParentNode(element) : element;
5737 while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {
5738 const computedStyle = getComputedStyle2(currentNode);
5739 const currentNodeIsContaining = isContainingBlock(currentNode);
5740 const lastPosition = lastKeptComputedStyle ? lastKeptComputedStyle.position : elementIsFixed ? "fixed" : "";
5741 const shouldDropCurrentNode = !currentNodeIsContaining && (lastPosition === "fixed" || lastPosition === "absolute" && computedStyle.position === "static");
5742 if (shouldDropCurrentNode) {
5743 result = result.filter((ancestor) => ancestor !== currentNode);
5744 } else {
5745 lastKeptComputedStyle = computedStyle;
5746 }
5747 currentNode = getParentNode(currentNode);
5748 }
5749 cache.set(element, result);
5750 return result;
5751 }
5752 function getClippingRect(_ref) {
5753 let {
5754 element,
5755 boundary,
5756 rootBoundary,
5757 strategy
5758 } = _ref;
5759 const elementClippingAncestors = boundary === "clippingAncestors" ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);
5760 const clippingAncestors = [...elementClippingAncestors, rootBoundary];
5761 const firstRect = getClientRectFromClippingAncestor(element, clippingAncestors[0], strategy);
5762 let top = firstRect.top;
5763 let right = firstRect.right;
5764 let bottom = firstRect.bottom;
5765 let left = firstRect.left;
5766 for (let i = 1; i < clippingAncestors.length; i++) {
5767 const rect = getClientRectFromClippingAncestor(element, clippingAncestors[i], strategy);
5768 top = max(rect.top, top);
5769 right = min(rect.right, right);
5770 bottom = min(rect.bottom, bottom);
5771 left = max(rect.left, left);
5772 }
5773 return {
5774 width: right - left,
5775 height: bottom - top,
5776 x: left,
5777 y: top
5778 };
5779 }
5780 function getDimensions2(element) {
5781 const {
5782 width,
5783 height
5784 } = getCssDimensions(element);
5785 return {
5786 width,
5787 height
5788 };
5789 }
5790 function getRectRelativeToOffsetParent(element, offsetParent, strategy) {
5791 const isOffsetParentAnElement = isHTMLElement(offsetParent);
5792 const documentElement = getDocumentElement(offsetParent);
5793 const isFixed = strategy === "fixed";
5794 const rect = getBoundingClientRect(element, true, isFixed, offsetParent);
5795 let scroll = {
5796 scrollLeft: 0,
5797 scrollTop: 0
5798 };
5799 const offsets = createCoords(0);
5800 if (isOffsetParentAnElement || !isFixed) {
5801 if (getNodeName(offsetParent) !== "body" || isOverflowElement(documentElement)) {
5802 scroll = getNodeScroll(offsetParent);
5803 }
5804 if (isOffsetParentAnElement) {
5805 const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);
5806 offsets.x = offsetRect.x + offsetParent.clientLeft;
5807 offsets.y = offsetRect.y + offsetParent.clientTop;
5808 }
5809 }
5810 if (!isOffsetParentAnElement && documentElement) {
5811 offsets.x = getWindowScrollBarX(documentElement);
5812 }
5813 const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);
5814 const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;
5815 const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;
5816 return {
5817 x,
5818 y,
5819 width: rect.width,
5820 height: rect.height
5821 };
5822 }
5823 function isStaticPositioned(element) {
5824 return getComputedStyle2(element).position === "static";
5825 }
5826 function getTrueOffsetParent(element, polyfill) {
5827 if (!isHTMLElement(element) || getComputedStyle2(element).position === "fixed") {
5828 return null;
5829 }
5830 if (polyfill) {
5831 return polyfill(element);
5832 }
5833 let rawOffsetParent = element.offsetParent;
5834 if (getDocumentElement(element) === rawOffsetParent) {
5835 rawOffsetParent = rawOffsetParent.ownerDocument.body;
5836 }
5837 return rawOffsetParent;
5838 }
5839 function getOffsetParent(element, polyfill) {
5840 const win = getWindow(element);
5841 if (isTopLayer(element)) {
5842 return win;
5843 }
5844 if (!isHTMLElement(element)) {
5845 let svgOffsetParent = getParentNode(element);
5846 while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {
5847 if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {
5848 return svgOffsetParent;
5849 }
5850 svgOffsetParent = getParentNode(svgOffsetParent);
5851 }
5852 return win;
5853 }
5854 let offsetParent = getTrueOffsetParent(element, polyfill);
5855 while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {
5856 offsetParent = getTrueOffsetParent(offsetParent, polyfill);
5857 }
5858 if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {
5859 return win;
5860 }
5861 return offsetParent || getContainingBlock(element) || win;
5862 }
5863 var getElementRects = async function(data) {
5864 const getOffsetParentFn = this.getOffsetParent || getOffsetParent;
5865 const getDimensionsFn = this.getDimensions;
5866 const floatingDimensions = await getDimensionsFn(data.floating);
5867 return {
5868 reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),
5869 floating: {
5870 x: 0,
5871 y: 0,
5872 width: floatingDimensions.width,
5873 height: floatingDimensions.height
5874 }
5875 };
5876 };
5877 function isRTL(element) {
5878 return getComputedStyle2(element).direction === "rtl";
5879 }
5880 var platform2 = {
5881 convertOffsetParentRelativeRectToViewportRelativeRect,
5882 getDocumentElement,
5883 getClippingRect,
5884 getOffsetParent,
5885 getElementRects,
5886 getClientRects,
5887 getDimensions: getDimensions2,
5888 getScale,
5889 isElement,
5890 isRTL
5891 };
5892 function rectsAreEqual(a, b) {
5893 return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;
5894 }
5895 function observeMove(element, onMove, ancestorResize) {
5896 let io = null;
5897 let timeoutId;
5898 const root = getDocumentElement(element);
5899 function cleanup() {
5900 var _io;
5901 clearTimeout(timeoutId);
5902 (_io = io) == null || _io.disconnect();
5903 io = null;
5904 }
5905 function refresh(skip, threshold) {
5906 if (skip === void 0) {
5907 skip = false;
5908 }
5909 if (threshold === void 0) {
5910 threshold = 1;
5911 }
5912 cleanup();
5913 const elementRectForRootMargin = element.getBoundingClientRect();
5914 const {
5915 left,
5916 top,
5917 width,
5918 height
5919 } = elementRectForRootMargin;
5920 if (!skip) {
5921 onMove();
5922 }
5923 if (!width || !height) {
5924 return;
5925 }
5926 const insetTop = floor(top);
5927 const insetRight = floor(root.clientWidth - (left + width));
5928 const insetBottom = floor(root.clientHeight - (top + height));
5929 const insetLeft = floor(left);
5930 const rootMargin = -insetTop + "px " + -insetRight + "px " + -insetBottom + "px " + -insetLeft + "px";
5931 const options = {
5932 rootMargin,
5933 threshold: max(0, min(1, threshold)) || 1
5934 };
5935 let isFirstUpdate = true;
5936 function handleObserve(entries) {
5937 const ratio = entries[0].intersectionRatio;
5938 if (!rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {
5939 return refresh();
5940 }
5941 if (ratio !== threshold) {
5942 if (!isFirstUpdate) {
5943 return refresh();
5944 }
5945 if (!ratio) {
5946 timeoutId = setTimeout(() => {
5947 refresh(false, 1e-7);
5948 }, 1e3);
5949 } else {
5950 refresh(false, ratio);
5951 }
5952 }
5953 isFirstUpdate = false;
5954 }
5955 try {
5956 io = new IntersectionObserver(handleObserve, {
5957 ...options,
5958 // Handle <iframe>s
5959 root: root.ownerDocument
5960 });
5961 } catch (_e) {
5962 io = new IntersectionObserver(handleObserve, options);
5963 }
5964 io.observe(element);
5965 }
5966 const win = getWindow(element);
5967 const handleResize = () => refresh(ancestorResize);
5968 win.addEventListener("resize", handleResize);
5969 refresh(true);
5970 return () => {
5971 win.removeEventListener("resize", handleResize);
5972 cleanup();
5973 };
5974 }
5975 function autoUpdate(reference, floating, update2, options) {
5976 if (options === void 0) {
5977 options = {};
5978 }
5979 const {
5980 ancestorScroll = true,
5981 ancestorResize = true,
5982 elementResize = typeof ResizeObserver === "function",
5983 layoutShift = typeof IntersectionObserver === "function",
5984 animationFrame = false
5985 } = options;
5986 const referenceEl = unwrapElement(reference);
5987 const ancestors = ancestorScroll || ancestorResize ? [...referenceEl ? getOverflowAncestors(referenceEl) : [], ...floating ? getOverflowAncestors(floating) : []] : [];
5988 ancestors.forEach((ancestor) => {
5989 ancestorScroll && ancestor.addEventListener("scroll", update2);
5990 ancestorResize && ancestor.addEventListener("resize", update2);
5991 });
5992 const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update2, ancestorResize) : null;
5993 let reobserveFrame = -1;
5994 let resizeObserver = null;
5995 if (elementResize) {
5996 resizeObserver = new ResizeObserver((_ref) => {
5997 let [firstEntry] = _ref;
5998 if (firstEntry && firstEntry.target === referenceEl && resizeObserver && floating) {
5999 resizeObserver.unobserve(floating);
6000 cancelAnimationFrame(reobserveFrame);
6001 reobserveFrame = requestAnimationFrame(() => {
6002 var _resizeObserver;
6003 (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);
6004 });
6005 }
6006 update2();
6007 });
6008 if (referenceEl && !animationFrame) {
6009 resizeObserver.observe(referenceEl);
6010 }
6011 if (floating) {
6012 resizeObserver.observe(floating);
6013 }
6014 }
6015 let frameId;
6016 let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;
6017 if (animationFrame) {
6018 frameLoop();
6019 }
6020 function frameLoop() {
6021 const nextRefRect = getBoundingClientRect(reference);
6022 if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) {
6023 update2();
6024 }
6025 prevRefRect = nextRefRect;
6026 frameId = requestAnimationFrame(frameLoop);
6027 }
6028 update2();
6029 return () => {
6030 var _resizeObserver2;
6031 ancestors.forEach((ancestor) => {
6032 ancestorScroll && ancestor.removeEventListener("scroll", update2);
6033 ancestorResize && ancestor.removeEventListener("resize", update2);
6034 });
6035 cleanupIo == null || cleanupIo();
6036 (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();
6037 resizeObserver = null;
6038 if (animationFrame) {
6039 cancelAnimationFrame(frameId);
6040 }
6041 };
6042 }
6043 var offset2 = offset;
6044 var shift2 = shift;
6045 var flip2 = flip;
6046 var size2 = size;
6047 var limitShift2 = limitShift;
6048 var computePosition2 = (reference, floating, options) => {
6049 const cache = /* @__PURE__ */ new Map();
6050 const mergedOptions = options != null ? options : {};
6051 const platformWithCache = {
6052 ...platform2,
6053 ...mergedOptions.platform,
6054 _c: cache
6055 };
6056 return computePosition(reference, floating, {
6057 ...mergedOptions,
6058 platform: platformWithCache
6059 });
6060 };
6061
6062 // node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs
6063 var React24 = __toESM(require_react(), 1);
6064 var import_react2 = __toESM(require_react(), 1);
6065 var ReactDOM3 = __toESM(require_react_dom(), 1);
6066 var isClient = typeof document !== "undefined";
6067 var noop2 = function noop3() {
6068 };
6069 var index = isClient ? import_react2.useLayoutEffect : noop2;
6070 function deepEqual(a, b) {
6071 if (a === b) {
6072 return true;
6073 }
6074 if (typeof a !== typeof b) {
6075 return false;
6076 }
6077 if (typeof a === "function" && a.toString() === b.toString()) {
6078 return true;
6079 }
6080 let length;
6081 let i;
6082 let keys;
6083 if (a && b && typeof a === "object") {
6084 if (Array.isArray(a)) {
6085 length = a.length;
6086 if (length !== b.length) return false;
6087 for (i = length; i-- !== 0; ) {
6088 if (!deepEqual(a[i], b[i])) {
6089 return false;
6090 }
6091 }
6092 return true;
6093 }
6094 keys = Object.keys(a);
6095 length = keys.length;
6096 if (length !== Object.keys(b).length) {
6097 return false;
6098 }
6099 for (i = length; i-- !== 0; ) {
6100 if (!{}.hasOwnProperty.call(b, keys[i])) {
6101 return false;
6102 }
6103 }
6104 for (i = length; i-- !== 0; ) {
6105 const key = keys[i];
6106 if (key === "_owner" && a.$$typeof) {
6107 continue;
6108 }
6109 if (!deepEqual(a[key], b[key])) {
6110 return false;
6111 }
6112 }
6113 return true;
6114 }
6115 return a !== a && b !== b;
6116 }
6117 function getDPR(element) {
6118 if (typeof window === "undefined") {
6119 return 1;
6120 }
6121 const win = element.ownerDocument.defaultView || window;
6122 return win.devicePixelRatio || 1;
6123 }
6124 function roundByDPR(element, value) {
6125 const dpr = getDPR(element);
6126 return Math.round(value * dpr) / dpr;
6127 }
6128 function useLatestRef(value) {
6129 const ref = React24.useRef(value);
6130 index(() => {
6131 ref.current = value;
6132 });
6133 return ref;
6134 }
6135 function useFloating(options) {
6136 if (options === void 0) {
6137 options = {};
6138 }
6139 const {
6140 placement = "bottom",
6141 strategy = "absolute",
6142 middleware = [],
6143 platform: platform3,
6144 elements: {
6145 reference: externalReference,
6146 floating: externalFloating
6147 } = {},
6148 transform = true,
6149 whileElementsMounted,
6150 open: open3
6151 } = options;
6152 const [data, setData] = React24.useState({
6153 x: 0,
6154 y: 0,
6155 strategy,
6156 placement,
6157 middlewareData: {},
6158 isPositioned: false
6159 });
6160 const [latestMiddleware, setLatestMiddleware] = React24.useState(middleware);
6161 if (!deepEqual(latestMiddleware, middleware)) {
6162 setLatestMiddleware(middleware);
6163 }
6164 const [_reference, _setReference] = React24.useState(null);
6165 const [_floating, _setFloating] = React24.useState(null);
6166 const setReference = React24.useCallback((node) => {
6167 if (node !== referenceRef.current) {
6168 referenceRef.current = node;
6169 _setReference(node);
6170 }
6171 }, []);
6172 const setFloating = React24.useCallback((node) => {
6173 if (node !== floatingRef.current) {
6174 floatingRef.current = node;
6175 _setFloating(node);
6176 }
6177 }, []);
6178 const referenceEl = externalReference || _reference;
6179 const floatingEl = externalFloating || _floating;
6180 const referenceRef = React24.useRef(null);
6181 const floatingRef = React24.useRef(null);
6182 const dataRef = React24.useRef(data);
6183 const hasWhileElementsMounted = whileElementsMounted != null;
6184 const whileElementsMountedRef = useLatestRef(whileElementsMounted);
6185 const platformRef = useLatestRef(platform3);
6186 const openRef = useLatestRef(open3);
6187 const update2 = React24.useCallback(() => {
6188 if (!referenceRef.current || !floatingRef.current) {
6189 return;
6190 }
6191 const config = {
6192 placement,
6193 strategy,
6194 middleware: latestMiddleware
6195 };
6196 if (platformRef.current) {
6197 config.platform = platformRef.current;
6198 }
6199 computePosition2(referenceRef.current, floatingRef.current, config).then((data2) => {
6200 const fullData = {
6201 ...data2,
6202 // The floating element's position may be recomputed while it's closed
6203 // but still mounted (such as when transitioning out). To ensure
6204 // `isPositioned` will be `false` initially on the next open, avoid
6205 // setting it to `true` when `open === false` (must be specified).
6206 isPositioned: openRef.current !== false
6207 };
6208 if (isMountedRef.current && !deepEqual(dataRef.current, fullData)) {
6209 dataRef.current = fullData;
6210 ReactDOM3.flushSync(() => {
6211 setData(fullData);
6212 });
6213 }
6214 });
6215 }, [latestMiddleware, placement, strategy, platformRef, openRef]);
6216 index(() => {
6217 if (open3 === false && dataRef.current.isPositioned) {
6218 dataRef.current.isPositioned = false;
6219 setData((data2) => ({
6220 ...data2,
6221 isPositioned: false
6222 }));
6223 }
6224 }, [open3]);
6225 const isMountedRef = React24.useRef(false);
6226 index(() => {
6227 isMountedRef.current = true;
6228 return () => {
6229 isMountedRef.current = false;
6230 };
6231 }, []);
6232 index(() => {
6233 if (referenceEl) referenceRef.current = referenceEl;
6234 if (floatingEl) floatingRef.current = floatingEl;
6235 if (referenceEl && floatingEl) {
6236 if (whileElementsMountedRef.current) {
6237 return whileElementsMountedRef.current(referenceEl, floatingEl, update2);
6238 }
6239 update2();
6240 }
6241 }, [referenceEl, floatingEl, update2, whileElementsMountedRef, hasWhileElementsMounted]);
6242 const refs = React24.useMemo(() => ({
6243 reference: referenceRef,
6244 floating: floatingRef,
6245 setReference,
6246 setFloating
6247 }), [setReference, setFloating]);
6248 const elements = React24.useMemo(() => ({
6249 reference: referenceEl,
6250 floating: floatingEl
6251 }), [referenceEl, floatingEl]);
6252 const floatingStyles = React24.useMemo(() => {
6253 const initialStyles = {
6254 position: strategy,
6255 left: 0,
6256 top: 0
6257 };
6258 if (!elements.floating) {
6259 return initialStyles;
6260 }
6261 const x = roundByDPR(elements.floating, data.x);
6262 const y = roundByDPR(elements.floating, data.y);
6263 if (transform) {
6264 return {
6265 ...initialStyles,
6266 transform: "translate(" + x + "px, " + y + "px)",
6267 ...getDPR(elements.floating) >= 1.5 && {
6268 willChange: "transform"
6269 }
6270 };
6271 }
6272 return {
6273 position: strategy,
6274 left: x,
6275 top: y
6276 };
6277 }, [strategy, transform, elements.floating, data.x, data.y]);
6278 return React24.useMemo(() => ({
6279 ...data,
6280 update: update2,
6281 refs,
6282 elements,
6283 floatingStyles
6284 }), [data, update2, refs, elements, floatingStyles]);
6285 }
6286 var offset3 = (options, deps) => {
6287 const result = offset2(options);
6288 return {
6289 name: result.name,
6290 fn: result.fn,
6291 options: [options, deps]
6292 };
6293 };
6294 var shift3 = (options, deps) => {
6295 const result = shift2(options);
6296 return {
6297 name: result.name,
6298 fn: result.fn,
6299 options: [options, deps]
6300 };
6301 };
6302 var limitShift3 = (options, deps) => {
6303 const result = limitShift2(options);
6304 return {
6305 fn: result.fn,
6306 options: [options, deps]
6307 };
6308 };
6309 var flip3 = (options, deps) => {
6310 const result = flip2(options);
6311 return {
6312 name: result.name,
6313 fn: result.fn,
6314 options: [options, deps]
6315 };
6316 };
6317 var size3 = (options, deps) => {
6318 const result = size2(options);
6319 return {
6320 name: result.name,
6321 fn: result.fn,
6322 options: [options, deps]
6323 };
6324 };
6325
6326 // node_modules/@base-ui/react/utils/popups/popupHandle.mjs
6327 var BasePopupHandle = class {
6328 /**
6329 * Stores of every root currently using this handle, in attach order. A handle is meant to be used
6330 * by a single mounted root, but roots can transiently overlap (e.g. during an animated route
6331 * transition), so this stack lets `attachStore`'s cleanup restore the previous root instead of
6332 * leaving a still-mounted root uncontrollable when a newer overlapping root detaches first.
6333 */
6334 attachedStores = [];
6335 /**
6336 * Store of the root that currently controls the handle: the most recently attached one still
6337 * mounted, or `null` when no root is attached. Imperative methods are no-ops while this is `null`.
6338 */
6339 attachedStoreValue = null;
6340 /**
6341 * Listeners notified when `attachedStore` changes, so detached triggers can follow the store pointer.
6342 */
6343 storeListeners = /* @__PURE__ */ new Set();
6344 /**
6345 * Creates a handle backed by the store used while no root is attached.
6346 *
6347 * @param fallbackStore Inert, closed store handed to detached triggers while no root is attached,
6348 * so they can render and register without a mounted root. Triggers register into whichever store
6349 * `store` currently resolves to, so while detached they live in this store's trigger map and
6350 * migrate themselves to the root's store (and back) as it attaches/detaches.
6351 * @param componentName Component name used to prefix dev warnings, e.g. `'Menu'` produces
6352 * `MenuHandle.open()` in warning text.
6353 * @param throwOnMissingTrigger Whether `open(triggerId)` throws when no trigger with that id is
6354 * registered. Anchored popups (Menu, Popover, Tooltip, PreviewCard) need a trigger to anchor to,
6355 * so they throw; Dialog is not anchored and instead opens unassociated with a dev warning.
6356 */
6357 constructor(fallbackStore, componentName, throwOnMissingTrigger = true) {
6358 this.fallbackStore = fallbackStore;
6359 this.componentName = componentName;
6360 this.throwOnMissingTrigger = throwOnMissingTrigger;
6361 }
6362 get attachedStore() {
6363 return this.attachedStoreValue;
6364 }
6365 /**
6366 * Store that detached triggers read from: the attached root's store, or an inert fallback store
6367 * used while no root is attached.
6368 * @internal
6369 */
6370 get store() {
6371 return this.attachedStoreValue ?? this.fallbackStore;
6372 }
6373 /**
6374 * Stable fallback store used for server rendering and hydration. Root stores cannot be recorded on
6375 * the handle during render because a handle can be shared by concurrent server-rendered requests.
6376 * @internal
6377 */
6378 get serverStore() {
6379 return this.fallbackStore;
6380 }
6381 /**
6382 * Subscribes to changes of the attached store pointer so detached triggers re-render and re-bind
6383 * when a root attaches or detaches. Returns a function that removes the listener.
6384 * @internal
6385 */
6386 subscribeStore(listener) {
6387 this.storeListeners.add(listener);
6388 return () => {
6389 this.storeListeners.delete(listener);
6390 };
6391 }
6392 /**
6393 * Points the handle at a root's store and notifies subscribers so detached triggers re-render and
6394 * re-register into it (their registration effect migrates them when the store pointer changes).
6395 * Returns a cleanup function that detaches the store again.
6396 * @internal
6397 */
6398 attachStore(newStore) {
6399 this.attachedStores.push(newStore);
6400 this.setActiveStore(newStore);
6401 if (true) {
6402 if (this.attachedStores.length > 1) {
6403 const dev = this;
6404 (dev.overlapWarningFrame ??= AnimationFrame.create()).request(() => {
6405 if (this.attachedStores.length > 1) {
6406 console.warn("Base UI: A handle is attached to more than one mounted root at the same time. The most recently mounted root takes over and the previous one stops being controlled by the handle. A handle should be used by a single root that stays mounted for the lifetime of the handle.");
6407 }
6408 });
6409 }
6410 }
6411 return () => {
6412 const index2 = this.attachedStores.lastIndexOf(newStore);
6413 if (index2 !== -1) {
6414 this.attachedStores.splice(index2, 1);
6415 }
6416 this.setActiveStore(this.attachedStores[this.attachedStores.length - 1] ?? null);
6417 };
6418 }
6419 /**
6420 * Sets the store that currently controls the handle and notifies subscribers when it changes, so
6421 * detached triggers re-render and migrate their registration to the new store.
6422 */
6423 setActiveStore(store3) {
6424 if (this.attachedStoreValue !== store3) {
6425 this.attachedStoreValue = store3;
6426 this.storeListeners.forEach((listener) => {
6427 listener();
6428 });
6429 }
6430 }
6431 /**
6432 * Opens the attached root's store and associates it with the trigger with the given id, or a
6433 * no-op (with a dev warning) while no root is attached. Shared by every concrete handle's public
6434 * `open()` method, which only narrows the parameter type.
6435 *
6436 * When a trigger id is given but no matching trigger is registered, anchored popups throw (see
6437 * `throwOnMissingTrigger`); Dialog opens unassociated with a dev warning instead.
6438 *
6439 * This method should only be called in an event handler or an effect (not during rendering).
6440 *
6441 * @param triggerId ID of the trigger to associate with the popup, or `null`/`undefined` to open
6442 * without associating any trigger.
6443 */
6444 openByTrigger(triggerId) {
6445 const attachedStore = this.attachedStore;
6446 if (attachedStore === null) {
6447 if (true) {
6448 console.warn(`Base UI: ${this.componentName}Handle.open() was called while no root using this handle is mounted. The call was ignored; mount a root with this handle before opening it imperatively.`);
6449 }
6450 return;
6451 }
6452 let triggerElement;
6453 if (triggerId) {
6454 for (let i = this.attachedStores.length - 1; i >= 0 && !triggerElement; i -= 1) {
6455 triggerElement = this.attachedStores[i].context.triggerElements.getById(triggerId);
6456 }
6457 triggerElement ??= this.fallbackStore.context.triggerElements.getById(triggerId);
6458 }
6459 if (triggerId && !triggerElement) {
6460 if (this.throwOnMissingTrigger) {
6461 throw new Error(true ? `Base UI: ${this.componentName}Handle.open() was called with the trigger id "${triggerId}", but no matching trigger is registered with this handle. An anchored popup cannot open without a trigger to anchor to. Pass the id of a mounted ${this.componentName}.Trigger that has this handle set on its "handle" prop.` : formatErrorMessage_default(99, this.componentName, triggerId, this.componentName));
6462 }
6463 if (true) {
6464 console.warn(`Base UI: ${this.componentName}Handle.open: No trigger found with id "${triggerId}". The popup will open, but the trigger will not be associated with it.`);
6465 }
6466 }
6467 attachedStore.setOpen(true, createChangeEventDetails(reason_parts_exports.imperativeAction, void 0, triggerElement));
6468 }
6469 /**
6470 * Closes the popup by setting the attached root's store to closed, or a no-op (with a dev warning)
6471 * while no root is attached. Shared by every concrete handle's public `close()` method.
6472 *
6473 * This method should only be called in an event handler or an effect (not during rendering).
6474 */
6475 closePopup() {
6476 const attachedStore = this.attachedStore;
6477 if (attachedStore === null) {
6478 if (true) {
6479 console.warn(`Base UI: ${this.componentName}Handle.close() was called while no root using this handle is mounted. The call was ignored.`);
6480 }
6481 return;
6482 }
6483 attachedStore.setOpen(false, createChangeEventDetails(reason_parts_exports.imperativeAction));
6484 }
6485 };
6486
6487 // node_modules/@base-ui/react/utils/popups/popupStoreUtils.mjs
6488 var React29 = __toESM(require_react(), 1);
6489 var ReactDOM4 = __toESM(require_react_dom(), 1);
6490
6491 // node_modules/@base-ui/react/floating-ui-react/hooks/useSyncedFloatingRootContext.mjs
6492 var React28 = __toESM(require_react(), 1);
6493
6494 // node_modules/@base-ui/utils/store/useStore.mjs
6495 var React26 = __toESM(require_react(), 1);
6496 var import_shim = __toESM(require_shim(), 1);
6497 var import_with_selector = __toESM(require_with_selector(), 1);
6498
6499 // node_modules/@base-ui/utils/fastHooks.mjs
6500 var React25 = __toESM(require_react(), 1);
6501 var hooks = [];
6502 var currentInstance = void 0;
6503 function getInstance() {
6504 return currentInstance;
6505 }
6506 function register2(hook) {
6507 hooks.push(hook);
6508 }
6509 function fastComponent(fn) {
6510 const FastComponent = (props, forwardedRef) => {
6511 const instance = useRefWithInit(createInstance).current;
6512 let result;
6513 try {
6514 currentInstance = instance;
6515 for (const hook of hooks) {
6516 hook.before(instance);
6517 }
6518 result = fn(props, forwardedRef);
6519 for (const hook of hooks) {
6520 hook.after(instance);
6521 }
6522 instance.didInitialize = true;
6523 } finally {
6524 currentInstance = void 0;
6525 }
6526 return result;
6527 };
6528 FastComponent.displayName = fn.displayName || fn.name;
6529 return FastComponent;
6530 }
6531 function fastComponentRef(fn) {
6532 return /* @__PURE__ */ React25.forwardRef(fastComponent(fn));
6533 }
6534 function createInstance() {
6535 return {
6536 didInitialize: false
6537 };
6538 }
6539
6540 // node_modules/@base-ui/utils/store/useStore.mjs
6541 var canUseRawUseSyncExternalStore = isReactVersionAtLeast(19);
6542 var useStoreImplementation = canUseRawUseSyncExternalStore ? useStoreFast : useStoreLegacy;
6543 function useStore(store3, selector, a1, a2, a3) {
6544 return useStoreImplementation(store3, selector, a1, a2, a3);
6545 }
6546 function useStoreR19(store3, selector, a1, a2, a3) {
6547 const getSelection = React26.useCallback(() => selector(store3.getSnapshot(), a1, a2, a3), [store3, selector, a1, a2, a3]);
6548 return (0, import_shim.useSyncExternalStore)(store3.subscribe, getSelection, getSelection);
6549 }
6550 register2({
6551 before(instance) {
6552 instance.syncIndex = 0;
6553 if (!instance.didInitialize) {
6554 instance.syncTick = 1;
6555 instance.syncHooks = [];
6556 instance.didChangeStore = true;
6557 instance.getSnapshot = () => {
6558 let didChange2 = false;
6559 for (let i = 0; i < instance.syncHooks.length; i += 1) {
6560 const hook = instance.syncHooks[i];
6561 const value = hook.selector(hook.store.state, hook.a1, hook.a2, hook.a3);
6562 if (!Object.is(hook.value, value)) {
6563 didChange2 = true;
6564 hook.value = value;
6565 }
6566 }
6567 if (didChange2) {
6568 instance.syncTick += 1;
6569 }
6570 return instance.syncTick;
6571 };
6572 }
6573 },
6574 after(instance) {
6575 if (instance.syncHooks.length > 0) {
6576 if (instance.didChangeStore) {
6577 instance.didChangeStore = false;
6578 instance.subscribe = (onStoreChange) => {
6579 const stores = /* @__PURE__ */ new Set();
6580 for (const hook of instance.syncHooks) {
6581 stores.add(hook.store);
6582 }
6583 const unsubscribes = [];
6584 for (const store3 of stores) {
6585 unsubscribes.push(store3.subscribe(onStoreChange));
6586 }
6587 return () => {
6588 for (const unsubscribe of unsubscribes) {
6589 unsubscribe();
6590 }
6591 };
6592 };
6593 }
6594 (0, import_shim.useSyncExternalStore)(instance.subscribe, instance.getSnapshot, instance.getSnapshot);
6595 }
6596 }
6597 });
6598 function useStoreFast(store3, selector, a1, a2, a3) {
6599 const instance = getInstance();
6600 if (!instance) {
6601 return useStoreR19(store3, selector, a1, a2, a3);
6602 }
6603 const index2 = instance.syncIndex;
6604 instance.syncIndex += 1;
6605 let hook;
6606 if (!instance.didInitialize) {
6607 hook = {
6608 store: store3,
6609 selector,
6610 a1,
6611 a2,
6612 a3,
6613 value: selector(store3.getSnapshot(), a1, a2, a3)
6614 };
6615 instance.syncHooks.push(hook);
6616 } else {
6617 hook = instance.syncHooks[index2];
6618 if (hook.store !== store3 || hook.selector !== selector || !Object.is(hook.a1, a1) || !Object.is(hook.a2, a2) || !Object.is(hook.a3, a3)) {
6619 if (hook.store !== store3) {
6620 instance.didChangeStore = true;
6621 }
6622 hook.store = store3;
6623 hook.selector = selector;
6624 hook.a1 = a1;
6625 hook.a2 = a2;
6626 hook.a3 = a3;
6627 hook.value = selector(store3.getSnapshot(), a1, a2, a3);
6628 }
6629 }
6630 return hook.value;
6631 }
6632 function useStoreLegacy(store3, selector, a1, a2, a3) {
6633 return (0, import_with_selector.useSyncExternalStoreWithSelector)(store3.subscribe, store3.getSnapshot, store3.getSnapshot, (state) => selector(state, a1, a2, a3));
6634 }
6635
6636 // node_modules/@base-ui/utils/store/Store.mjs
6637 var Store = class {
6638 /**
6639 * Creates a store with the given initial state, constructing the class it is called on.
6640 * Calling it on a generic base class (e.g. `ReactStore.create(...)`) constructs that
6641 * class but degrades the inferred instance type to `Store`; use `new` there instead.
6642 */
6643 static create(state) {
6644 return new this(state);
6645 }
6646 /**
6647 * The current state of the store.
6648 * This property is updated immediately when the state changes as a result of calling {@link setState}, {@link update}, or {@link set}.
6649 * To subscribe to state changes, use the {@link useState} method. The value returned by {@link useState} is updated after the component renders (similarly to React's useState).
6650 * The values can be used directly (to avoid subscribing to the store) in effects or event handlers.
6651 *
6652 * Do not modify properties in state directly. Instead, use the provided methods to ensure proper state management and listener notification.
6653 */
6654 // Internal state to handle recursive `setState()` calls
6655 constructor(state) {
6656 this.state = state;
6657 this.listeners = /* @__PURE__ */ new Set();
6658 this.updateTick = 0;
6659 }
6660 /**
6661 * Registers a listener that will be called whenever the store's state changes.
6662 *
6663 * @param fn The listener function to be called on state changes.
6664 * @returns A function to unsubscribe the listener.
6665 */
6666 subscribe = (fn) => {
6667 this.listeners.add(fn);
6668 return () => {
6669 this.listeners.delete(fn);
6670 };
6671 };
6672 /**
6673 * Returns the current state of the store.
6674 */
6675 getSnapshot = () => {
6676 return this.state;
6677 };
6678 /**
6679 * Updates the entire store's state and notifies all registered listeners.
6680 *
6681 * @param newState The new state to set for the store.
6682 */
6683 setState(newState) {
6684 if (this.state === newState) {
6685 return;
6686 }
6687 this.state = newState;
6688 this.updateTick += 1;
6689 const currentTick = this.updateTick;
6690 for (const listener of this.listeners) {
6691 if (currentTick !== this.updateTick) {
6692 return;
6693 }
6694 listener(newState);
6695 }
6696 }
6697 /**
6698 * Merges the provided changes into the current state and notifies listeners if there are changes.
6699 * Each value must match its state key. Pass an exact known subset rather than a broad
6700 * `Partial<State>`, which may contain `undefined` for required state fields.
6701 *
6702 * @param changes An object containing the changes to apply to the current state.
6703 */
6704 update(changes) {
6705 for (const key in changes) {
6706 if (!Object.is(this.state[key], changes[key])) {
6707 this.setState({
6708 ...this.state,
6709 ...changes
6710 });
6711 return;
6712 }
6713 }
6714 }
6715 /**
6716 * Sets a specific key in the store's state to a new value and notifies listeners if the value has changed.
6717 *
6718 * @param key The key in the store's state to update.
6719 * @param value The new value to set for the specified key.
6720 */
6721 set(key, value) {
6722 if (!Object.is(this.state[key], value)) {
6723 this.setState({
6724 ...this.state,
6725 [key]: value
6726 });
6727 }
6728 }
6729 /**
6730 * Gives the state a new reference and updates all registered listeners.
6731 */
6732 notifyAll() {
6733 const newState = {
6734 ...this.state
6735 };
6736 this.setState(newState);
6737 }
6738 use(selector, a1, a2, a3) {
6739 return useStore(this, selector, a1, a2, a3);
6740 }
6741 };
6742
6743 // node_modules/@base-ui/utils/store/ReactStore.mjs
6744 var React27 = __toESM(require_react(), 1);
6745 var ReactStore = class extends Store {
6746 /**
6747 * Creates a new ReactStore instance.
6748 *
6749 * @param state Initial state of the store.
6750 * @param context Non-reactive context values.
6751 * @param selectors Optional selectors for use with `useState`.
6752 */
6753 constructor(state, context = {}, selectors3) {
6754 super(state);
6755 this.context = context;
6756 this.selectors = selectors3;
6757 }
6758 /**
6759 * Non-reactive values such as refs, callbacks, etc.
6760 */
6761 /**
6762 * Synchronizes a single external value into the store.
6763 *
6764 * Note that the while the value in `state` is updated immediately, the value returned
6765 * by `useState` is updated before the next render (similarly to React's `useState`).
6766 */
6767 useSyncedValue(key, value) {
6768 React27.useDebugValue(key);
6769 const store3 = this;
6770 useIsoLayoutEffect(() => {
6771 if (store3.state[key] !== value) {
6772 store3.set(key, value);
6773 }
6774 }, [store3, key, value]);
6775 }
6776 /**
6777 * Synchronizes a single external value into the store and
6778 * cleans it up (sets to `undefined`) on unmount.
6779 *
6780 * Note that the while the value in `state` is updated immediately, the value returned
6781 * by `useState` is updated before the next render (similarly to React's `useState`).
6782 */
6783 useSyncedValueWithCleanup(key, value) {
6784 const store3 = this;
6785 useIsoLayoutEffect(() => {
6786 if (store3.state[key] !== value) {
6787 store3.set(key, value);
6788 }
6789 return () => {
6790 store3.set(key, void 0);
6791 };
6792 }, [store3, key, value]);
6793 }
6794 /**
6795 * Synchronizes multiple external values into the store.
6796 * Each value must match its state key. Pass an exact known subset rather than a broad
6797 * `Partial<State>`, which may contain `undefined` for required state fields.
6798 *
6799 * Note that the while the values in `state` are updated immediately, the values returned
6800 * by `useState` are updated before the next render (similarly to React's `useState`).
6801 *
6802 * @param statePart An exact subset of state fields to synchronize. Unknown keys are not accepted.
6803 */
6804 useSyncedValues(statePart) {
6805 const store3 = this;
6806 if (true) {
6807 React27.useDebugValue(statePart, (p) => Object.keys(p));
6808 const keys = React27.useRef(Object.keys(statePart)).current;
6809 const nextKeys = Object.keys(statePart);
6810 if (keys.length !== nextKeys.length || keys.some((key, index2) => key !== nextKeys[index2])) {
6811 console.error("ReactStore.useSyncedValues expects the same prop keys on every render. Keys should be stable.");
6812 }
6813 }
6814 const dependencies = Object.values(statePart);
6815 useIsoLayoutEffect(() => {
6816 store3.update(statePart);
6817 }, [store3, ...dependencies]);
6818 }
6819 /**
6820 * Registers a controllable prop pair (`controlled`, `defaultValue`) for a specific key. If `controlled`
6821 * is non-undefined, the store's state at `key` is updated to match `controlled`.
6822 */
6823 useControlledProp(key, controlled) {
6824 React27.useDebugValue(key);
6825 const store3 = this;
6826 const isControlled = controlled !== void 0;
6827 useIsoLayoutEffect(() => {
6828 if (isControlled && !Object.is(store3.state[key], controlled)) {
6829 store3.setState({
6830 ...store3.state,
6831 [key]: controlled
6832 });
6833 }
6834 }, [store3, key, controlled, isControlled]);
6835 if (true) {
6836 const cache = this.controlledValues ??= /* @__PURE__ */ new Map();
6837 if (!cache.has(key)) {
6838 cache.set(key, isControlled);
6839 }
6840 const previouslyControlled = cache.get(key);
6841 if (previouslyControlled !== void 0 && previouslyControlled !== isControlled) {
6842 console.error(`A component is changing the ${isControlled ? "" : "un"}controlled state of ${key.toString()} to be ${isControlled ? "un" : ""}controlled. Elements should not switch from uncontrolled to controlled (or vice versa).`);
6843 }
6844 }
6845 }
6846 /** Gets the current value from the store using a selector with the provided key.
6847 *
6848 * @param key Key of the selector to use.
6849 */
6850 select(key, a1, a2, a3) {
6851 const selector = this.selectors[key];
6852 return selector(this.state, a1, a2, a3);
6853 }
6854 /**
6855 * Returns a value from the store's state using a selector function.
6856 * Used to subscribe to specific parts of the state.
6857 * This methods causes a rerender whenever the selected state changes.
6858 *
6859 * @param key Key of the selector to use.
6860 */
6861 useState(key, a1, a2, a3) {
6862 React27.useDebugValue(key);
6863 return useStore(this, this.selectors[key], a1, a2, a3);
6864 }
6865 /**
6866 * Wraps a function with `useStableCallback` to ensure it has a stable reference
6867 * and assigns it to the context.
6868 *
6869 * @param key Key of the event callback. Must be a function in the context.
6870 * @param fn Function to assign.
6871 */
6872 useContextCallback(key, fn) {
6873 React27.useDebugValue(key);
6874 const stableFunction = useStableCallback(fn ?? NOOP);
6875 this.context[key] = stableFunction;
6876 }
6877 /**
6878 * Returns a stable setter function for a specific key in the store's state.
6879 * It's commonly used to pass as a ref callback to React elements.
6880 *
6881 * @param key Key of the state to set.
6882 */
6883 useStateSetter(key) {
6884 const ref = React27.useRef(void 0);
6885 if (ref.current === void 0) {
6886 ref.current = (value) => {
6887 this.set(key, value);
6888 };
6889 }
6890 return ref.current;
6891 }
6892 /**
6893 * Observes changes derived from the store's selectors and calls the listener when the selected value changes.
6894 *
6895 * @param key Key of the selector to observe.
6896 * @param listener Listener function called when the selector result changes.
6897 */
6898 observe(selector, listener) {
6899 let selectFn;
6900 if (typeof selector === "function") {
6901 selectFn = selector;
6902 } else {
6903 selectFn = this.selectors[selector];
6904 }
6905 let prevValue = selectFn(this.state);
6906 listener(prevValue, prevValue, this);
6907 return this.subscribe((nextState) => {
6908 const nextValue = selectFn(nextState);
6909 if (!Object.is(prevValue, nextValue)) {
6910 const oldValue = prevValue;
6911 prevValue = nextValue;
6912 listener(nextValue, oldValue, this);
6913 }
6914 });
6915 }
6916 };
6917
6918 // node_modules/@base-ui/react/floating-ui-react/components/FloatingRootStore.mjs
6919 var selectors = {
6920 open: (state) => state.open,
6921 transitionStatus: (state) => state.transitionStatus,
6922 domReferenceElement: (state) => state.domReferenceElement,
6923 referenceElement: (state) => state.positionReference ?? state.referenceElement,
6924 floatingElement: (state) => state.floatingElement,
6925 floatingId: (state) => state.floatingId
6926 };
6927 var FloatingRootStore = class extends ReactStore {
6928 constructor(options) {
6929 const {
6930 syncOnly,
6931 nested,
6932 onOpenChange,
6933 triggerElements,
6934 ...initialState
6935 } = options;
6936 super({
6937 ...initialState,
6938 positionReference: initialState.referenceElement,
6939 domReferenceElement: initialState.referenceElement
6940 }, {
6941 onOpenChange,
6942 dataRef: {
6943 current: {}
6944 },
6945 events: createEventEmitter(),
6946 nested,
6947 triggerElements
6948 }, selectors);
6949 this.syncOnly = syncOnly;
6950 }
6951 /**
6952 * Syncs the event used by hover logic to distinguish hover-open from click-like interaction.
6953 */
6954 syncOpenEvent = (newOpen, event) => {
6955 if (!newOpen || !this.state.open || // Prevent a pending hover-open from overwriting a click-open event, while allowing
6956 // click events to upgrade a hover-open.
6957 event != null && isClickLikeEvent(event)) {
6958 this.context.dataRef.current.openEvent = newOpen ? event : void 0;
6959 }
6960 };
6961 /**
6962 * Runs the root-owned side effects for an open state change.
6963 */
6964 dispatchOpenChange = (newOpen, eventDetails) => {
6965 this.syncOpenEvent(newOpen, eventDetails.event);
6966 const details = {
6967 open: newOpen,
6968 reason: eventDetails.reason,
6969 nativeEvent: eventDetails.event,
6970 nested: this.context.nested,
6971 triggerElement: eventDetails.trigger
6972 };
6973 this.context.events.emit("openchange", details);
6974 };
6975 /**
6976 * Emits the `openchange` event through the internal event emitter and calls the `onOpenChange` handler with the provided arguments.
6977 *
6978 * @param newOpen The new open state.
6979 * @param eventDetails Details about the event that triggered the open state change.
6980 */
6981 setOpen = (newOpen, eventDetails) => {
6982 if (this.syncOnly) {
6983 this.context.onOpenChange?.(newOpen, eventDetails);
6984 return;
6985 }
6986 this.dispatchOpenChange(newOpen, eventDetails);
6987 this.context.onOpenChange?.(newOpen, eventDetails);
6988 };
6989 };
6990
6991 // node_modules/@base-ui/react/floating-ui-react/hooks/useSyncedFloatingRootContext.mjs
6992 function useSyncedFloatingRootContext(options) {
6993 const {
6994 popupStore,
6995 treatPopupAsFloatingElement = false,
6996 floatingRootContext: floatingRootContextProp,
6997 floatingId,
6998 nested,
6999 onOpenChange
7000 } = options;
7001 const open3 = popupStore.useState("open");
7002 const referenceElement = popupStore.useState("activeTriggerElement");
7003 const floatingElement = popupStore.useState(treatPopupAsFloatingElement ? "popupElement" : "positionerElement");
7004 const triggerElements = popupStore.context.triggerElements;
7005 const handleOpenChange = onOpenChange;
7006 const internalStoreRef = React28.useRef(null);
7007 if (floatingRootContextProp === void 0 && internalStoreRef.current === null) {
7008 internalStoreRef.current = new FloatingRootStore({
7009 open: open3,
7010 transitionStatus: void 0,
7011 referenceElement,
7012 floatingElement,
7013 triggerElements,
7014 onOpenChange: handleOpenChange,
7015 floatingId,
7016 syncOnly: true,
7017 nested
7018 });
7019 }
7020 const store3 = floatingRootContextProp ?? internalStoreRef.current;
7021 popupStore.useSyncedValue("floatingId", floatingId);
7022 useIsoLayoutEffect(() => {
7023 const valuesToSync = {
7024 open: open3,
7025 floatingId,
7026 referenceElement,
7027 floatingElement
7028 };
7029 if (isElement(referenceElement)) {
7030 valuesToSync.domReferenceElement = referenceElement;
7031 }
7032 if (store3.state.positionReference === store3.state.referenceElement) {
7033 valuesToSync.positionReference = referenceElement;
7034 }
7035 store3.update(valuesToSync);
7036 }, [open3, floatingId, referenceElement, floatingElement, store3]);
7037 store3.context.onOpenChange = handleOpenChange;
7038 store3.context.nested = nested;
7039 return store3;
7040 }
7041
7042 // node_modules/@base-ui/react/utils/popups/popupStoreUtils.mjs
7043 var FOCUSABLE_POPUP_PROPS = {
7044 tabIndex: -1,
7045 [FOCUSABLE_ATTRIBUTE]: ""
7046 };
7047 function usePopupRootStore(createStore, treatPopupAsFloatingElement = false) {
7048 const floatingId = useId();
7049 const nested = useFloatingParentNodeId() != null;
7050 const store3 = useRefWithInit(() => createStore(floatingId, nested)).current;
7051 useSyncedFloatingRootContext({
7052 popupStore: store3,
7053 treatPopupAsFloatingElement,
7054 floatingRootContext: store3.state.floatingRootContext,
7055 floatingId,
7056 nested,
7057 onOpenChange: store3.setOpen
7058 });
7059 return store3;
7060 }
7061 function PopupHandleAttachment({
7062 handle,
7063 store: store3
7064 }) {
7065 useIsoLayoutEffect(() => {
7066 return handle.attachStore(store3);
7067 }, [handle, store3]);
7068 return null;
7069 }
7070 function syncTriggerCount(store3) {
7071 const triggerCount = store3.context.triggerElements.size;
7072 if (store3.select("open") && store3.state.triggerCount !== triggerCount) {
7073 store3.set("triggerCount", triggerCount);
7074 }
7075 }
7076 function useTriggerRegistration(id, store3) {
7077 const registrationRef = React29.useRef(null);
7078 return useStableCallback((element) => {
7079 const registration = registrationRef.current;
7080 if (registration !== null) {
7081 if (registration.element === element && registration.store === store3 && registration.id === id) {
7082 return;
7083 }
7084 registrationRef.current = null;
7085 const registeredStore = registration.store;
7086 if (registeredStore.context.triggerElements.getById(registration.id) === registration.element) {
7087 registeredStore.context.triggerElements.delete(registration.id);
7088 syncTriggerCount(registeredStore);
7089 }
7090 }
7091 if (element !== null && id !== void 0) {
7092 registrationRef.current = {
7093 store: store3,
7094 id,
7095 element
7096 };
7097 store3.context.triggerElements.add(id, element);
7098 syncTriggerCount(store3);
7099 }
7100 });
7101 }
7102 function createPopupOpenState(state, open3, trigger, preventUnmountOnClose = false) {
7103 let preventUnmountingOnClose = state.preventUnmountingOnClose;
7104 if (open3) {
7105 preventUnmountingOnClose = false;
7106 } else if (preventUnmountOnClose) {
7107 preventUnmountingOnClose = true;
7108 }
7109 const triggerId = trigger?.id ?? null;
7110 let activeTriggerId = state.activeTriggerId;
7111 let activeTriggerElement = state.activeTriggerElement;
7112 if (triggerId || open3) {
7113 activeTriggerId = triggerId;
7114 activeTriggerElement = trigger ?? null;
7115 }
7116 return {
7117 open: open3,
7118 preventUnmountingOnClose,
7119 activeTriggerId,
7120 activeTriggerElement
7121 };
7122 }
7123 function attachPreventUnmountOnClose(eventDetails) {
7124 let preventUnmountOnClose = false;
7125 eventDetails.preventUnmountOnClose = () => {
7126 preventUnmountOnClose = true;
7127 };
7128 return () => preventUnmountOnClose;
7129 }
7130 function applyPopupOpenChange(store3, nextOpen, eventDetails, options = {}) {
7131 const reason = eventDetails.reason;
7132 const isHover = reason === reason_parts_exports.triggerHover;
7133 const isFocusOpen = nextOpen && reason === reason_parts_exports.triggerFocus;
7134 const isDismissClose = !nextOpen && (reason === reason_parts_exports.triggerPress || reason === reason_parts_exports.escapeKey);
7135 const shouldPreventUnmountOnClose = attachPreventUnmountOnClose(eventDetails);
7136 store3.context.onOpenChange?.(nextOpen, eventDetails);
7137 if (eventDetails.isCanceled) {
7138 return;
7139 }
7140 options.onBeforeDispatch?.();
7141 store3.state.floatingRootContext.dispatchOpenChange(nextOpen, eventDetails);
7142 const changeState = () => {
7143 const popupOpenState = createPopupOpenState(store3.state, nextOpen, eventDetails.trigger, shouldPreventUnmountOnClose());
7144 const updatedState = {
7145 ...options.extraState,
7146 ...popupOpenState
7147 };
7148 if (isFocusOpen) {
7149 updatedState.instantType = "focus";
7150 } else if (isDismissClose) {
7151 updatedState.instantType = "dismiss";
7152 } else if (isHover) {
7153 updatedState.instantType = void 0;
7154 }
7155 store3.update(updatedState);
7156 };
7157 if (isHover) {
7158 ReactDOM4.flushSync(changeState);
7159 } else {
7160 changeState();
7161 }
7162 }
7163 function useTriggerDataForwarding(triggerId, triggerElementRef, store3, stateUpdates) {
7164 const isMountedByThisTrigger = store3.useState("isMountedByTrigger", triggerId);
7165 const baseRegisterTrigger = useTriggerRegistration(triggerId, store3);
7166 const applyTriggerData = useStableCallback((element) => {
7167 const open3 = store3.select("open");
7168 const activeTriggerId = store3.select("activeTriggerId");
7169 if (activeTriggerId === triggerId) {
7170 const changes = {
7171 activeTriggerElement: element,
7172 ...open3 ? stateUpdates : null
7173 };
7174 store3.update(changes);
7175 return;
7176 }
7177 if (activeTriggerId == null && open3) {
7178 const changes = {
7179 activeTriggerId: triggerId ?? null,
7180 activeTriggerElement: element,
7181 ...stateUpdates
7182 };
7183 store3.update(changes);
7184 }
7185 });
7186 const registerTrigger = useStableCallback((element) => {
7187 baseRegisterTrigger(element);
7188 if (element) {
7189 applyTriggerData(element);
7190 }
7191 });
7192 useIsoLayoutEffect(() => {
7193 registerTrigger(triggerElementRef.current);
7194 return () => registerTrigger(null);
7195 }, [registerTrigger, triggerElementRef, store3, triggerId]);
7196 useIsoLayoutEffect(() => {
7197 if (isMountedByThisTrigger) {
7198 const changes = {
7199 activeTriggerElement: triggerElementRef.current,
7200 ...stateUpdates
7201 };
7202 store3.update(changes);
7203 }
7204 }, [isMountedByThisTrigger, store3, triggerElementRef, ...Object.values(stateUpdates)]);
7205 return {
7206 registerTrigger,
7207 isMountedByThisTrigger
7208 };
7209 }
7210 function useImplicitActiveTrigger(store3, options = {}) {
7211 const {
7212 closeOnActiveTriggerUnmount = false
7213 } = options;
7214 const resolvedActiveTriggerIdRef = React29.useRef(null);
7215 const open3 = store3.useState("open");
7216 const reactiveTriggerCount = store3.useState("triggerCount");
7217 const activeTriggerId = store3.useState("activeTriggerId");
7218 const reactiveActiveTriggerElement = store3.useState("activeTriggerElement");
7219 useIsoLayoutEffect(() => {
7220 if (!open3) {
7221 resolvedActiveTriggerIdRef.current = null;
7222 if (store3.state.triggerCount !== 0) {
7223 store3.set("triggerCount", 0);
7224 }
7225 return;
7226 }
7227 const triggerCount = store3.context.triggerElements.size;
7228 const stateUpdates = {};
7229 if (store3.state.triggerCount !== triggerCount) {
7230 stateUpdates.triggerCount = triggerCount;
7231 }
7232 const currentActiveTriggerId = store3.select("activeTriggerId");
7233 let lostActiveTriggerId = null;
7234 if (currentActiveTriggerId) {
7235 const activeTriggerElement = store3.context.triggerElements.getById(currentActiveTriggerId);
7236 if (!activeTriggerElement) {
7237 for (const [triggerId, triggerElement] of store3.context.triggerElements.entries()) {
7238 if (triggerElement === store3.state.activeTriggerElement) {
7239 stateUpdates.activeTriggerId = triggerId;
7240 stateUpdates.activeTriggerElement = triggerElement;
7241 resolvedActiveTriggerIdRef.current = triggerId;
7242 break;
7243 }
7244 }
7245 if (stateUpdates.activeTriggerId === void 0) {
7246 if (resolvedActiveTriggerIdRef.current === currentActiveTriggerId) {
7247 lostActiveTriggerId = currentActiveTriggerId;
7248 } else {
7249 resolvedActiveTriggerIdRef.current = null;
7250 }
7251 }
7252 } else {
7253 resolvedActiveTriggerIdRef.current = currentActiveTriggerId;
7254 if (activeTriggerElement !== store3.state.activeTriggerElement) {
7255 stateUpdates.activeTriggerElement = activeTriggerElement;
7256 }
7257 }
7258 } else {
7259 resolvedActiveTriggerIdRef.current = null;
7260 }
7261 if (!lostActiveTriggerId && !currentActiveTriggerId && triggerCount === 1) {
7262 const iteratorResult = store3.context.triggerElements.entries().next();
7263 if (!iteratorResult.done) {
7264 const [implicitTriggerId, implicitTriggerElement] = iteratorResult.value;
7265 stateUpdates.activeTriggerId = implicitTriggerId;
7266 stateUpdates.activeTriggerElement = implicitTriggerElement;
7267 resolvedActiveTriggerIdRef.current = implicitTriggerId;
7268 }
7269 }
7270 if (stateUpdates.triggerCount !== void 0 || stateUpdates.activeTriggerId !== void 0 || stateUpdates.activeTriggerElement !== void 0) {
7271 store3.update(stateUpdates);
7272 }
7273 if (lostActiveTriggerId) {
7274 if (closeOnActiveTriggerUnmount) {
7275 queueMicrotask(() => {
7276 if (store3.select("open") && store3.select("activeTriggerId") === lostActiveTriggerId && !store3.context.triggerElements.getById(lostActiveTriggerId)) {
7277 const eventDetails = createChangeEventDetails(reason_parts_exports.none);
7278 store3.setOpen(false, eventDetails);
7279 if (!eventDetails.isCanceled) {
7280 store3.update({
7281 activeTriggerId: null,
7282 activeTriggerElement: null
7283 });
7284 }
7285 }
7286 });
7287 }
7288 }
7289 }, [open3, store3, reactiveTriggerCount, activeTriggerId, reactiveActiveTriggerElement, closeOnActiveTriggerUnmount]);
7290 }
7291 function useOpenStateTransitions(open3, store3, onUnmount, animateInitialOpen) {
7292 const {
7293 mounted,
7294 setMounted,
7295 transitionStatus
7296 } = useTransitionStatus(open3, false, false, animateInitialOpen);
7297 const preventUnmountingOnClose = store3.useState("preventUnmountingOnClose");
7298 const syncedPreventUnmountingOnClose = open3 ? false : preventUnmountingOnClose;
7299 store3.useSyncedValues({
7300 mounted,
7301 transitionStatus,
7302 preventUnmountingOnClose: syncedPreventUnmountingOnClose
7303 });
7304 const forceUnmount = useStableCallback(() => {
7305 setMounted(false);
7306 store3.update({
7307 activeTriggerId: null,
7308 activeTriggerElement: null,
7309 mounted: false,
7310 preventUnmountingOnClose: false
7311 });
7312 onUnmount?.();
7313 store3.context.onOpenChangeComplete?.(false);
7314 });
7315 useOpenChangeComplete({
7316 enabled: mounted && !open3 && !syncedPreventUnmountingOnClose,
7317 open: open3,
7318 ref: store3.context.popupRef,
7319 onComplete() {
7320 if (!open3) {
7321 forceUnmount();
7322 }
7323 }
7324 });
7325 return {
7326 forceUnmount,
7327 transitionStatus
7328 };
7329 }
7330 function usePopupInteractionProps(store3, statePart) {
7331 store3.useSyncedValues(statePart);
7332 useIsoLayoutEffect(() => () => {
7333 store3.update({
7334 activeTriggerProps: EMPTY_OBJECT,
7335 inactiveTriggerProps: EMPTY_OBJECT,
7336 popupProps: EMPTY_OBJECT
7337 });
7338 }, [store3]);
7339 }
7340
7341 // node_modules/@base-ui/react/utils/popups/popupTriggerMap.mjs
7342 var devElementIdsByMap;
7343 function getDevElementIds(map) {
7344 devElementIdsByMap ??= /* @__PURE__ */ new WeakMap();
7345 let elementIds = devElementIdsByMap.get(map);
7346 if (!elementIds) {
7347 elementIds = /* @__PURE__ */ new WeakMap();
7348 devElementIdsByMap.set(map, elementIds);
7349 }
7350 return elementIds;
7351 }
7352 var PopupTriggerMap = class {
7353 constructor() {
7354 this.idMap = /* @__PURE__ */ new Map();
7355 }
7356 /**
7357 * Adds a trigger element with the given ID.
7358 *
7359 * Note: The provided element is assumed to not be registered under multiple IDs.
7360 */
7361 add(id, element) {
7362 if (true) {
7363 const elementIds = getDevElementIds(this);
7364 const existingId = elementIds.get(element);
7365 if (existingId !== void 0 && existingId !== id) {
7366 throw new Error("Base UI: A trigger element cannot be registered under multiple IDs in PopupTriggerMap.");
7367 }
7368 const previousElement = this.idMap.get(id);
7369 if (previousElement !== void 0 && previousElement !== element) {
7370 elementIds.delete(previousElement);
7371 }
7372 elementIds.set(element, id);
7373 }
7374 this.idMap.set(id, element);
7375 }
7376 /**
7377 * Removes the trigger element with the given ID.
7378 */
7379 delete(id) {
7380 if (true) {
7381 const element = this.idMap.get(id);
7382 if (element !== void 0) {
7383 devElementIdsByMap?.get(this)?.delete(element);
7384 }
7385 }
7386 this.idMap.delete(id);
7387 }
7388 /**
7389 * Whether the given element is registered as a trigger.
7390 */
7391 hasElement(element) {
7392 for (const registered of this.idMap.values()) {
7393 if (registered === element) {
7394 return true;
7395 }
7396 }
7397 return false;
7398 }
7399 /**
7400 * Whether there is a registered trigger element matching the given predicate.
7401 */
7402 hasMatchingElement(predicate) {
7403 for (const element of this.idMap.values()) {
7404 if (predicate(element)) {
7405 return true;
7406 }
7407 }
7408 return false;
7409 }
7410 /**
7411 * Returns the trigger element associated with the given ID, or undefined if no such element exists.
7412 */
7413 getById(id) {
7414 return this.idMap.get(id);
7415 }
7416 /**
7417 * Returns an iterable of all registered trigger entries, where each entry is a tuple of [id, element].
7418 */
7419 entries() {
7420 return this.idMap.entries();
7421 }
7422 /**
7423 * Returns an iterable of all registered trigger elements.
7424 */
7425 elements() {
7426 return this.idMap.values();
7427 }
7428 /**
7429 * Returns the number of registered trigger elements.
7430 */
7431 get size() {
7432 return this.idMap.size;
7433 }
7434 };
7435
7436 // node_modules/@base-ui/react/utils/popups/store.mjs
7437 function createInitialPopupStoreState(triggerElements, floatingId, nested = false) {
7438 return {
7439 open: false,
7440 openProp: void 0,
7441 mounted: false,
7442 transitionStatus: void 0,
7443 floatingRootContext: new FloatingRootStore({
7444 open: false,
7445 transitionStatus: void 0,
7446 floatingElement: null,
7447 referenceElement: null,
7448 triggerElements,
7449 floatingId,
7450 syncOnly: true,
7451 nested,
7452 onOpenChange: void 0
7453 }),
7454 floatingId,
7455 triggerCount: 0,
7456 preventUnmountingOnClose: false,
7457 payload: void 0,
7458 activeTriggerId: null,
7459 activeTriggerElement: null,
7460 triggerIdProp: void 0,
7461 popupElement: null,
7462 positionerElement: null,
7463 activeTriggerProps: EMPTY_OBJECT,
7464 inactiveTriggerProps: EMPTY_OBJECT,
7465 popupProps: EMPTY_OBJECT
7466 };
7467 }
7468 var activeTriggerIdSelector = (state) => state.triggerIdProp ?? state.activeTriggerId;
7469 var openSelector = (state) => state.openProp ?? state.open;
7470 var popupIdSelector = (state) => {
7471 const popupId = state.popupElement?.id ?? state.floatingId;
7472 return popupId || void 0;
7473 };
7474 function triggerOwnsOpenPopup(state, triggerId) {
7475 return triggerId !== void 0 && openSelector(state) && activeTriggerIdSelector(state) === triggerId;
7476 }
7477 function triggerOwnsOpenPopupOrIsOnlyTrigger(state, triggerId) {
7478 if (triggerOwnsOpenPopup(state, triggerId)) {
7479 return true;
7480 }
7481 return triggerId !== void 0 && openSelector(state) && activeTriggerIdSelector(state) == null && state.triggerCount === 1;
7482 }
7483 var popupStoreSelectors = {
7484 open: openSelector,
7485 mounted: (state) => state.mounted,
7486 transitionStatus: (state) => state.transitionStatus,
7487 floatingRootContext: (state) => state.floatingRootContext,
7488 triggerCount: (state) => state.triggerCount,
7489 preventUnmountingOnClose: (state) => state.preventUnmountingOnClose,
7490 payload: (state) => state.payload,
7491 activeTriggerId: activeTriggerIdSelector,
7492 activeTriggerElement: (state) => state.mounted ? state.activeTriggerElement : null,
7493 popupId: popupIdSelector,
7494 /**
7495 * Whether the trigger with the given ID was used to open the popup.
7496 */
7497 isTriggerActive: (state, triggerId) => triggerId !== void 0 && activeTriggerIdSelector(state) === triggerId,
7498 /**
7499 * Whether the popup is open and was activated by a trigger with the given ID.
7500 */
7501 isOpenedByTrigger: (state, triggerId) => triggerOwnsOpenPopup(state, triggerId),
7502 /**
7503 * Whether the popup is mounted and was activated by a trigger with the given ID.
7504 */
7505 isMountedByTrigger: (state, triggerId) => triggerId !== void 0 && activeTriggerIdSelector(state) === triggerId && state.mounted,
7506 triggerProps: (state, isActive) => isActive ? state.activeTriggerProps : state.inactiveTriggerProps,
7507 /**
7508 * Popup id for the trigger that currently owns the open popup.
7509 */
7510 triggerPopupId: (state, triggerId) => triggerOwnsOpenPopupOrIsOnlyTrigger(state, triggerId) ? popupIdSelector(state) : void 0,
7511 popupProps: (state) => state.popupProps,
7512 popupElement: (state) => state.popupElement,
7513 positionerElement: (state) => state.positionerElement
7514 };
7515
7516 // node_modules/@base-ui/react/utils/popups/usePopupHandleStore.mjs
7517 var React30 = __toESM(require_react(), 1);
7518 var import_shim2 = __toESM(require_shim(), 1);
7519 function usePopupHandleStore(handle) {
7520 const subscribe = React30.useCallback((listener) => {
7521 if (handle === void 0) {
7522 return NOOP;
7523 }
7524 return handle.subscribeStore(listener);
7525 }, [handle]);
7526 const getSnapshot = React30.useCallback(() => {
7527 return handle === void 0 ? void 0 : handle.store;
7528 }, [handle]);
7529 return (0, import_shim2.useSyncExternalStore)(subscribe, getSnapshot, () => handle?.serverStore);
7530 }
7531
7532 // node_modules/@base-ui/react/floating-ui-react/hooks/useFloating.mjs
7533 function useBaseUIFloating(options) {
7534 return useFloatingWithStore(options, options.rootContext);
7535 }
7536 function useFloatingWithStore(options, store3) {
7537 const {
7538 nodeId,
7539 externalTree
7540 } = options;
7541 const referenceElement = store3.useState("referenceElement");
7542 const floatingElement = store3.useState("floatingElement");
7543 const domReferenceElement = store3.useState("domReferenceElement");
7544 const open3 = store3.useState("open");
7545 const floatingId = store3.useState("floatingId");
7546 const [positionReference, setPositionReferenceRaw] = React31.useState(null);
7547 const [localDomReference, setLocalDomReference] = React31.useState(void 0);
7548 const [localFloatingElement, setLocalFloatingElement] = React31.useState(void 0);
7549 const domReferenceRef = React31.useRef(null);
7550 const tree = useFloatingTree(externalTree);
7551 const storeElements = React31.useMemo(() => ({
7552 reference: referenceElement,
7553 floating: floatingElement,
7554 domReference: domReferenceElement
7555 }), [referenceElement, floatingElement, domReferenceElement]);
7556 const position = useFloating({
7557 ...options,
7558 elements: {
7559 ...storeElements,
7560 ...positionReference && {
7561 reference: positionReference
7562 }
7563 }
7564 });
7565 const localDomReferenceElement = isElement(localDomReference) ? localDomReference : null;
7566 const syncedFloatingElement = localFloatingElement === void 0 ? store3.state.floatingElement : localFloatingElement;
7567 store3.useSyncedValue("referenceElement", localDomReference ?? null);
7568 store3.useSyncedValue("domReferenceElement", localDomReference === void 0 ? domReferenceElement : localDomReferenceElement);
7569 store3.useSyncedValue("floatingElement", syncedFloatingElement);
7570 const setPositionReference = React31.useCallback((node) => {
7571 const computedPositionReference = isElement(node) ? {
7572 getBoundingClientRect: () => node.getBoundingClientRect(),
7573 getClientRects: () => node.getClientRects(),
7574 contextElement: node
7575 } : node;
7576 setPositionReferenceRaw(computedPositionReference);
7577 position.refs.setReference(computedPositionReference);
7578 }, [position.refs]);
7579 const setReference = React31.useCallback((node) => {
7580 if (isElement(node) || node === null) {
7581 domReferenceRef.current = node;
7582 setLocalDomReference(node);
7583 }
7584 if (isElement(position.refs.reference.current) || position.refs.reference.current === null || // Don't allow setting virtual elements using the old technique back to
7585 // `null` to support `positionReference` + an unstable `reference`
7586 // callback ref.
7587 node !== null && !isElement(node)) {
7588 position.refs.setReference(node);
7589 }
7590 }, [position.refs, setLocalDomReference]);
7591 const setFloating = React31.useCallback((node) => {
7592 setLocalFloatingElement(node);
7593 position.refs.setFloating(node);
7594 }, [position.refs]);
7595 const refs = React31.useMemo(() => ({
7596 ...position.refs,
7597 setReference,
7598 setFloating,
7599 setPositionReference,
7600 domReference: domReferenceRef
7601 }), [position.refs, setReference, setFloating, setPositionReference]);
7602 const elements = React31.useMemo(() => ({
7603 ...position.elements,
7604 domReference: domReferenceElement
7605 }), [position.elements, domReferenceElement]);
7606 const context = React31.useMemo(() => ({
7607 ...position,
7608 dataRef: store3.context.dataRef,
7609 open: open3,
7610 onOpenChange: store3.setOpen,
7611 events: store3.context.events,
7612 floatingId,
7613 refs,
7614 elements,
7615 nodeId,
7616 rootStore: store3
7617 }), [position, refs, elements, nodeId, store3, open3, floatingId]);
7618 useIsoLayoutEffect(() => {
7619 if (domReferenceElement) {
7620 domReferenceRef.current = domReferenceElement;
7621 }
7622 }, [domReferenceElement]);
7623 useIsoLayoutEffect(() => {
7624 store3.context.dataRef.current.floatingContext = context;
7625 const node = tree?.nodesRef.current.find((n) => n.id === nodeId);
7626 if (node) {
7627 node.context = context;
7628 }
7629 });
7630 return React31.useMemo(() => ({
7631 ...position,
7632 context,
7633 refs,
7634 elements,
7635 rootStore: store3
7636 }), [position, refs, elements, context, store3]);
7637 }
7638
7639 // node_modules/@base-ui/react/floating-ui-react/hooks/useFocus.mjs
7640 var React32 = __toESM(require_react(), 1);
7641 var isMacSafari = parts_exports.os.mac && parts_exports.engine.webkit;
7642 function useFocus(context, props = {}) {
7643 const {
7644 enabled = true,
7645 delay
7646 } = props;
7647 const store3 = "rootStore" in context ? context.rootStore : context;
7648 const {
7649 events,
7650 dataRef
7651 } = store3.context;
7652 const blockFocusRef = React32.useRef(false);
7653 const blockedReferenceRef = React32.useRef(null);
7654 const keyboardModalityRef = React32.useRef(true);
7655 const timeout = useTimeout();
7656 React32.useEffect(() => {
7657 const domReference = store3.select("domReferenceElement");
7658 if (!enabled) {
7659 return void 0;
7660 }
7661 const win = getWindow(domReference);
7662 function onBlur() {
7663 const currentDomReference = store3.select("domReferenceElement");
7664 if (!store3.select("open") && isHTMLElement(currentDomReference) && currentDomReference === activeElement(ownerDocument(currentDomReference))) {
7665 blockFocusRef.current = true;
7666 blockedReferenceRef.current = currentDomReference;
7667 }
7668 }
7669 function onKeyDown() {
7670 keyboardModalityRef.current = true;
7671 }
7672 function onPointerDown() {
7673 keyboardModalityRef.current = false;
7674 }
7675 return mergeCleanups(addEventListener(win, "blur", onBlur), isMacSafari && addEventListener(win, "keydown", onKeyDown, true), isMacSafari && addEventListener(win, "pointerdown", onPointerDown, true));
7676 }, [store3, enabled]);
7677 React32.useEffect(() => {
7678 if (!enabled) {
7679 return void 0;
7680 }
7681 function onOpenChangeLocal(details) {
7682 if (details.reason === reason_parts_exports.triggerPress || details.reason === reason_parts_exports.escapeKey) {
7683 const referenceElement = store3.select("domReferenceElement");
7684 if (isElement(referenceElement)) {
7685 blockedReferenceRef.current = referenceElement;
7686 blockFocusRef.current = true;
7687 }
7688 }
7689 }
7690 events.on("openchange", onOpenChangeLocal);
7691 return () => {
7692 events.off("openchange", onOpenChangeLocal);
7693 };
7694 }, [events, enabled, store3]);
7695 const reference = React32.useMemo(() => {
7696 function resetBlockedFocus() {
7697 blockFocusRef.current = false;
7698 blockedReferenceRef.current = null;
7699 }
7700 return {
7701 onMouseLeave() {
7702 resetBlockedFocus();
7703 },
7704 onFocus(event) {
7705 const focusTarget = event.currentTarget;
7706 if (blockFocusRef.current) {
7707 if (blockedReferenceRef.current === focusTarget) {
7708 return;
7709 }
7710 resetBlockedFocus();
7711 }
7712 const target = getTarget(event.nativeEvent);
7713 if (isElement(target)) {
7714 if (isMacSafari && !event.relatedTarget) {
7715 if (!keyboardModalityRef.current && !isTypeableElement(target)) {
7716 return;
7717 }
7718 } else if (!matchesFocusVisible(target)) {
7719 return;
7720 }
7721 }
7722 const movedFromOtherEnabledTrigger = isTargetInsideEnabledTrigger(event.relatedTarget, store3.context.triggerElements);
7723 const {
7724 nativeEvent,
7725 currentTarget
7726 } = event;
7727 const delayValue = typeof delay === "function" ? delay() : delay;
7728 if (store3.select("open") && movedFromOtherEnabledTrigger || delayValue === 0 || delayValue === void 0) {
7729 store3.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerFocus, nativeEvent, currentTarget));
7730 return;
7731 }
7732 timeout.start(delayValue, () => {
7733 if (blockFocusRef.current) {
7734 return;
7735 }
7736 store3.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerFocus, nativeEvent, currentTarget));
7737 });
7738 },
7739 onBlur(event) {
7740 resetBlockedFocus();
7741 const relatedTarget = event.relatedTarget;
7742 const nativeEvent = event.nativeEvent;
7743 const movedToFocusGuard = isElement(relatedTarget) && relatedTarget.hasAttribute(createAttribute("focus-guard")) && relatedTarget.getAttribute("data-type") === "outside";
7744 timeout.start(0, () => {
7745 const domReference = store3.select("domReferenceElement");
7746 const activeEl = activeElement(ownerDocument(domReference));
7747 if (!relatedTarget && activeEl === domReference) {
7748 return;
7749 }
7750 if (contains(dataRef.current.floatingContext?.refs.floating.current, activeEl) || contains(domReference, activeEl) || movedToFocusGuard) {
7751 return;
7752 }
7753 const nextFocusedElement = relatedTarget ?? activeEl;
7754 if (isTargetInsideEnabledTrigger(nextFocusedElement, store3.context.triggerElements)) {
7755 return;
7756 }
7757 store3.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerFocus, nativeEvent));
7758 });
7759 }
7760 };
7761 }, [dataRef, delay, store3, timeout]);
7762 return React32.useMemo(() => enabled ? {
7763 reference,
7764 trigger: reference
7765 } : {}, [enabled, reference]);
7766 }
7767
7768 // node_modules/@base-ui/react/floating-ui-react/hooks/useHoverFloatingInteraction.mjs
7769 var React33 = __toESM(require_react(), 1);
7770
7771 // node_modules/@base-ui/react/floating-ui-react/hooks/useHoverInteractionSharedState.mjs
7772 var HoverInteraction = class _HoverInteraction {
7773 constructor() {
7774 this.pointerType = void 0;
7775 this.interactedInside = false;
7776 this.handler = void 0;
7777 this.blockMouseMove = true;
7778 this.performedPointerEventsMutation = false;
7779 this.pointerEventsScopeElement = null;
7780 this.pointerEventsReferenceElement = null;
7781 this.pointerEventsFloatingElement = null;
7782 this.restTimeoutPending = false;
7783 this.openChangeTimeout = new Timeout();
7784 this.restTimeout = new Timeout();
7785 this.handleCloseOptions = void 0;
7786 }
7787 static create() {
7788 return new _HoverInteraction();
7789 }
7790 dispose = () => {
7791 this.openChangeTimeout.clear();
7792 this.restTimeout.clear();
7793 };
7794 disposeEffect = () => {
7795 return this.dispose;
7796 };
7797 };
7798 var pointerEventsMutationOwnerByScopeElement = /* @__PURE__ */ new WeakMap();
7799 function clearSafePolygonPointerEventsMutation(instance) {
7800 if (!instance.performedPointerEventsMutation) {
7801 return;
7802 }
7803 const scopeElement = instance.pointerEventsScopeElement;
7804 if (scopeElement && pointerEventsMutationOwnerByScopeElement.get(scopeElement) === instance) {
7805 instance.pointerEventsScopeElement?.style.removeProperty("pointer-events");
7806 instance.pointerEventsReferenceElement?.style.removeProperty("pointer-events");
7807 instance.pointerEventsFloatingElement?.style.removeProperty("pointer-events");
7808 pointerEventsMutationOwnerByScopeElement.delete(scopeElement);
7809 }
7810 instance.performedPointerEventsMutation = false;
7811 instance.pointerEventsScopeElement = null;
7812 instance.pointerEventsReferenceElement = null;
7813 instance.pointerEventsFloatingElement = null;
7814 }
7815 function applySafePolygonPointerEventsMutation(instance, options) {
7816 const {
7817 scopeElement,
7818 referenceElement,
7819 floatingElement
7820 } = options;
7821 const existingOwner = pointerEventsMutationOwnerByScopeElement.get(scopeElement);
7822 if (existingOwner && existingOwner !== instance) {
7823 clearSafePolygonPointerEventsMutation(existingOwner);
7824 }
7825 clearSafePolygonPointerEventsMutation(instance);
7826 instance.performedPointerEventsMutation = true;
7827 instance.pointerEventsScopeElement = scopeElement;
7828 instance.pointerEventsReferenceElement = referenceElement;
7829 instance.pointerEventsFloatingElement = floatingElement;
7830 pointerEventsMutationOwnerByScopeElement.set(scopeElement, instance);
7831 scopeElement.style.pointerEvents = "none";
7832 referenceElement.style.pointerEvents = "auto";
7833 floatingElement.style.pointerEvents = "auto";
7834 }
7835 function useHoverInteractionSharedState(store3) {
7836 const data = store3.context.dataRef.current;
7837 const instance = useRefWithInit(() => data.hoverInteractionState ?? HoverInteraction.create()).current;
7838 if (!data.hoverInteractionState) {
7839 data.hoverInteractionState = instance;
7840 }
7841 useOnMount(data.hoverInteractionState.disposeEffect);
7842 return data.hoverInteractionState;
7843 }
7844
7845 // node_modules/@base-ui/react/floating-ui-react/hooks/useHoverFloatingInteraction.mjs
7846 function useHoverFloatingInteraction(context, parameters = {}) {
7847 const {
7848 enabled = true,
7849 closeDelay: closeDelayProp = 0,
7850 nodeId: nodeIdProp
7851 } = parameters;
7852 const store3 = "rootStore" in context ? context.rootStore : context;
7853 const open3 = store3.useState("open");
7854 const floatingElement = store3.useState("floatingElement");
7855 const domReferenceElement = store3.useState("domReferenceElement");
7856 const {
7857 dataRef
7858 } = store3.context;
7859 const tree = useFloatingTree();
7860 const parentId = useFloatingParentNodeId();
7861 const instance = useHoverInteractionSharedState(store3);
7862 const childClosedTimeout = useTimeout();
7863 const isClickLikeOpenEvent2 = useStableCallback(() => {
7864 return isClickLikeOpenEvent(dataRef.current.openEvent?.type, instance.interactedInside);
7865 });
7866 const isHoverOpen = useStableCallback(() => {
7867 return isHoverOpenEvent(dataRef.current.openEvent?.type);
7868 });
7869 const clearPointerEvents = useStableCallback(() => {
7870 clearSafePolygonPointerEventsMutation(instance);
7871 });
7872 useIsoLayoutEffect(() => {
7873 if (!open3) {
7874 instance.pointerType = void 0;
7875 instance.restTimeoutPending = false;
7876 instance.interactedInside = false;
7877 clearPointerEvents();
7878 }
7879 }, [open3, instance, clearPointerEvents]);
7880 React33.useEffect(() => {
7881 return clearPointerEvents;
7882 }, [clearPointerEvents]);
7883 useIsoLayoutEffect(() => {
7884 if (!enabled) {
7885 return void 0;
7886 }
7887 if (open3 && instance.handleCloseOptions?.blockPointerEvents && isHoverOpen() && isElement(domReferenceElement) && floatingElement) {
7888 const ref = domReferenceElement;
7889 const floatingEl = floatingElement;
7890 const doc = ownerDocument(floatingElement);
7891 const parentFloating = tree?.nodesRef.current.find((node) => node.id === parentId)?.context?.elements.floating;
7892 if (parentFloating) {
7893 parentFloating.style.pointerEvents = "";
7894 }
7895 const cachedScopeElement = instance.pointerEventsScopeElement !== floatingEl ? instance.pointerEventsScopeElement : null;
7896 const parentScopeElement = parentFloating !== floatingEl ? parentFloating : null;
7897 const scopeElement = instance.handleCloseOptions?.getScope?.() ?? cachedScopeElement ?? parentScopeElement ?? ref.closest("[data-rootownerid]") ?? doc.body;
7898 applySafePolygonPointerEventsMutation(instance, {
7899 scopeElement,
7900 referenceElement: ref,
7901 floatingElement: floatingEl
7902 });
7903 return () => {
7904 clearPointerEvents();
7905 };
7906 }
7907 return void 0;
7908 }, [enabled, open3, domReferenceElement, floatingElement, instance, isHoverOpen, tree, parentId, clearPointerEvents]);
7909 React33.useEffect(() => {
7910 if (!enabled) {
7911 return void 0;
7912 }
7913 function hasParentChildren() {
7914 return !!(tree && parentId && getNodeChildren(tree.nodesRef.current, parentId).length > 0);
7915 }
7916 function closeWithDelay(event) {
7917 const closeDelay = getDelay(closeDelayProp, "close", instance.pointerType);
7918 const close = () => {
7919 store3.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event));
7920 tree?.events.emit("floating.closed", event);
7921 };
7922 if (closeDelay) {
7923 instance.openChangeTimeout.start(closeDelay, close);
7924 } else {
7925 instance.openChangeTimeout.clear();
7926 close();
7927 }
7928 }
7929 function handleInteractInside(event) {
7930 const target = getTarget(event);
7931 if (!isInteractiveElement(target)) {
7932 instance.interactedInside = false;
7933 return;
7934 }
7935 instance.interactedInside = target?.closest("[aria-haspopup]") != null;
7936 }
7937 function onFloatingMouseEnter() {
7938 instance.openChangeTimeout.clear();
7939 childClosedTimeout.clear();
7940 tree?.events.off("floating.closed", onNodeClosed);
7941 clearPointerEvents();
7942 }
7943 function onFloatingMouseLeave(event) {
7944 if (hasParentChildren() && tree) {
7945 tree.events.on("floating.closed", onNodeClosed);
7946 return;
7947 }
7948 if (isTargetInsideEnabledTrigger(event.relatedTarget, store3.context.triggerElements)) {
7949 return;
7950 }
7951 const currentNodeId = dataRef.current.floatingContext?.nodeId ?? nodeIdProp;
7952 const relatedTarget = event.relatedTarget;
7953 const isMovingIntoDescendantFloating = tree && currentNodeId && isElement(relatedTarget) && getNodeChildren(tree.nodesRef.current, currentNodeId, false).some((node) => contains(node.context?.elements.floating, relatedTarget));
7954 if (isMovingIntoDescendantFloating) {
7955 return;
7956 }
7957 if (instance.handler) {
7958 instance.handler(event);
7959 return;
7960 }
7961 clearPointerEvents();
7962 if (isHoverOpen() && !isClickLikeOpenEvent2()) {
7963 closeWithDelay(event);
7964 }
7965 }
7966 function onNodeClosed(event) {
7967 if (!tree || !parentId || hasParentChildren()) {
7968 return;
7969 }
7970 childClosedTimeout.start(0, () => {
7971 tree.events.off("floating.closed", onNodeClosed);
7972 store3.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event));
7973 tree.events.emit("floating.closed", event);
7974 });
7975 }
7976 const floating = floatingElement;
7977 return mergeCleanups(floating && addEventListener(floating, "mouseenter", onFloatingMouseEnter), floating && addEventListener(floating, "mouseleave", onFloatingMouseLeave), floating && addEventListener(floating, "pointerdown", handleInteractInside, true), () => {
7978 tree?.events.off("floating.closed", onNodeClosed);
7979 });
7980 }, [enabled, floatingElement, store3, dataRef, closeDelayProp, nodeIdProp, isHoverOpen, isClickLikeOpenEvent2, clearPointerEvents, instance, tree, parentId, childClosedTimeout]);
7981 }
7982
7983 // node_modules/@base-ui/react/floating-ui-react/hooks/useHoverReferenceInteraction.mjs
7984 var React34 = __toESM(require_react(), 1);
7985 var ReactDOM5 = __toESM(require_react_dom(), 1);
7986 var EMPTY_REF = {
7987 current: null
7988 };
7989 function useHoverReferenceInteraction(context, props = {}) {
7990 const {
7991 enabled = true,
7992 delay = 0,
7993 handleClose = null,
7994 mouseOnly = false,
7995 restMs = 0,
7996 move = true,
7997 triggerElementRef = EMPTY_REF,
7998 externalTree,
7999 isActiveTrigger = true,
8000 getHandleCloseContext,
8001 isClosing,
8002 shouldOpen: shouldOpenProp,
8003 guardStaleOpen = false
8004 } = props;
8005 const store3 = "rootStore" in context ? context.rootStore : context;
8006 const {
8007 dataRef,
8008 events
8009 } = store3.context;
8010 const tree = useFloatingTree(externalTree);
8011 const instance = useHoverInteractionSharedState(store3);
8012 const isHoverCloseActiveRef = React34.useRef(false);
8013 const handleCloseRef = useValueAsRef(handleClose);
8014 const delayRef = useValueAsRef(delay);
8015 const restMsRef = useValueAsRef(restMs);
8016 const enabledRef = useValueAsRef(enabled);
8017 const shouldOpenRef = useValueAsRef(shouldOpenProp);
8018 const isClosingRef = useValueAsRef(isClosing);
8019 const isClickLikeOpenEvent2 = useStableCallback(() => {
8020 return isClickLikeOpenEvent(dataRef.current.openEvent?.type, instance.interactedInside);
8021 });
8022 const checkShouldOpen = useStableCallback(() => {
8023 return shouldOpenRef.current?.() !== false;
8024 });
8025 const isOverInactiveTrigger = useStableCallback((currentDomReference, currentTarget, target) => {
8026 const allTriggers = store3.context.triggerElements;
8027 if (allTriggers.hasElement(currentTarget)) {
8028 return !currentDomReference || !contains(currentDomReference, currentTarget);
8029 }
8030 if (!isElement(target)) {
8031 return false;
8032 }
8033 const targetElement = target;
8034 return allTriggers.hasMatchingElement((trigger) => contains(trigger, targetElement)) && (!currentDomReference || !contains(currentDomReference, targetElement));
8035 });
8036 const cleanupMouseMoveHandler = useStableCallback(() => {
8037 if (!instance.handler) {
8038 return;
8039 }
8040 const doc = ownerDocument(store3.select("domReferenceElement"));
8041 doc.removeEventListener("mousemove", instance.handler);
8042 instance.handler = void 0;
8043 });
8044 const clearPointerEvents = useStableCallback(() => {
8045 clearSafePolygonPointerEventsMutation(instance);
8046 });
8047 if (isActiveTrigger) {
8048 instance.handleCloseOptions = handleClose?.__options;
8049 }
8050 React34.useEffect(() => cleanupMouseMoveHandler, [cleanupMouseMoveHandler]);
8051 React34.useEffect(() => {
8052 if (!enabled) {
8053 return void 0;
8054 }
8055 function onOpenChangeLocal(details) {
8056 if (!details.open) {
8057 isHoverCloseActiveRef.current = details.reason === reason_parts_exports.triggerHover;
8058 cleanupMouseMoveHandler();
8059 instance.openChangeTimeout.clear();
8060 instance.restTimeout.clear();
8061 instance.blockMouseMove = true;
8062 instance.restTimeoutPending = false;
8063 } else {
8064 isHoverCloseActiveRef.current = false;
8065 }
8066 }
8067 events.on("openchange", onOpenChangeLocal);
8068 return () => {
8069 events.off("openchange", onOpenChangeLocal);
8070 };
8071 }, [enabled, events, instance, cleanupMouseMoveHandler]);
8072 React34.useEffect(() => {
8073 if (!enabled) {
8074 return void 0;
8075 }
8076 function closeWithDelay(event, runElseBranch = true) {
8077 const closeDelay = getDelay(delayRef.current, "close", instance.pointerType);
8078 if (closeDelay) {
8079 instance.openChangeTimeout.start(closeDelay, () => {
8080 store3.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event));
8081 tree?.events.emit("floating.closed", event);
8082 });
8083 } else if (runElseBranch) {
8084 instance.openChangeTimeout.clear();
8085 store3.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event));
8086 tree?.events.emit("floating.closed", event);
8087 }
8088 }
8089 const trigger = triggerElementRef.current ?? (isActiveTrigger ? store3.select("domReferenceElement") : null);
8090 if (!isElement(trigger)) {
8091 return void 0;
8092 }
8093 function onMouseEnter(event) {
8094 instance.openChangeTimeout.clear();
8095 instance.blockMouseMove = false;
8096 if (mouseOnly && !isMouseLikePointerType(instance.pointerType)) {
8097 return;
8098 }
8099 const restMsValue = getRestMs(restMsRef.current);
8100 const openDelay = getDelay(delayRef.current, "open", instance.pointerType);
8101 const eventTarget = getTarget(event);
8102 const currentTarget = event.currentTarget ?? null;
8103 const currentDomReference = store3.select("domReferenceElement");
8104 let triggerNode = currentTarget;
8105 if (isElement(eventTarget) && !store3.context.triggerElements.hasElement(eventTarget)) {
8106 for (const triggerElement of store3.context.triggerElements.elements()) {
8107 if (contains(triggerElement, eventTarget)) {
8108 triggerNode = triggerElement;
8109 break;
8110 }
8111 }
8112 }
8113 if (isElement(currentTarget) && isElement(currentDomReference) && !store3.context.triggerElements.hasElement(currentTarget) && contains(currentTarget, currentDomReference)) {
8114 triggerNode = currentDomReference;
8115 }
8116 const isOverInactive = triggerNode == null ? false : isOverInactiveTrigger(currentDomReference, triggerNode, eventTarget);
8117 const isOpen = store3.select("open");
8118 const isInClosingTransition = isClosingRef.current?.() ?? store3.select("transitionStatus") === "ending";
8119 const isHoverCloseTransition = !isOpen && isInClosingTransition && isHoverCloseActiveRef.current;
8120 const isReenteringSameTriggerDuringCloseTransition = !isOverInactive && isElement(triggerNode) && isElement(currentDomReference) && contains(currentDomReference, triggerNode) && isHoverCloseTransition;
8121 const isRestOnlyDelay = restMsValue > 0 && !openDelay;
8122 const shouldOpenImmediately = isOverInactive && (isOpen || isHoverCloseTransition) || isReenteringSameTriggerDuringCloseTransition;
8123 const shouldOpen = !isOpen || isOverInactive;
8124 if (shouldOpenImmediately) {
8125 if (checkShouldOpen()) {
8126 store3.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, event, triggerNode));
8127 }
8128 return;
8129 }
8130 if (isRestOnlyDelay) {
8131 return;
8132 }
8133 if (openDelay) {
8134 instance.openChangeTimeout.start(openDelay, () => {
8135 if (shouldOpen && checkShouldOpen()) {
8136 store3.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, event, triggerNode));
8137 }
8138 });
8139 } else if (shouldOpen) {
8140 if (checkShouldOpen()) {
8141 store3.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, event, triggerNode));
8142 }
8143 }
8144 }
8145 function onMouseLeave(event) {
8146 if (isClickLikeOpenEvent2()) {
8147 clearPointerEvents();
8148 return;
8149 }
8150 cleanupMouseMoveHandler();
8151 const domReferenceElement = store3.select("domReferenceElement");
8152 const doc = ownerDocument(domReferenceElement);
8153 instance.restTimeout.clear();
8154 instance.restTimeoutPending = false;
8155 const handleCloseContextBase = dataRef.current.floatingContext ?? getHandleCloseContext?.();
8156 if (isTargetInsideEnabledTrigger(event.relatedTarget, store3.context.triggerElements)) {
8157 return;
8158 }
8159 if (handleCloseRef.current && handleCloseContextBase) {
8160 if (!store3.select("open")) {
8161 instance.openChangeTimeout.clear();
8162 }
8163 const currentTrigger = triggerElementRef.current;
8164 instance.handler = handleCloseRef.current({
8165 ...handleCloseContextBase,
8166 tree,
8167 x: event.clientX,
8168 y: event.clientY,
8169 onClose() {
8170 clearPointerEvents();
8171 cleanupMouseMoveHandler();
8172 if (enabledRef.current && !isClickLikeOpenEvent2() && currentTrigger === store3.select("domReferenceElement")) {
8173 closeWithDelay(event, true);
8174 }
8175 }
8176 });
8177 doc.addEventListener("mousemove", instance.handler);
8178 instance.handler(event);
8179 return;
8180 }
8181 const shouldClose = instance.pointerType === "touch" ? !contains(store3.select("floatingElement"), event.relatedTarget) : true;
8182 if (shouldClose) {
8183 closeWithDelay(event);
8184 }
8185 }
8186 function onMouseOut(event) {
8187 if (contains(trigger, event.relatedTarget)) {
8188 return;
8189 }
8190 instance.openChangeTimeout.clear();
8191 instance.restTimeout.clear();
8192 instance.restTimeoutPending = false;
8193 }
8194 const staleOpenGuard = guardStaleOpen ? addEventListener(trigger, "mouseout", onMouseOut) : void 0;
8195 if (move) {
8196 return mergeCleanups(addEventListener(trigger, "mousemove", onMouseEnter, {
8197 once: true
8198 }), addEventListener(trigger, "mouseenter", onMouseEnter), addEventListener(trigger, "mouseleave", onMouseLeave), staleOpenGuard);
8199 }
8200 return mergeCleanups(addEventListener(trigger, "mouseenter", onMouseEnter), addEventListener(trigger, "mouseleave", onMouseLeave), staleOpenGuard);
8201 }, [cleanupMouseMoveHandler, clearPointerEvents, dataRef, delayRef, store3, enabled, handleCloseRef, instance, isActiveTrigger, isOverInactiveTrigger, isClickLikeOpenEvent2, mouseOnly, move, restMsRef, triggerElementRef, tree, enabledRef, getHandleCloseContext, isClosingRef, checkShouldOpen, guardStaleOpen]);
8202 return React34.useMemo(() => {
8203 if (!enabled) {
8204 return void 0;
8205 }
8206 function setPointerRef(event) {
8207 instance.pointerType = event.pointerType;
8208 }
8209 return {
8210 onPointerDown: setPointerRef,
8211 onPointerEnter: setPointerRef,
8212 onMouseMove(event) {
8213 const {
8214 nativeEvent
8215 } = event;
8216 const trigger = event.currentTarget;
8217 const currentDomReference = store3.select("domReferenceElement");
8218 const currentOpen = store3.select("open");
8219 const isOverInactive = isOverInactiveTrigger(currentDomReference, trigger, event.target);
8220 if (mouseOnly && !isMouseLikePointerType(instance.pointerType)) {
8221 return;
8222 }
8223 if (currentOpen && isOverInactive && instance.handleCloseOptions?.blockPointerEvents) {
8224 const floatingElement = store3.select("floatingElement");
8225 if (floatingElement) {
8226 const scopeElement = instance.handleCloseOptions?.getScope?.() ?? trigger.ownerDocument.body;
8227 applySafePolygonPointerEventsMutation(instance, {
8228 scopeElement,
8229 referenceElement: trigger,
8230 floatingElement
8231 });
8232 }
8233 }
8234 const restMsValue = getRestMs(restMsRef.current);
8235 if (currentOpen && !isOverInactive || restMsValue === 0) {
8236 return;
8237 }
8238 if (!isOverInactive && instance.restTimeoutPending && event.movementX ** 2 + event.movementY ** 2 < 2) {
8239 return;
8240 }
8241 instance.restTimeout.clear();
8242 function handleMouseMove() {
8243 instance.restTimeoutPending = false;
8244 if (isClickLikeOpenEvent2()) {
8245 return;
8246 }
8247 const latestOpen = store3.select("open");
8248 if (!instance.blockMouseMove && (!latestOpen || isOverInactive) && checkShouldOpen()) {
8249 store3.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, nativeEvent, trigger));
8250 }
8251 }
8252 if (instance.pointerType === "touch") {
8253 ReactDOM5.flushSync(() => {
8254 handleMouseMove();
8255 });
8256 } else if (isOverInactive && currentOpen) {
8257 handleMouseMove();
8258 } else {
8259 instance.restTimeoutPending = true;
8260 instance.restTimeout.start(restMsValue, handleMouseMove);
8261 }
8262 }
8263 };
8264 }, [enabled, instance, isClickLikeOpenEvent2, isOverInactiveTrigger, mouseOnly, store3, restMsRef, checkShouldOpen]);
8265 }
8266
8267 // node_modules/@base-ui/react/floating-ui-react/safePolygon.mjs
8268 var CURSOR_SPEED_THRESHOLD = 0.1;
8269 var CURSOR_SPEED_THRESHOLD_SQUARED = CURSOR_SPEED_THRESHOLD * CURSOR_SPEED_THRESHOLD;
8270 var POLYGON_BUFFER = 0.5;
8271 function hasIntersectingEdge(pointX, pointY, xi, yi, xj, yj) {
8272 return yi >= pointY !== yj >= pointY && pointX <= (xj - xi) * (pointY - yi) / (yj - yi) + xi;
8273 }
8274 function isPointInQuadrilateral(pointX, pointY, x1, y1, x2, y2, x3, y3, x4, y4) {
8275 let isInsideValue = false;
8276 if (hasIntersectingEdge(pointX, pointY, x1, y1, x2, y2)) {
8277 isInsideValue = !isInsideValue;
8278 }
8279 if (hasIntersectingEdge(pointX, pointY, x2, y2, x3, y3)) {
8280 isInsideValue = !isInsideValue;
8281 }
8282 if (hasIntersectingEdge(pointX, pointY, x3, y3, x4, y4)) {
8283 isInsideValue = !isInsideValue;
8284 }
8285 if (hasIntersectingEdge(pointX, pointY, x4, y4, x1, y1)) {
8286 isInsideValue = !isInsideValue;
8287 }
8288 return isInsideValue;
8289 }
8290 function isInsideRect(pointX, pointY, rect) {
8291 return pointX >= rect.x && pointX <= rect.x + rect.width && pointY >= rect.y && pointY <= rect.y + rect.height;
8292 }
8293 function isInsideAxisAlignedRect(pointX, pointY, x1, y1, x2, y2) {
8294 const minX = Math.min(x1, x2);
8295 const maxX = Math.max(x1, x2);
8296 const minY = Math.min(y1, y2);
8297 const maxY = Math.max(y1, y2);
8298 return pointX >= minX && pointX <= maxX && pointY >= minY && pointY <= maxY;
8299 }
8300 function safePolygon(options = {}) {
8301 const {
8302 blockPointerEvents = false
8303 } = options;
8304 const timeout = new Timeout();
8305 const fn = ({
8306 x,
8307 y,
8308 placement,
8309 elements,
8310 onClose,
8311 nodeId,
8312 tree
8313 }) => {
8314 const side = placement?.split("-")[0];
8315 let hasLanded = false;
8316 let lastX = null;
8317 let lastY = null;
8318 let lastCursorTime = typeof performance !== "undefined" ? performance.now() : 0;
8319 function isCursorMovingSlowly(nextX, nextY) {
8320 const currentTime = performance.now();
8321 const elapsedTime = currentTime - lastCursorTime;
8322 if (lastX === null || lastY === null || elapsedTime === 0) {
8323 lastX = nextX;
8324 lastY = nextY;
8325 lastCursorTime = currentTime;
8326 return false;
8327 }
8328 const deltaX = nextX - lastX;
8329 const deltaY = nextY - lastY;
8330 const distanceSquared = deltaX * deltaX + deltaY * deltaY;
8331 const thresholdSquared = elapsedTime * elapsedTime * CURSOR_SPEED_THRESHOLD_SQUARED;
8332 lastX = nextX;
8333 lastY = nextY;
8334 lastCursorTime = currentTime;
8335 return distanceSquared < thresholdSquared;
8336 }
8337 function close() {
8338 timeout.clear();
8339 onClose();
8340 }
8341 return function onMouseMove(event) {
8342 timeout.clear();
8343 const domReference = elements.domReference;
8344 const floating = elements.floating;
8345 if (!domReference || !floating || side == null || x == null || y == null) {
8346 return void 0;
8347 }
8348 const {
8349 clientX,
8350 clientY
8351 } = event;
8352 const target = getTarget(event);
8353 const isLeave = event.type === "mouseleave";
8354 const isOverFloatingEl = contains(floating, target);
8355 const isOverReferenceEl = contains(domReference, target);
8356 if (isOverFloatingEl) {
8357 hasLanded = true;
8358 if (!isLeave) {
8359 return void 0;
8360 }
8361 }
8362 if (isOverReferenceEl) {
8363 hasLanded = false;
8364 if (!isLeave) {
8365 hasLanded = true;
8366 return void 0;
8367 }
8368 }
8369 if (isLeave && isElement(event.relatedTarget) && contains(floating, event.relatedTarget)) {
8370 return void 0;
8371 }
8372 function hasOpenChildNode() {
8373 return Boolean(tree && getNodeChildren(tree.nodesRef.current, nodeId).length > 0);
8374 }
8375 function closeIfNoOpenChild() {
8376 if (!hasOpenChildNode()) {
8377 close();
8378 }
8379 }
8380 if (hasOpenChildNode()) {
8381 return void 0;
8382 }
8383 const refRect = domReference.getBoundingClientRect();
8384 const rect = floating.getBoundingClientRect();
8385 const cursorLeaveFromRight = x > rect.right - rect.width / 2;
8386 const cursorLeaveFromBottom = y > rect.bottom - rect.height / 2;
8387 const isFloatingWider = rect.width > refRect.width;
8388 const isFloatingTaller = rect.height > refRect.height;
8389 const left = (isFloatingWider ? refRect : rect).left;
8390 const right = (isFloatingWider ? refRect : rect).right;
8391 const top = (isFloatingTaller ? refRect : rect).top;
8392 const bottom = (isFloatingTaller ? refRect : rect).bottom;
8393 if (side === "top" && y >= refRect.bottom - 1 || side === "bottom" && y <= refRect.top + 1 || side === "left" && x >= refRect.right - 1 || side === "right" && x <= refRect.left + 1) {
8394 closeIfNoOpenChild();
8395 return void 0;
8396 }
8397 let isInsideTroughRect = false;
8398 switch (side) {
8399 case "top":
8400 isInsideTroughRect = isInsideAxisAlignedRect(clientX, clientY, left, refRect.top + 1, right, rect.bottom - 1);
8401 break;
8402 case "bottom":
8403 isInsideTroughRect = isInsideAxisAlignedRect(clientX, clientY, left, rect.top + 1, right, refRect.bottom - 1);
8404 break;
8405 case "left":
8406 isInsideTroughRect = isInsideAxisAlignedRect(clientX, clientY, rect.right - 1, bottom, refRect.left + 1, top);
8407 break;
8408 case "right":
8409 isInsideTroughRect = isInsideAxisAlignedRect(clientX, clientY, refRect.right - 1, bottom, rect.left + 1, top);
8410 break;
8411 default:
8412 }
8413 if (isInsideTroughRect) {
8414 return void 0;
8415 }
8416 if (hasLanded && !isInsideRect(clientX, clientY, refRect)) {
8417 closeIfNoOpenChild();
8418 return void 0;
8419 }
8420 if (!isLeave && isCursorMovingSlowly(clientX, clientY)) {
8421 closeIfNoOpenChild();
8422 return void 0;
8423 }
8424 let isInsidePolygon = false;
8425 switch (side) {
8426 case "top": {
8427 const cursorXOffset = isFloatingWider ? POLYGON_BUFFER / 2 : POLYGON_BUFFER * 4;
8428 const cursorPointOneX = isFloatingWider ? x + cursorXOffset : cursorLeaveFromRight ? x + cursorXOffset : x - cursorXOffset;
8429 const cursorPointTwoX = isFloatingWider ? x - cursorXOffset : cursorLeaveFromRight ? x + cursorXOffset : x - cursorXOffset;
8430 const cursorPointY = y + POLYGON_BUFFER + 1;
8431 const commonYLeft = cursorLeaveFromRight ? rect.bottom - POLYGON_BUFFER : isFloatingWider ? rect.bottom - POLYGON_BUFFER : rect.top;
8432 const commonYRight = cursorLeaveFromRight ? isFloatingWider ? rect.bottom - POLYGON_BUFFER : rect.top : rect.bottom - POLYGON_BUFFER;
8433 isInsidePolygon = isPointInQuadrilateral(clientX, clientY, cursorPointOneX, cursorPointY, cursorPointTwoX, cursorPointY, rect.left, commonYLeft, rect.right, commonYRight);
8434 break;
8435 }
8436 case "bottom": {
8437 const cursorXOffset = isFloatingWider ? POLYGON_BUFFER / 2 : POLYGON_BUFFER * 4;
8438 const cursorPointOneX = isFloatingWider ? x + cursorXOffset : cursorLeaveFromRight ? x + cursorXOffset : x - cursorXOffset;
8439 const cursorPointTwoX = isFloatingWider ? x - cursorXOffset : cursorLeaveFromRight ? x + cursorXOffset : x - cursorXOffset;
8440 const cursorPointY = y - POLYGON_BUFFER;
8441 const commonYLeft = cursorLeaveFromRight ? rect.top + POLYGON_BUFFER : isFloatingWider ? rect.top + POLYGON_BUFFER : rect.bottom;
8442 const commonYRight = cursorLeaveFromRight ? isFloatingWider ? rect.top + POLYGON_BUFFER : rect.bottom : rect.top + POLYGON_BUFFER;
8443 isInsidePolygon = isPointInQuadrilateral(clientX, clientY, cursorPointOneX, cursorPointY, cursorPointTwoX, cursorPointY, rect.left, commonYLeft, rect.right, commonYRight);
8444 break;
8445 }
8446 case "left": {
8447 const cursorYOffset = isFloatingTaller ? POLYGON_BUFFER / 2 : POLYGON_BUFFER * 4;
8448 const cursorPointOneY = isFloatingTaller ? y + cursorYOffset : cursorLeaveFromBottom ? y + cursorYOffset : y - cursorYOffset;
8449 const cursorPointTwoY = isFloatingTaller ? y - cursorYOffset : cursorLeaveFromBottom ? y + cursorYOffset : y - cursorYOffset;
8450 const cursorPointX = x + POLYGON_BUFFER + 1;
8451 const commonXTop = cursorLeaveFromBottom ? rect.right - POLYGON_BUFFER : isFloatingTaller ? rect.right - POLYGON_BUFFER : rect.left;
8452 const commonXBottom = cursorLeaveFromBottom ? isFloatingTaller ? rect.right - POLYGON_BUFFER : rect.left : rect.right - POLYGON_BUFFER;
8453 isInsidePolygon = isPointInQuadrilateral(clientX, clientY, commonXTop, rect.top, commonXBottom, rect.bottom, cursorPointX, cursorPointOneY, cursorPointX, cursorPointTwoY);
8454 break;
8455 }
8456 case "right": {
8457 const cursorYOffset = isFloatingTaller ? POLYGON_BUFFER / 2 : POLYGON_BUFFER * 4;
8458 const cursorPointOneY = isFloatingTaller ? y + cursorYOffset : cursorLeaveFromBottom ? y + cursorYOffset : y - cursorYOffset;
8459 const cursorPointTwoY = isFloatingTaller ? y - cursorYOffset : cursorLeaveFromBottom ? y + cursorYOffset : y - cursorYOffset;
8460 const cursorPointX = x - POLYGON_BUFFER;
8461 const commonXTop = cursorLeaveFromBottom ? rect.left + POLYGON_BUFFER : isFloatingTaller ? rect.left + POLYGON_BUFFER : rect.right;
8462 const commonXBottom = cursorLeaveFromBottom ? isFloatingTaller ? rect.left + POLYGON_BUFFER : rect.right : rect.left + POLYGON_BUFFER;
8463 isInsidePolygon = isPointInQuadrilateral(clientX, clientY, cursorPointX, cursorPointOneY, cursorPointX, cursorPointTwoY, commonXTop, rect.top, commonXBottom, rect.bottom);
8464 break;
8465 }
8466 default:
8467 }
8468 if (!isInsidePolygon) {
8469 closeIfNoOpenChild();
8470 } else if (!hasLanded) {
8471 timeout.start(40, closeIfNoOpenChild);
8472 }
8473 return void 0;
8474 };
8475 };
8476 fn.__options = {
8477 ...options,
8478 blockPointerEvents
8479 };
8480 return fn;
8481 }
8482
8483 // node_modules/@base-ui/react/utils/NullStore.mjs
8484 var NullStore = class extends ReactStore {
8485 // `update`/`set`/`notifyAll` funnel through `setState` in the base `Store`, so overriding
8486 // `setState` alone would neutralize them today. They are overridden explicitly so the store stays
8487 // inert even if a future base-class change stops routing a mutator through `setState`.
8488 setState(_newState) {
8489 }
8490 update(_changes) {
8491 }
8492 set(_key, _value) {
8493 }
8494 notifyAll() {
8495 }
8496 };
8497
8498 // node_modules/@base-ui/utils/inertValue.mjs
8499 function inertValue(value) {
8500 if (isReactVersionAtLeast(19)) {
8501 return value;
8502 }
8503 return value ? "true" : void 0;
8504 }
8505
8506 // node_modules/@base-ui/react/internals/direction-context/DirectionContext.mjs
8507 var React35 = __toESM(require_react(), 1);
8508 var DirectionContext = /* @__PURE__ */ React35.createContext(void 0);
8509 if (true) DirectionContext.displayName = "DirectionContext";
8510 function useDirection() {
8511 const context = React35.useContext(DirectionContext);
8512 return context?.direction ?? "ltr";
8513 }
8514
8515 // node_modules/@base-ui/react/internals/useAnchorPositioning.mjs
8516 var React36 = __toESM(require_react(), 1);
8517
8518 // node_modules/@base-ui/react/floating-ui-react/middleware/arrow.mjs
8519 var baseArrow = (options) => ({
8520 name: "arrow",
8521 options,
8522 async fn(state) {
8523 const {
8524 x,
8525 y,
8526 placement,
8527 rects,
8528 platform: platform3,
8529 elements,
8530 middlewareData
8531 } = state;
8532 const {
8533 element,
8534 padding = 0,
8535 offsetParent = "real"
8536 } = evaluate(options, state) || {};
8537 if (element == null) {
8538 return {};
8539 }
8540 const paddingObject = getPaddingObject(padding);
8541 const coords = {
8542 x,
8543 y
8544 };
8545 const axis = getAlignmentAxis(placement);
8546 const length = getAxisLength(axis);
8547 const arrowDimensions = await platform3.getDimensions(element);
8548 const isYAxis = axis === "y";
8549 const minProp = isYAxis ? "top" : "left";
8550 const maxProp = isYAxis ? "bottom" : "right";
8551 const clientProp = isYAxis ? "clientHeight" : "clientWidth";
8552 const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];
8553 const startDiff = coords[axis] - rects.reference[axis];
8554 const arrowOffsetParent = offsetParent === "real" ? await platform3.getOffsetParent?.(element) : elements.floating;
8555 let clientSize = elements.floating[clientProp] || rects.floating[length];
8556 if (!clientSize || !await platform3.isElement?.(arrowOffsetParent)) {
8557 clientSize = elements.floating[clientProp] || rects.floating[length];
8558 }
8559 const centerToReference = endDiff / 2 - startDiff / 2;
8560 const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;
8561 const minPadding = Math.min(paddingObject[minProp], largestPossiblePadding);
8562 const maxPadding = Math.min(paddingObject[maxProp], largestPossiblePadding);
8563 const min2 = minPadding;
8564 const max2 = clientSize - arrowDimensions[length] - maxPadding;
8565 const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;
8566 const offset4 = clamp(min2, center, max2);
8567 const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset4 && rects.reference[length] / 2 - (center < min2 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;
8568 const alignmentOffset = shouldAddOffset ? center < min2 ? center - min2 : center - max2 : 0;
8569 return {
8570 [axis]: coords[axis] + alignmentOffset,
8571 data: {
8572 [axis]: offset4,
8573 centerOffset: center - offset4 - alignmentOffset,
8574 ...shouldAddOffset && {
8575 alignmentOffset
8576 }
8577 },
8578 reset: shouldAddOffset
8579 };
8580 }
8581 });
8582 var arrow4 = (options, deps) => {
8583 const {
8584 name: name2,
8585 fn
8586 } = baseArrow(options);
8587 return {
8588 name: name2,
8589 fn,
8590 options: [options, deps]
8591 };
8592 };
8593
8594 // node_modules/@base-ui/react/utils/hideMiddleware.mjs
8595 var hide4 = {
8596 name: "hide",
8597 async fn(state) {
8598 const {
8599 width,
8600 height,
8601 x,
8602 y
8603 } = state.rects.reference;
8604 const anchorHidden2 = width === 0 && height === 0 && x === 0 && y === 0;
8605 const overflow = await state.platform.detectOverflow(state, {
8606 elementContext: "reference"
8607 });
8608 const referenceHidden = overflow.top - height >= 0 || overflow.right - width >= 0 || overflow.bottom - height >= 0 || overflow.left - width >= 0;
8609 return {
8610 data: {
8611 referenceHidden: referenceHidden || anchorHidden2
8612 }
8613 };
8614 }
8615 };
8616
8617 // node_modules/@base-ui/react/utils/adaptiveOriginConstants.mjs
8618 var DEFAULT_SIDES = {
8619 sideX: "left",
8620 sideY: "top"
8621 };
8622
8623 // node_modules/@base-ui/react/utils/CommonPositionerCssVars.mjs
8624 var availableWidth = "--available-width";
8625 var availableHeight = "--available-height";
8626 var anchorWidth = "--anchor-width";
8627 var anchorHeight = "--anchor-height";
8628 var transformOrigin = "--transform-origin";
8629 var positionerWidth = "--positioner-width";
8630 var positionerHeight = "--positioner-height";
8631
8632 // node_modules/@base-ui/react/internals/useAnchorPositioning.mjs
8633 var AVAILABLE_WIDTH_VAR = availableWidth;
8634 var AVAILABLE_HEIGHT_VAR = availableHeight;
8635 function getLogicalSide(sideParam, renderedSide, isRtl) {
8636 const isLogicalSideParam = sideParam === "inline-start" || sideParam === "inline-end";
8637 const logicalRight = isRtl ? "inline-start" : "inline-end";
8638 const logicalLeft = isRtl ? "inline-end" : "inline-start";
8639 return {
8640 top: "top",
8641 right: isLogicalSideParam ? logicalRight : "right",
8642 bottom: "bottom",
8643 left: isLogicalSideParam ? logicalLeft : "left"
8644 }[renderedSide];
8645 }
8646 function getOffsetData(state, sideParam, isRtl) {
8647 const {
8648 rects,
8649 placement
8650 } = state;
8651 const data = {
8652 side: getLogicalSide(sideParam, getSide(placement), isRtl),
8653 align: getAlignment(placement) || "center",
8654 anchor: {
8655 width: rects.reference.width,
8656 height: rects.reference.height
8657 },
8658 positioner: {
8659 width: rects.floating.width,
8660 height: rects.floating.height
8661 }
8662 };
8663 return data;
8664 }
8665 function useAnchorPositioning(params) {
8666 return useAnchorPositioningWithHook(params, useBaseUIFloating);
8667 }
8668 function useAnchorPositioningWithHook(params, useFloatingHook) {
8669 const {
8670 // Public parameters
8671 anchor,
8672 positionMethod = "absolute",
8673 side: sideParam = "bottom",
8674 sideOffset = 0,
8675 align = "center",
8676 alignOffset = 0,
8677 collisionBoundary,
8678 collisionPadding: collisionPaddingParam = 5,
8679 sticky = false,
8680 arrowPadding = 5,
8681 disableAnchorTracking = false,
8682 inline: inlineMiddleware,
8683 // Private parameters
8684 keepMounted = false,
8685 floatingRootContext,
8686 mounted,
8687 collisionAvoidance,
8688 shift: shift4,
8689 nodeId,
8690 adaptiveOrigin: adaptiveOrigin2,
8691 lazyFlip = false,
8692 externalTree
8693 } = params;
8694 const [mountSide, setMountSide] = React36.useState(null);
8695 if (!mounted && mountSide !== null) {
8696 setMountSide(null);
8697 }
8698 const collisionAvoidanceSide = collisionAvoidance.side || "flip";
8699 const collisionAvoidanceAlign = collisionAvoidance.align || "flip";
8700 const collisionAvoidanceFallbackAxisSide = collisionAvoidance.fallbackAxisSide || "end";
8701 const shiftCrossAxis = shift4?.crossAxis ?? false;
8702 const shiftRootBoundary = shift4?.rootBoundary;
8703 const anchorFn = typeof anchor === "function" ? anchor : void 0;
8704 const anchorFnCallback = useStableCallback(anchorFn);
8705 const anchorDep = anchorFn ? anchorFnCallback : anchor;
8706 const anchorValueRef = useValueAsRef(anchor);
8707 const mountedRef = useValueAsRef(mounted);
8708 const direction = useDirection();
8709 const isRtl = direction === "rtl";
8710 const side = mountSide || {
8711 top: "top",
8712 right: "right",
8713 bottom: "bottom",
8714 left: "left",
8715 "inline-end": isRtl ? "left" : "right",
8716 "inline-start": isRtl ? "right" : "left"
8717 }[sideParam];
8718 const placement = align === "center" ? side : `${side}-${align}`;
8719 let collisionPadding = collisionPaddingParam;
8720 if (typeof collisionPadding === "number") {
8721 collisionPadding = {
8722 top: collisionPadding,
8723 right: collisionPadding,
8724 bottom: collisionPadding,
8725 left: collisionPadding
8726 };
8727 } else if (collisionPadding) {
8728 collisionPadding = {
8729 top: collisionPadding.top || 0,
8730 right: collisionPadding.right || 0,
8731 bottom: collisionPadding.bottom || 0,
8732 left: collisionPadding.left || 0
8733 };
8734 }
8735 const bias = 1;
8736 const biasTop = sideParam === "bottom" ? bias : 0;
8737 const biasBottom = sideParam === "top" ? bias : 0;
8738 const biasLeft = sideParam === "right" ? bias : 0;
8739 const biasRight = sideParam === "left" ? bias : 0;
8740 const commonCollisionProps = {
8741 boundary: collisionBoundary === "clipping-ancestors" ? "clippingAncestors" : collisionBoundary,
8742 padding: collisionPadding
8743 };
8744 const arrowRef = React36.useRef(null);
8745 const sideOffsetRef = useValueAsRef(sideOffset);
8746 const alignOffsetRef = useValueAsRef(alignOffset);
8747 const sideOffsetDep = typeof sideOffset !== "function" ? sideOffset : 0;
8748 const alignOffsetDep = typeof alignOffset !== "function" ? alignOffset : 0;
8749 const middleware = [];
8750 if (inlineMiddleware) {
8751 middleware.push(inlineMiddleware);
8752 }
8753 middleware.push(offset3((state) => {
8754 const data = getOffsetData(state, sideParam, isRtl);
8755 const sideAxis = typeof sideOffsetRef.current === "function" ? sideOffsetRef.current(data) : sideOffsetRef.current;
8756 const alignAxis = typeof alignOffsetRef.current === "function" ? alignOffsetRef.current(data) : alignOffsetRef.current;
8757 return {
8758 mainAxis: sideAxis,
8759 crossAxis: alignAxis,
8760 alignmentAxis: alignAxis
8761 };
8762 }, [sideOffsetDep, alignOffsetDep, isRtl, sideParam]));
8763 const shiftDisabled = collisionAvoidanceAlign === "none" && collisionAvoidanceSide !== "shift";
8764 const crossAxisShiftEnabled = !shiftDisabled && (sticky || shiftCrossAxis || collisionAvoidanceSide === "shift");
8765 const flipMiddleware = collisionAvoidanceSide === "none" ? null : flip3({
8766 ...commonCollisionProps,
8767 // Ensure the popup flips if it's been limited by its --available-height and it resizes.
8768 // Since the size() padding is smaller than the flip() padding, flip() will take precedence.
8769 padding: {
8770 top: collisionPadding.top + bias + biasTop,
8771 right: collisionPadding.right + bias + biasRight,
8772 bottom: collisionPadding.bottom + bias + biasBottom,
8773 left: collisionPadding.left + bias + biasLeft
8774 },
8775 mainAxis: !shiftCrossAxis && collisionAvoidanceSide === "flip",
8776 crossAxis: collisionAvoidanceAlign === "flip" ? "alignment" : false,
8777 fallbackAxisSideDirection: collisionAvoidanceFallbackAxisSide
8778 });
8779 const shiftMiddleware = shiftDisabled ? null : shift3({
8780 ...commonCollisionProps,
8781 // Use the Layout Viewport to avoid shifting around when pinch-zooming.
8782 rootBoundary: shiftRootBoundary,
8783 mainAxis: collisionAvoidanceAlign !== "none",
8784 crossAxis: crossAxisShiftEnabled,
8785 limiter: sticky || shiftCrossAxis ? void 0 : limitShift3((limitData) => {
8786 if (!arrowRef.current) {
8787 return {};
8788 }
8789 const {
8790 width,
8791 height
8792 } = arrowRef.current.getBoundingClientRect();
8793 const sideAxis = getSideAxis(getSide(limitData.placement));
8794 const arrowSize = sideAxis === "y" ? width : height;
8795 const offsetAmount = sideAxis === "y" ? collisionPadding.left + collisionPadding.right : collisionPadding.top + collisionPadding.bottom;
8796 return {
8797 offset: arrowSize / 2 + offsetAmount / 2
8798 };
8799 })
8800 }, [commonCollisionProps, sticky, shiftCrossAxis, shiftRootBoundary, collisionPadding, collisionAvoidanceAlign]);
8801 if (collisionAvoidanceSide === "shift" || collisionAvoidanceAlign === "shift" || align === "center") {
8802 middleware.push(shiftMiddleware, flipMiddleware);
8803 } else {
8804 middleware.push(flipMiddleware, shiftMiddleware);
8805 }
8806 middleware.push(size3({
8807 ...commonCollisionProps,
8808 apply({
8809 elements: {
8810 floating
8811 },
8812 availableWidth: availableWidth2,
8813 availableHeight: availableHeight2,
8814 rects
8815 }) {
8816 if (!mountedRef.current) {
8817 return;
8818 }
8819 const floatingStyle = floating.style;
8820 floatingStyle.setProperty(AVAILABLE_WIDTH_VAR, `${availableWidth2}px`);
8821 floatingStyle.setProperty(AVAILABLE_HEIGHT_VAR, `${availableHeight2}px`);
8822 const dpr = getWindow(floating).devicePixelRatio || 1;
8823 const {
8824 x: x2,
8825 y: y2,
8826 width,
8827 height
8828 } = rects.reference;
8829 const anchorWidth2 = (Math.round((x2 + width) * dpr) - Math.round(x2 * dpr)) / dpr;
8830 const anchorHeight2 = (Math.round((y2 + height) * dpr) - Math.round(y2 * dpr)) / dpr;
8831 floatingStyle.setProperty(anchorWidth, `${anchorWidth2}px`);
8832 floatingStyle.setProperty(anchorHeight, `${anchorHeight2}px`);
8833 }
8834 }), arrow4((state) => ({
8835 // `transform-origin` calculations rely on an element existing. If the arrow hasn't been set,
8836 // we'll create a fake element.
8837 element: arrowRef.current || ownerDocument(state.elements.floating).createElement("div"),
8838 // No padding for the fake arrow: it would displace aligned popups on narrow anchors.
8839 padding: arrowRef.current ? arrowPadding : 0,
8840 offsetParent: "floating"
8841 }), [arrowPadding]), {
8842 name: "transformOrigin",
8843 fn(state) {
8844 const {
8845 elements: {
8846 floating
8847 },
8848 middlewareData: middlewareData2,
8849 placement: renderedPlacement2,
8850 platform: platform3,
8851 rects,
8852 y: y2
8853 } = state;
8854 const renderedSide2 = getSide(renderedPlacement2);
8855 const renderedAlign2 = getAlignment(renderedPlacement2);
8856 const isVertical = getSideAxis(renderedSide2) === "y";
8857 const arrowEl = arrowRef.current;
8858 const sideOffsetValue = typeof sideOffset === "function" ? sideOffset(getOffsetData(state, sideParam, isRtl)) : sideOffset;
8859 let crossOrigin;
8860 if (!arrowEl && renderedAlign2 && Math.abs(isVertical ? middlewareData2.shift?.x || 0 : middlewareData2.shift?.y || 0) <= 1) {
8861 crossOrigin = renderedAlign2 === "start" === (isVertical && platform3.isRTL?.(floating) === true) ? "100%" : "0%";
8862 } else {
8863 const arrowOffset = isVertical ? middlewareData2.arrow?.x || 0 : middlewareData2.arrow?.y || 0;
8864 const arrowSize = isVertical ? arrowEl?.clientWidth || 0 : arrowEl?.clientHeight || 0;
8865 crossOrigin = `${arrowOffset + arrowSize / 2}px`;
8866 }
8867 let sideOrigin = renderedSide2 === "top" || renderedSide2 === "left" ? `calc(100% + ${sideOffsetValue}px)` : `${-sideOffsetValue}px`;
8868 if (crossAxisShiftEnabled && isVertical && Math.abs(middlewareData2.shift?.y || 0) > sideOffsetValue) {
8869 sideOrigin = `${rects.reference.y + rects.reference.height / 2 - y2}px`;
8870 }
8871 floating.style.setProperty(transformOrigin, isVertical ? `${crossOrigin} ${sideOrigin}` : `${sideOrigin} ${crossOrigin}`);
8872 return {};
8873 }
8874 }, hide4, adaptiveOrigin2);
8875 useIsoLayoutEffect(() => {
8876 if (!mounted && floatingRootContext) {
8877 floatingRootContext.update({
8878 referenceElement: null,
8879 floatingElement: null,
8880 domReferenceElement: null,
8881 positionReference: null
8882 });
8883 }
8884 }, [mounted, floatingRootContext]);
8885 const autoUpdateOptions = React36.useMemo(() => ({
8886 ancestorScroll: !disableAnchorTracking,
8887 elementResize: !disableAnchorTracking && typeof ResizeObserver !== "undefined",
8888 layoutShift: !disableAnchorTracking && typeof IntersectionObserver !== "undefined"
8889 }), [disableAnchorTracking]);
8890 const {
8891 refs,
8892 elements,
8893 x,
8894 y,
8895 middlewareData,
8896 update: update2,
8897 placement: renderedPlacement,
8898 context,
8899 isPositioned,
8900 floatingStyles: originalFloatingStyles
8901 } = useFloatingHook({
8902 rootContext: floatingRootContext,
8903 open: keepMounted ? mounted : void 0,
8904 placement,
8905 middleware,
8906 strategy: positionMethod,
8907 whileElementsMounted: keepMounted ? void 0 : (...args) => autoUpdate(...args, autoUpdateOptions),
8908 nodeId,
8909 externalTree
8910 });
8911 const {
8912 sideX,
8913 sideY
8914 } = middlewareData.adaptiveOrigin || DEFAULT_SIDES;
8915 const resolvedPosition = isPositioned ? positionMethod : "fixed";
8916 const floatingStyles = React36.useMemo(() => {
8917 let base;
8918 if (!isPositioned) {
8919 base = {
8920 position: resolvedPosition,
8921 top: 0,
8922 left: 0
8923 };
8924 } else if (adaptiveOrigin2) {
8925 base = {
8926 position: resolvedPosition,
8927 [sideX]: x,
8928 [sideY]: y
8929 };
8930 } else {
8931 base = {
8932 ...originalFloatingStyles,
8933 position: resolvedPosition
8934 };
8935 }
8936 base[AVAILABLE_WIDTH_VAR] = "100vw";
8937 base[AVAILABLE_HEIGHT_VAR] = "100vh";
8938 if (!isPositioned) {
8939 base.opacity = 0;
8940 }
8941 return base;
8942 }, [adaptiveOrigin2, resolvedPosition, sideX, x, sideY, y, originalFloatingStyles, isPositioned]);
8943 const registeredPositionReferenceRef = React36.useRef(null);
8944 useIsoLayoutEffect(() => {
8945 if (!mounted) {
8946 return;
8947 }
8948 const anchorValue = anchorValueRef.current;
8949 const resolvedAnchor = typeof anchorValue === "function" ? anchorValue() : anchorValue;
8950 const unwrappedElement = (isRef(resolvedAnchor) ? resolvedAnchor.current : resolvedAnchor) || null;
8951 const finalAnchor = unwrappedElement || null;
8952 if (finalAnchor !== registeredPositionReferenceRef.current) {
8953 refs.setPositionReference(finalAnchor);
8954 registeredPositionReferenceRef.current = finalAnchor;
8955 }
8956 }, [mounted, refs, anchorDep, anchorValueRef]);
8957 React36.useEffect(() => {
8958 if (!mounted) {
8959 return;
8960 }
8961 const anchorValue = anchorValueRef.current;
8962 if (typeof anchorValue === "function") {
8963 return;
8964 }
8965 if (isRef(anchorValue) && anchorValue.current !== registeredPositionReferenceRef.current) {
8966 refs.setPositionReference(anchorValue.current);
8967 registeredPositionReferenceRef.current = anchorValue.current;
8968 }
8969 }, [mounted, refs, anchorDep, anchorValueRef]);
8970 React36.useEffect(() => {
8971 if (keepMounted && mounted && elements.reference && elements.floating) {
8972 return autoUpdate(elements.reference, elements.floating, update2, autoUpdateOptions);
8973 }
8974 return void 0;
8975 }, [keepMounted, mounted, elements, update2, autoUpdateOptions]);
8976 const renderedSide = getSide(renderedPlacement);
8977 const logicalRenderedSide = getLogicalSide(sideParam, renderedSide, isRtl);
8978 const renderedAlign = getAlignment(renderedPlacement) || "center";
8979 const anchorHidden2 = Boolean(middlewareData.hide?.referenceHidden);
8980 useIsoLayoutEffect(() => {
8981 if (lazyFlip && mounted && isPositioned && renderedSide !== side) {
8982 setMountSide(renderedSide);
8983 }
8984 }, [lazyFlip, mounted, isPositioned, renderedSide, side]);
8985 const arrowStyles = React36.useMemo(() => ({
8986 position: "absolute",
8987 top: middlewareData.arrow?.y,
8988 left: middlewareData.arrow?.x
8989 }), [middlewareData.arrow]);
8990 const arrowUncentered = middlewareData.arrow?.centerOffset !== 0;
8991 return React36.useMemo(() => ({
8992 positionerStyles: floatingStyles,
8993 arrowStyles,
8994 arrowRef,
8995 arrowUncentered,
8996 side: logicalRenderedSide,
8997 align: renderedAlign,
8998 physicalSide: renderedSide,
8999 anchorHidden: anchorHidden2,
9000 refs,
9001 context,
9002 isPositioned,
9003 update: update2
9004 }), [floatingStyles, arrowStyles, arrowRef, arrowUncentered, logicalRenderedSide, renderedAlign, renderedSide, anchorHidden2, refs, context, isPositioned, update2]);
9005 }
9006 function isRef(param) {
9007 return param != null && "current" in param;
9008 }
9009
9010 // node_modules/@base-ui/react/internals/getDisabledMountTransitionStyles.mjs
9011 function getDisabledMountTransitionStyles(transitionStatus) {
9012 return transitionStatus === "starting" ? DISABLED_TRANSITIONS_STYLE : EMPTY_OBJECT;
9013 }
9014
9015 // node_modules/@base-ui/react/utils/usePositioner.mjs
9016 function usePositioner(componentProps, state, {
9017 styles,
9018 transitionStatus,
9019 props,
9020 refs,
9021 hidden,
9022 inert = false
9023 }) {
9024 const style = {
9025 ...styles
9026 };
9027 if (inert) {
9028 style.pointerEvents = "none";
9029 }
9030 return useRenderElement("div", componentProps, {
9031 state,
9032 ref: refs,
9033 props: [{
9034 role: "presentation",
9035 hidden,
9036 style
9037 }, getDisabledMountTransitionStyles(transitionStatus), props],
9038 stateAttributesMapping: popupStateMapping
9039 });
9040 }
9041
9042 // node_modules/@base-ui/react/button/Button.mjs
9043 var React37 = __toESM(require_react(), 1);
9044 var Button3 = /* @__PURE__ */ React37.forwardRef(function Button4(componentProps, forwardedRef) {
9045 const {
9046 render,
9047 className,
9048 disabled: disabled2 = false,
9049 focusableWhenDisabled = false,
9050 nativeButton = true,
9051 style,
9052 ...elementProps
9053 } = componentProps;
9054 const {
9055 getButtonProps,
9056 buttonRef
9057 } = useButton({
9058 disabled: disabled2,
9059 focusableWhenDisabled,
9060 native: nativeButton
9061 });
9062 const state = {
9063 disabled: disabled2
9064 };
9065 return useRenderElement("button", componentProps, {
9066 state,
9067 ref: [forwardedRef, buttonRef],
9068 props: [elementProps, getButtonProps]
9069 });
9070 });
9071 if (true) Button3.displayName = "Button";
9072
9073 // node_modules/@base-ui/react/collapsible/index.parts.mjs
9074 var index_parts_exports = {};
9075 __export(index_parts_exports, {
9076 Panel: () => CollapsiblePanel,
9077 Root: () => CollapsibleRoot,
9078 Trigger: () => CollapsibleTrigger
9079 });
9080
9081 // node_modules/@base-ui/react/collapsible/root/CollapsibleRoot.mjs
9082 var React38 = __toESM(require_react(), 1);
9083
9084 // node_modules/@base-ui/react/collapsible/root/stateAttributesMapping.mjs
9085 var collapsibleStateAttributesMapping = {
9086 ...collapsibleOpenStateMapping,
9087 ...transitionStatusMapping
9088 };
9089
9090 // node_modules/@base-ui/react/collapsible/root/CollapsibleRoot.mjs
9091 var import_jsx_runtime29 = __toESM(require_jsx_runtime(), 1);
9092 var CollapsibleRoot = /* @__PURE__ */ React38.forwardRef(function CollapsibleRoot2(componentProps, forwardedRef) {
9093 const {
9094 render,
9095 className,
9096 defaultOpen = false,
9097 disabled: disabled2 = false,
9098 onOpenChange: onOpenChangeProp,
9099 open: open3,
9100 style,
9101 ...elementProps
9102 } = componentProps;
9103 const onOpenChange = useStableCallback(onOpenChangeProp);
9104 const collapsible = useCollapsibleRoot({
9105 open: open3,
9106 defaultOpen,
9107 onOpenChange,
9108 disabled: disabled2
9109 });
9110 const state = React38.useMemo(() => ({
9111 open: collapsible.open,
9112 disabled: collapsible.disabled,
9113 transitionStatus: collapsible.transitionStatus
9114 }), [collapsible.open, collapsible.disabled, collapsible.transitionStatus]);
9115 const contextValue = React38.useMemo(() => ({
9116 ...collapsible,
9117 onOpenChange,
9118 state
9119 }), [collapsible, onOpenChange, state]);
9120 const element = useRenderElement("div", componentProps, {
9121 state,
9122 ref: forwardedRef,
9123 props: elementProps,
9124 stateAttributesMapping: collapsibleStateAttributesMapping
9125 });
9126 return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(CollapsibleRootContext.Provider, {
9127 value: contextValue,
9128 children: element
9129 });
9130 });
9131 if (true) CollapsibleRoot.displayName = "CollapsibleRoot";
9132
9133 // node_modules/@base-ui/react/collapsible/trigger/CollapsibleTrigger.mjs
9134 var React39 = __toESM(require_react(), 1);
9135 var stateAttributesMapping = {
9136 ...triggerOpenStateMapping,
9137 ...transitionStatusMapping
9138 };
9139 var CollapsibleTrigger = /* @__PURE__ */ React39.forwardRef(function CollapsibleTrigger2(componentProps, forwardedRef) {
9140 const {
9141 panelId,
9142 open: open3,
9143 handleTrigger,
9144 state,
9145 disabled: contextDisabled
9146 } = useCollapsibleRootContext();
9147 const {
9148 className,
9149 disabled: disabled2 = contextDisabled,
9150 render,
9151 nativeButton = true,
9152 style,
9153 ...elementProps
9154 } = componentProps;
9155 const {
9156 getButtonProps,
9157 buttonRef
9158 } = useButton({
9159 disabled: disabled2,
9160 focusableWhenDisabled: true,
9161 native: nativeButton
9162 });
9163 const element = useRenderElement("button", componentProps, {
9164 state,
9165 ref: [forwardedRef, buttonRef],
9166 props: [{
9167 "aria-controls": open3 ? panelId : void 0,
9168 "aria-expanded": open3,
9169 onClick: handleTrigger
9170 }, elementProps, getButtonProps],
9171 stateAttributesMapping
9172 });
9173 return element;
9174 });
9175 if (true) CollapsibleTrigger.displayName = "CollapsibleTrigger";
9176
9177 // node_modules/@base-ui/react/collapsible/panel/CollapsiblePanel.mjs
9178 var React40 = __toESM(require_react(), 1);
9179
9180 // node_modules/@base-ui/react/collapsible/panel/CollapsiblePanelCssVars.mjs
9181 var collapsiblePanelHeight = "--collapsible-panel-height";
9182 var collapsiblePanelWidth = "--collapsible-panel-width";
9183
9184 // node_modules/@base-ui/react/collapsible/panel/CollapsiblePanel.mjs
9185 var CollapsiblePanel = /* @__PURE__ */ React40.forwardRef(function CollapsiblePanel2(componentProps, forwardedRef) {
9186 const {
9187 className,
9188 hiddenUntilFound: hiddenUntilFoundProp,
9189 keepMounted: keepMountedProp,
9190 render,
9191 id: idProp,
9192 style,
9193 ...elementProps
9194 } = componentProps;
9195 if (true) {
9196 React40.useEffect(() => {
9197 if (hiddenUntilFoundProp && keepMountedProp === false) {
9198 warn("The `keepMounted={false}` prop on `Collapsible.Panel` is ignored when `hiddenUntilFound` is enabled, since the panel must remain mounted while closed.");
9199 }
9200 }, [hiddenUntilFoundProp, keepMountedProp]);
9201 }
9202 const {
9203 defaultPanelId,
9204 mounted,
9205 onOpenChange,
9206 open: open3,
9207 setMounted,
9208 setPanelIdState,
9209 setOpen,
9210 state,
9211 transitionStatus
9212 } = useCollapsibleRootContext();
9213 const hiddenUntilFound = hiddenUntilFoundProp ?? false;
9214 const keepMounted = keepMountedProp ?? false;
9215 const registeredId = idProp || void 0;
9216 const id = registeredId ?? defaultPanelId;
9217 useIsoLayoutEffect(() => {
9218 setPanelIdState((currentId) => registeredId ?? (currentId === null ? void 0 : currentId));
9219 return () => {
9220 setPanelIdState((currentId) => currentId === registeredId ? null : currentId);
9221 };
9222 }, [registeredId, setPanelIdState]);
9223 const {
9224 height,
9225 props,
9226 ref,
9227 shouldPreventOpenAnimation,
9228 shouldRender,
9229 transitionStatus: panelTransitionStatus,
9230 width
9231 } = useCollapsiblePanel({
9232 externalRef: forwardedRef,
9233 hiddenUntilFound,
9234 id,
9235 keepMounted,
9236 mounted,
9237 onOpenChange,
9238 open: open3,
9239 setMounted,
9240 setOpen,
9241 transitionStatus
9242 });
9243 const panelState = {
9244 ...state,
9245 transitionStatus: panelTransitionStatus
9246 };
9247 const resolvedStyle = resolveStyle(style, panelState);
9248 const element = useRenderElement("div", {
9249 ...componentProps,
9250 style: void 0
9251 }, {
9252 state: panelState,
9253 ref,
9254 props: [
9255 props,
9256 {
9257 style: {
9258 [collapsiblePanelHeight]: height === void 0 ? "auto" : `${height}px`,
9259 [collapsiblePanelWidth]: width === void 0 ? "auto" : `${width}px`
9260 }
9261 },
9262 elementProps,
9263 resolvedStyle ? {
9264 style: resolvedStyle
9265 } : void 0,
9266 // Resolve the public `style` prop so temporary `animationName: 'none'`
9267 // can still win after user's inline styles have been merged.
9268 shouldPreventOpenAnimation ? {
9269 style: {
9270 animationName: "none"
9271 }
9272 } : void 0
9273 ],
9274 stateAttributesMapping: collapsibleStateAttributesMapping
9275 });
9276 if (!shouldRender) {
9277 return null;
9278 }
9279 return element;
9280 });
9281 if (true) CollapsiblePanel.displayName = "CollapsiblePanel";
9282
9283 // node_modules/@base-ui/react/utils/usePopupViewport.mjs
9284 var React44 = __toESM(require_react(), 1);
9285 var ReactDOM6 = __toESM(require_react_dom(), 1);
9286
9287 // node_modules/@base-ui/utils/usePreviousValue.mjs
9288 var React41 = __toESM(require_react(), 1);
9289 function usePreviousValue(value) {
9290 const [state, setState] = React41.useState({
9291 current: value,
9292 previous: null
9293 });
9294 if (!Object.is(value, state.current)) {
9295 setState({
9296 current: value,
9297 previous: state.current
9298 });
9299 }
9300 return state.previous;
9301 }
9302
9303 // node_modules/@base-ui/react/utils/usePopupAutoResize.mjs
9304 var React42 = __toESM(require_react(), 1);
9305
9306 // node_modules/@base-ui/react/utils/getCssDimensions.mjs
9307 function getCssDimensions2(element) {
9308 const css = getComputedStyle2(element);
9309 let width = parseFloat(css.width) || 0;
9310 let height = parseFloat(css.height) || 0;
9311 const hasOffset = isHTMLElement(element);
9312 const offsetWidth = hasOffset ? element.offsetWidth : width;
9313 const offsetHeight = hasOffset ? element.offsetHeight : height;
9314 const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;
9315 if (shouldFallback) {
9316 width = offsetWidth;
9317 height = offsetHeight;
9318 }
9319 return {
9320 width,
9321 height
9322 };
9323 }
9324
9325 // node_modules/@base-ui/react/utils/CommonPopupCssVars.mjs
9326 var popupWidth = "--popup-width";
9327 var popupHeight = "--popup-height";
9328
9329 // node_modules/@base-ui/react/utils/usePopupAutoResize.mjs
9330 function usePopupAutoResize(parameters) {
9331 const {
9332 popupElement,
9333 positionerElement,
9334 content,
9335 mounted,
9336 onMeasureLayout: onMeasureLayoutParam,
9337 onMeasureLayoutComplete: onMeasureLayoutCompleteParam,
9338 side,
9339 direction
9340 } = parameters;
9341 const runOnceAnimationsFinish = useAnimationsFinished(popupElement, true);
9342 const animationFrame = useAnimationFrame();
9343 const committedDimensionsRef = React42.useRef(null);
9344 const isInitialRenderRef = React42.useRef(true);
9345 const restoreAnchoringStylesRef = React42.useRef(NOOP);
9346 const onMeasureLayout = useStableCallback(onMeasureLayoutParam);
9347 const onMeasureLayoutComplete = useStableCallback(onMeasureLayoutCompleteParam);
9348 const anchoringStyles = React42.useMemo(() => getPopupAnchoringStyles(side, direction), [side, direction]);
9349 useIsoLayoutEffect(() => {
9350 if (!mounted) {
9351 restoreAnchoringStylesRef.current = NOOP;
9352 isInitialRenderRef.current = true;
9353 committedDimensionsRef.current = null;
9354 return void 0;
9355 }
9356 if (!popupElement || !positionerElement) {
9357 return void 0;
9358 }
9359 restoreAnchoringStylesRef.current = applyElementStyles(popupElement, anchoringStyles);
9360 setPopupCssSize(popupElement, "auto");
9361 const restorePopupPosition = overrideElementStyle(popupElement, "position", "static");
9362 const restorePopupTransform = overrideElementStyle(popupElement, "transform", "none");
9363 const restorePopupScale = overrideElementStyle(popupElement, "scale", "1");
9364 const restorePositionerAvailableSize = applyElementStyles(positionerElement, {
9365 [availableWidth]: "max-content",
9366 [availableHeight]: "max-content"
9367 });
9368 function restoreMeasurementOverrides() {
9369 restorePopupPosition();
9370 restorePopupTransform();
9371 restorePositionerAvailableSize();
9372 }
9373 function restoreMeasurementOverridesIncludingScale() {
9374 restoreMeasurementOverrides();
9375 restorePopupScale();
9376 }
9377 onMeasureLayout?.();
9378 if (isInitialRenderRef.current || committedDimensionsRef.current === null) {
9379 setPositionerCssSize(positionerElement, "max-content");
9380 const dimensions = getCssDimensions2(popupElement);
9381 committedDimensionsRef.current = dimensions;
9382 setPositionerCssSize(positionerElement, dimensions);
9383 restoreMeasurementOverridesIncludingScale();
9384 onMeasureLayoutComplete?.(null, dimensions);
9385 isInitialRenderRef.current = false;
9386 return () => {
9387 restoreAnchoringStylesRef.current();
9388 restoreAnchoringStylesRef.current = NOOP;
9389 };
9390 }
9391 setPositionerCssSize(positionerElement, "max-content");
9392 const previousDimensions = committedDimensionsRef.current;
9393 const newDimensions = getCssDimensions2(popupElement);
9394 committedDimensionsRef.current = newDimensions;
9395 setPopupCssSize(popupElement, previousDimensions);
9396 restoreMeasurementOverridesIncludingScale();
9397 onMeasureLayoutComplete?.(previousDimensions, newDimensions);
9398 setPositionerCssSize(positionerElement, newDimensions);
9399 const abortController = new AbortController();
9400 animationFrame.request(() => {
9401 setPopupCssSize(popupElement, newDimensions);
9402 runOnceAnimationsFinish(() => {
9403 popupElement.style.setProperty(popupWidth, "auto");
9404 popupElement.style.setProperty(popupHeight, "auto");
9405 }, abortController.signal);
9406 });
9407 return () => {
9408 abortController.abort();
9409 animationFrame.cancel();
9410 restoreAnchoringStylesRef.current();
9411 restoreAnchoringStylesRef.current = NOOP;
9412 };
9413 }, [content, popupElement, positionerElement, runOnceAnimationsFinish, animationFrame, mounted, onMeasureLayout, onMeasureLayoutComplete, anchoringStyles]);
9414 }
9415 function getPopupAnchoringStyles(side, direction) {
9416 const isPhysicalTop = side === "top";
9417 const isPhysicalLeft = side === "left" || side === (direction === "rtl" ? "inline-end" : "inline-start");
9418 if (!isPhysicalTop && !isPhysicalLeft) {
9419 return EMPTY_OBJECT;
9420 }
9421 return {
9422 position: "absolute",
9423 [isPhysicalTop ? "bottom" : "top"]: "0",
9424 [isPhysicalLeft ? "right" : "left"]: "0"
9425 };
9426 }
9427 function overrideElementStyle(element, property, value) {
9428 const originalValue = element.style.getPropertyValue(property);
9429 element.style.setProperty(property, value);
9430 return () => {
9431 element.style.setProperty(property, originalValue);
9432 };
9433 }
9434 function applyElementStyles(element, styles) {
9435 const restorers = [];
9436 for (const [key, value] of Object.entries(styles)) {
9437 restorers.push(overrideElementStyle(element, key, value));
9438 }
9439 return restorers.length ? () => {
9440 restorers.forEach((restore) => restore());
9441 } : NOOP;
9442 }
9443 function setPopupCssSize(popupElement, size4) {
9444 const width = size4 === "auto" ? "auto" : `${size4.width}px`;
9445 const height = size4 === "auto" ? "auto" : `${size4.height}px`;
9446 popupElement.style.setProperty(popupWidth, width);
9447 popupElement.style.setProperty(popupHeight, height);
9448 }
9449 function setPositionerCssSize(positionerElement, size4) {
9450 const width = size4 === "max-content" ? "max-content" : `${size4.width}px`;
9451 const height = size4 === "max-content" ? "max-content" : `${size4.height}px`;
9452 positionerElement.style.setProperty(positionerWidth, width);
9453 positionerElement.style.setProperty(positionerHeight, height);
9454 }
9455
9456 // node_modules/@base-ui/react/direction-provider/DirectionProvider.mjs
9457 var React43 = __toESM(require_react(), 1);
9458 var import_jsx_runtime30 = __toESM(require_jsx_runtime(), 1);
9459 var DirectionProvider = function DirectionProvider2(props) {
9460 const {
9461 direction = "ltr"
9462 } = props;
9463 const contextValue = React43.useMemo(() => ({
9464 direction
9465 }), [direction]);
9466 return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(DirectionContext.Provider, {
9467 value: contextValue,
9468 children: props.children
9469 });
9470 };
9471 if (true) DirectionProvider.displayName = "DirectionProvider";
9472
9473 // node_modules/@base-ui/react/utils/adaptiveOriginMiddleware.mjs
9474 var adaptiveOrigin = {
9475 name: "adaptiveOrigin",
9476 async fn(state) {
9477 const {
9478 x: rawX,
9479 y: rawY,
9480 rects: {
9481 floating: floatRect
9482 },
9483 elements: {
9484 floating
9485 },
9486 platform: platform3,
9487 strategy,
9488 placement
9489 } = state;
9490 const win = getWindow(floating);
9491 const styles = win.getComputedStyle(floating);
9492 const hasTransition = styles.transitionDuration !== "0s" && styles.transitionDuration !== "";
9493 if (!hasTransition) {
9494 return {
9495 x: rawX,
9496 y: rawY,
9497 data: DEFAULT_SIDES
9498 };
9499 }
9500 const offsetParent = await platform3.getOffsetParent?.(floating);
9501 let offsetDimensions = {
9502 width: 0,
9503 height: 0
9504 };
9505 if (strategy === "fixed" && win?.visualViewport) {
9506 offsetDimensions = {
9507 width: win.visualViewport.width,
9508 height: win.visualViewport.height
9509 };
9510 } else if (offsetParent === win) {
9511 const doc = ownerDocument(floating);
9512 offsetDimensions = {
9513 width: doc.documentElement.clientWidth,
9514 height: doc.documentElement.clientHeight
9515 };
9516 } else if (await platform3.isElement?.(offsetParent)) {
9517 offsetDimensions = await platform3.getDimensions(offsetParent);
9518 }
9519 const currentSide = getSide(placement);
9520 let x = rawX;
9521 let y = rawY;
9522 if (currentSide === "left") {
9523 x = offsetDimensions.width - (rawX + floatRect.width);
9524 }
9525 if (currentSide === "top") {
9526 y = offsetDimensions.height - (rawY + floatRect.height);
9527 }
9528 const sideX = currentSide === "left" ? "right" : DEFAULT_SIDES.sideX;
9529 const sideY = currentSide === "top" ? "bottom" : DEFAULT_SIDES.sideY;
9530 return {
9531 x,
9532 y,
9533 data: {
9534 sideX,
9535 sideY
9536 }
9537 };
9538 }
9539 };
9540
9541 // node_modules/@base-ui/react/utils/CommonViewportDataAttributes.mjs
9542 var activationDirection = "data-activation-direction";
9543
9544 // node_modules/@base-ui/react/utils/usePopupViewport.mjs
9545 var import_jsx_runtime31 = __toESM(require_jsx_runtime(), 1);
9546 var popupViewportStateMapping = {
9547 activationDirection: (value) => value ? {
9548 [activationDirection]: value
9549 } : null
9550 };
9551 function usePopupViewport(parameters) {
9552 const {
9553 store: store3,
9554 side,
9555 children
9556 } = parameters;
9557 const direction = useDirection();
9558 const activeTrigger = store3.useState("activeTriggerElement");
9559 const activeTriggerId = store3.useState("activeTriggerId");
9560 const open3 = store3.useState("open");
9561 const payload = store3.useState("payload");
9562 const mounted = store3.useState("mounted");
9563 const popupElement = store3.useState("popupElement");
9564 const positionerElement = store3.useState("positionerElement");
9565 const previousActiveTrigger = usePreviousValue(open3 ? activeTrigger : null);
9566 const currentContentKey = usePopupContentKey(activeTriggerId, payload);
9567 const capturedNodeRef = React44.useRef(null);
9568 const [previousContentNode, setPreviousContentNode] = React44.useState(null);
9569 const [newTriggerOffset, setNewTriggerOffset] = React44.useState(null);
9570 const currentContainerRef = React44.useRef(null);
9571 const previousContainerRef = React44.useRef(null);
9572 const onAnimationsFinished = useAnimationsFinished(currentContainerRef, true);
9573 const cleanupFrame = useAnimationFrame();
9574 const cleanupControllerRef = React44.useRef(null);
9575 const [previousContentDimensions, setPreviousContentDimensions] = React44.useState(null);
9576 const [showStartingStyleAttribute, setShowStartingStyleAttribute] = React44.useState(false);
9577 useIsoLayoutEffect(() => {
9578 store3.set("adaptiveOrigin", adaptiveOrigin);
9579 return () => {
9580 store3.set("adaptiveOrigin", void 0);
9581 };
9582 }, [store3]);
9583 const handleMeasureLayout = useStableCallback(() => {
9584 currentContainerRef.current?.style.setProperty("animation", "none");
9585 currentContainerRef.current?.style.setProperty("transition", "none");
9586 previousContainerRef.current?.style.setProperty("display", "none");
9587 });
9588 const handleMeasureLayoutComplete = useStableCallback((previousDimensions) => {
9589 currentContainerRef.current?.style.removeProperty("animation");
9590 currentContainerRef.current?.style.removeProperty("transition");
9591 previousContainerRef.current?.style.removeProperty("display");
9592 if (previousDimensions) {
9593 setPreviousContentDimensions(previousDimensions);
9594 }
9595 });
9596 const armViewportCleanup = useStableCallback(() => {
9597 cleanupControllerRef.current?.abort();
9598 const controller = new AbortController();
9599 cleanupControllerRef.current = controller;
9600 onAnimationsFinished(() => {
9601 setPreviousContentNode(null);
9602 setPreviousContentDimensions(null);
9603 capturedNodeRef.current = null;
9604 }, controller.signal);
9605 });
9606 const lastHandledTriggerRef = React44.useRef(null);
9607 useIsoLayoutEffect(() => {
9608 if (!open3 || !mounted) {
9609 lastHandledTriggerRef.current = null;
9610 }
9611 }, [open3, mounted]);
9612 useIsoLayoutEffect(() => {
9613 if (activeTrigger && previousActiveTrigger && activeTrigger !== previousActiveTrigger && lastHandledTriggerRef.current !== activeTrigger && capturedNodeRef.current) {
9614 setPreviousContentNode(capturedNodeRef.current);
9615 setShowStartingStyleAttribute(true);
9616 const offset4 = calculateRelativePosition(previousActiveTrigger, activeTrigger);
9617 setNewTriggerOffset(offset4);
9618 lastHandledTriggerRef.current = activeTrigger;
9619 }
9620 }, [activeTrigger, previousActiveTrigger]);
9621 useIsoLayoutEffect(() => {
9622 if (previousContentNode == null) {
9623 return;
9624 }
9625 cleanupControllerRef.current?.abort();
9626 setShowStartingStyleAttribute(true);
9627 cleanupFrame.request(() => {
9628 ReactDOM6.flushSync(() => {
9629 setShowStartingStyleAttribute(false);
9630 });
9631 armViewportCleanup();
9632 });
9633 }, [currentContentKey, previousContentNode, armViewportCleanup, cleanupFrame]);
9634 useIsoLayoutEffect(() => {
9635 const source = currentContainerRef.current;
9636 if (!source) {
9637 return;
9638 }
9639 const wrapper = ownerDocument(source).createElement("div");
9640 for (const child of Array.from(source.childNodes)) {
9641 wrapper.appendChild(child.cloneNode(true));
9642 }
9643 capturedNodeRef.current = wrapper;
9644 });
9645 const isTransitioning = previousContentNode != null;
9646 let childrenToRender;
9647 if (!isTransitioning) {
9648 childrenToRender = /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", {
9649 "data-current": true,
9650 ref: currentContainerRef,
9651 children
9652 }, currentContentKey);
9653 } else {
9654 childrenToRender = /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(React44.Fragment, {
9655 children: [/* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", {
9656 "data-previous": true,
9657 inert: inertValue(true),
9658 ref: previousContainerRef,
9659 style: {
9660 ...previousContentDimensions ? {
9661 [popupWidth]: `${previousContentDimensions.width}px`,
9662 [popupHeight]: `${previousContentDimensions.height}px`
9663 } : null,
9664 position: "absolute"
9665 },
9666 "data-ending-style": showStartingStyleAttribute ? void 0 : ""
9667 }, "previous"), /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", {
9668 "data-current": true,
9669 ref: currentContainerRef,
9670 "data-starting-style": showStartingStyleAttribute ? "" : void 0,
9671 children
9672 }, currentContentKey)]
9673 });
9674 }
9675 useIsoLayoutEffect(() => {
9676 const container = previousContainerRef.current;
9677 if (!container || !previousContentNode) {
9678 return;
9679 }
9680 container.replaceChildren(...Array.from(previousContentNode.childNodes));
9681 }, [previousContentNode]);
9682 usePopupAutoResize({
9683 popupElement,
9684 positionerElement,
9685 mounted,
9686 content: payload,
9687 onMeasureLayout: handleMeasureLayout,
9688 onMeasureLayoutComplete: handleMeasureLayoutComplete,
9689 side,
9690 direction
9691 });
9692 const state = {
9693 activationDirection: getActivationDirection(newTriggerOffset),
9694 transitioning: isTransitioning
9695 };
9696 return {
9697 children: childrenToRender,
9698 state
9699 };
9700 }
9701 function getActivationDirection(offset4) {
9702 if (!offset4) {
9703 return void 0;
9704 }
9705 return `${getValueWithTolerance(offset4.horizontal, 5, "right", "left")} ${getValueWithTolerance(offset4.vertical, 5, "down", "up")}`;
9706 }
9707 function getValueWithTolerance(value, tolerance, positiveLabel, negativeLabel) {
9708 if (value > tolerance) {
9709 return positiveLabel;
9710 }
9711 if (value < -tolerance) {
9712 return negativeLabel;
9713 }
9714 return "";
9715 }
9716 function calculateRelativePosition(from, to) {
9717 const fromRect = from.getBoundingClientRect();
9718 const toRect = to.getBoundingClientRect();
9719 const fromCenter = {
9720 x: fromRect.left + fromRect.width / 2,
9721 y: fromRect.top + fromRect.height / 2
9722 };
9723 const toCenter = {
9724 x: toRect.left + toRect.width / 2,
9725 y: toRect.top + toRect.height / 2
9726 };
9727 return {
9728 horizontal: toCenter.x - fromCenter.x,
9729 vertical: toCenter.y - fromCenter.y
9730 };
9731 }
9732 function usePopupContentKey(activeTriggerId, payload) {
9733 const [contentKey, setContentKey] = React44.useState(0);
9734 const previousActiveTriggerIdRef = React44.useRef(activeTriggerId);
9735 const previousPayloadRef = React44.useRef(payload);
9736 const pendingPayloadUpdateRef = React44.useRef(false);
9737 useIsoLayoutEffect(() => {
9738 const previousActiveTriggerId = previousActiveTriggerIdRef.current;
9739 const previousPayload = previousPayloadRef.current;
9740 const triggerIdChanged = activeTriggerId !== previousActiveTriggerId;
9741 const payloadChanged = payload !== previousPayload;
9742 if (triggerIdChanged) {
9743 setContentKey((value) => value + 1);
9744 pendingPayloadUpdateRef.current = !payloadChanged;
9745 } else if (pendingPayloadUpdateRef.current && payloadChanged) {
9746 setContentKey((value) => value + 1);
9747 pendingPayloadUpdateRef.current = false;
9748 }
9749 previousActiveTriggerIdRef.current = activeTriggerId;
9750 previousPayloadRef.current = payload;
9751 }, [activeTriggerId, payload]);
9752 return `${activeTriggerId ?? "current"}-${contentKey}`;
9753 }
9754
9755 // node_modules/@base-ui/react/utils/FloatingPortalLite.mjs
9756 var React45 = __toESM(require_react(), 1);
9757 var ReactDOM7 = __toESM(require_react_dom(), 1);
9758 var import_jsx_runtime32 = __toESM(require_jsx_runtime(), 1);
9759 var FloatingPortalLite = /* @__PURE__ */ React45.forwardRef(function FloatingPortalLite2(componentProps, forwardedRef) {
9760 const {
9761 children,
9762 container,
9763 className,
9764 render,
9765 style,
9766 ...elementProps
9767 } = componentProps;
9768 const {
9769 node: portalNode,
9770 subtree: portalSubtree
9771 } = useFloatingPortalNode({
9772 container,
9773 ref: forwardedRef,
9774 componentProps,
9775 elementProps
9776 });
9777 if (!portalSubtree && !portalNode) {
9778 return null;
9779 }
9780 return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(React45.Fragment, {
9781 children: [portalSubtree, portalNode && /* @__PURE__ */ ReactDOM7.createPortal(children, portalNode)]
9782 });
9783 });
9784 if (true) FloatingPortalLite.displayName = "FloatingPortalLite";
9785
9786 // node_modules/@base-ui/react/tooltip/index.parts.mjs
9787 var index_parts_exports2 = {};
9788 __export(index_parts_exports2, {
9789 Arrow: () => TooltipArrow,
9790 Handle: () => TooltipHandle,
9791 Popup: () => TooltipPopup,
9792 Portal: () => TooltipPortal,
9793 Positioner: () => TooltipPositioner,
9794 Provider: () => TooltipProvider,
9795 Root: () => TooltipRoot,
9796 Trigger: () => TooltipTrigger,
9797 Viewport: () => TooltipViewport,
9798 createHandle: () => createTooltipHandle
9799 });
9800
9801 // node_modules/@base-ui/react/tooltip/root/TooltipRoot.mjs
9802 var React48 = __toESM(require_react(), 1);
9803
9804 // node_modules/@base-ui/react/tooltip/root/TooltipRootContext.mjs
9805 var React46 = __toESM(require_react(), 1);
9806 var TooltipRootContext = /* @__PURE__ */ React46.createContext(void 0);
9807 if (true) TooltipRootContext.displayName = "TooltipRootContext";
9808 function useTooltipRootContext(optional) {
9809 const context = React46.useContext(TooltipRootContext);
9810 if (context === void 0 && !optional) {
9811 throw new Error(true ? "Base UI: TooltipRootContext is missing. Tooltip parts must be placed within <Tooltip.Root>." : formatErrorMessage_default(72));
9812 }
9813 return context;
9814 }
9815
9816 // node_modules/@base-ui/react/tooltip/store/TooltipStore.mjs
9817 var React47 = __toESM(require_react(), 1);
9818 var selectors2 = {
9819 ...popupStoreSelectors,
9820 disabled: (state) => state.disabled,
9821 instantType: (state) => state.instantType,
9822 isInstantPhase: (state) => state.isInstantPhase,
9823 trackCursorAxis: (state) => state.trackCursorAxis,
9824 disableHoverablePopup: (state) => state.disableHoverablePopup,
9825 lastOpenChangeReason: (state) => state.openChangeReason,
9826 closeOnClick: (state) => state.closeOnClick,
9827 closeDelay: (state) => state.closeDelay,
9828 adaptiveOrigin: (state) => state.adaptiveOrigin
9829 };
9830 var TooltipStore = class extends ReactStore {
9831 constructor(initialState, floatingId, nested) {
9832 const triggerElements = new PopupTriggerMap();
9833 super(createInitialState(initialState, triggerElements, floatingId, nested), createInitialContext(triggerElements), selectors2);
9834 }
9835 setOpen = (nextOpen, eventDetails) => {
9836 applyPopupOpenChange(this, nextOpen, eventDetails, {
9837 extraState: {
9838 openChangeReason: eventDetails.reason
9839 }
9840 });
9841 };
9842 // Used by trigger clicks to clear a delayed hover open without reporting a public open-state change.
9843 cancelPendingOpen(event) {
9844 this.state.floatingRootContext.dispatchOpenChange(false, createChangeEventDetails(reason_parts_exports.triggerPress, event));
9845 }
9846 };
9847 function createNullTooltipStore() {
9848 const triggerElements = new PopupTriggerMap();
9849 const store3 = new NullStore(Object.freeze(createInitialState(void 0, triggerElements)), Object.freeze(createInitialContext(triggerElements)), selectors2);
9850 return Object.assign(store3, {
9851 setOpen: NOOP,
9852 cancelPendingOpen: NOOP
9853 });
9854 }
9855 function createInitialState(initialState, triggerElements, floatingId, nested = false) {
9856 const state = {
9857 ...createInitialPopupStoreState(triggerElements, floatingId, nested),
9858 disabled: false,
9859 instantType: void 0,
9860 isInstantPhase: false,
9861 trackCursorAxis: "none",
9862 disableHoverablePopup: false,
9863 openChangeReason: null,
9864 closeOnClick: true,
9865 closeDelay: 0,
9866 adaptiveOrigin: void 0,
9867 ...initialState
9868 };
9869 return state;
9870 }
9871 function createInitialContext(triggerElements) {
9872 return {
9873 popupRef: /* @__PURE__ */ React47.createRef(),
9874 onOpenChange: void 0,
9875 onOpenChangeComplete: void 0,
9876 triggerElements
9877 };
9878 }
9879
9880 // node_modules/@base-ui/react/tooltip/root/TooltipRoot.mjs
9881 var import_jsx_runtime33 = __toESM(require_jsx_runtime(), 1);
9882 var TooltipRoot = fastComponent(function TooltipRoot2(props) {
9883 const {
9884 disabled: disabled2 = false,
9885 defaultOpen = false,
9886 open: openProp,
9887 disableHoverablePopup = false,
9888 trackCursorAxis = "none",
9889 actionsRef,
9890 onOpenChange,
9891 onOpenChangeComplete,
9892 handle,
9893 triggerId: triggerIdProp,
9894 defaultTriggerId: defaultTriggerIdProp = null,
9895 children
9896 } = props;
9897 const store3 = usePopupRootStore((floatingId, nested) => new TooltipStore({
9898 open: defaultOpen,
9899 openProp,
9900 activeTriggerId: defaultTriggerIdProp,
9901 triggerIdProp
9902 }, floatingId, nested));
9903 store3.useControlledProp("openProp", openProp);
9904 store3.useControlledProp("triggerIdProp", triggerIdProp);
9905 store3.useContextCallback("onOpenChange", onOpenChange);
9906 store3.useContextCallback("onOpenChangeComplete", onOpenChangeComplete);
9907 const openState = store3.useState("open");
9908 const open3 = !disabled2 && openState;
9909 const activeTriggerId = store3.useState("activeTriggerId");
9910 const mounted = store3.useState("mounted");
9911 const payload = store3.useState("payload");
9912 store3.useSyncedValues({
9913 trackCursorAxis,
9914 disableHoverablePopup,
9915 disabled: disabled2
9916 });
9917 useImplicitActiveTrigger(store3, {
9918 closeOnActiveTriggerUnmount: true
9919 });
9920 const {
9921 forceUnmount,
9922 transitionStatus
9923 } = useOpenStateTransitions(open3, store3);
9924 const isInstantPhase = store3.useState("isInstantPhase");
9925 const instantType = store3.useState("instantType");
9926 const lastOpenChangeReason = store3.useState("lastOpenChangeReason");
9927 const previousInstantTypeRef = React48.useRef(null);
9928 useIsoLayoutEffect(() => {
9929 if (openState && disabled2) {
9930 store3.setOpen(false, createChangeEventDetails(reason_parts_exports.disabled));
9931 }
9932 }, [openState, disabled2, store3]);
9933 useIsoLayoutEffect(() => {
9934 if (transitionStatus === "ending" && lastOpenChangeReason === reason_parts_exports.none || transitionStatus !== "ending" && isInstantPhase) {
9935 if (instantType !== "delay") {
9936 previousInstantTypeRef.current = instantType;
9937 }
9938 store3.set("instantType", "delay");
9939 } else if (previousInstantTypeRef.current !== null) {
9940 store3.set("instantType", previousInstantTypeRef.current);
9941 previousInstantTypeRef.current = null;
9942 }
9943 }, [transitionStatus, isInstantPhase, lastOpenChangeReason, instantType, store3]);
9944 useIsoLayoutEffect(() => {
9945 if (open3) {
9946 if (activeTriggerId == null) {
9947 store3.set("payload", void 0);
9948 }
9949 }
9950 }, [store3, activeTriggerId, open3]);
9951 React48.useImperativeHandle(actionsRef, () => ({
9952 unmount: forceUnmount,
9953 close: () => store3.setOpen(false, createChangeEventDetails(reason_parts_exports.imperativeAction))
9954 }), [forceUnmount, store3]);
9955 const shouldRenderInteractions = open3 || mounted || !disabled2 && trackCursorAxis !== "none";
9956 return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(TooltipRootContext.Provider, {
9957 value: store3,
9958 children: [handle && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(PopupHandleAttachment, {
9959 handle,
9960 store: store3
9961 }), shouldRenderInteractions && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(TooltipInteractions, {
9962 store: store3,
9963 disabled: disabled2,
9964 trackCursorAxis
9965 }), typeof children === "function" ? children({
9966 payload
9967 }) : children]
9968 });
9969 });
9970 if (true) TooltipRoot.displayName = "TooltipRoot";
9971 function TooltipInteractions({
9972 store: store3,
9973 disabled: disabled2,
9974 trackCursorAxis
9975 }) {
9976 const floatingRootContext = store3.useState("floatingRootContext");
9977 const dismiss = useDismiss(floatingRootContext, {
9978 enabled: !disabled2,
9979 referencePress: () => store3.select("closeOnClick")
9980 });
9981 const clientPoint = useClientPoint(floatingRootContext, {
9982 enabled: !disabled2 && trackCursorAxis !== "none",
9983 axis: trackCursorAxis === "none" ? void 0 : trackCursorAxis
9984 });
9985 const triggerProps = React48.useMemo(() => mergeProps(clientPoint.reference, dismiss.reference), [clientPoint.reference, dismiss.reference]);
9986 usePopupInteractionProps(store3, {
9987 activeTriggerProps: triggerProps,
9988 inactiveTriggerProps: triggerProps,
9989 popupProps: dismiss.floating ?? EMPTY_OBJECT
9990 });
9991 return null;
9992 }
9993
9994 // node_modules/@base-ui/react/tooltip/trigger/TooltipTrigger.mjs
9995 var React50 = __toESM(require_react(), 1);
9996
9997 // node_modules/@base-ui/react/tooltip/provider/TooltipProviderContext.mjs
9998 var React49 = __toESM(require_react(), 1);
9999 var TooltipProviderContext = /* @__PURE__ */ React49.createContext(void 0);
10000 if (true) TooltipProviderContext.displayName = "TooltipProviderContext";
10001 function useTooltipProviderContext() {
10002 return React49.useContext(TooltipProviderContext);
10003 }
10004
10005 // node_modules/@base-ui/react/tooltip/utils/constants.mjs
10006 var OPEN_DELAY = 600;
10007
10008 // node_modules/@base-ui/react/tooltip/trigger/TooltipTrigger.mjs
10009 var TOOLTIP_TRIGGER_IDENTIFIER = "data-base-ui-tooltip-trigger";
10010 function getTargetElement(event) {
10011 if ("composedPath" in event) {
10012 const path = event.composedPath();
10013 for (let i = 0; i < path.length; i += 1) {
10014 const element = path[i];
10015 if (isElement(element)) {
10016 return element;
10017 }
10018 }
10019 }
10020 const target = event.target;
10021 if (isElement(target)) {
10022 return target;
10023 }
10024 return null;
10025 }
10026 function closestEnabledTooltipTrigger(element) {
10027 let current = element;
10028 while (current) {
10029 const trigger = current.closest(`[${TOOLTIP_TRIGGER_IDENTIFIER}]`);
10030 if (trigger) {
10031 return trigger;
10032 }
10033 const root = current.getRootNode();
10034 current = "host" in root && isElement(root.host) ? root.host : null;
10035 }
10036 return null;
10037 }
10038 var TooltipTrigger = fastComponentRef(function TooltipTrigger2(componentProps, forwardedRef) {
10039 const {
10040 render,
10041 className,
10042 style,
10043 handle,
10044 payload,
10045 disabled: disabledProp,
10046 delay,
10047 closeOnClick = true,
10048 closeDelay,
10049 id: idProp,
10050 ...elementProps
10051 } = componentProps;
10052 const rootContext = useTooltipRootContext(true);
10053 const handleStore = usePopupHandleStore(handle);
10054 const store3 = handleStore ?? rootContext;
10055 if (!store3) {
10056 throw new Error(true ? "Base UI: <Tooltip.Trigger> must be either used within a <Tooltip.Root> component or provided with a handle." : formatErrorMessage_default(82));
10057 }
10058 const thisTriggerId = useBaseUiId(idProp);
10059 const isTriggerActive = store3.useState("isTriggerActive", thisTriggerId);
10060 const isOpenedByThisTrigger = store3.useState("isOpenedByTrigger", thisTriggerId);
10061 const floatingRootContext = store3.useState("floatingRootContext");
10062 const triggerElementRef = React50.useRef(null);
10063 const closeDelayWithDefault = closeDelay ?? 0;
10064 const {
10065 registerTrigger,
10066 isMountedByThisTrigger
10067 } = useTriggerDataForwarding(thisTriggerId, triggerElementRef, store3, {
10068 payload,
10069 closeOnClick,
10070 closeDelay: closeDelayWithDefault
10071 });
10072 const providerDelay = useTooltipProviderContext();
10073 const {
10074 activeIdRef,
10075 delayRef,
10076 isInstantPhase,
10077 hasProvider
10078 } = useDelayGroup(floatingRootContext, {
10079 open: isOpenedByThisTrigger
10080 });
10081 const hoverInteraction = useHoverInteractionSharedState(floatingRootContext);
10082 store3.useSyncedValue("isInstantPhase", isInstantPhase);
10083 const rootDisabled = store3.useState("disabled");
10084 const disabled2 = disabledProp ?? rootDisabled;
10085 const disabledRef = useValueAsRef(disabled2);
10086 const trackCursorAxis = store3.useState("trackCursorAxis");
10087 const disableHoverablePopup = store3.useState("disableHoverablePopup");
10088 const isNestedTriggerHoveredRef = React50.useRef(false);
10089 const nestedTriggerOpenTimeout = useTimeout();
10090 const pointerTypeRef = React50.useRef(void 0);
10091 function getOpenDelay() {
10092 if (hasProvider && activeIdRef.current != null) {
10093 return 0;
10094 }
10095 return delay ?? providerDelay ?? OPEN_DELAY;
10096 }
10097 function isEnabledNestedTriggerTarget(target) {
10098 const triggerEl = triggerElementRef.current;
10099 if (!triggerEl || !target) {
10100 return false;
10101 }
10102 const nearestTrigger = closestEnabledTooltipTrigger(target);
10103 return nearestTrigger !== null && nearestTrigger !== triggerEl && contains(triggerEl, nearestTrigger);
10104 }
10105 function detectNestedTriggerHover(target) {
10106 const nestedTriggerHovered = isEnabledNestedTriggerTarget(target);
10107 isNestedTriggerHoveredRef.current = nestedTriggerHovered;
10108 if (nestedTriggerHovered) {
10109 hoverInteraction.openChangeTimeout.clear();
10110 hoverInteraction.restTimeout.clear();
10111 hoverInteraction.restTimeoutPending = false;
10112 nestedTriggerOpenTimeout.clear();
10113 }
10114 return nestedTriggerHovered;
10115 }
10116 const hoverProps = useHoverReferenceInteraction(floatingRootContext, {
10117 enabled: !disabled2,
10118 mouseOnly: true,
10119 move: false,
10120 handleClose: !disableHoverablePopup && trackCursorAxis !== "both" ? safePolygon() : null,
10121 restMs: getOpenDelay,
10122 delay() {
10123 if (closeDelay == null && hasProvider) {
10124 return {
10125 close: getDelay(delayRef.current, "close")
10126 };
10127 }
10128 return {
10129 close: closeDelayWithDefault
10130 };
10131 },
10132 triggerElementRef,
10133 isActiveTrigger: isTriggerActive,
10134 isClosing: () => store3.select("transitionStatus") === "ending",
10135 shouldOpen() {
10136 return !isNestedTriggerHoveredRef.current;
10137 }
10138 });
10139 const focusProps = useFocus(floatingRootContext, {
10140 enabled: !disabled2
10141 }).reference;
10142 const handleNestedTriggerHover = (event) => {
10143 const wasNestedTriggerHovered = isNestedTriggerHoveredRef.current;
10144 const target = getTargetElement(event);
10145 const nestedTriggerHovered = detectNestedTriggerHover(target);
10146 const triggerEl = triggerElementRef.current;
10147 const targetInsideTrigger = triggerEl && target && contains(triggerEl, target);
10148 if (nestedTriggerHovered && store3.select("open") && store3.select("lastOpenChangeReason") === reason_parts_exports.triggerHover) {
10149 store3.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event));
10150 return;
10151 }
10152 if (wasNestedTriggerHovered && !nestedTriggerHovered && targetInsideTrigger && !disabledRef.current && !store3.select("open") && triggerEl && // Match the hover hook's non-strict mouse fallback for mouse-only event sequences.
10153 isMouseLikePointerType(pointerTypeRef.current)) {
10154 const open3 = () => {
10155 if (!isNestedTriggerHoveredRef.current && !disabledRef.current && !store3.select("open")) {
10156 store3.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, event, triggerEl));
10157 }
10158 };
10159 const openDelay = getOpenDelay();
10160 if (openDelay === 0) {
10161 nestedTriggerOpenTimeout.clear();
10162 open3();
10163 } else {
10164 nestedTriggerOpenTimeout.start(openDelay, open3);
10165 }
10166 }
10167 };
10168 const rootTriggerProps = store3.useState("triggerProps", isMountedByThisTrigger);
10169 const shouldApplyRootTriggerProps = isMountedByThisTrigger || trackCursorAxis !== "none";
10170 const state = {
10171 open: isOpenedByThisTrigger
10172 };
10173 const element = useRenderElement("button", componentProps, {
10174 state,
10175 ref: [forwardedRef, registerTrigger, triggerElementRef],
10176 props: [hoverProps, focusProps, shouldApplyRootTriggerProps ? rootTriggerProps : void 0, {
10177 onMouseOver(event) {
10178 handleNestedTriggerHover(event.nativeEvent);
10179 },
10180 onFocus(event) {
10181 if (isEnabledNestedTriggerTarget(getTargetElement(event.nativeEvent))) {
10182 event.preventBaseUIHandler();
10183 }
10184 },
10185 onMouseLeave() {
10186 isNestedTriggerHoveredRef.current = false;
10187 nestedTriggerOpenTimeout.clear();
10188 pointerTypeRef.current = void 0;
10189 },
10190 onPointerEnter(event) {
10191 pointerTypeRef.current = event.pointerType;
10192 },
10193 onPointerDown(event) {
10194 pointerTypeRef.current = event.pointerType;
10195 store3.set("closeOnClick", closeOnClick);
10196 if (closeOnClick && !store3.select("open")) {
10197 store3.cancelPendingOpen(event.nativeEvent);
10198 }
10199 },
10200 onClick(event) {
10201 if (closeOnClick && !store3.select("open")) {
10202 store3.cancelPendingOpen(event.nativeEvent);
10203 }
10204 },
10205 id: thisTriggerId,
10206 [triggerDisabled]: disabled2 ? "" : void 0,
10207 [TOOLTIP_TRIGGER_IDENTIFIER]: disabled2 ? void 0 : ""
10208 }, elementProps],
10209 stateAttributesMapping: triggerOpenStateMapping2
10210 });
10211 return element;
10212 });
10213 if (true) TooltipTrigger.displayName = "TooltipTrigger";
10214
10215 // node_modules/@base-ui/react/tooltip/portal/TooltipPortal.mjs
10216 var React52 = __toESM(require_react(), 1);
10217
10218 // node_modules/@base-ui/react/tooltip/portal/TooltipPortalContext.mjs
10219 var React51 = __toESM(require_react(), 1);
10220 var TooltipPortalContext = /* @__PURE__ */ React51.createContext(void 0);
10221 if (true) TooltipPortalContext.displayName = "TooltipPortalContext";
10222 function useTooltipPortalContext() {
10223 const value = React51.useContext(TooltipPortalContext);
10224 if (value === void 0) {
10225 throw new Error(true ? "Base UI: <Tooltip.Portal> is missing." : formatErrorMessage_default(70));
10226 }
10227 return value;
10228 }
10229
10230 // node_modules/@base-ui/react/tooltip/portal/TooltipPortal.mjs
10231 var import_jsx_runtime34 = __toESM(require_jsx_runtime(), 1);
10232 var TooltipPortal = /* @__PURE__ */ React52.forwardRef(function TooltipPortal2(props, forwardedRef) {
10233 const {
10234 keepMounted = false,
10235 ...portalProps
10236 } = props;
10237 const store3 = useTooltipRootContext();
10238 const mounted = store3.useState("mounted");
10239 const shouldRender = mounted || keepMounted;
10240 if (!shouldRender) {
10241 return null;
10242 }
10243 return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(TooltipPortalContext.Provider, {
10244 value: keepMounted,
10245 children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(FloatingPortalLite, {
10246 ref: forwardedRef,
10247 ...portalProps
10248 })
10249 });
10250 });
10251 if (true) TooltipPortal.displayName = "TooltipPortal";
10252
10253 // node_modules/@base-ui/react/tooltip/positioner/TooltipPositioner.mjs
10254 var React54 = __toESM(require_react(), 1);
10255
10256 // node_modules/@base-ui/react/tooltip/positioner/TooltipPositionerContext.mjs
10257 var React53 = __toESM(require_react(), 1);
10258 var TooltipPositionerContext = /* @__PURE__ */ React53.createContext(void 0);
10259 if (true) TooltipPositionerContext.displayName = "TooltipPositionerContext";
10260 function useTooltipPositionerContext() {
10261 const context = React53.useContext(TooltipPositionerContext);
10262 if (context === void 0) {
10263 throw new Error(true ? "Base UI: TooltipPositionerContext is missing. TooltipPositioner parts must be placed within <Tooltip.Positioner>." : formatErrorMessage_default(71));
10264 }
10265 return context;
10266 }
10267
10268 // node_modules/@base-ui/react/tooltip/positioner/TooltipPositioner.mjs
10269 var import_jsx_runtime35 = __toESM(require_jsx_runtime(), 1);
10270 var TooltipPositioner = /* @__PURE__ */ React54.forwardRef(function TooltipPositioner2(componentProps, forwardedRef) {
10271 const {
10272 render,
10273 className,
10274 anchor,
10275 positionMethod = "absolute",
10276 side = "top",
10277 align = "center",
10278 sideOffset = 0,
10279 alignOffset = 0,
10280 collisionBoundary = "clipping-ancestors",
10281 collisionPadding = 5,
10282 arrowPadding = 5,
10283 sticky = false,
10284 disableAnchorTracking = false,
10285 collisionAvoidance = POPUP_COLLISION_AVOIDANCE,
10286 style,
10287 ...elementProps
10288 } = componentProps;
10289 const store3 = useTooltipRootContext();
10290 const keepMounted = useTooltipPortalContext();
10291 const open3 = store3.useState("open");
10292 const mounted = store3.useState("mounted");
10293 const trackCursorAxis = store3.useState("trackCursorAxis");
10294 const disableHoverablePopup = store3.useState("disableHoverablePopup");
10295 const floatingRootContext = store3.useState("floatingRootContext");
10296 const instantType = store3.useState("instantType");
10297 const transitionStatus = store3.useState("transitionStatus");
10298 const adaptiveOrigin2 = store3.useState("adaptiveOrigin");
10299 const positioning = useAnchorPositioning({
10300 anchor,
10301 positionMethod,
10302 floatingRootContext,
10303 mounted,
10304 side,
10305 sideOffset,
10306 align,
10307 alignOffset,
10308 collisionBoundary,
10309 collisionPadding,
10310 sticky,
10311 arrowPadding,
10312 disableAnchorTracking,
10313 keepMounted,
10314 collisionAvoidance,
10315 adaptiveOrigin: adaptiveOrigin2
10316 });
10317 const state = React54.useMemo(() => ({
10318 open: open3,
10319 side: positioning.side,
10320 align: positioning.align,
10321 anchorHidden: positioning.anchorHidden,
10322 instant: trackCursorAxis !== "none" ? "tracking-cursor" : instantType
10323 }), [open3, positioning.side, positioning.align, positioning.anchorHidden, trackCursorAxis, instantType]);
10324 const element = usePositioner(componentProps, state, {
10325 styles: positioning.positionerStyles,
10326 transitionStatus,
10327 props: elementProps,
10328 refs: [forwardedRef, store3.useStateSetter("positionerElement")],
10329 hidden: !mounted,
10330 inert: !open3 || trackCursorAxis === "both" || disableHoverablePopup
10331 });
10332 return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(TooltipPositionerContext.Provider, {
10333 value: positioning,
10334 children: element
10335 });
10336 });
10337 if (true) TooltipPositioner.displayName = "TooltipPositioner";
10338
10339 // node_modules/@base-ui/react/tooltip/popup/TooltipPopup.mjs
10340 var React55 = __toESM(require_react(), 1);
10341 var TooltipPopup = /* @__PURE__ */ React55.forwardRef(function TooltipPopup2(componentProps, forwardedRef) {
10342 const {
10343 render,
10344 className,
10345 style,
10346 ...elementProps
10347 } = componentProps;
10348 const store3 = useTooltipRootContext();
10349 const {
10350 side,
10351 align
10352 } = useTooltipPositionerContext();
10353 const open3 = store3.useState("open");
10354 const instantType = store3.useState("instantType");
10355 const transitionStatus = store3.useState("transitionStatus");
10356 const popupProps = store3.useState("popupProps");
10357 const floatingContext = store3.useState("floatingRootContext");
10358 const disabled2 = store3.useState("disabled");
10359 const closeDelay = store3.useState("closeDelay");
10360 useOpenChangeComplete({
10361 open: open3,
10362 ref: store3.context.popupRef,
10363 onComplete() {
10364 if (open3) {
10365 store3.context.onOpenChangeComplete?.(true);
10366 }
10367 }
10368 });
10369 useHoverFloatingInteraction(floatingContext, {
10370 enabled: !disabled2,
10371 closeDelay
10372 });
10373 const setPopupElement = store3.useStateSetter("popupElement");
10374 const state = {
10375 open: open3,
10376 side,
10377 align,
10378 instant: instantType,
10379 transitionStatus
10380 };
10381 const element = useRenderElement("div", componentProps, {
10382 state,
10383 ref: [forwardedRef, store3.context.popupRef, setPopupElement],
10384 props: [FOCUSABLE_POPUP_PROPS, popupProps, getDisabledMountTransitionStyles(transitionStatus), elementProps],
10385 stateAttributesMapping: popupTransitionStateMapping
10386 });
10387 return element;
10388 });
10389 if (true) TooltipPopup.displayName = "TooltipPopup";
10390
10391 // node_modules/@base-ui/react/tooltip/arrow/TooltipArrow.mjs
10392 var React56 = __toESM(require_react(), 1);
10393 var TooltipArrow = /* @__PURE__ */ React56.forwardRef(function TooltipArrow2(componentProps, forwardedRef) {
10394 const {
10395 render,
10396 className,
10397 style,
10398 ...elementProps
10399 } = componentProps;
10400 const store3 = useTooltipRootContext();
10401 const {
10402 arrowRef,
10403 side,
10404 align,
10405 arrowUncentered,
10406 arrowStyles
10407 } = useTooltipPositionerContext();
10408 const open3 = store3.useState("open");
10409 const instantType = store3.useState("instantType");
10410 const state = {
10411 open: open3,
10412 side,
10413 align,
10414 uncentered: arrowUncentered,
10415 instant: instantType
10416 };
10417 const element = useRenderElement("div", componentProps, {
10418 state,
10419 ref: [forwardedRef, arrowRef],
10420 props: [{
10421 style: arrowStyles,
10422 "aria-hidden": true
10423 }, elementProps],
10424 stateAttributesMapping: popupStateMapping
10425 });
10426 return element;
10427 });
10428 if (true) TooltipArrow.displayName = "TooltipArrow";
10429
10430 // node_modules/@base-ui/react/tooltip/provider/TooltipProvider.mjs
10431 var React57 = __toESM(require_react(), 1);
10432 var import_jsx_runtime36 = __toESM(require_jsx_runtime(), 1);
10433 var TooltipProvider = function TooltipProvider2(props) {
10434 const {
10435 delay,
10436 closeDelay,
10437 timeout = 400
10438 } = props;
10439 const delayValue = React57.useMemo(() => ({
10440 open: delay,
10441 close: closeDelay
10442 }), [delay, closeDelay]);
10443 return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(TooltipProviderContext.Provider, {
10444 value: delay,
10445 children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(FloatingDelayGroup, {
10446 delay: delayValue,
10447 timeoutMs: timeout,
10448 children: props.children
10449 })
10450 });
10451 };
10452 if (true) TooltipProvider.displayName = "TooltipProvider";
10453
10454 // node_modules/@base-ui/react/tooltip/viewport/TooltipViewport.mjs
10455 var React58 = __toESM(require_react(), 1);
10456 var TooltipViewport = /* @__PURE__ */ React58.forwardRef(function TooltipViewport2(componentProps, forwardedRef) {
10457 const {
10458 render,
10459 className,
10460 style,
10461 children,
10462 ...elementProps
10463 } = componentProps;
10464 const store3 = useTooltipRootContext();
10465 const positioner = useTooltipPositionerContext();
10466 const instantType = store3.useState("instantType");
10467 const {
10468 children: childrenToRender,
10469 state: viewportState
10470 } = usePopupViewport({
10471 store: store3,
10472 side: positioner.side,
10473 children
10474 });
10475 const state = {
10476 activationDirection: viewportState.activationDirection,
10477 transitioning: viewportState.transitioning,
10478 instant: instantType
10479 };
10480 return useRenderElement("div", componentProps, {
10481 state,
10482 ref: forwardedRef,
10483 props: [elementProps, {
10484 children: childrenToRender
10485 }],
10486 stateAttributesMapping: popupViewportStateMapping
10487 });
10488 });
10489 if (true) TooltipViewport.displayName = "TooltipViewport";
10490
10491 // node_modules/@base-ui/react/tooltip/store/TooltipHandle.mjs
10492 var TooltipHandle = class extends BasePopupHandle {
10493 constructor() {
10494 super(createNullTooltipStore(), "Tooltip");
10495 }
10496 /**
10497 * Opens the tooltip and associates it with the trigger with the given id.
10498 *
10499 * This method should only be called in an event handler or an effect (not during rendering).
10500 *
10501 * @param triggerId ID of the trigger to associate with the tooltip. The trigger must be a matching
10502 * `Tooltip.Trigger` with this handle passed as a prop.
10503 */
10504 open(triggerId) {
10505 this.openByTrigger(triggerId);
10506 }
10507 /**
10508 * Closes the tooltip.
10509 *
10510 * This method should only be called in an event handler or an effect (not during rendering).
10511 */
10512 close() {
10513 this.closePopup();
10514 }
10515 /**
10516 * Whether the tooltip is currently open. Returns `false` while no root is attached to the handle.
10517 */
10518 get isOpen() {
10519 return this.attachedStore?.select("open") ?? false;
10520 }
10521 };
10522 function createTooltipHandle() {
10523 return new TooltipHandle();
10524 }
10525
10526 // node_modules/@base-ui/react/use-render/useRender.mjs
10527 function useRender(params) {
10528 return useRenderElement(params.defaultTagName ?? "div", params, params);
10529 }
10530
10531 // packages/ui/build-module/text/text.mjs
10532 var import_element13 = __toESM(require_element(), 1);
10533 var STYLE_HASH_ATTRIBUTE = "data-wp-hash";
10534 function getRuntime() {
10535 const globalScope = globalThis;
10536 if (globalScope.__wpStyleRuntime) {
10537 return globalScope.__wpStyleRuntime;
10538 }
10539 globalScope.__wpStyleRuntime = {
10540 documents: /* @__PURE__ */ new Map(),
10541 styles: /* @__PURE__ */ new Map(),
10542 injectedStyles: /* @__PURE__ */ new WeakMap()
10543 };
10544 if (typeof document !== "undefined") {
10545 registerDocument(document);
10546 }
10547 return globalScope.__wpStyleRuntime;
10548 }
10549 function documentContainsStyleHash(targetDocument, hash) {
10550 if (!targetDocument.head) {
10551 return false;
10552 }
10553 for (const style of targetDocument.head.querySelectorAll(
10554 `style[${STYLE_HASH_ATTRIBUTE}]`
10555 )) {
10556 if (style.getAttribute(STYLE_HASH_ATTRIBUTE) === hash) {
10557 return true;
10558 }
10559 }
10560 return false;
10561 }
10562 function injectStyle(targetDocument, hash, css) {
10563 if (!targetDocument.head) {
10564 return;
10565 }
10566 const runtime = getRuntime();
10567 let injectedStyles = runtime.injectedStyles.get(targetDocument);
10568 if (!injectedStyles) {
10569 injectedStyles = /* @__PURE__ */ new Set();
10570 runtime.injectedStyles.set(targetDocument, injectedStyles);
10571 }
10572 if (injectedStyles.has(hash)) {
10573 return;
10574 }
10575 if (documentContainsStyleHash(targetDocument, hash)) {
10576 injectedStyles.add(hash);
10577 return;
10578 }
10579 const style = targetDocument.createElement("style");
10580 style.setAttribute(STYLE_HASH_ATTRIBUTE, hash);
10581 style.appendChild(targetDocument.createTextNode(css));
10582 targetDocument.head.appendChild(style);
10583 injectedStyles.add(hash);
10584 }
10585 function registerDocument(targetDocument) {
10586 const runtime = getRuntime();
10587 runtime.documents.set(
10588 targetDocument,
10589 (runtime.documents.get(targetDocument) ?? 0) + 1
10590 );
10591 for (const [hash, css] of runtime.styles) {
10592 injectStyle(targetDocument, hash, css);
10593 }
10594 return () => {
10595 const count = runtime.documents.get(targetDocument);
10596 if (count === void 0) {
10597 return;
10598 }
10599 if (count <= 1) {
10600 runtime.documents.delete(targetDocument);
10601 return;
10602 }
10603 runtime.documents.set(targetDocument, count - 1);
10604 };
10605 }
10606 function registerStyle(hash, css) {
10607 const runtime = getRuntime();
10608 runtime.styles.set(hash, css);
10609 for (const targetDocument of runtime.documents.keys()) {
10610 injectStyle(targetDocument, hash, css);
10611 }
10612 }
10613 if (typeof process === "undefined" || true) {
10614 registerStyle("3167e7d116", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._83ed8a8da5dd50ea__text{text-wrap:pretty;margin:0}._14437cfb77831647__heading-2xl{--_gcd-heading-font-size:var(--wpds-typography-font-size-2xl,32px);--_gcd-heading-font-weight:var(--wpds-typography-font-weight-emphasis,600);--_gcd-p-font-size:var(--wpds-typography-font-size-2xl,32px);--_gcd-p-line-height:var(--wpds-typography-line-height-2xl,40px);font-size:var(--wpds-typography-font-size-2xl,32px);line-height:var(--wpds-typography-line-height-2xl,40px)}._14437cfb77831647__heading-2xl,._3c78b7fa9b4072dd__heading-xl{font-family:var(--wpds-typography-font-family-heading,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-weight:var(--wpds-typography-font-weight-emphasis,600)}._3c78b7fa9b4072dd__heading-xl{--_gcd-heading-font-size:var(--wpds-typography-font-size-xl,20px);--_gcd-heading-font-weight:var(--wpds-typography-font-weight-emphasis,600);--_gcd-p-font-size:var(--wpds-typography-font-size-xl,20px);--_gcd-p-line-height:var(--wpds-typography-line-height-md,24px);font-size:var(--wpds-typography-font-size-xl,20px);line-height:var(--wpds-typography-line-height-md,24px)}.aa58f227716bcde2__heading-lg{--_gcd-heading-font-size:var(--wpds-typography-font-size-lg,15px);--_gcd-heading-font-weight:var(--wpds-typography-font-weight-emphasis,600);--_gcd-p-font-size:var(--wpds-typography-font-size-lg,15px);--_gcd-p-line-height:var(--wpds-typography-line-height-sm,20px);font-size:var(--wpds-typography-font-size-lg,15px)}.aa58f227716bcde2__heading-lg,.fc4da56d8dfe52c4__heading-md{font-family:var(--wpds-typography-font-family-heading,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-weight:var(--wpds-typography-font-weight-emphasis,600);line-height:var(--wpds-typography-line-height-sm,20px)}.fc4da56d8dfe52c4__heading-md{--_gcd-heading-font-size:var(--wpds-typography-font-size-md,13px);--_gcd-heading-font-weight:var(--wpds-typography-font-weight-emphasis,600);--_gcd-p-font-size:var(--wpds-typography-font-size-md,13px);--_gcd-p-line-height:var(--wpds-typography-line-height-sm,20px);font-size:var(--wpds-typography-font-size-md,13px)}.a9b78c7c82e8dff7__heading-sm{--_gcd-heading-font-size:var(--wpds-typography-font-size-xs,11px);--_gcd-heading-font-weight:var(--wpds-typography-font-weight-emphasis,600);--_gcd-p-font-size:var(--wpds-typography-font-size-xs,11px);--_gcd-p-line-height:var(--wpds-typography-line-height-xs,16px);font-family:var(--wpds-typography-font-family-heading,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-xs,11px);font-weight:var(--wpds-typography-font-weight-emphasis,600);line-height:var(--wpds-typography-line-height-xs,16px);text-transform:uppercase}._305ff559e52180d5__body-xl{--_gcd-heading-font-size:var(--wpds-typography-font-size-xl,20px);--_gcd-heading-font-weight:var(--wpds-typography-font-weight-default,400);--_gcd-p-font-size:var(--wpds-typography-font-size-xl,20px);--_gcd-p-line-height:var(--wpds-typography-line-height-xl,32px);font-size:var(--wpds-typography-font-size-xl,20px);line-height:var(--wpds-typography-line-height-xl,32px)}._305ff559e52180d5__body-xl,.ca1aa3fc2029e958__body-lg{font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-weight:var(--wpds-typography-font-weight-default,400)}.ca1aa3fc2029e958__body-lg{--_gcd-heading-font-size:var(--wpds-typography-font-size-lg,15px);--_gcd-heading-font-weight:var(--wpds-typography-font-weight-default,400);--_gcd-p-font-size:var(--wpds-typography-font-size-lg,15px);--_gcd-p-line-height:var(--wpds-typography-line-height-md,24px);font-size:var(--wpds-typography-font-size-lg,15px);line-height:var(--wpds-typography-line-height-md,24px)}._131101940be12424__body-md{--_gcd-heading-font-size:var(--wpds-typography-font-size-md,13px);--_gcd-heading-font-weight:var(--wpds-typography-font-weight-default,400);--_gcd-p-font-size:var(--wpds-typography-font-size-md,13px);--_gcd-p-line-height:var(--wpds-typography-line-height-sm,20px);font-size:var(--wpds-typography-font-size-md,13px);line-height:var(--wpds-typography-line-height-sm,20px)}._0e8d87a42c1f75fa__body-sm,._131101940be12424__body-md{font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-weight:var(--wpds-typography-font-weight-default,400)}._0e8d87a42c1f75fa__body-sm{--_gcd-heading-font-size:var(--wpds-typography-font-size-sm,12px);--_gcd-heading-font-weight:var(--wpds-typography-font-weight-default,400);--_gcd-p-font-size:var(--wpds-typography-font-size-sm,12px);--_gcd-p-line-height:var(--wpds-typography-line-height-xs,16px);font-size:var(--wpds-typography-font-size-sm,12px);line-height:var(--wpds-typography-line-height-xs,16px)}}}');
10615 }
10616 var style_default = { "text": "_83ed8a8da5dd50ea__text", "heading-2xl": "_14437cfb77831647__heading-2xl", "heading-xl": "_3c78b7fa9b4072dd__heading-xl", "heading-lg": "aa58f227716bcde2__heading-lg", "heading-md": "fc4da56d8dfe52c4__heading-md", "heading-sm": "a9b78c7c82e8dff7__heading-sm", "body-xl": "_305ff559e52180d5__body-xl", "body-lg": "ca1aa3fc2029e958__body-lg", "body-md": "_131101940be12424__body-md", "body-sm": "_0e8d87a42c1f75fa__body-sm" };
10617 if (typeof process === "undefined" || true) {
10618 registerStyle("e8e31009f5", "._6defc79820e382c6__button{box-sizing:var(--_gcd-button-box-sizing,border-box);font-family:var(--_gcd-button-font-family,inherit);font-size:var(--_gcd-button-font-size,inherit);font-weight:var(--_gcd-button-font-weight,inherit)}.d2cff2e5dea83bd1__input{box-sizing:var(--_gcd-input-box-sizing,border-box);font-family:var(--_gcd-input-font-family,inherit);font-size:var(--_gcd-input-font-size,inherit);font-weight:var(--_gcd-input-font-weight,inherit);margin:var(--_gcd-input-margin,0);&::placeholder{color:var(--_gcd-input-placeholder-color,var(--wpds-color-foreground-interactive-neutral-weak,#707070))}&:is(textarea,[type=text],[type=password],[type=color],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){background-color:var(--_gcd-input-background-color,transparent);border:var(--_gcd-input-border,none);border-radius:var(--_gcd-input-border-radius,0);box-shadow:var(--_gcd-input-box-shadow,0 0 0 transparent);color:var(--_gcd-input-color,var(--wpds-color-foreground-interactive-neutral,#1e1e1e));&:focus{border-color:var(--_gcd-input-border-color-focus,var(--wp-admin-theme-color));box-shadow:var(--_gcd-input-box-shadow-focus,none);outline:var(--_gcd-input-outline-focus,none)}&:disabled{background:var(--_gcd-input-background-disabled,transparent);border-color:var(--_gcd-input-border-color-disabled,transparent);box-shadow:var(--_gcd-input-box-shadow-disabled,none);color:var(--_gcd-input-color-disabled,var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d))}}&:is(textarea,[type=text],[type=password],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){line-height:var(--_gcd-input-line-height,inherit);min-height:var(--_gcd-input-min-height,auto);padding:var(--_gcd-input-padding,0)}}._547d86373d02e108__textarea{box-sizing:var(--_gcd-textarea-box-sizing,border-box);overflow:var(--_gcd-textarea-overflow,auto);resize:var(--_gcd-textarea-resize,block)}._8c15fd0ed9f28ba4__div{outline:var(--_gcd-div-outline,0 solid transparent)}p._43cec3e1eec1066d__p{font-size:var(--_gcd-p-font-size,13px);line-height:var(--_gcd-p-line-height,1.5);margin:var(--_gcd-p-margin,0)}:is(h1,h2,h3,h4,h5,h6).e97669c6d9a38497__heading{color:var(--_gcd-heading-color,var(--wpds-color-foreground-content-neutral,#1e1e1e));font-size:var(--_gcd-heading-font-size,inherit);font-weight:var(--_gcd-heading-font-weight,var(--wpds-typography-font-weight-emphasis,600));margin:var(--_gcd-heading-margin,0)}._2c0831b0499dbd6e__a,._2c0831b0499dbd6e__a:is(:hover,:focus,:active){border-radius:var(--_gcd-a-border-radius,0);box-shadow:var(--_gcd-a-box-shadow,none);color:var(--_gcd-a-color,inherit);outline:var(--_gcd-a-outline,0 solid transparent);transition:var(--_gcd-a-transition,none)}.c59a0ebebd71fa4a__ol{list-style:var(--_gcd-ol-list-style,none);margin:var(--_gcd-ol-margin,0);padding-block:var(--_gcd-ol-padding-block,0);padding-inline:var(--_gcd-ol-padding-inline,0)}._46b5cb0c8e24e8c9__li{margin:var(--_gcd-li-margin,0)}");
10619 }
10620 var global_css_defense_default = { "button": "_6defc79820e382c6__button", "input": "d2cff2e5dea83bd1__input", "textarea": "_547d86373d02e108__textarea", "div": "_8c15fd0ed9f28ba4__div", "p": "_43cec3e1eec1066d__p", "heading": "e97669c6d9a38497__heading", "a": "_2c0831b0499dbd6e__a", "ol": "c59a0ebebd71fa4a__ol", "li": "_46b5cb0c8e24e8c9__li" };
10621 var Text = (0, import_element13.forwardRef)(function Text2({ variant = "body-md", render, className, ...props }, ref) {
10622 const element = useRender({
10623 render,
10624 defaultTagName: "span",
10625 ref,
10626 props: mergeProps(props, {
10627 className: clsx_default(
10628 style_default.text,
10629 global_css_defense_default.heading,
10630 global_css_defense_default.p,
10631 style_default[variant],
10632 className
10633 )
10634 })
10635 });
10636 return element;
10637 });
10638
10639 // packages/ui/build-module/tooltip/popup.mjs
10640 var import_element17 = __toESM(require_element(), 1);
10641
10642 // packages/ui/build-module/tooltip/portal.mjs
10643 var import_element14 = __toESM(require_element(), 1);
10644
10645 // packages/ui/build-module/utils/wp-compat-overlay-slot.mjs
10646 var STYLE_HASH_ATTRIBUTE2 = "data-wp-hash";
10647 function getRuntime2() {
10648 const globalScope = globalThis;
10649 if (globalScope.__wpStyleRuntime) {
10650 return globalScope.__wpStyleRuntime;
10651 }
10652 globalScope.__wpStyleRuntime = {
10653 documents: /* @__PURE__ */ new Map(),
10654 styles: /* @__PURE__ */ new Map(),
10655 injectedStyles: /* @__PURE__ */ new WeakMap()
10656 };
10657 if (typeof document !== "undefined") {
10658 registerDocument2(document);
10659 }
10660 return globalScope.__wpStyleRuntime;
10661 }
10662 function documentContainsStyleHash2(targetDocument, hash) {
10663 if (!targetDocument.head) {
10664 return false;
10665 }
10666 for (const style of targetDocument.head.querySelectorAll(
10667 `style[${STYLE_HASH_ATTRIBUTE2}]`
10668 )) {
10669 if (style.getAttribute(STYLE_HASH_ATTRIBUTE2) === hash) {
10670 return true;
10671 }
10672 }
10673 return false;
10674 }
10675 function injectStyle2(targetDocument, hash, css) {
10676 if (!targetDocument.head) {
10677 return;
10678 }
10679 const runtime = getRuntime2();
10680 let injectedStyles = runtime.injectedStyles.get(targetDocument);
10681 if (!injectedStyles) {
10682 injectedStyles = /* @__PURE__ */ new Set();
10683 runtime.injectedStyles.set(targetDocument, injectedStyles);
10684 }
10685 if (injectedStyles.has(hash)) {
10686 return;
10687 }
10688 if (documentContainsStyleHash2(targetDocument, hash)) {
10689 injectedStyles.add(hash);
10690 return;
10691 }
10692 const style = targetDocument.createElement("style");
10693 style.setAttribute(STYLE_HASH_ATTRIBUTE2, hash);
10694 style.appendChild(targetDocument.createTextNode(css));
10695 targetDocument.head.appendChild(style);
10696 injectedStyles.add(hash);
10697 }
10698 function registerDocument2(targetDocument) {
10699 const runtime = getRuntime2();
10700 runtime.documents.set(
10701 targetDocument,
10702 (runtime.documents.get(targetDocument) ?? 0) + 1
10703 );
10704 for (const [hash, css] of runtime.styles) {
10705 injectStyle2(targetDocument, hash, css);
10706 }
10707 return () => {
10708 const count = runtime.documents.get(targetDocument);
10709 if (count === void 0) {
10710 return;
10711 }
10712 if (count <= 1) {
10713 runtime.documents.delete(targetDocument);
10714 return;
10715 }
10716 runtime.documents.set(targetDocument, count - 1);
10717 };
10718 }
10719 function registerStyle2(hash, css) {
10720 const runtime = getRuntime2();
10721 runtime.styles.set(hash, css);
10722 for (const targetDocument of runtime.documents.keys()) {
10723 injectStyle2(targetDocument, hash, css);
10724 }
10725 }
10726 if (typeof process === "undefined" || true) {
10727 registerStyle2("be37f31c1e", "._11fc52b637ff8a7e__slot{inset:0;isolation:isolate;pointer-events:none;position:fixed;z-index:1000000003}@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._11fc52b637ff8a7e__slot>*{pointer-events:auto}}}");
10728 }
10729 var wp_compat_overlay_slot_default = { "slot": "_11fc52b637ff8a7e__slot" };
10730 var WP_COMPAT_OVERLAY_SLOT_ATTRIBUTE = "data-wp-compat-overlay-slot";
10731 function resolveOwnerDocument() {
10732 return typeof document === "undefined" ? null : document;
10733 }
10734 function isInWordPressEnvironment() {
10735 let topWp;
10736 try {
10737 topWp = window.top?.wp;
10738 } catch {
10739 }
10740 const wp = topWp ?? window.wp;
10741 return typeof wp?.components === "object" && wp.components !== null;
10742 }
10743 var cachedSlot = null;
10744 function ensureSlotIsAccessible(element) {
10745 element.setAttribute("aria-hidden", "false");
10746 return element;
10747 }
10748 function createSlot(ownerDocument2) {
10749 const element = ownerDocument2.createElement("div");
10750 element.setAttribute(WP_COMPAT_OVERLAY_SLOT_ATTRIBUTE, "");
10751 if (wp_compat_overlay_slot_default.slot) {
10752 element.classList.add(wp_compat_overlay_slot_default.slot);
10753 }
10754 ownerDocument2.body.appendChild(element);
10755 return element;
10756 }
10757 function getWpCompatOverlaySlot() {
10758 if (typeof window === "undefined") {
10759 return void 0;
10760 }
10761 if (!isInWordPressEnvironment() && window.__wpUiCompatOverlaySlotEnabled !== true) {
10762 return void 0;
10763 }
10764 const ownerDocument2 = resolveOwnerDocument();
10765 if (!ownerDocument2 || !ownerDocument2.body) {
10766 return void 0;
10767 }
10768 if (cachedSlot && cachedSlot.ownerDocument === ownerDocument2 && cachedSlot.isConnected) {
10769 return ensureSlotIsAccessible(cachedSlot);
10770 }
10771 const existing = ownerDocument2.querySelector(
10772 `[${WP_COMPAT_OVERLAY_SLOT_ATTRIBUTE}]`
10773 );
10774 if (existing instanceof HTMLDivElement) {
10775 cachedSlot = ensureSlotIsAccessible(existing);
10776 return cachedSlot;
10777 }
10778 if (cachedSlot?.isConnected) {
10779 cachedSlot.remove();
10780 }
10781 cachedSlot = ensureSlotIsAccessible(createSlot(ownerDocument2));
10782 return cachedSlot;
10783 }
10784
10785 // packages/ui/build-module/tooltip/portal.mjs
10786 var import_jsx_runtime37 = __toESM(require_jsx_runtime(), 1);
10787 var Portal = (0, import_element14.forwardRef)(
10788 function TooltipPortal3({ container, ...restProps }, ref) {
10789 return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
10790 index_parts_exports2.Portal,
10791 {
10792 container: container ?? getWpCompatOverlaySlot(),
10793 ...restProps,
10794 ref
10795 }
10796 );
10797 }
10798 );
10799
10800 // packages/ui/build-module/tooltip/positioner.mjs
10801 var import_element15 = __toESM(require_element(), 1);
10802 var import_jsx_runtime38 = __toESM(require_jsx_runtime(), 1);
10803 var STYLE_HASH_ATTRIBUTE3 = "data-wp-hash";
10804 function getRuntime3() {
10805 const globalScope = globalThis;
10806 if (globalScope.__wpStyleRuntime) {
10807 return globalScope.__wpStyleRuntime;
10808 }
10809 globalScope.__wpStyleRuntime = {
10810 documents: /* @__PURE__ */ new Map(),
10811 styles: /* @__PURE__ */ new Map(),
10812 injectedStyles: /* @__PURE__ */ new WeakMap()
10813 };
10814 if (typeof document !== "undefined") {
10815 registerDocument3(document);
10816 }
10817 return globalScope.__wpStyleRuntime;
10818 }
10819 function documentContainsStyleHash3(targetDocument, hash) {
10820 if (!targetDocument.head) {
10821 return false;
10822 }
10823 for (const style of targetDocument.head.querySelectorAll(
10824 `style[${STYLE_HASH_ATTRIBUTE3}]`
10825 )) {
10826 if (style.getAttribute(STYLE_HASH_ATTRIBUTE3) === hash) {
10827 return true;
10828 }
10829 }
10830 return false;
10831 }
10832 function injectStyle3(targetDocument, hash, css) {
10833 if (!targetDocument.head) {
10834 return;
10835 }
10836 const runtime = getRuntime3();
10837 let injectedStyles = runtime.injectedStyles.get(targetDocument);
10838 if (!injectedStyles) {
10839 injectedStyles = /* @__PURE__ */ new Set();
10840 runtime.injectedStyles.set(targetDocument, injectedStyles);
10841 }
10842 if (injectedStyles.has(hash)) {
10843 return;
10844 }
10845 if (documentContainsStyleHash3(targetDocument, hash)) {
10846 injectedStyles.add(hash);
10847 return;
10848 }
10849 const style = targetDocument.createElement("style");
10850 style.setAttribute(STYLE_HASH_ATTRIBUTE3, hash);
10851 style.appendChild(targetDocument.createTextNode(css));
10852 targetDocument.head.appendChild(style);
10853 injectedStyles.add(hash);
10854 }
10855 function registerDocument3(targetDocument) {
10856 const runtime = getRuntime3();
10857 runtime.documents.set(
10858 targetDocument,
10859 (runtime.documents.get(targetDocument) ?? 0) + 1
10860 );
10861 for (const [hash, css] of runtime.styles) {
10862 injectStyle3(targetDocument, hash, css);
10863 }
10864 return () => {
10865 const count = runtime.documents.get(targetDocument);
10866 if (count === void 0) {
10867 return;
10868 }
10869 if (count <= 1) {
10870 runtime.documents.delete(targetDocument);
10871 return;
10872 }
10873 runtime.documents.set(targetDocument, count - 1);
10874 };
10875 }
10876 function registerStyle3(hash, css) {
10877 const runtime = getRuntime3();
10878 runtime.styles.set(hash, css);
10879 for (const targetDocument of runtime.documents.keys()) {
10880 injectStyle3(targetDocument, hash, css);
10881 }
10882 }
10883 if (typeof process === "undefined" || true) {
10884 registerStyle3("10f3806643", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._336cd3e4e743482f__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}}");
10885 }
10886 var resets_default = { "box-sizing": "_336cd3e4e743482f__box-sizing" };
10887 if (typeof process === "undefined" || true) {
10888 registerStyle3("19fcc06039", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._480b748dd3510e64__positioner{z-index:var(--wp-ui-tooltip-z-index,initial)}._50096b232db7709d__popup{--_wp-ui-elevation-sm:0 1px 2px rgba(0,0,0,.05),0 2px 3px rgba(0,0,0,.04),0 6px 6px rgba(0,0,0,.03),0 8px 8px rgba(0,0,0,.02);background-color:var(--wpds-color-background-surface-neutral-strong,#fff);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--_wp-ui-elevation-sm);color:var(--wpds-color-foreground-content-neutral,#1e1e1e);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-sm,12px);line-height:1.4;padding:var(--wpds-dimension-padding-xs,4px) var(--wpds-dimension-padding-sm,8px);@media (forced-colors:active){border-bottom-color:CanvasText;border-bottom-style:solid;border-bottom-width:1px;border-left-color:CanvasText;border-left-style:solid;border-left-width:1px;border-right-color:CanvasText;border-right-style:solid;border-right-width:1px;border-top-color:CanvasText;border-top-style:solid;border-top-width:1px}}}}');
10889 }
10890 var style_default2 = { "positioner": "_480b748dd3510e64__positioner", "popup": "_50096b232db7709d__popup" };
10891 var Positioner = (0, import_element15.forwardRef)(
10892 function TooltipPositioner3({ align = "center", className, side = "top", sideOffset = 4, ...props }, ref) {
10893 return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
10894 index_parts_exports2.Positioner,
10895 {
10896 ref,
10897 align,
10898 side,
10899 sideOffset,
10900 ...props,
10901 className: clsx_default(
10902 resets_default["box-sizing"],
10903 style_default2.positioner,
10904 className
10905 )
10906 }
10907 );
10908 }
10909 );
10910
10911 // packages/ui/build-module/utils/render-slot-with-children.mjs
10912 var import_element16 = __toESM(require_element(), 1);
10913 function renderSlotWithChildren(slot, defaultSlot, children) {
10914 return (0, import_element16.cloneElement)(slot ?? defaultSlot, { children });
10915 }
10916
10917 // packages/ui/build-module/utils/theme-provider.mjs
10918 var theme = __toESM(require_theme(), 1);
10919
10920 // packages/ui/build-module/lock-unlock.mjs
10921 var import_private_apis = __toESM(require_private_apis(), 1);
10922 var { lock, unlock } = (0, import_private_apis.__dangerousOptInToUnstableAPIsOnlyForCoreModules)(
10923 "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.",
10924 "@wordpress/ui"
10925 );
10926
10927 // packages/ui/build-module/utils/theme-provider.mjs
10928 function getThemeProvider() {
10929 const themePackage = theme;
10930 if (themePackage.ThemeProvider) {
10931 return themePackage.ThemeProvider;
10932 }
10933 if (!themePackage.privateApis) {
10934 throw new Error(
10935 "@wordpress/ui: @wordpress/theme must expose `ThemeProvider` or `privateApis.ThemeProvider`."
10936 );
10937 }
10938 return unlock(
10939 themePackage.privateApis
10940 ).ThemeProvider;
10941 }
10942 var ThemeProvider = getThemeProvider();
10943
10944 // packages/ui/build-module/tooltip/popup.mjs
10945 var import_jsx_runtime39 = __toESM(require_jsx_runtime(), 1);
10946 var STYLE_HASH_ATTRIBUTE4 = "data-wp-hash";
10947 function getRuntime4() {
10948 const globalScope = globalThis;
10949 if (globalScope.__wpStyleRuntime) {
10950 return globalScope.__wpStyleRuntime;
10951 }
10952 globalScope.__wpStyleRuntime = {
10953 documents: /* @__PURE__ */ new Map(),
10954 styles: /* @__PURE__ */ new Map(),
10955 injectedStyles: /* @__PURE__ */ new WeakMap()
10956 };
10957 if (typeof document !== "undefined") {
10958 registerDocument4(document);
10959 }
10960 return globalScope.__wpStyleRuntime;
10961 }
10962 function documentContainsStyleHash4(targetDocument, hash) {
10963 if (!targetDocument.head) {
10964 return false;
10965 }
10966 for (const style of targetDocument.head.querySelectorAll(
10967 `style[${STYLE_HASH_ATTRIBUTE4}]`
10968 )) {
10969 if (style.getAttribute(STYLE_HASH_ATTRIBUTE4) === hash) {
10970 return true;
10971 }
10972 }
10973 return false;
10974 }
10975 function injectStyle4(targetDocument, hash, css) {
10976 if (!targetDocument.head) {
10977 return;
10978 }
10979 const runtime = getRuntime4();
10980 let injectedStyles = runtime.injectedStyles.get(targetDocument);
10981 if (!injectedStyles) {
10982 injectedStyles = /* @__PURE__ */ new Set();
10983 runtime.injectedStyles.set(targetDocument, injectedStyles);
10984 }
10985 if (injectedStyles.has(hash)) {
10986 return;
10987 }
10988 if (documentContainsStyleHash4(targetDocument, hash)) {
10989 injectedStyles.add(hash);
10990 return;
10991 }
10992 const style = targetDocument.createElement("style");
10993 style.setAttribute(STYLE_HASH_ATTRIBUTE4, hash);
10994 style.appendChild(targetDocument.createTextNode(css));
10995 targetDocument.head.appendChild(style);
10996 injectedStyles.add(hash);
10997 }
10998 function registerDocument4(targetDocument) {
10999 const runtime = getRuntime4();
11000 runtime.documents.set(
11001 targetDocument,
11002 (runtime.documents.get(targetDocument) ?? 0) + 1
11003 );
11004 for (const [hash, css] of runtime.styles) {
11005 injectStyle4(targetDocument, hash, css);
11006 }
11007 return () => {
11008 const count = runtime.documents.get(targetDocument);
11009 if (count === void 0) {
11010 return;
11011 }
11012 if (count <= 1) {
11013 runtime.documents.delete(targetDocument);
11014 return;
11015 }
11016 runtime.documents.set(targetDocument, count - 1);
11017 };
11018 }
11019 function registerStyle4(hash, css) {
11020 const runtime = getRuntime4();
11021 runtime.styles.set(hash, css);
11022 for (const targetDocument of runtime.documents.keys()) {
11023 injectStyle4(targetDocument, hash, css);
11024 }
11025 }
11026 if (typeof process === "undefined" || true) {
11027 registerStyle4("19fcc06039", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._480b748dd3510e64__positioner{z-index:var(--wp-ui-tooltip-z-index,initial)}._50096b232db7709d__popup{--_wp-ui-elevation-sm:0 1px 2px rgba(0,0,0,.05),0 2px 3px rgba(0,0,0,.04),0 6px 6px rgba(0,0,0,.03),0 8px 8px rgba(0,0,0,.02);background-color:var(--wpds-color-background-surface-neutral-strong,#fff);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--_wp-ui-elevation-sm);color:var(--wpds-color-foreground-content-neutral,#1e1e1e);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-sm,12px);line-height:1.4;padding:var(--wpds-dimension-padding-xs,4px) var(--wpds-dimension-padding-sm,8px);@media (forced-colors:active){border-bottom-color:CanvasText;border-bottom-style:solid;border-bottom-width:1px;border-left-color:CanvasText;border-left-style:solid;border-left-width:1px;border-right-color:CanvasText;border-right-style:solid;border-right-width:1px;border-top-color:CanvasText;border-top-style:solid;border-top-width:1px}}}}');
11028 }
11029 var style_default3 = { "positioner": "_480b748dd3510e64__positioner", "popup": "_50096b232db7709d__popup" };
11030 var POPUP_COLOR = { background: "#1e1e1e" };
11031 var Popup = (0, import_element17.forwardRef)(function TooltipPopup3({ portal, positioner, children, className, ...props }, ref) {
11032 const popupContent = /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(ThemeProvider, { color: POPUP_COLOR, children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
11033 index_parts_exports2.Popup,
11034 {
11035 ref,
11036 className: clsx_default(style_default3.popup, className),
11037 ...props,
11038 children
11039 }
11040 ) });
11041 const positionedPopup = renderSlotWithChildren(
11042 positioner,
11043 /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(Positioner, {}),
11044 popupContent
11045 );
11046 return renderSlotWithChildren(portal, /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(Portal, {}), positionedPopup);
11047 });
11048
11049 // packages/ui/build-module/tooltip/trigger.mjs
11050 var import_element18 = __toESM(require_element(), 1);
11051 var import_jsx_runtime40 = __toESM(require_jsx_runtime(), 1);
11052 var Trigger = (0, import_element18.forwardRef)(
11053 function TooltipTrigger3(props, ref) {
11054 return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(index_parts_exports2.Trigger, { ref, ...props });
11055 }
11056 );
11057
11058 // packages/ui/build-module/utils/direction-provider.mjs
11059 var import_i18n2 = __toESM(require_i18n(), 1);
11060 var import_jsx_runtime41 = __toESM(require_jsx_runtime(), 1);
11061 function DirectionProvider3({ children }) {
11062 return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(DirectionProvider, { direction: (0, import_i18n2.isRTL)() ? "rtl" : "ltr", children });
11063 }
11064
11065 // packages/ui/build-module/tooltip/root.mjs
11066 var import_jsx_runtime42 = __toESM(require_jsx_runtime(), 1);
11067 function Root(props) {
11068 return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(DirectionProvider3, { children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(index_parts_exports2.Root, { ...props }) });
11069 }
11070
11071 // packages/ui/build-module/link/link.mjs
11072 var import_element19 = __toESM(require_element(), 1);
11073 var import_i18n3 = __toESM(require_i18n(), 1);
11074 var import_jsx_runtime43 = __toESM(require_jsx_runtime(), 1);
11075 var STYLE_HASH_ATTRIBUTE5 = "data-wp-hash";
11076 function getRuntime5() {
11077 const globalScope = globalThis;
11078 if (globalScope.__wpStyleRuntime) {
11079 return globalScope.__wpStyleRuntime;
11080 }
11081 globalScope.__wpStyleRuntime = {
11082 documents: /* @__PURE__ */ new Map(),
11083 styles: /* @__PURE__ */ new Map(),
11084 injectedStyles: /* @__PURE__ */ new WeakMap()
11085 };
11086 if (typeof document !== "undefined") {
11087 registerDocument5(document);
11088 }
11089 return globalScope.__wpStyleRuntime;
11090 }
11091 function documentContainsStyleHash5(targetDocument, hash) {
11092 if (!targetDocument.head) {
11093 return false;
11094 }
11095 for (const style of targetDocument.head.querySelectorAll(
11096 `style[${STYLE_HASH_ATTRIBUTE5}]`
11097 )) {
11098 if (style.getAttribute(STYLE_HASH_ATTRIBUTE5) === hash) {
11099 return true;
11100 }
11101 }
11102 return false;
11103 }
11104 function injectStyle5(targetDocument, hash, css) {
11105 if (!targetDocument.head) {
11106 return;
11107 }
11108 const runtime = getRuntime5();
11109 let injectedStyles = runtime.injectedStyles.get(targetDocument);
11110 if (!injectedStyles) {
11111 injectedStyles = /* @__PURE__ */ new Set();
11112 runtime.injectedStyles.set(targetDocument, injectedStyles);
11113 }
11114 if (injectedStyles.has(hash)) {
11115 return;
11116 }
11117 if (documentContainsStyleHash5(targetDocument, hash)) {
11118 injectedStyles.add(hash);
11119 return;
11120 }
11121 const style = targetDocument.createElement("style");
11122 style.setAttribute(STYLE_HASH_ATTRIBUTE5, hash);
11123 style.appendChild(targetDocument.createTextNode(css));
11124 targetDocument.head.appendChild(style);
11125 injectedStyles.add(hash);
11126 }
11127 function registerDocument5(targetDocument) {
11128 const runtime = getRuntime5();
11129 runtime.documents.set(
11130 targetDocument,
11131 (runtime.documents.get(targetDocument) ?? 0) + 1
11132 );
11133 for (const [hash, css] of runtime.styles) {
11134 injectStyle5(targetDocument, hash, css);
11135 }
11136 return () => {
11137 const count = runtime.documents.get(targetDocument);
11138 if (count === void 0) {
11139 return;
11140 }
11141 if (count <= 1) {
11142 runtime.documents.delete(targetDocument);
11143 return;
11144 }
11145 runtime.documents.set(targetDocument, count - 1);
11146 };
11147 }
11148 function registerStyle5(hash, css) {
11149 const runtime = getRuntime5();
11150 runtime.styles.set(hash, css);
11151 for (const targetDocument of runtime.documents.keys()) {
11152 injectStyle5(targetDocument, hash, css);
11153 }
11154 }
11155 if (typeof process === "undefined" || true) {
11156 registerStyle5("10f3806643", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._336cd3e4e743482f__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}}");
11157 }
11158 var resets_default2 = { "box-sizing": "_336cd3e4e743482f__box-sizing" };
11159 if (typeof process === "undefined" || true) {
11160 registerStyle5("08122b3d53", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{.af79fb116edb0dd7__outset-ring--focus:focus,.dfcfdc28396e5d98__outset-ring--focus-visible:focus-visible,.e5cd9ee879f6403a__outset-ring--focus-within:focus-within,:focus-visible ._81935a08e952f267__outset-ring--focus-parent-visible{--_gcd-a-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));--_gcd-div-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));outline-offset:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px))}._3c9f5ee9fc9c136d__outset-ring--focus-within-except-active:focus-within,.abc777e9713fa711__outset-ring--focus-except-active:focus{outline:none}._3c9f5ee9fc9c136d__outset-ring--focus-within-except-active:focus-within:not(:has(:active)),.abc777e9713fa711__outset-ring--focus-except-active:focus:not(:active){--_gcd-a-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));--_gcd-div-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));outline-offset:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px))}}}");
11161 }
11162 var focus_module_default = { "outset-ring--focus": "af79fb116edb0dd7__outset-ring--focus", "outset-ring--focus-visible": "dfcfdc28396e5d98__outset-ring--focus-visible", "outset-ring--focus-within": "e5cd9ee879f6403a__outset-ring--focus-within", "outset-ring--focus-parent-visible": "_81935a08e952f267__outset-ring--focus-parent-visible", "outset-ring--focus-except-active": "abc777e9713fa711__outset-ring--focus-except-active", "outset-ring--focus-within-except-active": "_3c9f5ee9fc9c136d__outset-ring--focus-within-except-active" };
11163 if (typeof process === "undefined" || true) {
11164 registerStyle5("e8e6a9be37", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.d4250949359b05ce__link{text-decoration-thickness:from-font;text-underline-offset:.2em}.c6055659b8e2cd2c__is-brand,.c6055659b8e2cd2c__is-brand:visited{--_gcd-a-color:var(--wpds-color-foreground-interactive-brand,var(--wp-admin-theme-color,#3858e9));color:var(--wpds-color-foreground-interactive-brand,var(--wp-admin-theme-color,#3858e9))}.c6055659b8e2cd2c__is-brand:active,.c6055659b8e2cd2c__is-brand:hover{--_gcd-a-color:var(--wpds-color-foreground-interactive-brand-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 52%,#000));color:var(--wpds-color-foreground-interactive-brand-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 52%,#000))}._92e0dfcaeee15b88__is-neutral,._92e0dfcaeee15b88__is-neutral:visited{--_gcd-a-color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);text-decoration-color:var(--wpds-color-stroke-interactive-neutral,#8d8d8d)}._92e0dfcaeee15b88__is-neutral:active,._92e0dfcaeee15b88__is-neutral:hover{--_gcd-a-color:var(--wpds-color-foreground-interactive-neutral-active,#1e1e1e);color:var(--wpds-color-foreground-interactive-neutral-active,#1e1e1e)}.cf122a9bf1035d42__is-unstyled{--_gcd-a-color:inherit;color:inherit;text-decoration:none}._0cb411afac4c86c7__link-icon{display:inline-block;font-weight:var(--wpds-typography-font-weight-default,400);line-height:1;margin-inline-start:var(--wpds-dimension-padding-xs,4px);text-decoration:none}._0cb411afac4c86c7__link-icon:after{content:"\\2197"}._0cb411afac4c86c7__link-icon:dir(rtl):after{content:"\\2196"}}}');
11165 }
11166 var style_default4 = { "link": "d4250949359b05ce__link", "is-brand": "c6055659b8e2cd2c__is-brand", "is-neutral": "_92e0dfcaeee15b88__is-neutral", "is-unstyled": "cf122a9bf1035d42__is-unstyled", "link-icon": "_0cb411afac4c86c7__link-icon" };
11167 if (typeof process === "undefined" || true) {
11168 registerStyle5("e8e31009f5", "._6defc79820e382c6__button{box-sizing:var(--_gcd-button-box-sizing,border-box);font-family:var(--_gcd-button-font-family,inherit);font-size:var(--_gcd-button-font-size,inherit);font-weight:var(--_gcd-button-font-weight,inherit)}.d2cff2e5dea83bd1__input{box-sizing:var(--_gcd-input-box-sizing,border-box);font-family:var(--_gcd-input-font-family,inherit);font-size:var(--_gcd-input-font-size,inherit);font-weight:var(--_gcd-input-font-weight,inherit);margin:var(--_gcd-input-margin,0);&::placeholder{color:var(--_gcd-input-placeholder-color,var(--wpds-color-foreground-interactive-neutral-weak,#707070))}&:is(textarea,[type=text],[type=password],[type=color],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){background-color:var(--_gcd-input-background-color,transparent);border:var(--_gcd-input-border,none);border-radius:var(--_gcd-input-border-radius,0);box-shadow:var(--_gcd-input-box-shadow,0 0 0 transparent);color:var(--_gcd-input-color,var(--wpds-color-foreground-interactive-neutral,#1e1e1e));&:focus{border-color:var(--_gcd-input-border-color-focus,var(--wp-admin-theme-color));box-shadow:var(--_gcd-input-box-shadow-focus,none);outline:var(--_gcd-input-outline-focus,none)}&:disabled{background:var(--_gcd-input-background-disabled,transparent);border-color:var(--_gcd-input-border-color-disabled,transparent);box-shadow:var(--_gcd-input-box-shadow-disabled,none);color:var(--_gcd-input-color-disabled,var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d))}}&:is(textarea,[type=text],[type=password],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){line-height:var(--_gcd-input-line-height,inherit);min-height:var(--_gcd-input-min-height,auto);padding:var(--_gcd-input-padding,0)}}._547d86373d02e108__textarea{box-sizing:var(--_gcd-textarea-box-sizing,border-box);overflow:var(--_gcd-textarea-overflow,auto);resize:var(--_gcd-textarea-resize,block)}._8c15fd0ed9f28ba4__div{outline:var(--_gcd-div-outline,0 solid transparent)}p._43cec3e1eec1066d__p{font-size:var(--_gcd-p-font-size,13px);line-height:var(--_gcd-p-line-height,1.5);margin:var(--_gcd-p-margin,0)}:is(h1,h2,h3,h4,h5,h6).e97669c6d9a38497__heading{color:var(--_gcd-heading-color,var(--wpds-color-foreground-content-neutral,#1e1e1e));font-size:var(--_gcd-heading-font-size,inherit);font-weight:var(--_gcd-heading-font-weight,var(--wpds-typography-font-weight-emphasis,600));margin:var(--_gcd-heading-margin,0)}._2c0831b0499dbd6e__a,._2c0831b0499dbd6e__a:is(:hover,:focus,:active){border-radius:var(--_gcd-a-border-radius,0);box-shadow:var(--_gcd-a-box-shadow,none);color:var(--_gcd-a-color,inherit);outline:var(--_gcd-a-outline,0 solid transparent);transition:var(--_gcd-a-transition,none)}.c59a0ebebd71fa4a__ol{list-style:var(--_gcd-ol-list-style,none);margin:var(--_gcd-ol-margin,0);padding-block:var(--_gcd-ol-padding-block,0);padding-inline:var(--_gcd-ol-padding-inline,0)}._46b5cb0c8e24e8c9__li{margin:var(--_gcd-li-margin,0)}");
11169 }
11170 var global_css_defense_default2 = { "button": "_6defc79820e382c6__button", "input": "d2cff2e5dea83bd1__input", "textarea": "_547d86373d02e108__textarea", "div": "_8c15fd0ed9f28ba4__div", "p": "_43cec3e1eec1066d__p", "heading": "e97669c6d9a38497__heading", "a": "_2c0831b0499dbd6e__a", "ol": "c59a0ebebd71fa4a__ol", "li": "_46b5cb0c8e24e8c9__li" };
11171 var Link = (0, import_element19.forwardRef)(function Link2({
11172 children,
11173 variant = "default",
11174 tone = "brand",
11175 openInNewTab = false,
11176 target,
11177 render,
11178 className,
11179 ...props
11180 }, ref) {
11181 const shouldShowNewTabIndicator = openInNewTab || /^_blank$/i.test(target ?? "");
11182 const element = useRender({
11183 render,
11184 defaultTagName: "a",
11185 ref,
11186 props: mergeProps(props, {
11187 className: clsx_default(
11188 global_css_defense_default2.a,
11189 resets_default2["box-sizing"],
11190 focus_module_default["outset-ring--focus-except-active"],
11191 variant !== "unstyled" && style_default4.link,
11192 variant !== "unstyled" && style_default4[`is-${tone}`],
11193 variant === "unstyled" && style_default4["is-unstyled"],
11194 className
11195 ),
11196 target: target ?? (openInNewTab ? "_blank" : void 0),
11197 children: /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(import_jsx_runtime43.Fragment, { children: [
11198 children,
11199 shouldShowNewTabIndicator && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
11200 "span",
11201 {
11202 className: style_default4["link-icon"],
11203 role: "img",
11204 "aria-label": (
11205 /* translators: accessibility text appended to link text */
11206 (0, import_i18n3.__)("(opens in a new tab)")
11207 )
11208 }
11209 )
11210 ] })
11211 })
11212 });
11213 return element;
11214 });
11215
11216 // packages/ui/build-module/icon/icon.mjs
11217 var import_element20 = __toESM(require_element(), 1);
11218 var import_primitives19 = __toESM(require_primitives(), 1);
11219 var import_jsx_runtime44 = __toESM(require_jsx_runtime(), 1);
11220 var Icon = (0, import_element20.forwardRef)(function Icon2({ icon, size: size4 = 24, style, ...restProps }, ref) {
11221 const mergedStyle = icon.props.style || style ? { ...icon.props.style, ...style } : void 0;
11222 return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
11223 import_primitives19.SVG,
11224 {
11225 ref,
11226 ...icon.props,
11227 ...restProps,
11228 ...mergedStyle ? { style: mergedStyle } : {},
11229 width: size4,
11230 height: size4
11231 }
11232 );
11233 });
11234
11235 // packages/ui/build-module/utils/keyboard-shortcut.mjs
11236 var import_element22 = __toESM(require_element(), 1);
11237 var import_i18n4 = __toESM(require_i18n(), 1);
11238
11239 // packages/ui/build-module/visually-hidden/visually-hidden.mjs
11240 var import_element21 = __toESM(require_element(), 1);
11241 var STYLE_HASH_ATTRIBUTE6 = "data-wp-hash";
11242 function getRuntime6() {
11243 const globalScope = globalThis;
11244 if (globalScope.__wpStyleRuntime) {
11245 return globalScope.__wpStyleRuntime;
11246 }
11247 globalScope.__wpStyleRuntime = {
11248 documents: /* @__PURE__ */ new Map(),
11249 styles: /* @__PURE__ */ new Map(),
11250 injectedStyles: /* @__PURE__ */ new WeakMap()
11251 };
11252 if (typeof document !== "undefined") {
11253 registerDocument6(document);
11254 }
11255 return globalScope.__wpStyleRuntime;
11256 }
11257 function documentContainsStyleHash6(targetDocument, hash) {
11258 if (!targetDocument.head) {
11259 return false;
11260 }
11261 for (const style of targetDocument.head.querySelectorAll(
11262 `style[${STYLE_HASH_ATTRIBUTE6}]`
11263 )) {
11264 if (style.getAttribute(STYLE_HASH_ATTRIBUTE6) === hash) {
11265 return true;
11266 }
11267 }
11268 return false;
11269 }
11270 function injectStyle6(targetDocument, hash, css) {
11271 if (!targetDocument.head) {
11272 return;
11273 }
11274 const runtime = getRuntime6();
11275 let injectedStyles = runtime.injectedStyles.get(targetDocument);
11276 if (!injectedStyles) {
11277 injectedStyles = /* @__PURE__ */ new Set();
11278 runtime.injectedStyles.set(targetDocument, injectedStyles);
11279 }
11280 if (injectedStyles.has(hash)) {
11281 return;
11282 }
11283 if (documentContainsStyleHash6(targetDocument, hash)) {
11284 injectedStyles.add(hash);
11285 return;
11286 }
11287 const style = targetDocument.createElement("style");
11288 style.setAttribute(STYLE_HASH_ATTRIBUTE6, hash);
11289 style.appendChild(targetDocument.createTextNode(css));
11290 targetDocument.head.appendChild(style);
11291 injectedStyles.add(hash);
11292 }
11293 function registerDocument6(targetDocument) {
11294 const runtime = getRuntime6();
11295 runtime.documents.set(
11296 targetDocument,
11297 (runtime.documents.get(targetDocument) ?? 0) + 1
11298 );
11299 for (const [hash, css] of runtime.styles) {
11300 injectStyle6(targetDocument, hash, css);
11301 }
11302 return () => {
11303 const count = runtime.documents.get(targetDocument);
11304 if (count === void 0) {
11305 return;
11306 }
11307 if (count <= 1) {
11308 runtime.documents.delete(targetDocument);
11309 return;
11310 }
11311 runtime.documents.set(targetDocument, count - 1);
11312 };
11313 }
11314 function registerStyle6(hash, css) {
11315 const runtime = getRuntime6();
11316 runtime.styles.set(hash, css);
11317 for (const targetDocument of runtime.documents.keys()) {
11318 injectStyle6(targetDocument, hash, css);
11319 }
11320 }
11321 if (typeof process === "undefined" || true) {
11322 registerStyle6("f4df7461e9", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.f37b9e2e191ebd66__visually-hidden{border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;overflow-wrap:normal;padding:0;position:absolute;width:1px;word-break:normal}}}");
11323 }
11324 var style_default5 = { "visually-hidden": "f37b9e2e191ebd66__visually-hidden" };
11325 var VisuallyHidden = (0, import_element21.forwardRef)(
11326 function VisuallyHidden2({ render, ...restProps }, ref) {
11327 const element = useRender({
11328 render,
11329 ref,
11330 props: mergeProps(
11331 { className: style_default5["visually-hidden"] },
11332 restProps,
11333 {
11334 // @ts-expect-error Arbitrary data-* attributes aren't indexable on the typed div props. Kept hardcoded so consumers can't change or remove it.
11335 "data-visually-hidden": ""
11336 }
11337 )
11338 });
11339 return element;
11340 }
11341 );
11342
11343 // packages/ui/build-module/utils/keyboard-shortcut.mjs
11344 var import_jsx_runtime45 = __toESM(require_jsx_runtime(), 1);
11345 function useKeyboardShortcutProps({
11346 "aria-describedby": ariaDescribedBy,
11347 "aria-keyshortcuts": ariaKeyShortcuts,
11348 shortcut
11349 }) {
11350 const generatedDescriptionId = (0, import_element22.useId)();
11351 const descriptionId = shortcut ? generatedDescriptionId : void 0;
11352 const describedBy = [ariaDescribedBy, descriptionId].filter(Boolean).join(" ");
11353 return {
11354 descriptionId,
11355 targetProps: {
11356 "aria-describedby": describedBy || void 0,
11357 "aria-keyshortcuts": shortcut?.ariaKeyShortcut ?? ariaKeyShortcuts
11358 }
11359 };
11360 }
11361 var KeyboardShortcutDescription = (0, import_element22.forwardRef)(function KeyboardShortcutDescription2({ descriptionId, shortcut }, ref) {
11362 return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
11363 VisuallyHidden,
11364 {
11365 id: descriptionId,
11366 "aria-hidden": "true",
11367 render: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { ref }),
11368 children: (0, import_i18n4.sprintf)(
11369 /* translators: %s: keyboard shortcut. */
11370 (0, import_i18n4.__)("Keyboard shortcut: %s"),
11371 shortcut.label ?? shortcut.ariaKeyShortcut
11372 )
11373 }
11374 );
11375 });
11376 var KeyboardShortcutDisplay = (0, import_element22.forwardRef)(function KeyboardShortcutDisplay2({ className, shortcut }, ref) {
11377 return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { ref, "aria-hidden": "true", className, dir: "ltr", children: shortcut.displayShortcut });
11378 });
11379
11380 // packages/ui/build-module/button/button.mjs
11381 var import_a11y = __toESM(require_a11y(), 1);
11382 var import_element23 = __toESM(require_element(), 1);
11383 var import_i18n5 = __toESM(require_i18n(), 1);
11384 var import_jsx_runtime46 = __toESM(require_jsx_runtime(), 1);
11385 var STYLE_HASH_ATTRIBUTE7 = "data-wp-hash";
11386 function getRuntime7() {
11387 const globalScope = globalThis;
11388 if (globalScope.__wpStyleRuntime) {
11389 return globalScope.__wpStyleRuntime;
11390 }
11391 globalScope.__wpStyleRuntime = {
11392 documents: /* @__PURE__ */ new Map(),
11393 styles: /* @__PURE__ */ new Map(),
11394 injectedStyles: /* @__PURE__ */ new WeakMap()
11395 };
11396 if (typeof document !== "undefined") {
11397 registerDocument7(document);
11398 }
11399 return globalScope.__wpStyleRuntime;
11400 }
11401 function documentContainsStyleHash7(targetDocument, hash) {
11402 if (!targetDocument.head) {
11403 return false;
11404 }
11405 for (const style of targetDocument.head.querySelectorAll(
11406 `style[${STYLE_HASH_ATTRIBUTE7}]`
11407 )) {
11408 if (style.getAttribute(STYLE_HASH_ATTRIBUTE7) === hash) {
11409 return true;
11410 }
11411 }
11412 return false;
11413 }
11414 function injectStyle7(targetDocument, hash, css) {
11415 if (!targetDocument.head) {
11416 return;
11417 }
11418 const runtime = getRuntime7();
11419 let injectedStyles = runtime.injectedStyles.get(targetDocument);
11420 if (!injectedStyles) {
11421 injectedStyles = /* @__PURE__ */ new Set();
11422 runtime.injectedStyles.set(targetDocument, injectedStyles);
11423 }
11424 if (injectedStyles.has(hash)) {
11425 return;
11426 }
11427 if (documentContainsStyleHash7(targetDocument, hash)) {
11428 injectedStyles.add(hash);
11429 return;
11430 }
11431 const style = targetDocument.createElement("style");
11432 style.setAttribute(STYLE_HASH_ATTRIBUTE7, hash);
11433 style.appendChild(targetDocument.createTextNode(css));
11434 targetDocument.head.appendChild(style);
11435 injectedStyles.add(hash);
11436 }
11437 function registerDocument7(targetDocument) {
11438 const runtime = getRuntime7();
11439 runtime.documents.set(
11440 targetDocument,
11441 (runtime.documents.get(targetDocument) ?? 0) + 1
11442 );
11443 for (const [hash, css] of runtime.styles) {
11444 injectStyle7(targetDocument, hash, css);
11445 }
11446 return () => {
11447 const count = runtime.documents.get(targetDocument);
11448 if (count === void 0) {
11449 return;
11450 }
11451 if (count <= 1) {
11452 runtime.documents.delete(targetDocument);
11453 return;
11454 }
11455 runtime.documents.set(targetDocument, count - 1);
11456 };
11457 }
11458 function registerStyle7(hash, css) {
11459 const runtime = getRuntime7();
11460 runtime.styles.set(hash, css);
11461 for (const targetDocument of runtime.documents.keys()) {
11462 injectStyle7(targetDocument, hash, css);
11463 }
11464 }
11465 if (typeof process === "undefined" || true) {
11466 registerStyle7("effc4e3032", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._97b0fc33c028be1a__button,.abbb272e2ce49bd6__is-unstyled{appearance:none;padding:0}._97b0fc33c028be1a__button{--wp-ui-button-font-weight:var(--wpds-typography-font-weight-emphasis,600);--wp-ui-button-background-color:var(--wpds-color-background-interactive-brand-strong,var(--wp-admin-theme-color,#3858e9));--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-brand-strong-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 93%,#000));--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-brand-strong-disabled,#e6e6e6);--wp-ui-button-foreground-color:var(--wpds-color-foreground-interactive-brand-strong,#fff);--wp-ui-button-foreground-color-active:var(--wpds-color-foreground-interactive-brand-strong-active,#fff);--wp-ui-button-foreground-color-disabled:var(--wpds-color-foreground-interactive-brand-strong-disabled,#8d8d8d);--wp-ui-button-padding-block:var(--wpds-dimension-padding-xs,4px);--wp-ui-button-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-button-height:var(--wpds-dimension-size-lg,40px);--wp-ui-button-aspect-ratio:auto;--wp-ui-button-font-size:var(--wpds-typography-font-size-md,13px);--wp-ui-button-min-width:calc(4ch + var(--wp-ui-button-padding-inline)*2);--wp-ui-button-icon-margin:calc((var(--wpds-dimension-size-2xs, 16px) - var(--wpds-dimension-size-sm, 24px))/2);--wp-ui-button-border-color:var(--wp-ui-button-background-color);--wp-ui-button-border-color-active:var(--wp-ui-button-background-color-active);--wp-ui-button-border-color-disabled:var(--wp-ui-button-background-color-disabled);--_gcd-button-font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);--_gcd-button-font-size:var(--wp-ui-button-font-size);--_gcd-button-font-weight:var(--wp-ui-button-font-weight);align-items:center;aspect-ratio:var(--wp-ui-button-aspect-ratio);background-clip:border-box;background-color:var(--wp-ui-button-background-color);border-color:var(--wp-ui-button-border-color);border-radius:var(--wpds-border-radius-sm,2px);border-style:solid;border-width:1px;color:var(--wp-ui-button-foreground-color);display:inline-flex;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wp-ui-button-font-size);font-weight:var(--wp-ui-button-font-weight);gap:var(--wpds-dimension-gap-sm,8px);justify-content:center;line-height:var(--wpds-typography-line-height-sm,20px);max-width:100%;min-height:var(--wp-ui-button-height);min-width:var(--wp-ui-button-min-width);overflow-wrap:anywhere;padding-block:var(--wp-ui-button-padding-block);padding-inline:var(--wp-ui-button-padding-inline);position:relative;text-align:center;text-decoration:none;&:not([data-disabled]){cursor:var(--wpds-cursor-control,pointer)}@media not (prefers-reduced-motion){transition:color .1s ease-out;*{transition:opacity .1s ease-out}}&[href]{cursor:pointer}[href]{color:inherit;text-decoration:inherit}&:not([data-disabled]):is(:hover,:active,:focus){background-color:var(--wp-ui-button-background-color-active);border-color:var(--wp-ui-button-border-color-active);color:var(--wp-ui-button-foreground-color-active)}&[data-disabled]:not(._914b42f315c0e580__is-loading){background-color:var(--wp-ui-button-background-color-disabled);border-color:var(--wp-ui-button-border-color-disabled);color:var(--wp-ui-button-foreground-color-disabled);@media (forced-colors:active){border-bottom-color:GrayText;border-left-color:GrayText;border-right-color:GrayText;border-top-color:GrayText;color:GrayText}}&:before{aspect-ratio:1;border:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid;border-block-end-color:transparent;border-block-start-color:var(--wp-ui-button-foreground-color);border-inline-end-color:var(--wp-ui-button-foreground-color);border-inline-start-color:transparent;border-radius:50%;box-sizing:border-box;content:"";display:block;height:var(--wp-ui-button-font-size);left:50%;opacity:0;pointer-events:none;position:absolute;top:50%;transform:translate(-50%,-50%);@media not (prefers-reduced-motion){transition:opacity .1s ease-out}@media (forced-colors:active){border-block-end-style:none;border-bottom-color:ButtonText;border-inline-start-style:none;border-left-color:ButtonText;border-right-color:ButtonText;border-top-color:ButtonText}}}._908205475f9f2a92__is-small{--wp-ui-button-padding-block:0px;--wp-ui-button-padding-inline:var(--wpds-dimension-padding-sm,8px);--wp-ui-button-height:var(--wpds-dimension-size-sm,24px)}._9f6fc6553aeb36fe__icon{margin:var(--wp-ui-button-icon-margin)}.dd460c965226cc77__is-brand{&._62d5a778b7b258ee__is-outline,&.ad0619a3217c6a5b__is-minimal{--wp-ui-button-foreground-color:var(--wpds-color-foreground-interactive-brand,var(--wp-admin-theme-color,#3858e9));--wp-ui-button-foreground-color-active:var(--wpds-color-foreground-interactive-brand-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 52%,#000));--wp-ui-button-foreground-color-disabled:var(--wpds-color-foreground-interactive-brand-disabled,#8d8d8d)}&._62d5a778b7b258ee__is-outline{--wp-ui-button-background-color:var(--wpds-color-background-interactive-brand-weak,#0000);--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-brand-weak-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 12%,#fff));--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-brand-weak-disabled,#0000);--wp-ui-button-border-color:var(--wpds-color-stroke-interactive-brand,var(--wp-admin-theme-color,#3858e9));--wp-ui-button-border-color-active:var(--wpds-color-stroke-interactive-brand-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 85%,#000));--wp-ui-button-border-color-disabled:var(--wpds-color-stroke-interactive-brand-disabled,#dbdbdb)}&.ad0619a3217c6a5b__is-minimal{--wp-ui-button-background-color:var(--wpds-color-background-interactive-brand-weak,#0000);--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-brand-weak-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 12%,#fff));--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-brand-weak-disabled,#0000)}}.e722a8f96726aa99__is-neutral{&.ad0619a3217c6a5b__is-minimal[aria-pressed=true],&.b50b3358c5fb4d0b__is-solid{--wp-ui-button-background-color:var(--wpds-color-background-interactive-neutral-strong,#2d2d2d);--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-neutral-strong-active,#1e1e1e);--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-neutral-strong-disabled,#e6e6e6);--wp-ui-button-foreground-color:var(--wpds-color-foreground-interactive-neutral-strong,#f0f0f0);--wp-ui-button-foreground-color-active:var(--wpds-color-foreground-interactive-neutral-strong-active,#f0f0f0);--wp-ui-button-foreground-color-disabled:var(--wpds-color-foreground-interactive-neutral-strong-disabled,#8d8d8d)}&._62d5a778b7b258ee__is-outline,&.ad0619a3217c6a5b__is-minimal:not([aria-pressed=true]){--wp-ui-button-foreground-color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);--wp-ui-button-foreground-color-active:var(--wpds-color-foreground-interactive-neutral-active,#1e1e1e);--wp-ui-button-foreground-color-disabled:var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d)}&._62d5a778b7b258ee__is-outline{--wp-ui-button-background-color:var(--wpds-color-background-interactive-neutral-weak,#0000);--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-neutral-weak-active,#ededed);--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-neutral-weak-disabled,#0000);--wp-ui-button-border-color:var(--wpds-color-stroke-interactive-neutral,#8d8d8d);--wp-ui-button-border-color-active:var(--wpds-color-stroke-interactive-neutral-active,#6e6e6e);--wp-ui-button-border-color-disabled:var(--wpds-color-stroke-interactive-neutral-disabled,#dbdbdb)}&.ad0619a3217c6a5b__is-minimal:not([aria-pressed=true]){--wp-ui-button-background-color:var(--wpds-color-background-interactive-neutral-weak,#0000);--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-neutral-weak-active,#ededed);--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-neutral-weak-disabled,#0000)}}.abbb272e2ce49bd6__is-unstyled{background:none;border:none;min-width:unset}.cf59cf1b69629838__is-compact{--wp-ui-button-height:var(--wpds-dimension-size-md,32px)}._914b42f315c0e580__is-loading:not(.abbb272e2ce49bd6__is-unstyled){color:transparent;&:not([data-disabled]):is(:hover,:active,:focus){color:transparent}@media (forced-colors:active){color:ButtonFace}*{opacity:0}&:before{opacity:1;transition-delay:.05s;@media not (prefers-reduced-motion){animation:_5a1d53da6f830c8d__loading-animation 1s linear infinite}}}}@keyframes _5a1d53da6f830c8d__loading-animation{0%{transform:translate(-50%,-50%) rotate(0deg)}to{transform:translate(-50%,-50%) rotate(1turn)}}}');
11467 }
11468 var style_default6 = { "button": "_97b0fc33c028be1a__button", "is-unstyled": "abbb272e2ce49bd6__is-unstyled", "is-loading": "_914b42f315c0e580__is-loading", "is-small": "_908205475f9f2a92__is-small", "icon": "_9f6fc6553aeb36fe__icon", "is-brand": "dd460c965226cc77__is-brand", "is-outline": "_62d5a778b7b258ee__is-outline", "is-minimal": "ad0619a3217c6a5b__is-minimal", "is-neutral": "e722a8f96726aa99__is-neutral", "is-solid": "b50b3358c5fb4d0b__is-solid", "is-compact": "cf59cf1b69629838__is-compact", "loading-animation": "_5a1d53da6f830c8d__loading-animation" };
11469 if (typeof process === "undefined" || true) {
11470 registerStyle7("10f3806643", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._336cd3e4e743482f__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}}");
11471 }
11472 var resets_default3 = { "box-sizing": "_336cd3e4e743482f__box-sizing" };
11473 if (typeof process === "undefined" || true) {
11474 registerStyle7("08122b3d53", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{.af79fb116edb0dd7__outset-ring--focus:focus,.dfcfdc28396e5d98__outset-ring--focus-visible:focus-visible,.e5cd9ee879f6403a__outset-ring--focus-within:focus-within,:focus-visible ._81935a08e952f267__outset-ring--focus-parent-visible{--_gcd-a-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));--_gcd-div-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));outline-offset:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px))}._3c9f5ee9fc9c136d__outset-ring--focus-within-except-active:focus-within,.abc777e9713fa711__outset-ring--focus-except-active:focus{outline:none}._3c9f5ee9fc9c136d__outset-ring--focus-within-except-active:focus-within:not(:has(:active)),.abc777e9713fa711__outset-ring--focus-except-active:focus:not(:active){--_gcd-a-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));--_gcd-div-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));outline-offset:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px))}}}");
11475 }
11476 var focus_module_default2 = { "outset-ring--focus": "af79fb116edb0dd7__outset-ring--focus", "outset-ring--focus-visible": "dfcfdc28396e5d98__outset-ring--focus-visible", "outset-ring--focus-within": "e5cd9ee879f6403a__outset-ring--focus-within", "outset-ring--focus-parent-visible": "_81935a08e952f267__outset-ring--focus-parent-visible", "outset-ring--focus-except-active": "abc777e9713fa711__outset-ring--focus-except-active", "outset-ring--focus-within-except-active": "_3c9f5ee9fc9c136d__outset-ring--focus-within-except-active" };
11477 if (typeof process === "undefined" || true) {
11478 registerStyle7("e8e31009f5", "._6defc79820e382c6__button{box-sizing:var(--_gcd-button-box-sizing,border-box);font-family:var(--_gcd-button-font-family,inherit);font-size:var(--_gcd-button-font-size,inherit);font-weight:var(--_gcd-button-font-weight,inherit)}.d2cff2e5dea83bd1__input{box-sizing:var(--_gcd-input-box-sizing,border-box);font-family:var(--_gcd-input-font-family,inherit);font-size:var(--_gcd-input-font-size,inherit);font-weight:var(--_gcd-input-font-weight,inherit);margin:var(--_gcd-input-margin,0);&::placeholder{color:var(--_gcd-input-placeholder-color,var(--wpds-color-foreground-interactive-neutral-weak,#707070))}&:is(textarea,[type=text],[type=password],[type=color],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){background-color:var(--_gcd-input-background-color,transparent);border:var(--_gcd-input-border,none);border-radius:var(--_gcd-input-border-radius,0);box-shadow:var(--_gcd-input-box-shadow,0 0 0 transparent);color:var(--_gcd-input-color,var(--wpds-color-foreground-interactive-neutral,#1e1e1e));&:focus{border-color:var(--_gcd-input-border-color-focus,var(--wp-admin-theme-color));box-shadow:var(--_gcd-input-box-shadow-focus,none);outline:var(--_gcd-input-outline-focus,none)}&:disabled{background:var(--_gcd-input-background-disabled,transparent);border-color:var(--_gcd-input-border-color-disabled,transparent);box-shadow:var(--_gcd-input-box-shadow-disabled,none);color:var(--_gcd-input-color-disabled,var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d))}}&:is(textarea,[type=text],[type=password],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){line-height:var(--_gcd-input-line-height,inherit);min-height:var(--_gcd-input-min-height,auto);padding:var(--_gcd-input-padding,0)}}._547d86373d02e108__textarea{box-sizing:var(--_gcd-textarea-box-sizing,border-box);overflow:var(--_gcd-textarea-overflow,auto);resize:var(--_gcd-textarea-resize,block)}._8c15fd0ed9f28ba4__div{outline:var(--_gcd-div-outline,0 solid transparent)}p._43cec3e1eec1066d__p{font-size:var(--_gcd-p-font-size,13px);line-height:var(--_gcd-p-line-height,1.5);margin:var(--_gcd-p-margin,0)}:is(h1,h2,h3,h4,h5,h6).e97669c6d9a38497__heading{color:var(--_gcd-heading-color,var(--wpds-color-foreground-content-neutral,#1e1e1e));font-size:var(--_gcd-heading-font-size,inherit);font-weight:var(--_gcd-heading-font-weight,var(--wpds-typography-font-weight-emphasis,600));margin:var(--_gcd-heading-margin,0)}._2c0831b0499dbd6e__a,._2c0831b0499dbd6e__a:is(:hover,:focus,:active){border-radius:var(--_gcd-a-border-radius,0);box-shadow:var(--_gcd-a-box-shadow,none);color:var(--_gcd-a-color,inherit);outline:var(--_gcd-a-outline,0 solid transparent);transition:var(--_gcd-a-transition,none)}.c59a0ebebd71fa4a__ol{list-style:var(--_gcd-ol-list-style,none);margin:var(--_gcd-ol-margin,0);padding-block:var(--_gcd-ol-padding-block,0);padding-inline:var(--_gcd-ol-padding-inline,0)}._46b5cb0c8e24e8c9__li{margin:var(--_gcd-li-margin,0)}");
11479 }
11480 var global_css_defense_default3 = { "button": "_6defc79820e382c6__button", "input": "d2cff2e5dea83bd1__input", "textarea": "_547d86373d02e108__textarea", "div": "_8c15fd0ed9f28ba4__div", "p": "_43cec3e1eec1066d__p", "heading": "e97669c6d9a38497__heading", "a": "_2c0831b0499dbd6e__a", "ol": "c59a0ebebd71fa4a__ol", "li": "_46b5cb0c8e24e8c9__li" };
11481 var Button5 = (0, import_element23.forwardRef)(
11482 function Button22({
11483 tone = "brand",
11484 variant = "solid",
11485 size: size4 = "default",
11486 className,
11487 focusableWhenDisabled = true,
11488 disabled: disabled2,
11489 loading,
11490 loadingAnnouncement = (0, import_i18n5.__)("Loading"),
11491 children,
11492 ...props
11493 }, ref) {
11494 const mergedClassName = clsx_default(
11495 global_css_defense_default3.button,
11496 resets_default3["box-sizing"],
11497 focus_module_default2["outset-ring--focus-except-active"],
11498 variant !== "unstyled" && style_default6.button,
11499 style_default6[`is-${tone}`],
11500 style_default6[`is-${variant}`],
11501 style_default6[`is-${size4}`],
11502 loading && style_default6["is-loading"],
11503 className
11504 );
11505 (0, import_element23.useEffect)(() => {
11506 if (loading && loadingAnnouncement) {
11507 (0, import_a11y.speak)(loadingAnnouncement);
11508 }
11509 }, [loading, loadingAnnouncement]);
11510 return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
11511 Button3,
11512 {
11513 ref,
11514 className: mergedClassName,
11515 focusableWhenDisabled,
11516 disabled: disabled2 ?? loading,
11517 ...props,
11518 children
11519 }
11520 );
11521 }
11522 );
11523
11524 // packages/ui/build-module/button/icon.mjs
11525 var import_element24 = __toESM(require_element(), 1);
11526 var import_jsx_runtime47 = __toESM(require_jsx_runtime(), 1);
11527 var STYLE_HASH_ATTRIBUTE8 = "data-wp-hash";
11528 function getRuntime8() {
11529 const globalScope = globalThis;
11530 if (globalScope.__wpStyleRuntime) {
11531 return globalScope.__wpStyleRuntime;
11532 }
11533 globalScope.__wpStyleRuntime = {
11534 documents: /* @__PURE__ */ new Map(),
11535 styles: /* @__PURE__ */ new Map(),
11536 injectedStyles: /* @__PURE__ */ new WeakMap()
11537 };
11538 if (typeof document !== "undefined") {
11539 registerDocument8(document);
11540 }
11541 return globalScope.__wpStyleRuntime;
11542 }
11543 function documentContainsStyleHash8(targetDocument, hash) {
11544 if (!targetDocument.head) {
11545 return false;
11546 }
11547 for (const style of targetDocument.head.querySelectorAll(
11548 `style[${STYLE_HASH_ATTRIBUTE8}]`
11549 )) {
11550 if (style.getAttribute(STYLE_HASH_ATTRIBUTE8) === hash) {
11551 return true;
11552 }
11553 }
11554 return false;
11555 }
11556 function injectStyle8(targetDocument, hash, css) {
11557 if (!targetDocument.head) {
11558 return;
11559 }
11560 const runtime = getRuntime8();
11561 let injectedStyles = runtime.injectedStyles.get(targetDocument);
11562 if (!injectedStyles) {
11563 injectedStyles = /* @__PURE__ */ new Set();
11564 runtime.injectedStyles.set(targetDocument, injectedStyles);
11565 }
11566 if (injectedStyles.has(hash)) {
11567 return;
11568 }
11569 if (documentContainsStyleHash8(targetDocument, hash)) {
11570 injectedStyles.add(hash);
11571 return;
11572 }
11573 const style = targetDocument.createElement("style");
11574 style.setAttribute(STYLE_HASH_ATTRIBUTE8, hash);
11575 style.appendChild(targetDocument.createTextNode(css));
11576 targetDocument.head.appendChild(style);
11577 injectedStyles.add(hash);
11578 }
11579 function registerDocument8(targetDocument) {
11580 const runtime = getRuntime8();
11581 runtime.documents.set(
11582 targetDocument,
11583 (runtime.documents.get(targetDocument) ?? 0) + 1
11584 );
11585 for (const [hash, css] of runtime.styles) {
11586 injectStyle8(targetDocument, hash, css);
11587 }
11588 return () => {
11589 const count = runtime.documents.get(targetDocument);
11590 if (count === void 0) {
11591 return;
11592 }
11593 if (count <= 1) {
11594 runtime.documents.delete(targetDocument);
11595 return;
11596 }
11597 runtime.documents.set(targetDocument, count - 1);
11598 };
11599 }
11600 function registerStyle8(hash, css) {
11601 const runtime = getRuntime8();
11602 runtime.styles.set(hash, css);
11603 for (const targetDocument of runtime.documents.keys()) {
11604 injectStyle8(targetDocument, hash, css);
11605 }
11606 }
11607 if (typeof process === "undefined" || true) {
11608 registerStyle8("effc4e3032", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._97b0fc33c028be1a__button,.abbb272e2ce49bd6__is-unstyled{appearance:none;padding:0}._97b0fc33c028be1a__button{--wp-ui-button-font-weight:var(--wpds-typography-font-weight-emphasis,600);--wp-ui-button-background-color:var(--wpds-color-background-interactive-brand-strong,var(--wp-admin-theme-color,#3858e9));--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-brand-strong-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 93%,#000));--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-brand-strong-disabled,#e6e6e6);--wp-ui-button-foreground-color:var(--wpds-color-foreground-interactive-brand-strong,#fff);--wp-ui-button-foreground-color-active:var(--wpds-color-foreground-interactive-brand-strong-active,#fff);--wp-ui-button-foreground-color-disabled:var(--wpds-color-foreground-interactive-brand-strong-disabled,#8d8d8d);--wp-ui-button-padding-block:var(--wpds-dimension-padding-xs,4px);--wp-ui-button-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-button-height:var(--wpds-dimension-size-lg,40px);--wp-ui-button-aspect-ratio:auto;--wp-ui-button-font-size:var(--wpds-typography-font-size-md,13px);--wp-ui-button-min-width:calc(4ch + var(--wp-ui-button-padding-inline)*2);--wp-ui-button-icon-margin:calc((var(--wpds-dimension-size-2xs, 16px) - var(--wpds-dimension-size-sm, 24px))/2);--wp-ui-button-border-color:var(--wp-ui-button-background-color);--wp-ui-button-border-color-active:var(--wp-ui-button-background-color-active);--wp-ui-button-border-color-disabled:var(--wp-ui-button-background-color-disabled);--_gcd-button-font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);--_gcd-button-font-size:var(--wp-ui-button-font-size);--_gcd-button-font-weight:var(--wp-ui-button-font-weight);align-items:center;aspect-ratio:var(--wp-ui-button-aspect-ratio);background-clip:border-box;background-color:var(--wp-ui-button-background-color);border-color:var(--wp-ui-button-border-color);border-radius:var(--wpds-border-radius-sm,2px);border-style:solid;border-width:1px;color:var(--wp-ui-button-foreground-color);display:inline-flex;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wp-ui-button-font-size);font-weight:var(--wp-ui-button-font-weight);gap:var(--wpds-dimension-gap-sm,8px);justify-content:center;line-height:var(--wpds-typography-line-height-sm,20px);max-width:100%;min-height:var(--wp-ui-button-height);min-width:var(--wp-ui-button-min-width);overflow-wrap:anywhere;padding-block:var(--wp-ui-button-padding-block);padding-inline:var(--wp-ui-button-padding-inline);position:relative;text-align:center;text-decoration:none;&:not([data-disabled]){cursor:var(--wpds-cursor-control,pointer)}@media not (prefers-reduced-motion){transition:color .1s ease-out;*{transition:opacity .1s ease-out}}&[href]{cursor:pointer}[href]{color:inherit;text-decoration:inherit}&:not([data-disabled]):is(:hover,:active,:focus){background-color:var(--wp-ui-button-background-color-active);border-color:var(--wp-ui-button-border-color-active);color:var(--wp-ui-button-foreground-color-active)}&[data-disabled]:not(._914b42f315c0e580__is-loading){background-color:var(--wp-ui-button-background-color-disabled);border-color:var(--wp-ui-button-border-color-disabled);color:var(--wp-ui-button-foreground-color-disabled);@media (forced-colors:active){border-bottom-color:GrayText;border-left-color:GrayText;border-right-color:GrayText;border-top-color:GrayText;color:GrayText}}&:before{aspect-ratio:1;border:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid;border-block-end-color:transparent;border-block-start-color:var(--wp-ui-button-foreground-color);border-inline-end-color:var(--wp-ui-button-foreground-color);border-inline-start-color:transparent;border-radius:50%;box-sizing:border-box;content:"";display:block;height:var(--wp-ui-button-font-size);left:50%;opacity:0;pointer-events:none;position:absolute;top:50%;transform:translate(-50%,-50%);@media not (prefers-reduced-motion){transition:opacity .1s ease-out}@media (forced-colors:active){border-block-end-style:none;border-bottom-color:ButtonText;border-inline-start-style:none;border-left-color:ButtonText;border-right-color:ButtonText;border-top-color:ButtonText}}}._908205475f9f2a92__is-small{--wp-ui-button-padding-block:0px;--wp-ui-button-padding-inline:var(--wpds-dimension-padding-sm,8px);--wp-ui-button-height:var(--wpds-dimension-size-sm,24px)}._9f6fc6553aeb36fe__icon{margin:var(--wp-ui-button-icon-margin)}.dd460c965226cc77__is-brand{&._62d5a778b7b258ee__is-outline,&.ad0619a3217c6a5b__is-minimal{--wp-ui-button-foreground-color:var(--wpds-color-foreground-interactive-brand,var(--wp-admin-theme-color,#3858e9));--wp-ui-button-foreground-color-active:var(--wpds-color-foreground-interactive-brand-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 52%,#000));--wp-ui-button-foreground-color-disabled:var(--wpds-color-foreground-interactive-brand-disabled,#8d8d8d)}&._62d5a778b7b258ee__is-outline{--wp-ui-button-background-color:var(--wpds-color-background-interactive-brand-weak,#0000);--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-brand-weak-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 12%,#fff));--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-brand-weak-disabled,#0000);--wp-ui-button-border-color:var(--wpds-color-stroke-interactive-brand,var(--wp-admin-theme-color,#3858e9));--wp-ui-button-border-color-active:var(--wpds-color-stroke-interactive-brand-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 85%,#000));--wp-ui-button-border-color-disabled:var(--wpds-color-stroke-interactive-brand-disabled,#dbdbdb)}&.ad0619a3217c6a5b__is-minimal{--wp-ui-button-background-color:var(--wpds-color-background-interactive-brand-weak,#0000);--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-brand-weak-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 12%,#fff));--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-brand-weak-disabled,#0000)}}.e722a8f96726aa99__is-neutral{&.ad0619a3217c6a5b__is-minimal[aria-pressed=true],&.b50b3358c5fb4d0b__is-solid{--wp-ui-button-background-color:var(--wpds-color-background-interactive-neutral-strong,#2d2d2d);--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-neutral-strong-active,#1e1e1e);--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-neutral-strong-disabled,#e6e6e6);--wp-ui-button-foreground-color:var(--wpds-color-foreground-interactive-neutral-strong,#f0f0f0);--wp-ui-button-foreground-color-active:var(--wpds-color-foreground-interactive-neutral-strong-active,#f0f0f0);--wp-ui-button-foreground-color-disabled:var(--wpds-color-foreground-interactive-neutral-strong-disabled,#8d8d8d)}&._62d5a778b7b258ee__is-outline,&.ad0619a3217c6a5b__is-minimal:not([aria-pressed=true]){--wp-ui-button-foreground-color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);--wp-ui-button-foreground-color-active:var(--wpds-color-foreground-interactive-neutral-active,#1e1e1e);--wp-ui-button-foreground-color-disabled:var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d)}&._62d5a778b7b258ee__is-outline{--wp-ui-button-background-color:var(--wpds-color-background-interactive-neutral-weak,#0000);--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-neutral-weak-active,#ededed);--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-neutral-weak-disabled,#0000);--wp-ui-button-border-color:var(--wpds-color-stroke-interactive-neutral,#8d8d8d);--wp-ui-button-border-color-active:var(--wpds-color-stroke-interactive-neutral-active,#6e6e6e);--wp-ui-button-border-color-disabled:var(--wpds-color-stroke-interactive-neutral-disabled,#dbdbdb)}&.ad0619a3217c6a5b__is-minimal:not([aria-pressed=true]){--wp-ui-button-background-color:var(--wpds-color-background-interactive-neutral-weak,#0000);--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-neutral-weak-active,#ededed);--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-neutral-weak-disabled,#0000)}}.abbb272e2ce49bd6__is-unstyled{background:none;border:none;min-width:unset}.cf59cf1b69629838__is-compact{--wp-ui-button-height:var(--wpds-dimension-size-md,32px)}._914b42f315c0e580__is-loading:not(.abbb272e2ce49bd6__is-unstyled){color:transparent;&:not([data-disabled]):is(:hover,:active,:focus){color:transparent}@media (forced-colors:active){color:ButtonFace}*{opacity:0}&:before{opacity:1;transition-delay:.05s;@media not (prefers-reduced-motion){animation:_5a1d53da6f830c8d__loading-animation 1s linear infinite}}}}@keyframes _5a1d53da6f830c8d__loading-animation{0%{transform:translate(-50%,-50%) rotate(0deg)}to{transform:translate(-50%,-50%) rotate(1turn)}}}');
11609 }
11610 var style_default7 = { "button": "_97b0fc33c028be1a__button", "is-unstyled": "abbb272e2ce49bd6__is-unstyled", "is-loading": "_914b42f315c0e580__is-loading", "is-small": "_908205475f9f2a92__is-small", "icon": "_9f6fc6553aeb36fe__icon", "is-brand": "dd460c965226cc77__is-brand", "is-outline": "_62d5a778b7b258ee__is-outline", "is-minimal": "ad0619a3217c6a5b__is-minimal", "is-neutral": "e722a8f96726aa99__is-neutral", "is-solid": "b50b3358c5fb4d0b__is-solid", "is-compact": "cf59cf1b69629838__is-compact", "loading-animation": "_5a1d53da6f830c8d__loading-animation" };
11611 var ButtonIcon = (0, import_element24.forwardRef)(
11612 function ButtonIcon2({ className, icon, ...props }, ref) {
11613 return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
11614 Icon,
11615 {
11616 ref,
11617 icon,
11618 className: clsx_default(style_default7.icon, className),
11619 size: 24,
11620 ...props
11621 }
11622 );
11623 }
11624 );
11625
11626 // packages/ui/build-module/button/index.mjs
11627 ButtonIcon.displayName = "Button.Icon";
11628 var Button6 = Object.assign(Button5, {
11629 /**
11630 * An icon component specifically designed to work well when rendered inside
11631 * a `Button` component.
11632 */
11633 Icon: ButtonIcon
11634 });
11635
11636 // packages/ui/build-module/icon-button/icon-button.mjs
11637 var import_element25 = __toESM(require_element(), 1);
11638 var import_jsx_runtime48 = __toESM(require_jsx_runtime(), 1);
11639 var STYLE_HASH_ATTRIBUTE9 = "data-wp-hash";
11640 function getRuntime9() {
11641 const globalScope = globalThis;
11642 if (globalScope.__wpStyleRuntime) {
11643 return globalScope.__wpStyleRuntime;
11644 }
11645 globalScope.__wpStyleRuntime = {
11646 documents: /* @__PURE__ */ new Map(),
11647 styles: /* @__PURE__ */ new Map(),
11648 injectedStyles: /* @__PURE__ */ new WeakMap()
11649 };
11650 if (typeof document !== "undefined") {
11651 registerDocument9(document);
11652 }
11653 return globalScope.__wpStyleRuntime;
11654 }
11655 function documentContainsStyleHash9(targetDocument, hash) {
11656 if (!targetDocument.head) {
11657 return false;
11658 }
11659 for (const style of targetDocument.head.querySelectorAll(
11660 `style[${STYLE_HASH_ATTRIBUTE9}]`
11661 )) {
11662 if (style.getAttribute(STYLE_HASH_ATTRIBUTE9) === hash) {
11663 return true;
11664 }
11665 }
11666 return false;
11667 }
11668 function injectStyle9(targetDocument, hash, css) {
11669 if (!targetDocument.head) {
11670 return;
11671 }
11672 const runtime = getRuntime9();
11673 let injectedStyles = runtime.injectedStyles.get(targetDocument);
11674 if (!injectedStyles) {
11675 injectedStyles = /* @__PURE__ */ new Set();
11676 runtime.injectedStyles.set(targetDocument, injectedStyles);
11677 }
11678 if (injectedStyles.has(hash)) {
11679 return;
11680 }
11681 if (documentContainsStyleHash9(targetDocument, hash)) {
11682 injectedStyles.add(hash);
11683 return;
11684 }
11685 const style = targetDocument.createElement("style");
11686 style.setAttribute(STYLE_HASH_ATTRIBUTE9, hash);
11687 style.appendChild(targetDocument.createTextNode(css));
11688 targetDocument.head.appendChild(style);
11689 injectedStyles.add(hash);
11690 }
11691 function registerDocument9(targetDocument) {
11692 const runtime = getRuntime9();
11693 runtime.documents.set(
11694 targetDocument,
11695 (runtime.documents.get(targetDocument) ?? 0) + 1
11696 );
11697 for (const [hash, css] of runtime.styles) {
11698 injectStyle9(targetDocument, hash, css);
11699 }
11700 return () => {
11701 const count = runtime.documents.get(targetDocument);
11702 if (count === void 0) {
11703 return;
11704 }
11705 if (count <= 1) {
11706 runtime.documents.delete(targetDocument);
11707 return;
11708 }
11709 runtime.documents.set(targetDocument, count - 1);
11710 };
11711 }
11712 function registerStyle9(hash, css) {
11713 const runtime = getRuntime9();
11714 runtime.styles.set(hash, css);
11715 for (const targetDocument of runtime.documents.keys()) {
11716 injectStyle9(targetDocument, hash, css);
11717 }
11718 }
11719 if (typeof process === "undefined" || true) {
11720 registerStyle9("c5cdafb1bc", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer compositions{._28cfdc260e755391__icon-button{--wp-ui-button-aspect-ratio:1;--wp-ui-button-padding-inline:0px;--wp-ui-button-min-width:unset}.f1c70d719989a85a__icon{margin:-1px}}}");
11721 }
11722 var style_default8 = { "icon-button": "_28cfdc260e755391__icon-button", "icon": "f1c70d719989a85a__icon" };
11723 var IconButton = (0, import_element25.forwardRef)(
11724 function IconButton2({
11725 label,
11726 className,
11727 // Prevent accidental forwarding of `children`
11728 children: _children,
11729 disabled: disabled2,
11730 focusableWhenDisabled = true,
11731 icon,
11732 size: size4,
11733 shortcut,
11734 positioner,
11735 "aria-describedby": ariaDescribedBy,
11736 "aria-keyshortcuts": ariaKeyShortcuts,
11737 ...restProps
11738 }, ref) {
11739 const classes = clsx_default(style_default8["icon-button"], className);
11740 const { descriptionId, targetProps } = useKeyboardShortcutProps({
11741 "aria-describedby": ariaDescribedBy,
11742 "aria-keyshortcuts": ariaKeyShortcuts,
11743 shortcut
11744 });
11745 return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(Root, { children: [
11746 /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
11747 Trigger,
11748 {
11749 ref,
11750 ...targetProps,
11751 disabled: disabled2 && !focusableWhenDisabled,
11752 render: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
11753 Button6,
11754 {
11755 ...restProps,
11756 size: size4,
11757 "aria-label": label,
11758 disabled: disabled2,
11759 focusableWhenDisabled
11760 }
11761 ),
11762 className: classes,
11763 children: [
11764 /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(Icon, { icon, size: 24, className: style_default8.icon }),
11765 shortcut && descriptionId && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
11766 KeyboardShortcutDescription,
11767 {
11768 descriptionId,
11769 shortcut
11770 }
11771 )
11772 ]
11773 }
11774 ),
11775 /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(Popup, { positioner, children: [
11776 label,
11777 shortcut && /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(import_jsx_runtime48.Fragment, { children: [
11778 " ",
11779 /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(KeyboardShortcutDisplay, { shortcut })
11780 ] })
11781 ] })
11782 ] });
11783 }
11784 );
11785
11786 // packages/ui/build-module/card/index.mjs
11787 var card_exports = {};
11788 __export(card_exports, {
11789 Content: () => Content,
11790 FullBleed: () => FullBleed,
11791 Header: () => Header,
11792 Root: () => Root2,
11793 Title: () => Title
11794 });
11795
11796 // packages/ui/build-module/card/root.mjs
11797 var import_element26 = __toESM(require_element(), 1);
11798 var STYLE_HASH_ATTRIBUTE10 = "data-wp-hash";
11799 function getRuntime10() {
11800 const globalScope = globalThis;
11801 if (globalScope.__wpStyleRuntime) {
11802 return globalScope.__wpStyleRuntime;
11803 }
11804 globalScope.__wpStyleRuntime = {
11805 documents: /* @__PURE__ */ new Map(),
11806 styles: /* @__PURE__ */ new Map(),
11807 injectedStyles: /* @__PURE__ */ new WeakMap()
11808 };
11809 if (typeof document !== "undefined") {
11810 registerDocument10(document);
11811 }
11812 return globalScope.__wpStyleRuntime;
11813 }
11814 function documentContainsStyleHash10(targetDocument, hash) {
11815 if (!targetDocument.head) {
11816 return false;
11817 }
11818 for (const style of targetDocument.head.querySelectorAll(
11819 `style[${STYLE_HASH_ATTRIBUTE10}]`
11820 )) {
11821 if (style.getAttribute(STYLE_HASH_ATTRIBUTE10) === hash) {
11822 return true;
11823 }
11824 }
11825 return false;
11826 }
11827 function injectStyle10(targetDocument, hash, css) {
11828 if (!targetDocument.head) {
11829 return;
11830 }
11831 const runtime = getRuntime10();
11832 let injectedStyles = runtime.injectedStyles.get(targetDocument);
11833 if (!injectedStyles) {
11834 injectedStyles = /* @__PURE__ */ new Set();
11835 runtime.injectedStyles.set(targetDocument, injectedStyles);
11836 }
11837 if (injectedStyles.has(hash)) {
11838 return;
11839 }
11840 if (documentContainsStyleHash10(targetDocument, hash)) {
11841 injectedStyles.add(hash);
11842 return;
11843 }
11844 const style = targetDocument.createElement("style");
11845 style.setAttribute(STYLE_HASH_ATTRIBUTE10, hash);
11846 style.appendChild(targetDocument.createTextNode(css));
11847 targetDocument.head.appendChild(style);
11848 injectedStyles.add(hash);
11849 }
11850 function registerDocument10(targetDocument) {
11851 const runtime = getRuntime10();
11852 runtime.documents.set(
11853 targetDocument,
11854 (runtime.documents.get(targetDocument) ?? 0) + 1
11855 );
11856 for (const [hash, css] of runtime.styles) {
11857 injectStyle10(targetDocument, hash, css);
11858 }
11859 return () => {
11860 const count = runtime.documents.get(targetDocument);
11861 if (count === void 0) {
11862 return;
11863 }
11864 if (count <= 1) {
11865 runtime.documents.delete(targetDocument);
11866 return;
11867 }
11868 runtime.documents.set(targetDocument, count - 1);
11869 };
11870 }
11871 function registerStyle10(hash, css) {
11872 const runtime = getRuntime10();
11873 runtime.styles.set(hash, css);
11874 for (const targetDocument of runtime.documents.keys()) {
11875 injectStyle10(targetDocument, hash, css);
11876 }
11877 }
11878 if (typeof process === "undefined" || true) {
11879 registerStyle10("10f3806643", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._336cd3e4e743482f__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}}");
11880 }
11881 var resets_default4 = { "box-sizing": "_336cd3e4e743482f__box-sizing" };
11882 if (typeof process === "undefined" || true) {
11883 registerStyle10("cb866dcef6", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._02872bf298eadc43__root{--wp-ui-card-padding:var(--wpds-dimension-padding-2xl,24px);--wp-ui-card-header-content-gap:var(--wpds-dimension-gap-xl,24px);--wp-ui-card-header-content-margin:calc(var(--wp-ui-card-header-content-gap) - var(--wp-ui-card-padding));background-color:var(--wpds-color-background-surface-neutral-strong,#fff);border:1px solid var(--wpds-color-stroke-surface-neutral,#dbdbdb);border-radius:var(--wpds-border-radius-lg,8px);color:var(--wpds-color-foreground-content-neutral,#1e1e1e);display:flex;flex-direction:column;overflow:clip}._5dffdaf2a6e669ac__content,.bbccc92e6ba5662d__header{padding:var(--wp-ui-card-padding);&:not(:first-child):not(:last-child){padding-block-end:0}}.bbccc92e6ba5662d__header+._5dffdaf2a6e669ac__content{margin-block-start:var(--wp-ui-card-header-content-margin);padding-block-start:0}.c1fa192587e1b4a6__fullbleed{margin-inline:calc(var(--wp-ui-card-padding)*-1);width:calc(100% + var(--wp-ui-card-padding)*2)}._02872bf298eadc43__root>:is(.bbccc92e6ba5662d__header,._5dffdaf2a6e669ac__content):first-child>.c1fa192587e1b4a6__fullbleed:first-child{margin-block-start:calc(var(--wp-ui-card-padding)*-1)}:is(.bbccc92e6ba5662d__header,._5dffdaf2a6e669ac__content):last-child>.c1fa192587e1b4a6__fullbleed:last-child{margin-block-end:calc(var(--wp-ui-card-padding)*-1)}}}");
11884 }
11885 var style_default9 = { "root": "_02872bf298eadc43__root", "header": "bbccc92e6ba5662d__header", "content": "_5dffdaf2a6e669ac__content", "fullbleed": "c1fa192587e1b4a6__fullbleed" };
11886 var Root2 = (0, import_element26.forwardRef)(function Card({ render, ...restProps }, ref) {
11887 const mergedClassName = clsx_default(style_default9.root, resets_default4["box-sizing"]);
11888 const element = useRender({
11889 defaultTagName: "div",
11890 render,
11891 ref,
11892 props: mergeProps({ className: mergedClassName }, restProps)
11893 });
11894 return element;
11895 });
11896
11897 // packages/ui/build-module/card/header.mjs
11898 var import_element27 = __toESM(require_element(), 1);
11899 var STYLE_HASH_ATTRIBUTE11 = "data-wp-hash";
11900 function getRuntime11() {
11901 const globalScope = globalThis;
11902 if (globalScope.__wpStyleRuntime) {
11903 return globalScope.__wpStyleRuntime;
11904 }
11905 globalScope.__wpStyleRuntime = {
11906 documents: /* @__PURE__ */ new Map(),
11907 styles: /* @__PURE__ */ new Map(),
11908 injectedStyles: /* @__PURE__ */ new WeakMap()
11909 };
11910 if (typeof document !== "undefined") {
11911 registerDocument11(document);
11912 }
11913 return globalScope.__wpStyleRuntime;
11914 }
11915 function documentContainsStyleHash11(targetDocument, hash) {
11916 if (!targetDocument.head) {
11917 return false;
11918 }
11919 for (const style of targetDocument.head.querySelectorAll(
11920 `style[${STYLE_HASH_ATTRIBUTE11}]`
11921 )) {
11922 if (style.getAttribute(STYLE_HASH_ATTRIBUTE11) === hash) {
11923 return true;
11924 }
11925 }
11926 return false;
11927 }
11928 function injectStyle11(targetDocument, hash, css) {
11929 if (!targetDocument.head) {
11930 return;
11931 }
11932 const runtime = getRuntime11();
11933 let injectedStyles = runtime.injectedStyles.get(targetDocument);
11934 if (!injectedStyles) {
11935 injectedStyles = /* @__PURE__ */ new Set();
11936 runtime.injectedStyles.set(targetDocument, injectedStyles);
11937 }
11938 if (injectedStyles.has(hash)) {
11939 return;
11940 }
11941 if (documentContainsStyleHash11(targetDocument, hash)) {
11942 injectedStyles.add(hash);
11943 return;
11944 }
11945 const style = targetDocument.createElement("style");
11946 style.setAttribute(STYLE_HASH_ATTRIBUTE11, hash);
11947 style.appendChild(targetDocument.createTextNode(css));
11948 targetDocument.head.appendChild(style);
11949 injectedStyles.add(hash);
11950 }
11951 function registerDocument11(targetDocument) {
11952 const runtime = getRuntime11();
11953 runtime.documents.set(
11954 targetDocument,
11955 (runtime.documents.get(targetDocument) ?? 0) + 1
11956 );
11957 for (const [hash, css] of runtime.styles) {
11958 injectStyle11(targetDocument, hash, css);
11959 }
11960 return () => {
11961 const count = runtime.documents.get(targetDocument);
11962 if (count === void 0) {
11963 return;
11964 }
11965 if (count <= 1) {
11966 runtime.documents.delete(targetDocument);
11967 return;
11968 }
11969 runtime.documents.set(targetDocument, count - 1);
11970 };
11971 }
11972 function registerStyle11(hash, css) {
11973 const runtime = getRuntime11();
11974 runtime.styles.set(hash, css);
11975 for (const targetDocument of runtime.documents.keys()) {
11976 injectStyle11(targetDocument, hash, css);
11977 }
11978 }
11979 if (typeof process === "undefined" || true) {
11980 registerStyle11("cb866dcef6", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._02872bf298eadc43__root{--wp-ui-card-padding:var(--wpds-dimension-padding-2xl,24px);--wp-ui-card-header-content-gap:var(--wpds-dimension-gap-xl,24px);--wp-ui-card-header-content-margin:calc(var(--wp-ui-card-header-content-gap) - var(--wp-ui-card-padding));background-color:var(--wpds-color-background-surface-neutral-strong,#fff);border:1px solid var(--wpds-color-stroke-surface-neutral,#dbdbdb);border-radius:var(--wpds-border-radius-lg,8px);color:var(--wpds-color-foreground-content-neutral,#1e1e1e);display:flex;flex-direction:column;overflow:clip}._5dffdaf2a6e669ac__content,.bbccc92e6ba5662d__header{padding:var(--wp-ui-card-padding);&:not(:first-child):not(:last-child){padding-block-end:0}}.bbccc92e6ba5662d__header+._5dffdaf2a6e669ac__content{margin-block-start:var(--wp-ui-card-header-content-margin);padding-block-start:0}.c1fa192587e1b4a6__fullbleed{margin-inline:calc(var(--wp-ui-card-padding)*-1);width:calc(100% + var(--wp-ui-card-padding)*2)}._02872bf298eadc43__root>:is(.bbccc92e6ba5662d__header,._5dffdaf2a6e669ac__content):first-child>.c1fa192587e1b4a6__fullbleed:first-child{margin-block-start:calc(var(--wp-ui-card-padding)*-1)}:is(.bbccc92e6ba5662d__header,._5dffdaf2a6e669ac__content):last-child>.c1fa192587e1b4a6__fullbleed:last-child{margin-block-end:calc(var(--wp-ui-card-padding)*-1)}}}");
11981 }
11982 var style_default10 = { "root": "_02872bf298eadc43__root", "header": "bbccc92e6ba5662d__header", "content": "_5dffdaf2a6e669ac__content", "fullbleed": "c1fa192587e1b4a6__fullbleed" };
11983 var Header = (0, import_element27.forwardRef)(
11984 function CardHeader({ render, ...props }, ref) {
11985 const element = useRender({
11986 defaultTagName: "div",
11987 render,
11988 ref,
11989 props: mergeProps({ className: style_default10.header }, props)
11990 });
11991 return element;
11992 }
11993 );
11994
11995 // packages/ui/build-module/card/content.mjs
11996 var import_element28 = __toESM(require_element(), 1);
11997 var STYLE_HASH_ATTRIBUTE12 = "data-wp-hash";
11998 function getRuntime12() {
11999 const globalScope = globalThis;
12000 if (globalScope.__wpStyleRuntime) {
12001 return globalScope.__wpStyleRuntime;
12002 }
12003 globalScope.__wpStyleRuntime = {
12004 documents: /* @__PURE__ */ new Map(),
12005 styles: /* @__PURE__ */ new Map(),
12006 injectedStyles: /* @__PURE__ */ new WeakMap()
12007 };
12008 if (typeof document !== "undefined") {
12009 registerDocument12(document);
12010 }
12011 return globalScope.__wpStyleRuntime;
12012 }
12013 function documentContainsStyleHash12(targetDocument, hash) {
12014 if (!targetDocument.head) {
12015 return false;
12016 }
12017 for (const style of targetDocument.head.querySelectorAll(
12018 `style[${STYLE_HASH_ATTRIBUTE12}]`
12019 )) {
12020 if (style.getAttribute(STYLE_HASH_ATTRIBUTE12) === hash) {
12021 return true;
12022 }
12023 }
12024 return false;
12025 }
12026 function injectStyle12(targetDocument, hash, css) {
12027 if (!targetDocument.head) {
12028 return;
12029 }
12030 const runtime = getRuntime12();
12031 let injectedStyles = runtime.injectedStyles.get(targetDocument);
12032 if (!injectedStyles) {
12033 injectedStyles = /* @__PURE__ */ new Set();
12034 runtime.injectedStyles.set(targetDocument, injectedStyles);
12035 }
12036 if (injectedStyles.has(hash)) {
12037 return;
12038 }
12039 if (documentContainsStyleHash12(targetDocument, hash)) {
12040 injectedStyles.add(hash);
12041 return;
12042 }
12043 const style = targetDocument.createElement("style");
12044 style.setAttribute(STYLE_HASH_ATTRIBUTE12, hash);
12045 style.appendChild(targetDocument.createTextNode(css));
12046 targetDocument.head.appendChild(style);
12047 injectedStyles.add(hash);
12048 }
12049 function registerDocument12(targetDocument) {
12050 const runtime = getRuntime12();
12051 runtime.documents.set(
12052 targetDocument,
12053 (runtime.documents.get(targetDocument) ?? 0) + 1
12054 );
12055 for (const [hash, css] of runtime.styles) {
12056 injectStyle12(targetDocument, hash, css);
12057 }
12058 return () => {
12059 const count = runtime.documents.get(targetDocument);
12060 if (count === void 0) {
12061 return;
12062 }
12063 if (count <= 1) {
12064 runtime.documents.delete(targetDocument);
12065 return;
12066 }
12067 runtime.documents.set(targetDocument, count - 1);
12068 };
12069 }
12070 function registerStyle12(hash, css) {
12071 const runtime = getRuntime12();
12072 runtime.styles.set(hash, css);
12073 for (const targetDocument of runtime.documents.keys()) {
12074 injectStyle12(targetDocument, hash, css);
12075 }
12076 }
12077 if (typeof process === "undefined" || true) {
12078 registerStyle12("cb866dcef6", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._02872bf298eadc43__root{--wp-ui-card-padding:var(--wpds-dimension-padding-2xl,24px);--wp-ui-card-header-content-gap:var(--wpds-dimension-gap-xl,24px);--wp-ui-card-header-content-margin:calc(var(--wp-ui-card-header-content-gap) - var(--wp-ui-card-padding));background-color:var(--wpds-color-background-surface-neutral-strong,#fff);border:1px solid var(--wpds-color-stroke-surface-neutral,#dbdbdb);border-radius:var(--wpds-border-radius-lg,8px);color:var(--wpds-color-foreground-content-neutral,#1e1e1e);display:flex;flex-direction:column;overflow:clip}._5dffdaf2a6e669ac__content,.bbccc92e6ba5662d__header{padding:var(--wp-ui-card-padding);&:not(:first-child):not(:last-child){padding-block-end:0}}.bbccc92e6ba5662d__header+._5dffdaf2a6e669ac__content{margin-block-start:var(--wp-ui-card-header-content-margin);padding-block-start:0}.c1fa192587e1b4a6__fullbleed{margin-inline:calc(var(--wp-ui-card-padding)*-1);width:calc(100% + var(--wp-ui-card-padding)*2)}._02872bf298eadc43__root>:is(.bbccc92e6ba5662d__header,._5dffdaf2a6e669ac__content):first-child>.c1fa192587e1b4a6__fullbleed:first-child{margin-block-start:calc(var(--wp-ui-card-padding)*-1)}:is(.bbccc92e6ba5662d__header,._5dffdaf2a6e669ac__content):last-child>.c1fa192587e1b4a6__fullbleed:last-child{margin-block-end:calc(var(--wp-ui-card-padding)*-1)}}}");
12079 }
12080 var style_default11 = { "root": "_02872bf298eadc43__root", "header": "bbccc92e6ba5662d__header", "content": "_5dffdaf2a6e669ac__content", "fullbleed": "c1fa192587e1b4a6__fullbleed" };
12081 var Content = (0, import_element28.forwardRef)(
12082 function CardContent({ render, ...props }, ref) {
12083 const element = useRender({
12084 defaultTagName: "div",
12085 render,
12086 ref,
12087 props: mergeProps({ className: style_default11.content }, props)
12088 });
12089 return element;
12090 }
12091 );
12092
12093 // packages/ui/build-module/card/full-bleed.mjs
12094 var import_element29 = __toESM(require_element(), 1);
12095 var STYLE_HASH_ATTRIBUTE13 = "data-wp-hash";
12096 function getRuntime13() {
12097 const globalScope = globalThis;
12098 if (globalScope.__wpStyleRuntime) {
12099 return globalScope.__wpStyleRuntime;
12100 }
12101 globalScope.__wpStyleRuntime = {
12102 documents: /* @__PURE__ */ new Map(),
12103 styles: /* @__PURE__ */ new Map(),
12104 injectedStyles: /* @__PURE__ */ new WeakMap()
12105 };
12106 if (typeof document !== "undefined") {
12107 registerDocument13(document);
12108 }
12109 return globalScope.__wpStyleRuntime;
12110 }
12111 function documentContainsStyleHash13(targetDocument, hash) {
12112 if (!targetDocument.head) {
12113 return false;
12114 }
12115 for (const style of targetDocument.head.querySelectorAll(
12116 `style[${STYLE_HASH_ATTRIBUTE13}]`
12117 )) {
12118 if (style.getAttribute(STYLE_HASH_ATTRIBUTE13) === hash) {
12119 return true;
12120 }
12121 }
12122 return false;
12123 }
12124 function injectStyle13(targetDocument, hash, css) {
12125 if (!targetDocument.head) {
12126 return;
12127 }
12128 const runtime = getRuntime13();
12129 let injectedStyles = runtime.injectedStyles.get(targetDocument);
12130 if (!injectedStyles) {
12131 injectedStyles = /* @__PURE__ */ new Set();
12132 runtime.injectedStyles.set(targetDocument, injectedStyles);
12133 }
12134 if (injectedStyles.has(hash)) {
12135 return;
12136 }
12137 if (documentContainsStyleHash13(targetDocument, hash)) {
12138 injectedStyles.add(hash);
12139 return;
12140 }
12141 const style = targetDocument.createElement("style");
12142 style.setAttribute(STYLE_HASH_ATTRIBUTE13, hash);
12143 style.appendChild(targetDocument.createTextNode(css));
12144 targetDocument.head.appendChild(style);
12145 injectedStyles.add(hash);
12146 }
12147 function registerDocument13(targetDocument) {
12148 const runtime = getRuntime13();
12149 runtime.documents.set(
12150 targetDocument,
12151 (runtime.documents.get(targetDocument) ?? 0) + 1
12152 );
12153 for (const [hash, css] of runtime.styles) {
12154 injectStyle13(targetDocument, hash, css);
12155 }
12156 return () => {
12157 const count = runtime.documents.get(targetDocument);
12158 if (count === void 0) {
12159 return;
12160 }
12161 if (count <= 1) {
12162 runtime.documents.delete(targetDocument);
12163 return;
12164 }
12165 runtime.documents.set(targetDocument, count - 1);
12166 };
12167 }
12168 function registerStyle13(hash, css) {
12169 const runtime = getRuntime13();
12170 runtime.styles.set(hash, css);
12171 for (const targetDocument of runtime.documents.keys()) {
12172 injectStyle13(targetDocument, hash, css);
12173 }
12174 }
12175 if (typeof process === "undefined" || true) {
12176 registerStyle13("cb866dcef6", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._02872bf298eadc43__root{--wp-ui-card-padding:var(--wpds-dimension-padding-2xl,24px);--wp-ui-card-header-content-gap:var(--wpds-dimension-gap-xl,24px);--wp-ui-card-header-content-margin:calc(var(--wp-ui-card-header-content-gap) - var(--wp-ui-card-padding));background-color:var(--wpds-color-background-surface-neutral-strong,#fff);border:1px solid var(--wpds-color-stroke-surface-neutral,#dbdbdb);border-radius:var(--wpds-border-radius-lg,8px);color:var(--wpds-color-foreground-content-neutral,#1e1e1e);display:flex;flex-direction:column;overflow:clip}._5dffdaf2a6e669ac__content,.bbccc92e6ba5662d__header{padding:var(--wp-ui-card-padding);&:not(:first-child):not(:last-child){padding-block-end:0}}.bbccc92e6ba5662d__header+._5dffdaf2a6e669ac__content{margin-block-start:var(--wp-ui-card-header-content-margin);padding-block-start:0}.c1fa192587e1b4a6__fullbleed{margin-inline:calc(var(--wp-ui-card-padding)*-1);width:calc(100% + var(--wp-ui-card-padding)*2)}._02872bf298eadc43__root>:is(.bbccc92e6ba5662d__header,._5dffdaf2a6e669ac__content):first-child>.c1fa192587e1b4a6__fullbleed:first-child{margin-block-start:calc(var(--wp-ui-card-padding)*-1)}:is(.bbccc92e6ba5662d__header,._5dffdaf2a6e669ac__content):last-child>.c1fa192587e1b4a6__fullbleed:last-child{margin-block-end:calc(var(--wp-ui-card-padding)*-1)}}}");
12177 }
12178 var style_default12 = { "root": "_02872bf298eadc43__root", "header": "bbccc92e6ba5662d__header", "content": "_5dffdaf2a6e669ac__content", "fullbleed": "c1fa192587e1b4a6__fullbleed" };
12179 var FullBleed = (0, import_element29.forwardRef)(
12180 function CardFullBleed({ render, ...props }, ref) {
12181 const element = useRender({
12182 defaultTagName: "div",
12183 render,
12184 ref,
12185 props: mergeProps(
12186 { className: style_default12.fullbleed },
12187 props
12188 )
12189 });
12190 return element;
12191 }
12192 );
12193
12194 // packages/ui/build-module/card/title.mjs
12195 var import_element30 = __toESM(require_element(), 1);
12196 var import_jsx_runtime49 = __toESM(require_jsx_runtime(), 1);
12197 var DEFAULT_TAG = /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", {});
12198 var Title = (0, import_element30.forwardRef)(
12199 function CardTitle({ render = DEFAULT_TAG, children, ...props }, ref) {
12200 return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
12201 Text,
12202 {
12203 ref,
12204 variant: "heading-lg",
12205 render,
12206 ...props,
12207 children
12208 }
12209 );
12210 }
12211 );
12212
12213 // packages/ui/build-module/collapsible/panel.mjs
12214 var import_element31 = __toESM(require_element(), 1);
12215 var import_jsx_runtime50 = __toESM(require_jsx_runtime(), 1);
12216 var Panel2 = (0, import_element31.forwardRef)(
12217 function CollapsiblePanel3(props, forwardedRef) {
12218 return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(index_parts_exports.Panel, { ref: forwardedRef, ...props });
12219 }
12220 );
12221
12222 // packages/ui/build-module/collapsible/root.mjs
12223 var import_element32 = __toESM(require_element(), 1);
12224 var import_jsx_runtime51 = __toESM(require_jsx_runtime(), 1);
12225 var Root3 = (0, import_element32.forwardRef)(
12226 function CollapsibleRoot3(props, forwardedRef) {
12227 return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(index_parts_exports.Root, { ref: forwardedRef, ...props });
12228 }
12229 );
12230
12231 // packages/ui/build-module/collapsible/trigger.mjs
12232 var import_element33 = __toESM(require_element(), 1);
12233 var import_jsx_runtime52 = __toESM(require_jsx_runtime(), 1);
12234 var Trigger2 = (0, import_element33.forwardRef)(
12235 function CollapsibleTrigger3(props, forwardedRef) {
12236 return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(index_parts_exports.Trigger, { ref: forwardedRef, ...props });
12237 }
12238 );
12239
12240 // packages/ui/build-module/collapsible-card/index.mjs
12241 var collapsible_card_exports = {};
12242 __export(collapsible_card_exports, {
12243 Content: () => Content2,
12244 Header: () => Header2,
12245 HeaderDescription: () => HeaderDescription,
12246 Root: () => Root32
12247 });
12248
12249 // packages/ui/build-module/collapsible-card/root.mjs
12250 var import_element34 = __toESM(require_element(), 1);
12251 var import_jsx_runtime53 = __toESM(require_jsx_runtime(), 1);
12252 var Root32 = (0, import_element34.forwardRef)(
12253 function CollapsibleCardRoot({ render, ...restProps }, ref) {
12254 return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
12255 Root3,
12256 {
12257 ref,
12258 render: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(Root2, { render }),
12259 ...restProps
12260 }
12261 );
12262 }
12263 );
12264
12265 // packages/ui/build-module/collapsible-card/header.mjs
12266 var import_compose3 = __toESM(require_compose(), 1);
12267 var import_element36 = __toESM(require_element(), 1);
12268
12269 // packages/ui/build-module/collapsible-card/context.mjs
12270 var import_element35 = __toESM(require_element(), 1);
12271 var HeaderDescriptionIdContext = (0, import_element35.createContext)(null);
12272
12273 // packages/ui/build-module/collapsible-card/header.mjs
12274 var import_jsx_runtime54 = __toESM(require_jsx_runtime(), 1);
12275 var STYLE_HASH_ATTRIBUTE14 = "data-wp-hash";
12276 function getRuntime14() {
12277 const globalScope = globalThis;
12278 if (globalScope.__wpStyleRuntime) {
12279 return globalScope.__wpStyleRuntime;
12280 }
12281 globalScope.__wpStyleRuntime = {
12282 documents: /* @__PURE__ */ new Map(),
12283 styles: /* @__PURE__ */ new Map(),
12284 injectedStyles: /* @__PURE__ */ new WeakMap()
12285 };
12286 if (typeof document !== "undefined") {
12287 registerDocument14(document);
12288 }
12289 return globalScope.__wpStyleRuntime;
12290 }
12291 function documentContainsStyleHash14(targetDocument, hash) {
12292 if (!targetDocument.head) {
12293 return false;
12294 }
12295 for (const style of targetDocument.head.querySelectorAll(
12296 `style[${STYLE_HASH_ATTRIBUTE14}]`
12297 )) {
12298 if (style.getAttribute(STYLE_HASH_ATTRIBUTE14) === hash) {
12299 return true;
12300 }
12301 }
12302 return false;
12303 }
12304 function injectStyle14(targetDocument, hash, css) {
12305 if (!targetDocument.head) {
12306 return;
12307 }
12308 const runtime = getRuntime14();
12309 let injectedStyles = runtime.injectedStyles.get(targetDocument);
12310 if (!injectedStyles) {
12311 injectedStyles = /* @__PURE__ */ new Set();
12312 runtime.injectedStyles.set(targetDocument, injectedStyles);
12313 }
12314 if (injectedStyles.has(hash)) {
12315 return;
12316 }
12317 if (documentContainsStyleHash14(targetDocument, hash)) {
12318 injectedStyles.add(hash);
12319 return;
12320 }
12321 const style = targetDocument.createElement("style");
12322 style.setAttribute(STYLE_HASH_ATTRIBUTE14, hash);
12323 style.appendChild(targetDocument.createTextNode(css));
12324 targetDocument.head.appendChild(style);
12325 injectedStyles.add(hash);
12326 }
12327 function registerDocument14(targetDocument) {
12328 const runtime = getRuntime14();
12329 runtime.documents.set(
12330 targetDocument,
12331 (runtime.documents.get(targetDocument) ?? 0) + 1
12332 );
12333 for (const [hash, css] of runtime.styles) {
12334 injectStyle14(targetDocument, hash, css);
12335 }
12336 return () => {
12337 const count = runtime.documents.get(targetDocument);
12338 if (count === void 0) {
12339 return;
12340 }
12341 if (count <= 1) {
12342 runtime.documents.delete(targetDocument);
12343 return;
12344 }
12345 runtime.documents.set(targetDocument, count - 1);
12346 };
12347 }
12348 function registerStyle14(hash, css) {
12349 const runtime = getRuntime14();
12350 runtime.styles.set(hash, css);
12351 for (const targetDocument of runtime.documents.keys()) {
12352 injectStyle14(targetDocument, hash, css);
12353 }
12354 }
12355 if (typeof process === "undefined" || true) {
12356 registerStyle14("64bdb4d46e", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._626190151275d6d3__heading-wrapper{--_gcd-heading-color:inherit;--_gcd-heading-font-size:inherit;--_gcd-heading-font-weight:inherit;--_gcd-heading-margin:0;font-family:inherit;line-height:inherit}.cab17c7a373cb60d__header-content{flex:1;min-width:0}._92ebbaa30c8a1d05__header-description{color:var(--wpds-color-foreground-content-neutral-weak,#707070)}.dd89d27c4f15912d__header-trigger-positioner{align-self:flex-start;flex-shrink:0;margin-block-start:calc(var(--wpds-typography-line-height-sm, 20px)/2);max-height:0;overflow:visible}.bcfab5f2448bafef__header-trigger-wrapper{border-radius:var(--wpds-border-radius-sm,2px);display:flex;translate:0 -50%}._3106f8d2b0330faa__header-trigger{@media not (prefers-reduced-motion){transition:rotate .15s ease-out}}._5d2dfcb4085c6d0f__header[data-panel-open] ._3106f8d2b0330faa__header-trigger{rotate:180deg}._5d2dfcb4085c6d0f__header[data-disabled] ._3106f8d2b0330faa__header-trigger{color:var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d)}.e34cf37ccd0d81e0__content{height:var(--collapsible-panel-height);margin-block-start:var(--wp-ui-card-header-content-margin);overflow:hidden;&._03cfdbcd710393c9__overflow-visible{overflow:visible}&[hidden]:not([hidden=until-found]){display:none}&[data-ending-style],&[data-starting-style]{height:0}@media not (prefers-reduced-motion){transition:all .15s ease-out}}}@layer compositions{._41bfdbf7b6c087c2__content-inner{padding-block-start:0}._5d2dfcb4085c6d0f__header{align-items:stretch;display:flex;flex-direction:row;gap:var(--wpds-dimension-gap-sm,8px);outline:none;&:not([data-disabled]){cursor:var(--wpds-cursor-control,pointer)}}}}");
12357 }
12358 var style_default13 = { "heading-wrapper": "_626190151275d6d3__heading-wrapper", "header-content": "cab17c7a373cb60d__header-content", "header-description": "_92ebbaa30c8a1d05__header-description", "header-trigger-positioner": "dd89d27c4f15912d__header-trigger-positioner", "header-trigger-wrapper": "bcfab5f2448bafef__header-trigger-wrapper", "header-trigger": "_3106f8d2b0330faa__header-trigger", "header": "_5d2dfcb4085c6d0f__header", "content": "e34cf37ccd0d81e0__content", "overflow-visible": "_03cfdbcd710393c9__overflow-visible", "content-inner": "_41bfdbf7b6c087c2__content-inner" };
12359 if (typeof process === "undefined" || true) {
12360 registerStyle14("e8e31009f5", "._6defc79820e382c6__button{box-sizing:var(--_gcd-button-box-sizing,border-box);font-family:var(--_gcd-button-font-family,inherit);font-size:var(--_gcd-button-font-size,inherit);font-weight:var(--_gcd-button-font-weight,inherit)}.d2cff2e5dea83bd1__input{box-sizing:var(--_gcd-input-box-sizing,border-box);font-family:var(--_gcd-input-font-family,inherit);font-size:var(--_gcd-input-font-size,inherit);font-weight:var(--_gcd-input-font-weight,inherit);margin:var(--_gcd-input-margin,0);&::placeholder{color:var(--_gcd-input-placeholder-color,var(--wpds-color-foreground-interactive-neutral-weak,#707070))}&:is(textarea,[type=text],[type=password],[type=color],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){background-color:var(--_gcd-input-background-color,transparent);border:var(--_gcd-input-border,none);border-radius:var(--_gcd-input-border-radius,0);box-shadow:var(--_gcd-input-box-shadow,0 0 0 transparent);color:var(--_gcd-input-color,var(--wpds-color-foreground-interactive-neutral,#1e1e1e));&:focus{border-color:var(--_gcd-input-border-color-focus,var(--wp-admin-theme-color));box-shadow:var(--_gcd-input-box-shadow-focus,none);outline:var(--_gcd-input-outline-focus,none)}&:disabled{background:var(--_gcd-input-background-disabled,transparent);border-color:var(--_gcd-input-border-color-disabled,transparent);box-shadow:var(--_gcd-input-box-shadow-disabled,none);color:var(--_gcd-input-color-disabled,var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d))}}&:is(textarea,[type=text],[type=password],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){line-height:var(--_gcd-input-line-height,inherit);min-height:var(--_gcd-input-min-height,auto);padding:var(--_gcd-input-padding,0)}}._547d86373d02e108__textarea{box-sizing:var(--_gcd-textarea-box-sizing,border-box);overflow:var(--_gcd-textarea-overflow,auto);resize:var(--_gcd-textarea-resize,block)}._8c15fd0ed9f28ba4__div{outline:var(--_gcd-div-outline,0 solid transparent)}p._43cec3e1eec1066d__p{font-size:var(--_gcd-p-font-size,13px);line-height:var(--_gcd-p-line-height,1.5);margin:var(--_gcd-p-margin,0)}:is(h1,h2,h3,h4,h5,h6).e97669c6d9a38497__heading{color:var(--_gcd-heading-color,var(--wpds-color-foreground-content-neutral,#1e1e1e));font-size:var(--_gcd-heading-font-size,inherit);font-weight:var(--_gcd-heading-font-weight,var(--wpds-typography-font-weight-emphasis,600));margin:var(--_gcd-heading-margin,0)}._2c0831b0499dbd6e__a,._2c0831b0499dbd6e__a:is(:hover,:focus,:active){border-radius:var(--_gcd-a-border-radius,0);box-shadow:var(--_gcd-a-box-shadow,none);color:var(--_gcd-a-color,inherit);outline:var(--_gcd-a-outline,0 solid transparent);transition:var(--_gcd-a-transition,none)}.c59a0ebebd71fa4a__ol{list-style:var(--_gcd-ol-list-style,none);margin:var(--_gcd-ol-margin,0);padding-block:var(--_gcd-ol-padding-block,0);padding-inline:var(--_gcd-ol-padding-inline,0)}._46b5cb0c8e24e8c9__li{margin:var(--_gcd-li-margin,0)}");
12361 }
12362 var global_css_defense_default4 = { "button": "_6defc79820e382c6__button", "input": "d2cff2e5dea83bd1__input", "textarea": "_547d86373d02e108__textarea", "div": "_8c15fd0ed9f28ba4__div", "p": "_43cec3e1eec1066d__p", "heading": "e97669c6d9a38497__heading", "a": "_2c0831b0499dbd6e__a", "ol": "c59a0ebebd71fa4a__ol", "li": "_46b5cb0c8e24e8c9__li" };
12363 if (typeof process === "undefined" || true) {
12364 registerStyle14("08122b3d53", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{.af79fb116edb0dd7__outset-ring--focus:focus,.dfcfdc28396e5d98__outset-ring--focus-visible:focus-visible,.e5cd9ee879f6403a__outset-ring--focus-within:focus-within,:focus-visible ._81935a08e952f267__outset-ring--focus-parent-visible{--_gcd-a-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));--_gcd-div-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));outline-offset:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px))}._3c9f5ee9fc9c136d__outset-ring--focus-within-except-active:focus-within,.abc777e9713fa711__outset-ring--focus-except-active:focus{outline:none}._3c9f5ee9fc9c136d__outset-ring--focus-within-except-active:focus-within:not(:has(:active)),.abc777e9713fa711__outset-ring--focus-except-active:focus:not(:active){--_gcd-a-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));--_gcd-div-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));outline-offset:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px))}}}");
12365 }
12366 var focus_module_default3 = { "outset-ring--focus": "af79fb116edb0dd7__outset-ring--focus", "outset-ring--focus-visible": "dfcfdc28396e5d98__outset-ring--focus-visible", "outset-ring--focus-within": "e5cd9ee879f6403a__outset-ring--focus-within", "outset-ring--focus-parent-visible": "_81935a08e952f267__outset-ring--focus-parent-visible", "outset-ring--focus-except-active": "abc777e9713fa711__outset-ring--focus-except-active", "outset-ring--focus-within-except-active": "_3c9f5ee9fc9c136d__outset-ring--focus-within-except-active" };
12367 var Header2 = (0, import_element36.forwardRef)(
12368 function CollapsibleCardHeader({
12369 children,
12370 className,
12371 render,
12372 "aria-describedby": ariaDescribedByProp,
12373 ...restProps
12374 }, ref) {
12375 const [descriptionIds, setDescriptionIds] = (0, import_element36.useState)(
12376 []
12377 );
12378 const [orderedDescriptionIds, setOrderedDescriptionIds] = (0, import_element36.useState)([]);
12379 const headerContentRef = (0, import_element36.useRef)(null);
12380 const registerDescriptionId = (0, import_element36.useCallback)((id) => {
12381 setDescriptionIds((currentDescriptionIds) => {
12382 if (currentDescriptionIds.includes(id)) {
12383 return currentDescriptionIds;
12384 }
12385 return [...currentDescriptionIds, id];
12386 });
12387 return () => {
12388 setDescriptionIds(
12389 (currentDescriptionIds) => currentDescriptionIds.filter(
12390 (descriptionId) => descriptionId !== id
12391 )
12392 );
12393 };
12394 }, []);
12395 const contextValue = (0, import_element36.useMemo)(
12396 () => ({ registerDescriptionId }),
12397 [registerDescriptionId]
12398 );
12399 (0, import_compose3.useIsomorphicLayoutEffect)(() => {
12400 const registeredDescriptionIds = new Set(descriptionIds);
12401 const nextDescriptionIds = Array.from(
12402 headerContentRef.current?.querySelectorAll("[id]") ?? []
12403 ).map((element) => element.id).filter((id) => registeredDescriptionIds.has(id));
12404 setOrderedDescriptionIds((currentDescriptionIds) => {
12405 if (currentDescriptionIds.length === nextDescriptionIds.length && currentDescriptionIds.every(
12406 (id, index2) => id === nextDescriptionIds[index2]
12407 )) {
12408 return currentDescriptionIds;
12409 }
12410 return nextDescriptionIds;
12411 });
12412 });
12413 const ariaDescribedBy = Array.from(
12414 /* @__PURE__ */ new Set([
12415 ...ariaDescribedByProp?.split(/\s+/).filter(Boolean) ?? [],
12416 ...orderedDescriptionIds
12417 ])
12418 ).join(" ") || void 0;
12419 return useRender({
12420 defaultTagName: "div",
12421 render,
12422 ref,
12423 props: mergeProps(restProps, {
12424 className: clsx_default(
12425 global_css_defense_default4.heading,
12426 style_default13["heading-wrapper"],
12427 className
12428 ),
12429 children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(HeaderDescriptionIdContext.Provider, { value: contextValue, children: /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
12430 Trigger2,
12431 {
12432 className: style_default13.header,
12433 render: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(Header, {}),
12434 nativeButton: false,
12435 "aria-describedby": ariaDescribedBy,
12436 children: [
12437 /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
12438 "div",
12439 {
12440 ref: headerContentRef,
12441 className: style_default13["header-content"],
12442 children
12443 }
12444 ),
12445 /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
12446 "div",
12447 {
12448 className: clsx_default(
12449 style_default13["header-trigger-positioner"]
12450 ),
12451 children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
12452 "div",
12453 {
12454 className: clsx_default(
12455 style_default13["header-trigger-wrapper"],
12456 global_css_defense_default4.div,
12457 // While the interactive trigger element is the whole header,
12458 // the focus ring will be displayed only on the icon to visually
12459 // emulate it being the button.
12460 focus_module_default3["outset-ring--focus-parent-visible"]
12461 ),
12462 children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
12463 Icon,
12464 {
12465 icon: chevron_down_default,
12466 className: style_default13["header-trigger"]
12467 }
12468 )
12469 }
12470 )
12471 }
12472 )
12473 ]
12474 }
12475 ) })
12476 })
12477 });
12478 }
12479 );
12480
12481 // packages/ui/build-module/collapsible-card/header-description.mjs
12482 var import_element37 = __toESM(require_element(), 1);
12483 var import_jsx_runtime55 = __toESM(require_jsx_runtime(), 1);
12484 var STYLE_HASH_ATTRIBUTE15 = "data-wp-hash";
12485 function getRuntime15() {
12486 const globalScope = globalThis;
12487 if (globalScope.__wpStyleRuntime) {
12488 return globalScope.__wpStyleRuntime;
12489 }
12490 globalScope.__wpStyleRuntime = {
12491 documents: /* @__PURE__ */ new Map(),
12492 styles: /* @__PURE__ */ new Map(),
12493 injectedStyles: /* @__PURE__ */ new WeakMap()
12494 };
12495 if (typeof document !== "undefined") {
12496 registerDocument15(document);
12497 }
12498 return globalScope.__wpStyleRuntime;
12499 }
12500 function documentContainsStyleHash15(targetDocument, hash) {
12501 if (!targetDocument.head) {
12502 return false;
12503 }
12504 for (const style of targetDocument.head.querySelectorAll(
12505 `style[${STYLE_HASH_ATTRIBUTE15}]`
12506 )) {
12507 if (style.getAttribute(STYLE_HASH_ATTRIBUTE15) === hash) {
12508 return true;
12509 }
12510 }
12511 return false;
12512 }
12513 function injectStyle15(targetDocument, hash, css) {
12514 if (!targetDocument.head) {
12515 return;
12516 }
12517 const runtime = getRuntime15();
12518 let injectedStyles = runtime.injectedStyles.get(targetDocument);
12519 if (!injectedStyles) {
12520 injectedStyles = /* @__PURE__ */ new Set();
12521 runtime.injectedStyles.set(targetDocument, injectedStyles);
12522 }
12523 if (injectedStyles.has(hash)) {
12524 return;
12525 }
12526 if (documentContainsStyleHash15(targetDocument, hash)) {
12527 injectedStyles.add(hash);
12528 return;
12529 }
12530 const style = targetDocument.createElement("style");
12531 style.setAttribute(STYLE_HASH_ATTRIBUTE15, hash);
12532 style.appendChild(targetDocument.createTextNode(css));
12533 targetDocument.head.appendChild(style);
12534 injectedStyles.add(hash);
12535 }
12536 function registerDocument15(targetDocument) {
12537 const runtime = getRuntime15();
12538 runtime.documents.set(
12539 targetDocument,
12540 (runtime.documents.get(targetDocument) ?? 0) + 1
12541 );
12542 for (const [hash, css] of runtime.styles) {
12543 injectStyle15(targetDocument, hash, css);
12544 }
12545 return () => {
12546 const count = runtime.documents.get(targetDocument);
12547 if (count === void 0) {
12548 return;
12549 }
12550 if (count <= 1) {
12551 runtime.documents.delete(targetDocument);
12552 return;
12553 }
12554 runtime.documents.set(targetDocument, count - 1);
12555 };
12556 }
12557 function registerStyle15(hash, css) {
12558 const runtime = getRuntime15();
12559 runtime.styles.set(hash, css);
12560 for (const targetDocument of runtime.documents.keys()) {
12561 injectStyle15(targetDocument, hash, css);
12562 }
12563 }
12564 if (typeof process === "undefined" || true) {
12565 registerStyle15("64bdb4d46e", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._626190151275d6d3__heading-wrapper{--_gcd-heading-color:inherit;--_gcd-heading-font-size:inherit;--_gcd-heading-font-weight:inherit;--_gcd-heading-margin:0;font-family:inherit;line-height:inherit}.cab17c7a373cb60d__header-content{flex:1;min-width:0}._92ebbaa30c8a1d05__header-description{color:var(--wpds-color-foreground-content-neutral-weak,#707070)}.dd89d27c4f15912d__header-trigger-positioner{align-self:flex-start;flex-shrink:0;margin-block-start:calc(var(--wpds-typography-line-height-sm, 20px)/2);max-height:0;overflow:visible}.bcfab5f2448bafef__header-trigger-wrapper{border-radius:var(--wpds-border-radius-sm,2px);display:flex;translate:0 -50%}._3106f8d2b0330faa__header-trigger{@media not (prefers-reduced-motion){transition:rotate .15s ease-out}}._5d2dfcb4085c6d0f__header[data-panel-open] ._3106f8d2b0330faa__header-trigger{rotate:180deg}._5d2dfcb4085c6d0f__header[data-disabled] ._3106f8d2b0330faa__header-trigger{color:var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d)}.e34cf37ccd0d81e0__content{height:var(--collapsible-panel-height);margin-block-start:var(--wp-ui-card-header-content-margin);overflow:hidden;&._03cfdbcd710393c9__overflow-visible{overflow:visible}&[hidden]:not([hidden=until-found]){display:none}&[data-ending-style],&[data-starting-style]{height:0}@media not (prefers-reduced-motion){transition:all .15s ease-out}}}@layer compositions{._41bfdbf7b6c087c2__content-inner{padding-block-start:0}._5d2dfcb4085c6d0f__header{align-items:stretch;display:flex;flex-direction:row;gap:var(--wpds-dimension-gap-sm,8px);outline:none;&:not([data-disabled]){cursor:var(--wpds-cursor-control,pointer)}}}}");
12566 }
12567 var style_default14 = { "heading-wrapper": "_626190151275d6d3__heading-wrapper", "header-content": "cab17c7a373cb60d__header-content", "header-description": "_92ebbaa30c8a1d05__header-description", "header-trigger-positioner": "dd89d27c4f15912d__header-trigger-positioner", "header-trigger-wrapper": "bcfab5f2448bafef__header-trigger-wrapper", "header-trigger": "_3106f8d2b0330faa__header-trigger", "header": "_5d2dfcb4085c6d0f__header", "content": "e34cf37ccd0d81e0__content", "overflow-visible": "_03cfdbcd710393c9__overflow-visible", "content-inner": "_41bfdbf7b6c087c2__content-inner" };
12568 var DEFAULT_TAG2 = /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("div", {});
12569 var HeaderDescription = (0, import_element37.forwardRef)(function CollapsibleCardHeaderDescription({ children, className, id: idProp, render = DEFAULT_TAG2, ...restProps }, ref) {
12570 const generatedId = (0, import_element37.useId)();
12571 const descriptionId = idProp ?? generatedId;
12572 const context = (0, import_element37.useContext)(HeaderDescriptionIdContext);
12573 if (!context) {
12574 throw new Error(
12575 "CollapsibleCard.HeaderDescription: Missing parent <CollapsibleCard.Header>. Render <CollapsibleCard.HeaderDescription> inside <CollapsibleCard.Header>."
12576 );
12577 }
12578 (0, import_element37.useEffect)(() => {
12579 return context?.registerDescriptionId(descriptionId);
12580 }, [context, descriptionId]);
12581 return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
12582 Text,
12583 {
12584 ref,
12585 variant: "body-md",
12586 render,
12587 id: descriptionId,
12588 "aria-hidden": "true",
12589 className: clsx_default(style_default14["header-description"], className),
12590 ...restProps,
12591 children
12592 }
12593 );
12594 });
12595
12596 // packages/ui/build-module/collapsible-card/content.mjs
12597 var import_element38 = __toESM(require_element(), 1);
12598 var import_jsx_runtime56 = __toESM(require_jsx_runtime(), 1);
12599 var STYLE_HASH_ATTRIBUTE16 = "data-wp-hash";
12600 function getRuntime16() {
12601 const globalScope = globalThis;
12602 if (globalScope.__wpStyleRuntime) {
12603 return globalScope.__wpStyleRuntime;
12604 }
12605 globalScope.__wpStyleRuntime = {
12606 documents: /* @__PURE__ */ new Map(),
12607 styles: /* @__PURE__ */ new Map(),
12608 injectedStyles: /* @__PURE__ */ new WeakMap()
12609 };
12610 if (typeof document !== "undefined") {
12611 registerDocument16(document);
12612 }
12613 return globalScope.__wpStyleRuntime;
12614 }
12615 function documentContainsStyleHash16(targetDocument, hash) {
12616 if (!targetDocument.head) {
12617 return false;
12618 }
12619 for (const style of targetDocument.head.querySelectorAll(
12620 `style[${STYLE_HASH_ATTRIBUTE16}]`
12621 )) {
12622 if (style.getAttribute(STYLE_HASH_ATTRIBUTE16) === hash) {
12623 return true;
12624 }
12625 }
12626 return false;
12627 }
12628 function injectStyle16(targetDocument, hash, css) {
12629 if (!targetDocument.head) {
12630 return;
12631 }
12632 const runtime = getRuntime16();
12633 let injectedStyles = runtime.injectedStyles.get(targetDocument);
12634 if (!injectedStyles) {
12635 injectedStyles = /* @__PURE__ */ new Set();
12636 runtime.injectedStyles.set(targetDocument, injectedStyles);
12637 }
12638 if (injectedStyles.has(hash)) {
12639 return;
12640 }
12641 if (documentContainsStyleHash16(targetDocument, hash)) {
12642 injectedStyles.add(hash);
12643 return;
12644 }
12645 const style = targetDocument.createElement("style");
12646 style.setAttribute(STYLE_HASH_ATTRIBUTE16, hash);
12647 style.appendChild(targetDocument.createTextNode(css));
12648 targetDocument.head.appendChild(style);
12649 injectedStyles.add(hash);
12650 }
12651 function registerDocument16(targetDocument) {
12652 const runtime = getRuntime16();
12653 runtime.documents.set(
12654 targetDocument,
12655 (runtime.documents.get(targetDocument) ?? 0) + 1
12656 );
12657 for (const [hash, css] of runtime.styles) {
12658 injectStyle16(targetDocument, hash, css);
12659 }
12660 return () => {
12661 const count = runtime.documents.get(targetDocument);
12662 if (count === void 0) {
12663 return;
12664 }
12665 if (count <= 1) {
12666 runtime.documents.delete(targetDocument);
12667 return;
12668 }
12669 runtime.documents.set(targetDocument, count - 1);
12670 };
12671 }
12672 function registerStyle16(hash, css) {
12673 const runtime = getRuntime16();
12674 runtime.styles.set(hash, css);
12675 for (const targetDocument of runtime.documents.keys()) {
12676 injectStyle16(targetDocument, hash, css);
12677 }
12678 }
12679 if (typeof process === "undefined" || true) {
12680 registerStyle16("64bdb4d46e", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._626190151275d6d3__heading-wrapper{--_gcd-heading-color:inherit;--_gcd-heading-font-size:inherit;--_gcd-heading-font-weight:inherit;--_gcd-heading-margin:0;font-family:inherit;line-height:inherit}.cab17c7a373cb60d__header-content{flex:1;min-width:0}._92ebbaa30c8a1d05__header-description{color:var(--wpds-color-foreground-content-neutral-weak,#707070)}.dd89d27c4f15912d__header-trigger-positioner{align-self:flex-start;flex-shrink:0;margin-block-start:calc(var(--wpds-typography-line-height-sm, 20px)/2);max-height:0;overflow:visible}.bcfab5f2448bafef__header-trigger-wrapper{border-radius:var(--wpds-border-radius-sm,2px);display:flex;translate:0 -50%}._3106f8d2b0330faa__header-trigger{@media not (prefers-reduced-motion){transition:rotate .15s ease-out}}._5d2dfcb4085c6d0f__header[data-panel-open] ._3106f8d2b0330faa__header-trigger{rotate:180deg}._5d2dfcb4085c6d0f__header[data-disabled] ._3106f8d2b0330faa__header-trigger{color:var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d)}.e34cf37ccd0d81e0__content{height:var(--collapsible-panel-height);margin-block-start:var(--wp-ui-card-header-content-margin);overflow:hidden;&._03cfdbcd710393c9__overflow-visible{overflow:visible}&[hidden]:not([hidden=until-found]){display:none}&[data-ending-style],&[data-starting-style]{height:0}@media not (prefers-reduced-motion){transition:all .15s ease-out}}}@layer compositions{._41bfdbf7b6c087c2__content-inner{padding-block-start:0}._5d2dfcb4085c6d0f__header{align-items:stretch;display:flex;flex-direction:row;gap:var(--wpds-dimension-gap-sm,8px);outline:none;&:not([data-disabled]){cursor:var(--wpds-cursor-control,pointer)}}}}");
12681 }
12682 var style_default15 = { "heading-wrapper": "_626190151275d6d3__heading-wrapper", "header-content": "cab17c7a373cb60d__header-content", "header-description": "_92ebbaa30c8a1d05__header-description", "header-trigger-positioner": "dd89d27c4f15912d__header-trigger-positioner", "header-trigger-wrapper": "bcfab5f2448bafef__header-trigger-wrapper", "header-trigger": "_3106f8d2b0330faa__header-trigger", "header": "_5d2dfcb4085c6d0f__header", "content": "e34cf37ccd0d81e0__content", "overflow-visible": "_03cfdbcd710393c9__overflow-visible", "content-inner": "_41bfdbf7b6c087c2__content-inner" };
12683 var Content2 = (0, import_element38.forwardRef)(
12684 function CollapsibleCardContent({ className, render, children, hiddenUntilFound = true, ...restProps }, ref) {
12685 return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
12686 Panel2,
12687 {
12688 ref,
12689 className: (state) => clsx_default(
12690 style_default15.content,
12691 state.open && state.transitionStatus === "idle" && style_default15["overflow-visible"],
12692 className
12693 ),
12694 hiddenUntilFound,
12695 ...restProps,
12696 children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
12697 Content,
12698 {
12699 className: style_default15["content-inner"],
12700 render,
12701 children
12702 }
12703 )
12704 }
12705 );
12706 }
12707 );
12708
12709 // packages/ui/build-module/stack/stack.mjs
12710 var import_element39 = __toESM(require_element(), 1);
12711 var STYLE_HASH_ATTRIBUTE17 = "data-wp-hash";
12712 function getRuntime17() {
12713 const globalScope = globalThis;
12714 if (globalScope.__wpStyleRuntime) {
12715 return globalScope.__wpStyleRuntime;
12716 }
12717 globalScope.__wpStyleRuntime = {
12718 documents: /* @__PURE__ */ new Map(),
12719 styles: /* @__PURE__ */ new Map(),
12720 injectedStyles: /* @__PURE__ */ new WeakMap()
12721 };
12722 if (typeof document !== "undefined") {
12723 registerDocument17(document);
12724 }
12725 return globalScope.__wpStyleRuntime;
12726 }
12727 function documentContainsStyleHash17(targetDocument, hash) {
12728 if (!targetDocument.head) {
12729 return false;
12730 }
12731 for (const style of targetDocument.head.querySelectorAll(
12732 `style[${STYLE_HASH_ATTRIBUTE17}]`
12733 )) {
12734 if (style.getAttribute(STYLE_HASH_ATTRIBUTE17) === hash) {
12735 return true;
12736 }
12737 }
12738 return false;
12739 }
12740 function injectStyle17(targetDocument, hash, css) {
12741 if (!targetDocument.head) {
12742 return;
12743 }
12744 const runtime = getRuntime17();
12745 let injectedStyles = runtime.injectedStyles.get(targetDocument);
12746 if (!injectedStyles) {
12747 injectedStyles = /* @__PURE__ */ new Set();
12748 runtime.injectedStyles.set(targetDocument, injectedStyles);
12749 }
12750 if (injectedStyles.has(hash)) {
12751 return;
12752 }
12753 if (documentContainsStyleHash17(targetDocument, hash)) {
12754 injectedStyles.add(hash);
12755 return;
12756 }
12757 const style = targetDocument.createElement("style");
12758 style.setAttribute(STYLE_HASH_ATTRIBUTE17, hash);
12759 style.appendChild(targetDocument.createTextNode(css));
12760 targetDocument.head.appendChild(style);
12761 injectedStyles.add(hash);
12762 }
12763 function registerDocument17(targetDocument) {
12764 const runtime = getRuntime17();
12765 runtime.documents.set(
12766 targetDocument,
12767 (runtime.documents.get(targetDocument) ?? 0) + 1
12768 );
12769 for (const [hash, css] of runtime.styles) {
12770 injectStyle17(targetDocument, hash, css);
12771 }
12772 return () => {
12773 const count = runtime.documents.get(targetDocument);
12774 if (count === void 0) {
12775 return;
12776 }
12777 if (count <= 1) {
12778 runtime.documents.delete(targetDocument);
12779 return;
12780 }
12781 runtime.documents.set(targetDocument, count - 1);
12782 };
12783 }
12784 function registerStyle17(hash, css) {
12785 const runtime = getRuntime17();
12786 runtime.styles.set(hash, css);
12787 for (const targetDocument of runtime.documents.keys()) {
12788 injectStyle17(targetDocument, hash, css);
12789 }
12790 }
12791 if (typeof process === "undefined" || true) {
12792 registerStyle17("32aba35fe1", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._19ce0419607e1896__stack{display:flex}}}");
12793 }
12794 var style_default16 = { "stack": "_19ce0419607e1896__stack" };
12795 var gapTokens = {
12796 xs: "var(--wpds-dimension-gap-xs, 4px)",
12797 sm: "var(--wpds-dimension-gap-sm, 8px)",
12798 md: "var(--wpds-dimension-gap-md, 12px)",
12799 lg: "var(--wpds-dimension-gap-lg, 16px)",
12800 xl: "var(--wpds-dimension-gap-xl, 24px)",
12801 "2xl": "var(--wpds-dimension-gap-2xl, 32px)",
12802 "3xl": "var(--wpds-dimension-gap-3xl, 40px)"
12803 };
12804 var Stack = (0, import_element39.forwardRef)(function Stack2({ direction, gap, align, justify, wrap, render, ...props }, ref) {
12805 const style = {
12806 gap: gap && gapTokens[gap],
12807 alignItems: align,
12808 justifyContent: justify,
12809 flexDirection: direction,
12810 flexWrap: wrap
12811 };
12812 const element = useRender({
12813 render,
12814 ref,
12815 props: mergeProps(props, { style, className: style_default16.stack })
12816 });
12817 return element;
12818 });
12819
12820 // packages/ui/build-module/notice/index.mjs
12821 var notice_exports = {};
12822 __export(notice_exports, {
12823 ActionButton: () => ActionButton,
12824 ActionLink: () => ActionLink,
12825 Actions: () => Actions,
12826 CloseIcon: () => CloseIcon,
12827 Description: () => Description,
12828 Root: () => Root4,
12829 Title: () => Title2
12830 });
12831
12832 // packages/ui/build-module/notice/root.mjs
12833 var import_a11y2 = __toESM(require_a11y(), 1);
12834 var import_element40 = __toESM(require_element(), 1);
12835 var import_jsx_runtime57 = __toESM(require_jsx_runtime(), 1);
12836 var STYLE_HASH_ATTRIBUTE18 = "data-wp-hash";
12837 function getRuntime18() {
12838 const globalScope = globalThis;
12839 if (globalScope.__wpStyleRuntime) {
12840 return globalScope.__wpStyleRuntime;
12841 }
12842 globalScope.__wpStyleRuntime = {
12843 documents: /* @__PURE__ */ new Map(),
12844 styles: /* @__PURE__ */ new Map(),
12845 injectedStyles: /* @__PURE__ */ new WeakMap()
12846 };
12847 if (typeof document !== "undefined") {
12848 registerDocument18(document);
12849 }
12850 return globalScope.__wpStyleRuntime;
12851 }
12852 function documentContainsStyleHash18(targetDocument, hash) {
12853 if (!targetDocument.head) {
12854 return false;
12855 }
12856 for (const style of targetDocument.head.querySelectorAll(
12857 `style[${STYLE_HASH_ATTRIBUTE18}]`
12858 )) {
12859 if (style.getAttribute(STYLE_HASH_ATTRIBUTE18) === hash) {
12860 return true;
12861 }
12862 }
12863 return false;
12864 }
12865 function injectStyle18(targetDocument, hash, css) {
12866 if (!targetDocument.head) {
12867 return;
12868 }
12869 const runtime = getRuntime18();
12870 let injectedStyles = runtime.injectedStyles.get(targetDocument);
12871 if (!injectedStyles) {
12872 injectedStyles = /* @__PURE__ */ new Set();
12873 runtime.injectedStyles.set(targetDocument, injectedStyles);
12874 }
12875 if (injectedStyles.has(hash)) {
12876 return;
12877 }
12878 if (documentContainsStyleHash18(targetDocument, hash)) {
12879 injectedStyles.add(hash);
12880 return;
12881 }
12882 const style = targetDocument.createElement("style");
12883 style.setAttribute(STYLE_HASH_ATTRIBUTE18, hash);
12884 style.appendChild(targetDocument.createTextNode(css));
12885 targetDocument.head.appendChild(style);
12886 injectedStyles.add(hash);
12887 }
12888 function registerDocument18(targetDocument) {
12889 const runtime = getRuntime18();
12890 runtime.documents.set(
12891 targetDocument,
12892 (runtime.documents.get(targetDocument) ?? 0) + 1
12893 );
12894 for (const [hash, css] of runtime.styles) {
12895 injectStyle18(targetDocument, hash, css);
12896 }
12897 return () => {
12898 const count = runtime.documents.get(targetDocument);
12899 if (count === void 0) {
12900 return;
12901 }
12902 if (count <= 1) {
12903 runtime.documents.delete(targetDocument);
12904 return;
12905 }
12906 runtime.documents.set(targetDocument, count - 1);
12907 };
12908 }
12909 function registerStyle18(hash, css) {
12910 const runtime = getRuntime18();
12911 runtime.styles.set(hash, css);
12912 for (const targetDocument of runtime.documents.keys()) {
12913 injectStyle18(targetDocument, hash, css);
12914 }
12915 }
12916 if (typeof process === "undefined" || true) {
12917 registerStyle18("10f3806643", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._336cd3e4e743482f__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}}");
12918 }
12919 var resets_default5 = { "box-sizing": "_336cd3e4e743482f__box-sizing" };
12920 if (typeof process === "undefined" || true) {
12921 registerStyle18("2e53930a41", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._4145abab73d17514__notice{--icon-height:var(--wpds-dimension-size-sm,24px);--text-vertical-padding:calc((var(--icon-height) - var(--wpds-typography-line-height-sm, 20px))/2);--wp-ui-notice-background-color:var(--wpds-color-background-surface-neutral-weak,#f4f4f4);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-neutral,#dbdbdb);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-neutral,#1e1e1e);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-neutral,#1e1e1e);align-items:start;background-color:var(--wp-ui-notice-background-color);border:1px solid var(--wp-ui-notice-border-color);border-radius:var(--wpds-border-radius-lg,8px);container-type:inline-size;display:grid;grid-template-columns:auto 1fr auto;padding:var(--wpds-dimension-padding-md,12px)}.d0a25570cb528528__icon{color:var(--wp-ui-notice-decorative-icon-color);grid-column:1;grid-row:1;margin-inline-end:var(--wpds-dimension-gap-xs,4px)}._1904b570a89bb815__description,.b5397fb9d05389e3__title{color:var(--wp-ui-notice-text-color);grid-column:2;padding-block:var(--text-vertical-padding)}._0a1270dcdd79c031__actions{display:flex;flex-wrap:wrap;gap:var(--wpds-dimension-gap-md,12px);grid-column:2}._4145abab73d17514__notice:has(._1904b570a89bb815__description) ._0a1270dcdd79c031__actions,._4145abab73d17514__notice:has(.b5397fb9d05389e3__title) ._0a1270dcdd79c031__actions{margin-block-start:var(--wpds-dimension-gap-sm,8px)}._983740ab855c4e09__action-button{flex-shrink:0}.d329e7416d368d31__action-link{flex-shrink:0;&:not(:first-child){margin-inline-start:var(--wpds-dimension-gap-xs,4px)}&:not(:last-child){margin-inline-end:var(--wpds-dimension-gap-xs,4px)}}._487e6a5c1375f7dc__close-icon{grid-column:3;grid-row:1;margin-inline-start:var(--wpds-dimension-gap-xs,4px)}._531c140826094795__is-info{--wp-ui-notice-background-color:var(--wpds-color-background-surface-info-weak,#f3f9ff);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-info,#adc6e2);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-info,#001b4f);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-info-weak,#006bd7)}.ae2e1004697cce95__is-warning{--wp-ui-notice-background-color:var(--wpds-color-background-surface-warning-weak,#fff7e1);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-warning,#e1bd7c);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-warning,#2e1900);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-warning-weak,#936300)}._2e614a76af494837__is-success{--wp-ui-notice-background-color:var(--wpds-color-background-surface-success-weak,#ebffed);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-success,#92d39d);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-success,#002900);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-success-weak,#008030)}.af00331ae17a0065__is-error{--wp-ui-notice-background-color:var(--wpds-color-background-surface-error-weak,#fff6f5);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-error,#e0afa7);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-error,#470000);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-error-weak,#cc1818)}@container (max-width: 320px){._4145abab73d17514__notice:has(.b5397fb9d05389e3__title) ._0a1270dcdd79c031__actions,._4145abab73d17514__notice:has(.b5397fb9d05389e3__title) ._1904b570a89bb815__description{grid-column:1/3}}}@layer compositions{.d329e7416d368d31__action-link{margin-block:auto}._487e6a5c1375f7dc__close-icon,._983740ab855c4e09__action-button:is(._8ddb8fb33fbf3d38__is-action-button-outline,._77bbde495a8a0af3__is-action-button-minimal){--wp-ui-button-background-color-active:color-mix(in srgb,transparent 50%,var(--wpds-color-background-interactive-neutral-weak-active,#ededed))}}}");
12922 }
12923 var style_default17 = { "notice": "_4145abab73d17514__notice", "icon": "d0a25570cb528528__icon", "title": "b5397fb9d05389e3__title", "description": "_1904b570a89bb815__description", "actions": "_0a1270dcdd79c031__actions", "action-button": "_983740ab855c4e09__action-button", "action-link": "d329e7416d368d31__action-link", "close-icon": "_487e6a5c1375f7dc__close-icon", "is-info": "_531c140826094795__is-info", "is-warning": "ae2e1004697cce95__is-warning", "is-success": "_2e614a76af494837__is-success", "is-error": "af00331ae17a0065__is-error", "is-action-button-outline": "_8ddb8fb33fbf3d38__is-action-button-outline", "is-action-button-minimal": "_77bbde495a8a0af3__is-action-button-minimal" };
12924 var icons = {
12925 neutral: null,
12926 info: info_default,
12927 warning: caution_default,
12928 success: published_default,
12929 error: error_default
12930 };
12931 function getDefaultPoliteness(intent) {
12932 return intent === "error" ? "assertive" : "polite";
12933 }
12934 function safeRenderToString(message) {
12935 if (!message) {
12936 return void 0;
12937 }
12938 if (typeof message === "string") {
12939 return message;
12940 }
12941 try {
12942 return (0, import_element40.renderToString)(message);
12943 } catch {
12944 return void 0;
12945 }
12946 }
12947 function useSpokenMessage(message, politeness) {
12948 const spokenMessage = safeRenderToString(message);
12949 (0, import_element40.useEffect)(() => {
12950 if (spokenMessage) {
12951 (0, import_a11y2.speak)(spokenMessage, politeness);
12952 }
12953 }, [spokenMessage, politeness]);
12954 }
12955 var Root4 = (0, import_element40.forwardRef)(function Notice({
12956 intent = "neutral",
12957 children,
12958 icon,
12959 spokenMessage = children,
12960 politeness = getDefaultPoliteness(intent),
12961 render,
12962 ...restProps
12963 }, ref) {
12964 useSpokenMessage(spokenMessage, politeness);
12965 const iconElement = icon === null ? null : icon ?? icons[intent];
12966 const mergedClassName = clsx_default(
12967 style_default17.notice,
12968 style_default17[`is-${intent}`],
12969 resets_default5["box-sizing"]
12970 );
12971 const element = useRender({
12972 defaultTagName: "div",
12973 render,
12974 ref,
12975 props: mergeProps(
12976 {
12977 className: mergedClassName,
12978 children: /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(import_jsx_runtime57.Fragment, { children: [
12979 children,
12980 iconElement && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
12981 Icon,
12982 {
12983 className: style_default17.icon,
12984 icon: iconElement
12985 }
12986 )
12987 ] })
12988 },
12989 restProps
12990 )
12991 });
12992 return element;
12993 });
12994
12995 // packages/ui/build-module/notice/title.mjs
12996 var import_element41 = __toESM(require_element(), 1);
12997 var import_jsx_runtime58 = __toESM(require_jsx_runtime(), 1);
12998 var STYLE_HASH_ATTRIBUTE19 = "data-wp-hash";
12999 function getRuntime19() {
13000 const globalScope = globalThis;
13001 if (globalScope.__wpStyleRuntime) {
13002 return globalScope.__wpStyleRuntime;
13003 }
13004 globalScope.__wpStyleRuntime = {
13005 documents: /* @__PURE__ */ new Map(),
13006 styles: /* @__PURE__ */ new Map(),
13007 injectedStyles: /* @__PURE__ */ new WeakMap()
13008 };
13009 if (typeof document !== "undefined") {
13010 registerDocument19(document);
13011 }
13012 return globalScope.__wpStyleRuntime;
13013 }
13014 function documentContainsStyleHash19(targetDocument, hash) {
13015 if (!targetDocument.head) {
13016 return false;
13017 }
13018 for (const style of targetDocument.head.querySelectorAll(
13019 `style[${STYLE_HASH_ATTRIBUTE19}]`
13020 )) {
13021 if (style.getAttribute(STYLE_HASH_ATTRIBUTE19) === hash) {
13022 return true;
13023 }
13024 }
13025 return false;
13026 }
13027 function injectStyle19(targetDocument, hash, css) {
13028 if (!targetDocument.head) {
13029 return;
13030 }
13031 const runtime = getRuntime19();
13032 let injectedStyles = runtime.injectedStyles.get(targetDocument);
13033 if (!injectedStyles) {
13034 injectedStyles = /* @__PURE__ */ new Set();
13035 runtime.injectedStyles.set(targetDocument, injectedStyles);
13036 }
13037 if (injectedStyles.has(hash)) {
13038 return;
13039 }
13040 if (documentContainsStyleHash19(targetDocument, hash)) {
13041 injectedStyles.add(hash);
13042 return;
13043 }
13044 const style = targetDocument.createElement("style");
13045 style.setAttribute(STYLE_HASH_ATTRIBUTE19, hash);
13046 style.appendChild(targetDocument.createTextNode(css));
13047 targetDocument.head.appendChild(style);
13048 injectedStyles.add(hash);
13049 }
13050 function registerDocument19(targetDocument) {
13051 const runtime = getRuntime19();
13052 runtime.documents.set(
13053 targetDocument,
13054 (runtime.documents.get(targetDocument) ?? 0) + 1
13055 );
13056 for (const [hash, css] of runtime.styles) {
13057 injectStyle19(targetDocument, hash, css);
13058 }
13059 return () => {
13060 const count = runtime.documents.get(targetDocument);
13061 if (count === void 0) {
13062 return;
13063 }
13064 if (count <= 1) {
13065 runtime.documents.delete(targetDocument);
13066 return;
13067 }
13068 runtime.documents.set(targetDocument, count - 1);
13069 };
13070 }
13071 function registerStyle19(hash, css) {
13072 const runtime = getRuntime19();
13073 runtime.styles.set(hash, css);
13074 for (const targetDocument of runtime.documents.keys()) {
13075 injectStyle19(targetDocument, hash, css);
13076 }
13077 }
13078 if (typeof process === "undefined" || true) {
13079 registerStyle19("2e53930a41", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._4145abab73d17514__notice{--icon-height:var(--wpds-dimension-size-sm,24px);--text-vertical-padding:calc((var(--icon-height) - var(--wpds-typography-line-height-sm, 20px))/2);--wp-ui-notice-background-color:var(--wpds-color-background-surface-neutral-weak,#f4f4f4);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-neutral,#dbdbdb);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-neutral,#1e1e1e);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-neutral,#1e1e1e);align-items:start;background-color:var(--wp-ui-notice-background-color);border:1px solid var(--wp-ui-notice-border-color);border-radius:var(--wpds-border-radius-lg,8px);container-type:inline-size;display:grid;grid-template-columns:auto 1fr auto;padding:var(--wpds-dimension-padding-md,12px)}.d0a25570cb528528__icon{color:var(--wp-ui-notice-decorative-icon-color);grid-column:1;grid-row:1;margin-inline-end:var(--wpds-dimension-gap-xs,4px)}._1904b570a89bb815__description,.b5397fb9d05389e3__title{color:var(--wp-ui-notice-text-color);grid-column:2;padding-block:var(--text-vertical-padding)}._0a1270dcdd79c031__actions{display:flex;flex-wrap:wrap;gap:var(--wpds-dimension-gap-md,12px);grid-column:2}._4145abab73d17514__notice:has(._1904b570a89bb815__description) ._0a1270dcdd79c031__actions,._4145abab73d17514__notice:has(.b5397fb9d05389e3__title) ._0a1270dcdd79c031__actions{margin-block-start:var(--wpds-dimension-gap-sm,8px)}._983740ab855c4e09__action-button{flex-shrink:0}.d329e7416d368d31__action-link{flex-shrink:0;&:not(:first-child){margin-inline-start:var(--wpds-dimension-gap-xs,4px)}&:not(:last-child){margin-inline-end:var(--wpds-dimension-gap-xs,4px)}}._487e6a5c1375f7dc__close-icon{grid-column:3;grid-row:1;margin-inline-start:var(--wpds-dimension-gap-xs,4px)}._531c140826094795__is-info{--wp-ui-notice-background-color:var(--wpds-color-background-surface-info-weak,#f3f9ff);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-info,#adc6e2);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-info,#001b4f);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-info-weak,#006bd7)}.ae2e1004697cce95__is-warning{--wp-ui-notice-background-color:var(--wpds-color-background-surface-warning-weak,#fff7e1);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-warning,#e1bd7c);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-warning,#2e1900);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-warning-weak,#936300)}._2e614a76af494837__is-success{--wp-ui-notice-background-color:var(--wpds-color-background-surface-success-weak,#ebffed);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-success,#92d39d);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-success,#002900);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-success-weak,#008030)}.af00331ae17a0065__is-error{--wp-ui-notice-background-color:var(--wpds-color-background-surface-error-weak,#fff6f5);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-error,#e0afa7);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-error,#470000);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-error-weak,#cc1818)}@container (max-width: 320px){._4145abab73d17514__notice:has(.b5397fb9d05389e3__title) ._0a1270dcdd79c031__actions,._4145abab73d17514__notice:has(.b5397fb9d05389e3__title) ._1904b570a89bb815__description{grid-column:1/3}}}@layer compositions{.d329e7416d368d31__action-link{margin-block:auto}._487e6a5c1375f7dc__close-icon,._983740ab855c4e09__action-button:is(._8ddb8fb33fbf3d38__is-action-button-outline,._77bbde495a8a0af3__is-action-button-minimal){--wp-ui-button-background-color-active:color-mix(in srgb,transparent 50%,var(--wpds-color-background-interactive-neutral-weak-active,#ededed))}}}");
13080 }
13081 var style_default18 = { "notice": "_4145abab73d17514__notice", "icon": "d0a25570cb528528__icon", "title": "b5397fb9d05389e3__title", "description": "_1904b570a89bb815__description", "actions": "_0a1270dcdd79c031__actions", "action-button": "_983740ab855c4e09__action-button", "action-link": "d329e7416d368d31__action-link", "close-icon": "_487e6a5c1375f7dc__close-icon", "is-info": "_531c140826094795__is-info", "is-warning": "ae2e1004697cce95__is-warning", "is-success": "_2e614a76af494837__is-success", "is-error": "af00331ae17a0065__is-error", "is-action-button-outline": "_8ddb8fb33fbf3d38__is-action-button-outline", "is-action-button-minimal": "_77bbde495a8a0af3__is-action-button-minimal" };
13082 var Title2 = (0, import_element41.forwardRef)(
13083 function NoticeTitle({ className, ...props }, ref) {
13084 return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
13085 Text,
13086 {
13087 ref,
13088 variant: "heading-md",
13089 className: clsx_default(style_default18.title, className),
13090 ...props
13091 }
13092 );
13093 }
13094 );
13095
13096 // packages/ui/build-module/notice/description.mjs
13097 var import_element42 = __toESM(require_element(), 1);
13098 var import_jsx_runtime59 = __toESM(require_jsx_runtime(), 1);
13099 var STYLE_HASH_ATTRIBUTE20 = "data-wp-hash";
13100 function getRuntime20() {
13101 const globalScope = globalThis;
13102 if (globalScope.__wpStyleRuntime) {
13103 return globalScope.__wpStyleRuntime;
13104 }
13105 globalScope.__wpStyleRuntime = {
13106 documents: /* @__PURE__ */ new Map(),
13107 styles: /* @__PURE__ */ new Map(),
13108 injectedStyles: /* @__PURE__ */ new WeakMap()
13109 };
13110 if (typeof document !== "undefined") {
13111 registerDocument20(document);
13112 }
13113 return globalScope.__wpStyleRuntime;
13114 }
13115 function documentContainsStyleHash20(targetDocument, hash) {
13116 if (!targetDocument.head) {
13117 return false;
13118 }
13119 for (const style of targetDocument.head.querySelectorAll(
13120 `style[${STYLE_HASH_ATTRIBUTE20}]`
13121 )) {
13122 if (style.getAttribute(STYLE_HASH_ATTRIBUTE20) === hash) {
13123 return true;
13124 }
13125 }
13126 return false;
13127 }
13128 function injectStyle20(targetDocument, hash, css) {
13129 if (!targetDocument.head) {
13130 return;
13131 }
13132 const runtime = getRuntime20();
13133 let injectedStyles = runtime.injectedStyles.get(targetDocument);
13134 if (!injectedStyles) {
13135 injectedStyles = /* @__PURE__ */ new Set();
13136 runtime.injectedStyles.set(targetDocument, injectedStyles);
13137 }
13138 if (injectedStyles.has(hash)) {
13139 return;
13140 }
13141 if (documentContainsStyleHash20(targetDocument, hash)) {
13142 injectedStyles.add(hash);
13143 return;
13144 }
13145 const style = targetDocument.createElement("style");
13146 style.setAttribute(STYLE_HASH_ATTRIBUTE20, hash);
13147 style.appendChild(targetDocument.createTextNode(css));
13148 targetDocument.head.appendChild(style);
13149 injectedStyles.add(hash);
13150 }
13151 function registerDocument20(targetDocument) {
13152 const runtime = getRuntime20();
13153 runtime.documents.set(
13154 targetDocument,
13155 (runtime.documents.get(targetDocument) ?? 0) + 1
13156 );
13157 for (const [hash, css] of runtime.styles) {
13158 injectStyle20(targetDocument, hash, css);
13159 }
13160 return () => {
13161 const count = runtime.documents.get(targetDocument);
13162 if (count === void 0) {
13163 return;
13164 }
13165 if (count <= 1) {
13166 runtime.documents.delete(targetDocument);
13167 return;
13168 }
13169 runtime.documents.set(targetDocument, count - 1);
13170 };
13171 }
13172 function registerStyle20(hash, css) {
13173 const runtime = getRuntime20();
13174 runtime.styles.set(hash, css);
13175 for (const targetDocument of runtime.documents.keys()) {
13176 injectStyle20(targetDocument, hash, css);
13177 }
13178 }
13179 if (typeof process === "undefined" || true) {
13180 registerStyle20("2e53930a41", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._4145abab73d17514__notice{--icon-height:var(--wpds-dimension-size-sm,24px);--text-vertical-padding:calc((var(--icon-height) - var(--wpds-typography-line-height-sm, 20px))/2);--wp-ui-notice-background-color:var(--wpds-color-background-surface-neutral-weak,#f4f4f4);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-neutral,#dbdbdb);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-neutral,#1e1e1e);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-neutral,#1e1e1e);align-items:start;background-color:var(--wp-ui-notice-background-color);border:1px solid var(--wp-ui-notice-border-color);border-radius:var(--wpds-border-radius-lg,8px);container-type:inline-size;display:grid;grid-template-columns:auto 1fr auto;padding:var(--wpds-dimension-padding-md,12px)}.d0a25570cb528528__icon{color:var(--wp-ui-notice-decorative-icon-color);grid-column:1;grid-row:1;margin-inline-end:var(--wpds-dimension-gap-xs,4px)}._1904b570a89bb815__description,.b5397fb9d05389e3__title{color:var(--wp-ui-notice-text-color);grid-column:2;padding-block:var(--text-vertical-padding)}._0a1270dcdd79c031__actions{display:flex;flex-wrap:wrap;gap:var(--wpds-dimension-gap-md,12px);grid-column:2}._4145abab73d17514__notice:has(._1904b570a89bb815__description) ._0a1270dcdd79c031__actions,._4145abab73d17514__notice:has(.b5397fb9d05389e3__title) ._0a1270dcdd79c031__actions{margin-block-start:var(--wpds-dimension-gap-sm,8px)}._983740ab855c4e09__action-button{flex-shrink:0}.d329e7416d368d31__action-link{flex-shrink:0;&:not(:first-child){margin-inline-start:var(--wpds-dimension-gap-xs,4px)}&:not(:last-child){margin-inline-end:var(--wpds-dimension-gap-xs,4px)}}._487e6a5c1375f7dc__close-icon{grid-column:3;grid-row:1;margin-inline-start:var(--wpds-dimension-gap-xs,4px)}._531c140826094795__is-info{--wp-ui-notice-background-color:var(--wpds-color-background-surface-info-weak,#f3f9ff);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-info,#adc6e2);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-info,#001b4f);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-info-weak,#006bd7)}.ae2e1004697cce95__is-warning{--wp-ui-notice-background-color:var(--wpds-color-background-surface-warning-weak,#fff7e1);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-warning,#e1bd7c);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-warning,#2e1900);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-warning-weak,#936300)}._2e614a76af494837__is-success{--wp-ui-notice-background-color:var(--wpds-color-background-surface-success-weak,#ebffed);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-success,#92d39d);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-success,#002900);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-success-weak,#008030)}.af00331ae17a0065__is-error{--wp-ui-notice-background-color:var(--wpds-color-background-surface-error-weak,#fff6f5);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-error,#e0afa7);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-error,#470000);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-error-weak,#cc1818)}@container (max-width: 320px){._4145abab73d17514__notice:has(.b5397fb9d05389e3__title) ._0a1270dcdd79c031__actions,._4145abab73d17514__notice:has(.b5397fb9d05389e3__title) ._1904b570a89bb815__description{grid-column:1/3}}}@layer compositions{.d329e7416d368d31__action-link{margin-block:auto}._487e6a5c1375f7dc__close-icon,._983740ab855c4e09__action-button:is(._8ddb8fb33fbf3d38__is-action-button-outline,._77bbde495a8a0af3__is-action-button-minimal){--wp-ui-button-background-color-active:color-mix(in srgb,transparent 50%,var(--wpds-color-background-interactive-neutral-weak-active,#ededed))}}}");
13181 }
13182 var style_default19 = { "notice": "_4145abab73d17514__notice", "icon": "d0a25570cb528528__icon", "title": "b5397fb9d05389e3__title", "description": "_1904b570a89bb815__description", "actions": "_0a1270dcdd79c031__actions", "action-button": "_983740ab855c4e09__action-button", "action-link": "d329e7416d368d31__action-link", "close-icon": "_487e6a5c1375f7dc__close-icon", "is-info": "_531c140826094795__is-info", "is-warning": "ae2e1004697cce95__is-warning", "is-success": "_2e614a76af494837__is-success", "is-error": "af00331ae17a0065__is-error", "is-action-button-outline": "_8ddb8fb33fbf3d38__is-action-button-outline", "is-action-button-minimal": "_77bbde495a8a0af3__is-action-button-minimal" };
13183 var Description = (0, import_element42.forwardRef)(
13184 function NoticeDescription({ className, ...props }, ref) {
13185 return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
13186 Text,
13187 {
13188 ref,
13189 variant: "body-md",
13190 className: clsx_default(style_default19.description, className),
13191 ...props
13192 }
13193 );
13194 }
13195 );
13196
13197 // packages/ui/build-module/notice/actions.mjs
13198 var import_element43 = __toESM(require_element(), 1);
13199 var STYLE_HASH_ATTRIBUTE21 = "data-wp-hash";
13200 function getRuntime21() {
13201 const globalScope = globalThis;
13202 if (globalScope.__wpStyleRuntime) {
13203 return globalScope.__wpStyleRuntime;
13204 }
13205 globalScope.__wpStyleRuntime = {
13206 documents: /* @__PURE__ */ new Map(),
13207 styles: /* @__PURE__ */ new Map(),
13208 injectedStyles: /* @__PURE__ */ new WeakMap()
13209 };
13210 if (typeof document !== "undefined") {
13211 registerDocument21(document);
13212 }
13213 return globalScope.__wpStyleRuntime;
13214 }
13215 function documentContainsStyleHash21(targetDocument, hash) {
13216 if (!targetDocument.head) {
13217 return false;
13218 }
13219 for (const style of targetDocument.head.querySelectorAll(
13220 `style[${STYLE_HASH_ATTRIBUTE21}]`
13221 )) {
13222 if (style.getAttribute(STYLE_HASH_ATTRIBUTE21) === hash) {
13223 return true;
13224 }
13225 }
13226 return false;
13227 }
13228 function injectStyle21(targetDocument, hash, css) {
13229 if (!targetDocument.head) {
13230 return;
13231 }
13232 const runtime = getRuntime21();
13233 let injectedStyles = runtime.injectedStyles.get(targetDocument);
13234 if (!injectedStyles) {
13235 injectedStyles = /* @__PURE__ */ new Set();
13236 runtime.injectedStyles.set(targetDocument, injectedStyles);
13237 }
13238 if (injectedStyles.has(hash)) {
13239 return;
13240 }
13241 if (documentContainsStyleHash21(targetDocument, hash)) {
13242 injectedStyles.add(hash);
13243 return;
13244 }
13245 const style = targetDocument.createElement("style");
13246 style.setAttribute(STYLE_HASH_ATTRIBUTE21, hash);
13247 style.appendChild(targetDocument.createTextNode(css));
13248 targetDocument.head.appendChild(style);
13249 injectedStyles.add(hash);
13250 }
13251 function registerDocument21(targetDocument) {
13252 const runtime = getRuntime21();
13253 runtime.documents.set(
13254 targetDocument,
13255 (runtime.documents.get(targetDocument) ?? 0) + 1
13256 );
13257 for (const [hash, css] of runtime.styles) {
13258 injectStyle21(targetDocument, hash, css);
13259 }
13260 return () => {
13261 const count = runtime.documents.get(targetDocument);
13262 if (count === void 0) {
13263 return;
13264 }
13265 if (count <= 1) {
13266 runtime.documents.delete(targetDocument);
13267 return;
13268 }
13269 runtime.documents.set(targetDocument, count - 1);
13270 };
13271 }
13272 function registerStyle21(hash, css) {
13273 const runtime = getRuntime21();
13274 runtime.styles.set(hash, css);
13275 for (const targetDocument of runtime.documents.keys()) {
13276 injectStyle21(targetDocument, hash, css);
13277 }
13278 }
13279 if (typeof process === "undefined" || true) {
13280 registerStyle21("2e53930a41", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._4145abab73d17514__notice{--icon-height:var(--wpds-dimension-size-sm,24px);--text-vertical-padding:calc((var(--icon-height) - var(--wpds-typography-line-height-sm, 20px))/2);--wp-ui-notice-background-color:var(--wpds-color-background-surface-neutral-weak,#f4f4f4);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-neutral,#dbdbdb);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-neutral,#1e1e1e);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-neutral,#1e1e1e);align-items:start;background-color:var(--wp-ui-notice-background-color);border:1px solid var(--wp-ui-notice-border-color);border-radius:var(--wpds-border-radius-lg,8px);container-type:inline-size;display:grid;grid-template-columns:auto 1fr auto;padding:var(--wpds-dimension-padding-md,12px)}.d0a25570cb528528__icon{color:var(--wp-ui-notice-decorative-icon-color);grid-column:1;grid-row:1;margin-inline-end:var(--wpds-dimension-gap-xs,4px)}._1904b570a89bb815__description,.b5397fb9d05389e3__title{color:var(--wp-ui-notice-text-color);grid-column:2;padding-block:var(--text-vertical-padding)}._0a1270dcdd79c031__actions{display:flex;flex-wrap:wrap;gap:var(--wpds-dimension-gap-md,12px);grid-column:2}._4145abab73d17514__notice:has(._1904b570a89bb815__description) ._0a1270dcdd79c031__actions,._4145abab73d17514__notice:has(.b5397fb9d05389e3__title) ._0a1270dcdd79c031__actions{margin-block-start:var(--wpds-dimension-gap-sm,8px)}._983740ab855c4e09__action-button{flex-shrink:0}.d329e7416d368d31__action-link{flex-shrink:0;&:not(:first-child){margin-inline-start:var(--wpds-dimension-gap-xs,4px)}&:not(:last-child){margin-inline-end:var(--wpds-dimension-gap-xs,4px)}}._487e6a5c1375f7dc__close-icon{grid-column:3;grid-row:1;margin-inline-start:var(--wpds-dimension-gap-xs,4px)}._531c140826094795__is-info{--wp-ui-notice-background-color:var(--wpds-color-background-surface-info-weak,#f3f9ff);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-info,#adc6e2);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-info,#001b4f);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-info-weak,#006bd7)}.ae2e1004697cce95__is-warning{--wp-ui-notice-background-color:var(--wpds-color-background-surface-warning-weak,#fff7e1);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-warning,#e1bd7c);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-warning,#2e1900);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-warning-weak,#936300)}._2e614a76af494837__is-success{--wp-ui-notice-background-color:var(--wpds-color-background-surface-success-weak,#ebffed);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-success,#92d39d);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-success,#002900);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-success-weak,#008030)}.af00331ae17a0065__is-error{--wp-ui-notice-background-color:var(--wpds-color-background-surface-error-weak,#fff6f5);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-error,#e0afa7);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-error,#470000);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-error-weak,#cc1818)}@container (max-width: 320px){._4145abab73d17514__notice:has(.b5397fb9d05389e3__title) ._0a1270dcdd79c031__actions,._4145abab73d17514__notice:has(.b5397fb9d05389e3__title) ._1904b570a89bb815__description{grid-column:1/3}}}@layer compositions{.d329e7416d368d31__action-link{margin-block:auto}._487e6a5c1375f7dc__close-icon,._983740ab855c4e09__action-button:is(._8ddb8fb33fbf3d38__is-action-button-outline,._77bbde495a8a0af3__is-action-button-minimal){--wp-ui-button-background-color-active:color-mix(in srgb,transparent 50%,var(--wpds-color-background-interactive-neutral-weak-active,#ededed))}}}");
13281 }
13282 var style_default20 = { "notice": "_4145abab73d17514__notice", "icon": "d0a25570cb528528__icon", "title": "b5397fb9d05389e3__title", "description": "_1904b570a89bb815__description", "actions": "_0a1270dcdd79c031__actions", "action-button": "_983740ab855c4e09__action-button", "action-link": "d329e7416d368d31__action-link", "close-icon": "_487e6a5c1375f7dc__close-icon", "is-info": "_531c140826094795__is-info", "is-warning": "ae2e1004697cce95__is-warning", "is-success": "_2e614a76af494837__is-success", "is-error": "af00331ae17a0065__is-error", "is-action-button-outline": "_8ddb8fb33fbf3d38__is-action-button-outline", "is-action-button-minimal": "_77bbde495a8a0af3__is-action-button-minimal" };
13283 var Actions = (0, import_element43.forwardRef)(
13284 function NoticeActions({ render, ...props }, ref) {
13285 const element = useRender({
13286 defaultTagName: "div",
13287 render,
13288 ref,
13289 props: mergeProps(
13290 {
13291 className: style_default20.actions
13292 },
13293 props
13294 )
13295 });
13296 return element;
13297 }
13298 );
13299
13300 // packages/ui/build-module/notice/close-icon.mjs
13301 var import_element44 = __toESM(require_element(), 1);
13302 var import_i18n6 = __toESM(require_i18n(), 1);
13303 var import_jsx_runtime60 = __toESM(require_jsx_runtime(), 1);
13304 var STYLE_HASH_ATTRIBUTE22 = "data-wp-hash";
13305 function getRuntime22() {
13306 const globalScope = globalThis;
13307 if (globalScope.__wpStyleRuntime) {
13308 return globalScope.__wpStyleRuntime;
13309 }
13310 globalScope.__wpStyleRuntime = {
13311 documents: /* @__PURE__ */ new Map(),
13312 styles: /* @__PURE__ */ new Map(),
13313 injectedStyles: /* @__PURE__ */ new WeakMap()
13314 };
13315 if (typeof document !== "undefined") {
13316 registerDocument22(document);
13317 }
13318 return globalScope.__wpStyleRuntime;
13319 }
13320 function documentContainsStyleHash22(targetDocument, hash) {
13321 if (!targetDocument.head) {
13322 return false;
13323 }
13324 for (const style of targetDocument.head.querySelectorAll(
13325 `style[${STYLE_HASH_ATTRIBUTE22}]`
13326 )) {
13327 if (style.getAttribute(STYLE_HASH_ATTRIBUTE22) === hash) {
13328 return true;
13329 }
13330 }
13331 return false;
13332 }
13333 function injectStyle22(targetDocument, hash, css) {
13334 if (!targetDocument.head) {
13335 return;
13336 }
13337 const runtime = getRuntime22();
13338 let injectedStyles = runtime.injectedStyles.get(targetDocument);
13339 if (!injectedStyles) {
13340 injectedStyles = /* @__PURE__ */ new Set();
13341 runtime.injectedStyles.set(targetDocument, injectedStyles);
13342 }
13343 if (injectedStyles.has(hash)) {
13344 return;
13345 }
13346 if (documentContainsStyleHash22(targetDocument, hash)) {
13347 injectedStyles.add(hash);
13348 return;
13349 }
13350 const style = targetDocument.createElement("style");
13351 style.setAttribute(STYLE_HASH_ATTRIBUTE22, hash);
13352 style.appendChild(targetDocument.createTextNode(css));
13353 targetDocument.head.appendChild(style);
13354 injectedStyles.add(hash);
13355 }
13356 function registerDocument22(targetDocument) {
13357 const runtime = getRuntime22();
13358 runtime.documents.set(
13359 targetDocument,
13360 (runtime.documents.get(targetDocument) ?? 0) + 1
13361 );
13362 for (const [hash, css] of runtime.styles) {
13363 injectStyle22(targetDocument, hash, css);
13364 }
13365 return () => {
13366 const count = runtime.documents.get(targetDocument);
13367 if (count === void 0) {
13368 return;
13369 }
13370 if (count <= 1) {
13371 runtime.documents.delete(targetDocument);
13372 return;
13373 }
13374 runtime.documents.set(targetDocument, count - 1);
13375 };
13376 }
13377 function registerStyle22(hash, css) {
13378 const runtime = getRuntime22();
13379 runtime.styles.set(hash, css);
13380 for (const targetDocument of runtime.documents.keys()) {
13381 injectStyle22(targetDocument, hash, css);
13382 }
13383 }
13384 if (typeof process === "undefined" || true) {
13385 registerStyle22("2e53930a41", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._4145abab73d17514__notice{--icon-height:var(--wpds-dimension-size-sm,24px);--text-vertical-padding:calc((var(--icon-height) - var(--wpds-typography-line-height-sm, 20px))/2);--wp-ui-notice-background-color:var(--wpds-color-background-surface-neutral-weak,#f4f4f4);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-neutral,#dbdbdb);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-neutral,#1e1e1e);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-neutral,#1e1e1e);align-items:start;background-color:var(--wp-ui-notice-background-color);border:1px solid var(--wp-ui-notice-border-color);border-radius:var(--wpds-border-radius-lg,8px);container-type:inline-size;display:grid;grid-template-columns:auto 1fr auto;padding:var(--wpds-dimension-padding-md,12px)}.d0a25570cb528528__icon{color:var(--wp-ui-notice-decorative-icon-color);grid-column:1;grid-row:1;margin-inline-end:var(--wpds-dimension-gap-xs,4px)}._1904b570a89bb815__description,.b5397fb9d05389e3__title{color:var(--wp-ui-notice-text-color);grid-column:2;padding-block:var(--text-vertical-padding)}._0a1270dcdd79c031__actions{display:flex;flex-wrap:wrap;gap:var(--wpds-dimension-gap-md,12px);grid-column:2}._4145abab73d17514__notice:has(._1904b570a89bb815__description) ._0a1270dcdd79c031__actions,._4145abab73d17514__notice:has(.b5397fb9d05389e3__title) ._0a1270dcdd79c031__actions{margin-block-start:var(--wpds-dimension-gap-sm,8px)}._983740ab855c4e09__action-button{flex-shrink:0}.d329e7416d368d31__action-link{flex-shrink:0;&:not(:first-child){margin-inline-start:var(--wpds-dimension-gap-xs,4px)}&:not(:last-child){margin-inline-end:var(--wpds-dimension-gap-xs,4px)}}._487e6a5c1375f7dc__close-icon{grid-column:3;grid-row:1;margin-inline-start:var(--wpds-dimension-gap-xs,4px)}._531c140826094795__is-info{--wp-ui-notice-background-color:var(--wpds-color-background-surface-info-weak,#f3f9ff);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-info,#adc6e2);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-info,#001b4f);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-info-weak,#006bd7)}.ae2e1004697cce95__is-warning{--wp-ui-notice-background-color:var(--wpds-color-background-surface-warning-weak,#fff7e1);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-warning,#e1bd7c);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-warning,#2e1900);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-warning-weak,#936300)}._2e614a76af494837__is-success{--wp-ui-notice-background-color:var(--wpds-color-background-surface-success-weak,#ebffed);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-success,#92d39d);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-success,#002900);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-success-weak,#008030)}.af00331ae17a0065__is-error{--wp-ui-notice-background-color:var(--wpds-color-background-surface-error-weak,#fff6f5);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-error,#e0afa7);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-error,#470000);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-error-weak,#cc1818)}@container (max-width: 320px){._4145abab73d17514__notice:has(.b5397fb9d05389e3__title) ._0a1270dcdd79c031__actions,._4145abab73d17514__notice:has(.b5397fb9d05389e3__title) ._1904b570a89bb815__description{grid-column:1/3}}}@layer compositions{.d329e7416d368d31__action-link{margin-block:auto}._487e6a5c1375f7dc__close-icon,._983740ab855c4e09__action-button:is(._8ddb8fb33fbf3d38__is-action-button-outline,._77bbde495a8a0af3__is-action-button-minimal){--wp-ui-button-background-color-active:color-mix(in srgb,transparent 50%,var(--wpds-color-background-interactive-neutral-weak-active,#ededed))}}}");
13386 }
13387 var style_default21 = { "notice": "_4145abab73d17514__notice", "icon": "d0a25570cb528528__icon", "title": "b5397fb9d05389e3__title", "description": "_1904b570a89bb815__description", "actions": "_0a1270dcdd79c031__actions", "action-button": "_983740ab855c4e09__action-button", "action-link": "d329e7416d368d31__action-link", "close-icon": "_487e6a5c1375f7dc__close-icon", "is-info": "_531c140826094795__is-info", "is-warning": "ae2e1004697cce95__is-warning", "is-success": "_2e614a76af494837__is-success", "is-error": "af00331ae17a0065__is-error", "is-action-button-outline": "_8ddb8fb33fbf3d38__is-action-button-outline", "is-action-button-minimal": "_77bbde495a8a0af3__is-action-button-minimal" };
13388 var CloseIcon = (0, import_element44.forwardRef)(
13389 function NoticeCloseIcon({ className, icon = close_small_default, label = (0, import_i18n6.__)("Dismiss"), ...props }, ref) {
13390 return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
13391 IconButton,
13392 {
13393 ...props,
13394 ref,
13395 className: clsx_default(style_default21["close-icon"], className),
13396 variant: "minimal",
13397 size: "small",
13398 tone: "neutral",
13399 icon,
13400 label
13401 }
13402 );
13403 }
13404 );
13405
13406 // packages/ui/build-module/notice/action-button.mjs
13407 var import_element45 = __toESM(require_element(), 1);
13408 var import_jsx_runtime61 = __toESM(require_jsx_runtime(), 1);
13409 var STYLE_HASH_ATTRIBUTE23 = "data-wp-hash";
13410 function getRuntime23() {
13411 const globalScope = globalThis;
13412 if (globalScope.__wpStyleRuntime) {
13413 return globalScope.__wpStyleRuntime;
13414 }
13415 globalScope.__wpStyleRuntime = {
13416 documents: /* @__PURE__ */ new Map(),
13417 styles: /* @__PURE__ */ new Map(),
13418 injectedStyles: /* @__PURE__ */ new WeakMap()
13419 };
13420 if (typeof document !== "undefined") {
13421 registerDocument23(document);
13422 }
13423 return globalScope.__wpStyleRuntime;
13424 }
13425 function documentContainsStyleHash23(targetDocument, hash) {
13426 if (!targetDocument.head) {
13427 return false;
13428 }
13429 for (const style of targetDocument.head.querySelectorAll(
13430 `style[${STYLE_HASH_ATTRIBUTE23}]`
13431 )) {
13432 if (style.getAttribute(STYLE_HASH_ATTRIBUTE23) === hash) {
13433 return true;
13434 }
13435 }
13436 return false;
13437 }
13438 function injectStyle23(targetDocument, hash, css) {
13439 if (!targetDocument.head) {
13440 return;
13441 }
13442 const runtime = getRuntime23();
13443 let injectedStyles = runtime.injectedStyles.get(targetDocument);
13444 if (!injectedStyles) {
13445 injectedStyles = /* @__PURE__ */ new Set();
13446 runtime.injectedStyles.set(targetDocument, injectedStyles);
13447 }
13448 if (injectedStyles.has(hash)) {
13449 return;
13450 }
13451 if (documentContainsStyleHash23(targetDocument, hash)) {
13452 injectedStyles.add(hash);
13453 return;
13454 }
13455 const style = targetDocument.createElement("style");
13456 style.setAttribute(STYLE_HASH_ATTRIBUTE23, hash);
13457 style.appendChild(targetDocument.createTextNode(css));
13458 targetDocument.head.appendChild(style);
13459 injectedStyles.add(hash);
13460 }
13461 function registerDocument23(targetDocument) {
13462 const runtime = getRuntime23();
13463 runtime.documents.set(
13464 targetDocument,
13465 (runtime.documents.get(targetDocument) ?? 0) + 1
13466 );
13467 for (const [hash, css] of runtime.styles) {
13468 injectStyle23(targetDocument, hash, css);
13469 }
13470 return () => {
13471 const count = runtime.documents.get(targetDocument);
13472 if (count === void 0) {
13473 return;
13474 }
13475 if (count <= 1) {
13476 runtime.documents.delete(targetDocument);
13477 return;
13478 }
13479 runtime.documents.set(targetDocument, count - 1);
13480 };
13481 }
13482 function registerStyle23(hash, css) {
13483 const runtime = getRuntime23();
13484 runtime.styles.set(hash, css);
13485 for (const targetDocument of runtime.documents.keys()) {
13486 injectStyle23(targetDocument, hash, css);
13487 }
13488 }
13489 if (typeof process === "undefined" || true) {
13490 registerStyle23("2e53930a41", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._4145abab73d17514__notice{--icon-height:var(--wpds-dimension-size-sm,24px);--text-vertical-padding:calc((var(--icon-height) - var(--wpds-typography-line-height-sm, 20px))/2);--wp-ui-notice-background-color:var(--wpds-color-background-surface-neutral-weak,#f4f4f4);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-neutral,#dbdbdb);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-neutral,#1e1e1e);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-neutral,#1e1e1e);align-items:start;background-color:var(--wp-ui-notice-background-color);border:1px solid var(--wp-ui-notice-border-color);border-radius:var(--wpds-border-radius-lg,8px);container-type:inline-size;display:grid;grid-template-columns:auto 1fr auto;padding:var(--wpds-dimension-padding-md,12px)}.d0a25570cb528528__icon{color:var(--wp-ui-notice-decorative-icon-color);grid-column:1;grid-row:1;margin-inline-end:var(--wpds-dimension-gap-xs,4px)}._1904b570a89bb815__description,.b5397fb9d05389e3__title{color:var(--wp-ui-notice-text-color);grid-column:2;padding-block:var(--text-vertical-padding)}._0a1270dcdd79c031__actions{display:flex;flex-wrap:wrap;gap:var(--wpds-dimension-gap-md,12px);grid-column:2}._4145abab73d17514__notice:has(._1904b570a89bb815__description) ._0a1270dcdd79c031__actions,._4145abab73d17514__notice:has(.b5397fb9d05389e3__title) ._0a1270dcdd79c031__actions{margin-block-start:var(--wpds-dimension-gap-sm,8px)}._983740ab855c4e09__action-button{flex-shrink:0}.d329e7416d368d31__action-link{flex-shrink:0;&:not(:first-child){margin-inline-start:var(--wpds-dimension-gap-xs,4px)}&:not(:last-child){margin-inline-end:var(--wpds-dimension-gap-xs,4px)}}._487e6a5c1375f7dc__close-icon{grid-column:3;grid-row:1;margin-inline-start:var(--wpds-dimension-gap-xs,4px)}._531c140826094795__is-info{--wp-ui-notice-background-color:var(--wpds-color-background-surface-info-weak,#f3f9ff);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-info,#adc6e2);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-info,#001b4f);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-info-weak,#006bd7)}.ae2e1004697cce95__is-warning{--wp-ui-notice-background-color:var(--wpds-color-background-surface-warning-weak,#fff7e1);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-warning,#e1bd7c);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-warning,#2e1900);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-warning-weak,#936300)}._2e614a76af494837__is-success{--wp-ui-notice-background-color:var(--wpds-color-background-surface-success-weak,#ebffed);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-success,#92d39d);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-success,#002900);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-success-weak,#008030)}.af00331ae17a0065__is-error{--wp-ui-notice-background-color:var(--wpds-color-background-surface-error-weak,#fff6f5);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-error,#e0afa7);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-error,#470000);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-error-weak,#cc1818)}@container (max-width: 320px){._4145abab73d17514__notice:has(.b5397fb9d05389e3__title) ._0a1270dcdd79c031__actions,._4145abab73d17514__notice:has(.b5397fb9d05389e3__title) ._1904b570a89bb815__description{grid-column:1/3}}}@layer compositions{.d329e7416d368d31__action-link{margin-block:auto}._487e6a5c1375f7dc__close-icon,._983740ab855c4e09__action-button:is(._8ddb8fb33fbf3d38__is-action-button-outline,._77bbde495a8a0af3__is-action-button-minimal){--wp-ui-button-background-color-active:color-mix(in srgb,transparent 50%,var(--wpds-color-background-interactive-neutral-weak-active,#ededed))}}}");
13491 }
13492 var style_default22 = { "notice": "_4145abab73d17514__notice", "icon": "d0a25570cb528528__icon", "title": "b5397fb9d05389e3__title", "description": "_1904b570a89bb815__description", "actions": "_0a1270dcdd79c031__actions", "action-button": "_983740ab855c4e09__action-button", "action-link": "d329e7416d368d31__action-link", "close-icon": "_487e6a5c1375f7dc__close-icon", "is-info": "_531c140826094795__is-info", "is-warning": "ae2e1004697cce95__is-warning", "is-success": "_2e614a76af494837__is-success", "is-error": "af00331ae17a0065__is-error", "is-action-button-outline": "_8ddb8fb33fbf3d38__is-action-button-outline", "is-action-button-minimal": "_77bbde495a8a0af3__is-action-button-minimal" };
13493 var ActionButton = (0, import_element45.forwardRef)(
13494 function NoticeActionButton({ className, loading, loadingAnnouncement, variant, ...props }, ref) {
13495 const loadingProps = loading !== void 0 ? { loading, loadingAnnouncement: loadingAnnouncement ?? "" } : {};
13496 return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
13497 Button6,
13498 {
13499 ...props,
13500 ...loadingProps,
13501 ref,
13502 size: "compact",
13503 tone: "neutral",
13504 variant,
13505 className: clsx_default(
13506 style_default22["action-button"],
13507 style_default22[`is-action-button-${variant}`],
13508 className
13509 )
13510 }
13511 );
13512 }
13513 );
13514
13515 // packages/ui/build-module/notice/action-link.mjs
13516 var import_element46 = __toESM(require_element(), 1);
13517 var import_jsx_runtime62 = __toESM(require_jsx_runtime(), 1);
13518 var STYLE_HASH_ATTRIBUTE24 = "data-wp-hash";
13519 function getRuntime24() {
13520 const globalScope = globalThis;
13521 if (globalScope.__wpStyleRuntime) {
13522 return globalScope.__wpStyleRuntime;
13523 }
13524 globalScope.__wpStyleRuntime = {
13525 documents: /* @__PURE__ */ new Map(),
13526 styles: /* @__PURE__ */ new Map(),
13527 injectedStyles: /* @__PURE__ */ new WeakMap()
13528 };
13529 if (typeof document !== "undefined") {
13530 registerDocument24(document);
13531 }
13532 return globalScope.__wpStyleRuntime;
13533 }
13534 function documentContainsStyleHash24(targetDocument, hash) {
13535 if (!targetDocument.head) {
13536 return false;
13537 }
13538 for (const style of targetDocument.head.querySelectorAll(
13539 `style[${STYLE_HASH_ATTRIBUTE24}]`
13540 )) {
13541 if (style.getAttribute(STYLE_HASH_ATTRIBUTE24) === hash) {
13542 return true;
13543 }
13544 }
13545 return false;
13546 }
13547 function injectStyle24(targetDocument, hash, css) {
13548 if (!targetDocument.head) {
13549 return;
13550 }
13551 const runtime = getRuntime24();
13552 let injectedStyles = runtime.injectedStyles.get(targetDocument);
13553 if (!injectedStyles) {
13554 injectedStyles = /* @__PURE__ */ new Set();
13555 runtime.injectedStyles.set(targetDocument, injectedStyles);
13556 }
13557 if (injectedStyles.has(hash)) {
13558 return;
13559 }
13560 if (documentContainsStyleHash24(targetDocument, hash)) {
13561 injectedStyles.add(hash);
13562 return;
13563 }
13564 const style = targetDocument.createElement("style");
13565 style.setAttribute(STYLE_HASH_ATTRIBUTE24, hash);
13566 style.appendChild(targetDocument.createTextNode(css));
13567 targetDocument.head.appendChild(style);
13568 injectedStyles.add(hash);
13569 }
13570 function registerDocument24(targetDocument) {
13571 const runtime = getRuntime24();
13572 runtime.documents.set(
13573 targetDocument,
13574 (runtime.documents.get(targetDocument) ?? 0) + 1
13575 );
13576 for (const [hash, css] of runtime.styles) {
13577 injectStyle24(targetDocument, hash, css);
13578 }
13579 return () => {
13580 const count = runtime.documents.get(targetDocument);
13581 if (count === void 0) {
13582 return;
13583 }
13584 if (count <= 1) {
13585 runtime.documents.delete(targetDocument);
13586 return;
13587 }
13588 runtime.documents.set(targetDocument, count - 1);
13589 };
13590 }
13591 function registerStyle24(hash, css) {
13592 const runtime = getRuntime24();
13593 runtime.styles.set(hash, css);
13594 for (const targetDocument of runtime.documents.keys()) {
13595 injectStyle24(targetDocument, hash, css);
13596 }
13597 }
13598 if (typeof process === "undefined" || true) {
13599 registerStyle24("2e53930a41", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._4145abab73d17514__notice{--icon-height:var(--wpds-dimension-size-sm,24px);--text-vertical-padding:calc((var(--icon-height) - var(--wpds-typography-line-height-sm, 20px))/2);--wp-ui-notice-background-color:var(--wpds-color-background-surface-neutral-weak,#f4f4f4);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-neutral,#dbdbdb);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-neutral,#1e1e1e);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-neutral,#1e1e1e);align-items:start;background-color:var(--wp-ui-notice-background-color);border:1px solid var(--wp-ui-notice-border-color);border-radius:var(--wpds-border-radius-lg,8px);container-type:inline-size;display:grid;grid-template-columns:auto 1fr auto;padding:var(--wpds-dimension-padding-md,12px)}.d0a25570cb528528__icon{color:var(--wp-ui-notice-decorative-icon-color);grid-column:1;grid-row:1;margin-inline-end:var(--wpds-dimension-gap-xs,4px)}._1904b570a89bb815__description,.b5397fb9d05389e3__title{color:var(--wp-ui-notice-text-color);grid-column:2;padding-block:var(--text-vertical-padding)}._0a1270dcdd79c031__actions{display:flex;flex-wrap:wrap;gap:var(--wpds-dimension-gap-md,12px);grid-column:2}._4145abab73d17514__notice:has(._1904b570a89bb815__description) ._0a1270dcdd79c031__actions,._4145abab73d17514__notice:has(.b5397fb9d05389e3__title) ._0a1270dcdd79c031__actions{margin-block-start:var(--wpds-dimension-gap-sm,8px)}._983740ab855c4e09__action-button{flex-shrink:0}.d329e7416d368d31__action-link{flex-shrink:0;&:not(:first-child){margin-inline-start:var(--wpds-dimension-gap-xs,4px)}&:not(:last-child){margin-inline-end:var(--wpds-dimension-gap-xs,4px)}}._487e6a5c1375f7dc__close-icon{grid-column:3;grid-row:1;margin-inline-start:var(--wpds-dimension-gap-xs,4px)}._531c140826094795__is-info{--wp-ui-notice-background-color:var(--wpds-color-background-surface-info-weak,#f3f9ff);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-info,#adc6e2);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-info,#001b4f);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-info-weak,#006bd7)}.ae2e1004697cce95__is-warning{--wp-ui-notice-background-color:var(--wpds-color-background-surface-warning-weak,#fff7e1);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-warning,#e1bd7c);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-warning,#2e1900);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-warning-weak,#936300)}._2e614a76af494837__is-success{--wp-ui-notice-background-color:var(--wpds-color-background-surface-success-weak,#ebffed);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-success,#92d39d);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-success,#002900);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-success-weak,#008030)}.af00331ae17a0065__is-error{--wp-ui-notice-background-color:var(--wpds-color-background-surface-error-weak,#fff6f5);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-error,#e0afa7);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-error,#470000);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-error-weak,#cc1818)}@container (max-width: 320px){._4145abab73d17514__notice:has(.b5397fb9d05389e3__title) ._0a1270dcdd79c031__actions,._4145abab73d17514__notice:has(.b5397fb9d05389e3__title) ._1904b570a89bb815__description{grid-column:1/3}}}@layer compositions{.d329e7416d368d31__action-link{margin-block:auto}._487e6a5c1375f7dc__close-icon,._983740ab855c4e09__action-button:is(._8ddb8fb33fbf3d38__is-action-button-outline,._77bbde495a8a0af3__is-action-button-minimal){--wp-ui-button-background-color-active:color-mix(in srgb,transparent 50%,var(--wpds-color-background-interactive-neutral-weak-active,#ededed))}}}");
13600 }
13601 var style_default23 = { "notice": "_4145abab73d17514__notice", "icon": "d0a25570cb528528__icon", "title": "b5397fb9d05389e3__title", "description": "_1904b570a89bb815__description", "actions": "_0a1270dcdd79c031__actions", "action-button": "_983740ab855c4e09__action-button", "action-link": "d329e7416d368d31__action-link", "close-icon": "_487e6a5c1375f7dc__close-icon", "is-info": "_531c140826094795__is-info", "is-warning": "ae2e1004697cce95__is-warning", "is-success": "_2e614a76af494837__is-success", "is-error": "af00331ae17a0065__is-error", "is-action-button-outline": "_8ddb8fb33fbf3d38__is-action-button-outline", "is-action-button-minimal": "_77bbde495a8a0af3__is-action-button-minimal" };
13602 var ActionLink = (0, import_element46.forwardRef)(
13603 function NoticeActionLink({ className, render, ...props }, ref) {
13604 return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
13605 Text,
13606 {
13607 ref,
13608 className: clsx_default(style_default23["action-link"], className),
13609 ...props,
13610 variant: "body-md",
13611 render: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(Link, { tone: "neutral", variant: "default", render })
13612 }
13613 );
13614 }
13615 );
13616
13617 // packages/admin-ui/build-module/navigable-region/index.mjs
13618 var import_element47 = __toESM(require_element(), 1);
13619 var import_jsx_runtime63 = __toESM(require_jsx_runtime(), 1);
13620 var NavigableRegion = (0, import_element47.forwardRef)(
13621 ({ children, className, ariaLabel, as: Tag = "div", ...props }, ref) => {
13622 return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
13623 Tag,
13624 {
13625 ref,
13626 className: clsx_default("admin-ui-navigable-region", className),
13627 "aria-label": ariaLabel,
13628 role: "region",
13629 tabIndex: "-1",
13630 ...props,
13631 children
13632 }
13633 );
13634 }
13635 );
13636 NavigableRegion.displayName = "NavigableRegion";
13637 var navigable_region_default = NavigableRegion;
13638
13639 // packages/admin-ui/build-module/admin-theme-colors/index.mjs
13640 var DEFAULT_THEME_COLORS = {
13641 primary: "#3858e9",
13642 background: "#222524"
13643 };
13644 var ADMIN_THEME_COLORS = /* @__PURE__ */ new Map([
13645 ["modern", DEFAULT_THEME_COLORS],
13646 ["fresh", { primary: "#007cba", background: "#25292b" }],
13647 ["midnight", { primary: "#cf4339", background: "#3d4042" }],
13648 ["coffee", { primary: "#916745", background: "#5b534d" }],
13649 ["ocean", { primary: "#567958", background: "#5f787f" }],
13650 ["blue", { primary: "#437aa8", background: "#3876a8" }],
13651 ["ectoplasm", { primary: "#646c3e", background: "#4f386e" }],
13652 ["sunrise", { primary: "#ad631e", background: "#cc4541" }],
13653 ["light", { primary: "#007cba", background: "#eaeeed" }]
13654 ]);
13655 function getAdminThemeColors() {
13656 const scheme = document.body.className.match(/admin-color-([\w-]+)/)?.[1] ?? "modern";
13657 return ADMIN_THEME_COLORS.get(scheme) ?? DEFAULT_THEME_COLORS;
13658 }
13659
13660 // packages/interface/build-module/components/interface-skeleton/index.mjs
13661 var import_element48 = __toESM(require_element(), 1);
13662 var import_components5 = __toESM(require_components(), 1);
13663 var import_i18n7 = __toESM(require_i18n(), 1);
13664 var import_compose4 = __toESM(require_compose(), 1);
13665 var import_jsx_runtime64 = __toESM(require_jsx_runtime(), 1);
13666 var ANIMATION_DURATION2 = 0.25;
13667 var commonTransition = {
13668 type: "tween",
13669 duration: ANIMATION_DURATION2,
13670 ease: [0.6, 0, 0.4, 1]
13671 };
13672 function useHTMLClass(className) {
13673 (0, import_element48.useEffect)(() => {
13674 const element = document && document.querySelector(`html:not(.${className})`);
13675 if (!element) {
13676 return;
13677 }
13678 element.classList.toggle(className);
13679 return () => {
13680 element.classList.toggle(className);
13681 };
13682 }, [className]);
13683 }
13684 var headerVariants = {
13685 hidden: { opacity: 1, marginTop: -60 },
13686 visible: { opacity: 1, marginTop: 0 },
13687 distractionFreeHover: {
13688 opacity: 1,
13689 marginTop: 0,
13690 transition: {
13691 ...commonTransition,
13692 delay: 0.2,
13693 delayChildren: 0.2
13694 }
13695 },
13696 distractionFreeHidden: {
13697 opacity: 0,
13698 marginTop: -60
13699 },
13700 distractionFreeDisabled: {
13701 opacity: 0,
13702 marginTop: 0,
13703 transition: {
13704 ...commonTransition,
13705 delay: 0.8,
13706 delayChildren: 0.8
13707 }
13708 }
13709 };
13710 function InterfaceSkeleton({
13711 isDistractionFree,
13712 footer,
13713 header,
13714 editorNotices,
13715 sidebar,
13716 secondarySidebar,
13717 content,
13718 actions,
13719 labels,
13720 className
13721 }, ref) {
13722 const isMobileViewport = (0, import_compose4.useViewportMatch)("medium", "<");
13723 const disableMotion = (0, import_compose4.useReducedMotion)();
13724 const defaultTransition = {
13725 type: "tween",
13726 duration: disableMotion ? 0 : ANIMATION_DURATION2,
13727 ease: [0.6, 0, 0.4, 1]
13728 };
13729 useHTMLClass("interface-interface-skeleton__html-container");
13730 const defaultLabels = {
13731 /* translators: accessibility text for the top bar landmark region. */
13732 header: (0, import_i18n7._x)("Header", "header landmark area"),
13733 /* translators: accessibility text for the content landmark region. */
13734 body: (0, import_i18n7.__)("Content"),
13735 /* translators: accessibility text for the secondary sidebar landmark region. */
13736 secondarySidebar: (0, import_i18n7.__)("Block Library"),
13737 /* translators: accessibility text for the settings landmark region. */
13738 sidebar: (0, import_i18n7._x)("Settings", "settings landmark area"),
13739 /* translators: accessibility text for the publish landmark region. */
13740 actions: (0, import_i18n7.__)("Publish"),
13741 /* translators: accessibility text for the footer landmark region. */
13742 footer: (0, import_i18n7.__)("Footer")
13743 };
13744 const mergedLabels = { ...defaultLabels, ...labels };
13745 return /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)(
13746 "div",
13747 {
13748 ref,
13749 className: clsx_default(
13750 className,
13751 "interface-interface-skeleton",
13752 !!footer && "has-footer"
13753 ),
13754 children: [
13755 /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)("div", { className: "interface-interface-skeleton__editor", children: [
13756 /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(import_components5.__unstableAnimatePresence, { initial: false, children: !!header && /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
13757 navigable_region_default,
13758 {
13759 as: import_components5.__unstableMotion.div,
13760 className: "interface-interface-skeleton__header",
13761 ariaLabel: mergedLabels.header,
13762 initial: isDistractionFree && !isMobileViewport ? "distractionFreeHidden" : "hidden",
13763 whileHover: isDistractionFree && !isMobileViewport ? "distractionFreeHover" : "visible",
13764 animate: isDistractionFree && !isMobileViewport ? "distractionFreeDisabled" : "visible",
13765 exit: isDistractionFree && !isMobileViewport ? "distractionFreeHidden" : "hidden",
13766 variants: headerVariants,
13767 transition: defaultTransition,
13768 children: header
13769 }
13770 ) }),
13771 isDistractionFree && /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("div", { className: "interface-interface-skeleton__header", children: editorNotices }),
13772 /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)("div", { className: "interface-interface-skeleton__body", children: [
13773 /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(import_components5.__unstableAnimatePresence, { initial: false, children: !!secondarySidebar && /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
13774 navigable_region_default,
13775 {
13776 className: "interface-interface-skeleton__secondary-sidebar",
13777 ariaLabel: mergedLabels.secondarySidebar,
13778 as: import_components5.__unstableMotion.div,
13779 initial: "closed",
13780 animate: "open",
13781 exit: "closed",
13782 variants: {
13783 open: { width: "auto" },
13784 closed: { width: 0 }
13785 },
13786 transition: defaultTransition,
13787 children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
13788 import_components5.__unstableMotion.div,
13789 {
13790 style: {
13791 width: isMobileViewport ? "100vw" : "max-content",
13792 height: "100%"
13793 },
13794 variants: {
13795 open: { x: 0 },
13796 closed: { x: "-100%" }
13797 },
13798 transition: defaultTransition,
13799 children: secondarySidebar
13800 }
13801 )
13802 }
13803 ) }),
13804 /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
13805 navigable_region_default,
13806 {
13807 className: "interface-interface-skeleton__content",
13808 ariaLabel: mergedLabels.body,
13809 children: content
13810 }
13811 ),
13812 !!sidebar && /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
13813 navigable_region_default,
13814 {
13815 className: "interface-interface-skeleton__sidebar",
13816 ariaLabel: mergedLabels.sidebar,
13817 children: sidebar
13818 }
13819 ),
13820 !!actions && /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
13821 navigable_region_default,
13822 {
13823 className: "interface-interface-skeleton__actions",
13824 ariaLabel: mergedLabels.actions,
13825 children: actions
13826 }
13827 )
13828 ] })
13829 ] }),
13830 !!footer && /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
13831 navigable_region_default,
13832 {
13833 className: "interface-interface-skeleton__footer",
13834 ariaLabel: mergedLabels.footer,
13835 children: footer
13836 }
13837 )
13838 ]
13839 }
13840 );
13841 }
13842 var interface_skeleton_default = (0, import_element48.forwardRef)(InterfaceSkeleton);
13843
13844 // packages/edit-widgets/build-module/store/actions.mjs
13845 var import_widgets2 = __toESM(require_widgets(), 1);
13846 var import_core_data = __toESM(require_core_data(), 1);
13847 var import_block_editor = __toESM(require_block_editor(), 1);
13848
13849 // packages/edit-widgets/build-module/store/transformers.mjs
13850 var import_blocks = __toESM(require_blocks(), 1);
13851 var import_widgets = __toESM(require_widgets(), 1);
13852 function transformWidgetToBlock(widget) {
13853 if (widget.id_base === "block") {
13854 const parsedBlocks = (0, import_blocks.parse)(widget.instance.raw.content, {
13855 __unstableSkipAutop: true
13856 });
13857 if (!parsedBlocks.length) {
13858 return (0, import_widgets.addWidgetIdToBlock)(
13859 (0, import_blocks.createBlock)("core/paragraph", {}, []),
13860 widget.id
13861 );
13862 }
13863 return (0, import_widgets.addWidgetIdToBlock)(parsedBlocks[0], widget.id);
13864 }
13865 let attributes;
13866 if (widget._embedded.about[0].is_multi) {
13867 attributes = {
13868 idBase: widget.id_base,
13869 instance: widget.instance
13870 };
13871 } else {
13872 attributes = {
13873 id: widget.id
13874 };
13875 }
13876 return (0, import_widgets.addWidgetIdToBlock)(
13877 (0, import_blocks.createBlock)("core/legacy-widget", attributes, []),
13878 widget.id
13879 );
13880 }
13881 function transformBlockToWidget(block, relatedWidget = {}) {
13882 let widget;
13883 const isValidLegacyWidgetBlock = block.name === "core/legacy-widget" && (block.attributes.id || block.attributes.instance);
13884 if (isValidLegacyWidgetBlock) {
13885 widget = {
13886 ...relatedWidget,
13887 id: block.attributes.id ?? relatedWidget.id,
13888 id_base: block.attributes.idBase ?? relatedWidget.id_base,
13889 instance: block.attributes.instance ?? relatedWidget.instance
13890 };
13891 } else {
13892 widget = {
13893 ...relatedWidget,
13894 id_base: "block",
13895 instance: {
13896 raw: {
13897 content: (0, import_blocks.serialize)(block)
13898 }
13899 }
13900 };
13901 }
13902 delete widget.rendered;
13903 delete widget.rendered_form;
13904 return widget;
13905 }
13906
13907 // packages/edit-widgets/build-module/store/utils.mjs
13908 var KIND = "root";
13909 var WIDGET_AREA_ENTITY_TYPE = "sidebar";
13910 var POST_TYPE = "postType";
13911 var buildWidgetAreaPostId = (widgetAreaId) => `widget-area-${widgetAreaId}`;
13912 var buildWidgetAreasPostId = () => `widget-areas`;
13913 function buildWidgetAreasQuery() {
13914 return {
13915 per_page: -1
13916 };
13917 }
13918 function buildWidgetsQuery() {
13919 return {
13920 per_page: -1,
13921 _embed: "about"
13922 };
13923 }
13924 var createStubPost = (id, blocks) => ({
13925 id,
13926 slug: id,
13927 status: "draft",
13928 type: "page",
13929 blocks,
13930 meta: {
13931 widgetAreaId: id
13932 }
13933 });
13934
13935 // packages/edit-widgets/build-module/store/constants.mjs
13936 var STORE_NAME2 = "core/edit-widgets";
13937
13938 // packages/edit-widgets/build-module/store/actions.mjs
13939 var persistStubPost = (id, blocks) => ({ registry }) => {
13940 const stubPost = createStubPost(id, blocks);
13941 registry.dispatch(import_core_data.store).receiveEntityRecords(
13942 KIND,
13943 POST_TYPE,
13944 stubPost,
13945 { id: stubPost.id },
13946 false
13947 );
13948 return stubPost;
13949 };
13950 var saveEditedWidgetAreas = () => async ({ select, dispatch: dispatch2, registry }) => {
13951 const editedWidgetAreas = select.getEditedWidgetAreas();
13952 if (!editedWidgetAreas?.length) {
13953 return;
13954 }
13955 try {
13956 await dispatch2.saveWidgetAreas(editedWidgetAreas);
13957 registry.dispatch(import_notices.store).createSuccessNotice((0, import_i18n8.__)("Widgets saved."), {
13958 type: "snackbar"
13959 });
13960 } catch (e) {
13961 registry.dispatch(import_notices.store).createErrorNotice(
13962 /* translators: %s: The error message. */
13963 (0, import_i18n8.sprintf)((0, import_i18n8.__)("There was an error. %s"), e.message),
13964 {
13965 type: "snackbar"
13966 }
13967 );
13968 }
13969 };
13970 var saveWidgetAreas = (widgetAreas) => async ({ dispatch: dispatch2, registry }) => {
13971 try {
13972 for (const widgetArea of widgetAreas) {
13973 await dispatch2.saveWidgetArea(widgetArea.id);
13974 }
13975 } finally {
13976 await registry.dispatch(import_core_data.store).finishResolution(
13977 "getEntityRecord",
13978 KIND,
13979 WIDGET_AREA_ENTITY_TYPE,
13980 buildWidgetAreasQuery()
13981 );
13982 }
13983 };
13984 var saveWidgetArea = (widgetAreaId) => async ({ dispatch: dispatch2, select, registry }) => {
13985 const widgets = select.getWidgets();
13986 const post = registry.select(import_core_data.store).getEditedEntityRecord(
13987 KIND,
13988 POST_TYPE,
13989 buildWidgetAreaPostId(widgetAreaId)
13990 );
13991 const areaWidgets = Object.values(widgets).filter(
13992 ({ sidebar }) => sidebar === widgetAreaId
13993 );
13994 const usedReferenceWidgets = [];
13995 const widgetsBlocks = post.blocks.filter((block) => {
13996 const { id } = block.attributes;
13997 if (block.name === "core/legacy-widget" && id) {
13998 if (usedReferenceWidgets.includes(id)) {
13999 return false;
14000 }
14001 usedReferenceWidgets.push(id);
14002 }
14003 return true;
14004 });
14005 const deletedWidgets = [];
14006 for (const widget of areaWidgets) {
14007 const widgetsNewArea = select.getWidgetAreaForWidgetId(widget.id);
14008 if (!widgetsNewArea) {
14009 deletedWidgets.push(widget);
14010 }
14011 }
14012 const batchMeta = [];
14013 const batchTasks = [];
14014 const sidebarWidgetsIds = [];
14015 for (let i = 0; i < widgetsBlocks.length; i++) {
14016 const block = widgetsBlocks[i];
14017 const widgetId = (0, import_widgets2.getWidgetIdFromBlock)(block);
14018 const oldWidget = widgets[widgetId];
14019 const widget = transformBlockToWidget(block, oldWidget);
14020 sidebarWidgetsIds.push(widgetId);
14021 if (oldWidget) {
14022 registry.dispatch(import_core_data.store).editEntityRecord(
14023 "root",
14024 "widget",
14025 widgetId,
14026 {
14027 ...widget,
14028 sidebar: widgetAreaId
14029 },
14030 { undoIgnore: true }
14031 );
14032 const hasEdits = registry.select(import_core_data.store).hasEditsForEntityRecord("root", "widget", widgetId);
14033 if (!hasEdits) {
14034 continue;
14035 }
14036 batchTasks.push(
14037 ({ saveEditedEntityRecord }) => saveEditedEntityRecord("root", "widget", widgetId)
14038 );
14039 } else {
14040 batchTasks.push(
14041 ({ saveEntityRecord }) => saveEntityRecord("root", "widget", {
14042 ...widget,
14043 sidebar: widgetAreaId
14044 })
14045 );
14046 }
14047 batchMeta.push({
14048 block,
14049 position: i,
14050 clientId: block.clientId
14051 });
14052 }
14053 for (const widget of deletedWidgets) {
14054 batchTasks.push(
14055 ({ deleteEntityRecord }) => deleteEntityRecord("root", "widget", widget.id, {
14056 force: true
14057 })
14058 );
14059 }
14060 const records = await registry.dispatch(import_core_data.store).__experimentalBatch(batchTasks);
14061 const preservedRecords = records.filter(
14062 (record) => !record.hasOwnProperty("deleted")
14063 );
14064 const failedWidgetNames = [];
14065 for (let i = 0; i < preservedRecords.length; i++) {
14066 const widget = preservedRecords[i];
14067 const { block, position } = batchMeta[i];
14068 post.blocks[position].attributes.__internalWidgetId = widget.id;
14069 const error2 = registry.select(import_core_data.store).getLastEntitySaveError("root", "widget", widget.id);
14070 if (error2) {
14071 failedWidgetNames.push(block.attributes?.name || block?.name);
14072 }
14073 if (!sidebarWidgetsIds[position]) {
14074 sidebarWidgetsIds[position] = widget.id;
14075 }
14076 }
14077 if (failedWidgetNames.length) {
14078 throw new Error(
14079 (0, import_i18n8.sprintf)(
14080 /* translators: %s: List of widget names */
14081 (0, import_i18n8.__)("Could not save the following widgets: %s."),
14082 failedWidgetNames.join(", ")
14083 )
14084 );
14085 }
14086 registry.dispatch(import_core_data.store).editEntityRecord(
14087 KIND,
14088 WIDGET_AREA_ENTITY_TYPE,
14089 widgetAreaId,
14090 {
14091 widgets: sidebarWidgetsIds
14092 },
14093 { undoIgnore: true }
14094 );
14095 dispatch2(trySaveWidgetArea(widgetAreaId));
14096 registry.dispatch(import_core_data.store).receiveEntityRecords(KIND, POST_TYPE, post, void 0);
14097 };
14098 var trySaveWidgetArea = (widgetAreaId) => ({ registry }) => {
14099 registry.dispatch(import_core_data.store).saveEditedEntityRecord(
14100 KIND,
14101 WIDGET_AREA_ENTITY_TYPE,
14102 widgetAreaId,
14103 {
14104 throwOnError: true
14105 }
14106 );
14107 };
14108 function setWidgetIdForClientId(clientId, widgetId) {
14109 return {
14110 type: "SET_WIDGET_ID_FOR_CLIENT_ID",
14111 clientId,
14112 widgetId
14113 };
14114 }
14115 function setWidgetAreasOpenState(widgetAreasOpenState2) {
14116 return {
14117 type: "SET_WIDGET_AREAS_OPEN_STATE",
14118 widgetAreasOpenState: widgetAreasOpenState2
14119 };
14120 }
14121 function setIsWidgetAreaOpen(clientId, isOpen) {
14122 return {
14123 type: "SET_IS_WIDGET_AREA_OPEN",
14124 clientId,
14125 isOpen
14126 };
14127 }
14128 function setIsInserterOpened(value) {
14129 return {
14130 type: "SET_IS_INSERTER_OPENED",
14131 value
14132 };
14133 }
14134 function setIsListViewOpened(isOpen) {
14135 return {
14136 type: "SET_IS_LIST_VIEW_OPENED",
14137 isOpen
14138 };
14139 }
14140 var closeGeneralSidebar = () => ({ registry }) => {
14141 registry.dispatch(store).disableComplementaryArea(STORE_NAME2);
14142 };
14143 var moveBlockToWidgetArea = (clientId, widgetAreaId) => async ({ dispatch: dispatch2, select, registry }) => {
14144 const sourceRootClientId = registry.select(import_block_editor.store).getBlockRootClientId(clientId);
14145 const widgetAreas = registry.select(import_block_editor.store).getBlocks();
14146 const destinationWidgetAreaBlock = widgetAreas.find(
14147 ({ attributes }) => attributes.id === widgetAreaId
14148 );
14149 const destinationRootClientId = destinationWidgetAreaBlock.clientId;
14150 const destinationInnerBlocksClientIds = registry.select(import_block_editor.store).getBlockOrder(destinationRootClientId);
14151 const destinationIndex = destinationInnerBlocksClientIds.length;
14152 const isDestinationWidgetAreaOpen = select.getIsWidgetAreaOpen(
14153 destinationRootClientId
14154 );
14155 if (!isDestinationWidgetAreaOpen) {
14156 dispatch2.setIsWidgetAreaOpen(destinationRootClientId, true);
14157 }
14158 registry.dispatch(import_block_editor.store).moveBlocksToPosition(
14159 [clientId],
14160 sourceRootClientId,
14161 destinationRootClientId,
14162 destinationIndex
14163 );
14164 };
14165 function unlockWidgetSaving(lockName) {
14166 return {
14167 type: "UNLOCK_WIDGET_SAVING",
14168 lockName
14169 };
14170 }
14171 function lockWidgetSaving(lockName) {
14172 return {
14173 type: "LOCK_WIDGET_SAVING",
14174 lockName
14175 };
14176 }
14177
14178 // packages/edit-widgets/build-module/store/resolvers.mjs
14179 var getWidgetAreas = () => async ({ dispatch: dispatch2, registry }) => {
14180 const query = buildWidgetAreasQuery();
14181 const widgetAreas = await registry.resolveSelect(import_core_data2.store).getEntityRecords(KIND, WIDGET_AREA_ENTITY_TYPE, query);
14182 const widgetAreaBlocks = [];
14183 const sortedWidgetAreas = widgetAreas.sort((a, b) => {
14184 if (a.id === "wp_inactive_widgets") {
14185 return 1;
14186 }
14187 if (b.id === "wp_inactive_widgets") {
14188 return -1;
14189 }
14190 return 0;
14191 });
14192 for (const widgetArea of sortedWidgetAreas) {
14193 widgetAreaBlocks.push(
14194 (0, import_blocks2.createBlock)("core/widget-area", {
14195 id: widgetArea.id,
14196 name: widgetArea.name
14197 })
14198 );
14199 if (!widgetArea.widgets.length) {
14200 dispatch2(
14201 persistStubPost(
14202 buildWidgetAreaPostId(widgetArea.id),
14203 []
14204 )
14205 );
14206 }
14207 }
14208 const widgetAreasOpenState2 = {};
14209 widgetAreaBlocks.forEach((widgetAreaBlock, index2) => {
14210 widgetAreasOpenState2[widgetAreaBlock.clientId] = index2 === 0;
14211 });
14212 dispatch2(setWidgetAreasOpenState(widgetAreasOpenState2));
14213 dispatch2(
14214 persistStubPost(buildWidgetAreasPostId(), widgetAreaBlocks)
14215 );
14216 };
14217 var getWidgets = () => async ({ dispatch: dispatch2, registry }) => {
14218 const query = buildWidgetsQuery();
14219 const widgets = await registry.resolveSelect(import_core_data2.store).getEntityRecords("root", "widget", query);
14220 const groupedBySidebar = {};
14221 for (const widget of widgets) {
14222 const block = transformWidgetToBlock(widget);
14223 groupedBySidebar[widget.sidebar] = groupedBySidebar[widget.sidebar] || [];
14224 groupedBySidebar[widget.sidebar].push(block);
14225 }
14226 for (const sidebarId in groupedBySidebar) {
14227 if (groupedBySidebar.hasOwnProperty(sidebarId)) {
14228 dispatch2(
14229 persistStubPost(
14230 buildWidgetAreaPostId(sidebarId),
14231 groupedBySidebar[sidebarId]
14232 )
14233 );
14234 }
14235 }
14236 };
14237
14238 // packages/edit-widgets/build-module/store/selectors.mjs
14239 var selectors_exports2 = {};
14240 __export(selectors_exports2, {
14241 __experimentalGetInsertionPoint: () => __experimentalGetInsertionPoint,
14242 canInsertBlockInWidgetArea: () => canInsertBlockInWidgetArea,
14243 getEditedWidgetAreas: () => getEditedWidgetAreas,
14244 getIsWidgetAreaOpen: () => getIsWidgetAreaOpen,
14245 getParentWidgetAreaBlock: () => getParentWidgetAreaBlock,
14246 getReferenceWidgetBlocks: () => getReferenceWidgetBlocks,
14247 getWidget: () => getWidget,
14248 getWidgetAreaForWidgetId: () => getWidgetAreaForWidgetId,
14249 getWidgetAreas: () => getWidgetAreas2,
14250 getWidgets: () => getWidgets2,
14251 isInserterOpened: () => isInserterOpened,
14252 isListViewOpened: () => isListViewOpened,
14253 isSavingWidgetAreas: () => isSavingWidgetAreas,
14254 isWidgetSavingLocked: () => isWidgetSavingLocked
14255 });
14256 var import_data7 = __toESM(require_data(), 1);
14257 var import_widgets3 = __toESM(require_widgets(), 1);
14258 var import_core_data3 = __toESM(require_core_data(), 1);
14259 var import_block_editor2 = __toESM(require_block_editor(), 1);
14260 var EMPTY_INSERTION_POINT = {
14261 rootClientId: void 0,
14262 insertionIndex: void 0
14263 };
14264 var getWidgets2 = (0, import_data7.createRegistrySelector)(
14265 (select) => (0, import_data7.createSelector)(
14266 () => {
14267 const widgets = select(import_core_data3.store).getEntityRecords(
14268 "root",
14269 "widget",
14270 buildWidgetsQuery()
14271 );
14272 return (
14273 // Key widgets by their ID.
14274 widgets?.reduce(
14275 (allWidgets, widget) => ({
14276 ...allWidgets,
14277 [widget.id]: widget
14278 }),
14279 {}
14280 ) ?? {}
14281 );
14282 },
14283 () => [
14284 select(import_core_data3.store).getEntityRecords(
14285 "root",
14286 "widget",
14287 buildWidgetsQuery()
14288 )
14289 ]
14290 )
14291 );
14292 var getWidget = (0, import_data7.createRegistrySelector)(
14293 (select) => (state, id) => {
14294 const widgets = select(STORE_NAME2).getWidgets();
14295 return widgets[id];
14296 }
14297 );
14298 var getWidgetAreas2 = (0, import_data7.createRegistrySelector)((select) => () => {
14299 const query = buildWidgetAreasQuery();
14300 return select(import_core_data3.store).getEntityRecords(
14301 KIND,
14302 WIDGET_AREA_ENTITY_TYPE,
14303 query
14304 );
14305 });
14306 var getWidgetAreaForWidgetId = (0, import_data7.createRegistrySelector)(
14307 (select) => (state, widgetId) => {
14308 const widgetAreas = select(STORE_NAME2).getWidgetAreas();
14309 return widgetAreas.find((widgetArea) => {
14310 const post = select(import_core_data3.store).getEditedEntityRecord(
14311 KIND,
14312 POST_TYPE,
14313 buildWidgetAreaPostId(widgetArea.id)
14314 );
14315 const blockWidgetIds = post.blocks.map(
14316 (block) => (0, import_widgets3.getWidgetIdFromBlock)(block)
14317 );
14318 return blockWidgetIds.includes(widgetId);
14319 });
14320 }
14321 );
14322 var getParentWidgetAreaBlock = (0, import_data7.createRegistrySelector)(
14323 (select) => (state, clientId) => {
14324 const { getBlock, getBlockName, getBlockParents } = select(import_block_editor2.store);
14325 const blockParents = getBlockParents(clientId);
14326 const widgetAreaClientId = blockParents.find(
14327 (parentClientId) => getBlockName(parentClientId) === "core/widget-area"
14328 );
14329 return getBlock(widgetAreaClientId);
14330 }
14331 );
14332 var getEditedWidgetAreas = (0, import_data7.createRegistrySelector)(
14333 (select) => (state, ids) => {
14334 let widgetAreas = select(STORE_NAME2).getWidgetAreas();
14335 if (!widgetAreas) {
14336 return [];
14337 }
14338 if (ids) {
14339 widgetAreas = widgetAreas.filter(
14340 ({ id }) => ids.includes(id)
14341 );
14342 }
14343 return widgetAreas.filter(
14344 ({ id }) => select(import_core_data3.store).hasEditsForEntityRecord(
14345 KIND,
14346 POST_TYPE,
14347 buildWidgetAreaPostId(id)
14348 )
14349 ).map(
14350 ({ id }) => select(import_core_data3.store).getEditedEntityRecord(
14351 KIND,
14352 WIDGET_AREA_ENTITY_TYPE,
14353 id
14354 )
14355 );
14356 }
14357 );
14358 var getReferenceWidgetBlocks = (0, import_data7.createRegistrySelector)(
14359 (select) => (state, referenceWidgetName = null) => {
14360 const results = [];
14361 const widgetAreas = select(STORE_NAME2).getWidgetAreas();
14362 for (const _widgetArea of widgetAreas) {
14363 const post = select(import_core_data3.store).getEditedEntityRecord(
14364 KIND,
14365 POST_TYPE,
14366 buildWidgetAreaPostId(_widgetArea.id)
14367 );
14368 for (const block of post.blocks) {
14369 if (block.name === "core/legacy-widget" && (!referenceWidgetName || block.attributes?.referenceWidgetName === referenceWidgetName)) {
14370 results.push(block);
14371 }
14372 }
14373 }
14374 return results;
14375 }
14376 );
14377 var isSavingWidgetAreas = (0, import_data7.createRegistrySelector)((select) => () => {
14378 const widgetAreasIds = select(STORE_NAME2).getWidgetAreas()?.map(({ id }) => id);
14379 if (!widgetAreasIds) {
14380 return false;
14381 }
14382 for (const id of widgetAreasIds) {
14383 const isSaving = select(import_core_data3.store).isSavingEntityRecord(
14384 KIND,
14385 WIDGET_AREA_ENTITY_TYPE,
14386 id
14387 );
14388 if (isSaving) {
14389 return true;
14390 }
14391 }
14392 const widgetIds = [
14393 ...Object.keys(select(STORE_NAME2).getWidgets()),
14394 void 0
14395 // account for new widgets without an ID
14396 ];
14397 for (const id of widgetIds) {
14398 const isSaving = select(import_core_data3.store).isSavingEntityRecord(
14399 "root",
14400 "widget",
14401 id
14402 );
14403 if (isSaving) {
14404 return true;
14405 }
14406 }
14407 return false;
14408 });
14409 var getIsWidgetAreaOpen = (state, clientId) => {
14410 const { widgetAreasOpenState: widgetAreasOpenState2 } = state;
14411 return !!widgetAreasOpenState2[clientId];
14412 };
14413 function isInserterOpened(state) {
14414 return !!state.blockInserterPanel;
14415 }
14416 function __experimentalGetInsertionPoint(state) {
14417 if (typeof state.blockInserterPanel === "boolean") {
14418 return EMPTY_INSERTION_POINT;
14419 }
14420 return state.blockInserterPanel;
14421 }
14422 var canInsertBlockInWidgetArea = (0, import_data7.createRegistrySelector)(
14423 (select) => (state, blockName) => {
14424 const widgetAreas = select(import_block_editor2.store).getBlocks();
14425 const [firstWidgetArea] = widgetAreas;
14426 if (!firstWidgetArea) {
14427 return false;
14428 }
14429 return select(import_block_editor2.store).canInsertBlockType(
14430 blockName,
14431 firstWidgetArea.clientId
14432 );
14433 }
14434 );
14435 function isListViewOpened(state) {
14436 return state.listViewPanel;
14437 }
14438 function isWidgetSavingLocked(state) {
14439 return Object.keys(state.widgetSavingLock).length > 0;
14440 }
14441
14442 // packages/edit-widgets/build-module/store/private-selectors.mjs
14443 var private_selectors_exports = {};
14444 __export(private_selectors_exports, {
14445 getInserterSidebarToggleRef: () => getInserterSidebarToggleRef,
14446 getListViewToggleRef: () => getListViewToggleRef
14447 });
14448 function getListViewToggleRef(state) {
14449 return state.listViewToggleRef;
14450 }
14451 function getInserterSidebarToggleRef(state) {
14452 return state.inserterSidebarToggleRef;
14453 }
14454
14455 // packages/edit-widgets/build-module/lock-unlock.mjs
14456 var import_private_apis2 = __toESM(require_private_apis(), 1);
14457 var { lock: lock2, unlock: unlock2 } = (0, import_private_apis2.__dangerousOptInToUnstableAPIsOnlyForCoreModules)(
14458 "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.",
14459 "@wordpress/edit-widgets"
14460 );
14461
14462 // packages/edit-widgets/build-module/store/index.mjs
14463 var storeConfig = {
14464 reducer: reducer_default,
14465 selectors: selectors_exports2,
14466 resolvers: resolvers_exports,
14467 actions: actions_exports2
14468 };
14469 var store2 = (0, import_data8.createReduxStore)(STORE_NAME2, storeConfig);
14470 (0, import_data8.register)(store2);
14471 import_api_fetch.default.use(function(options, next) {
14472 if (options.path?.indexOf("/wp/v2/types/widget-area") === 0) {
14473 return Promise.resolve({});
14474 }
14475 return next(options);
14476 });
14477 unlock2(store2).registerPrivateSelectors(private_selectors_exports);
14478
14479 // packages/edit-widgets/build-module/filters/move-to-widget-area.mjs
14480 var import_block_editor3 = __toESM(require_block_editor(), 1);
14481 var import_compose5 = __toESM(require_compose(), 1);
14482 var import_data9 = __toESM(require_data(), 1);
14483 var import_hooks = __toESM(require_hooks(), 1);
14484 var import_widgets4 = __toESM(require_widgets(), 1);
14485 var import_jsx_runtime65 = __toESM(require_jsx_runtime(), 1);
14486 var withMoveToWidgetAreaToolbarItem = (0, import_compose5.createHigherOrderComponent)(
14487 (BlockEdit) => (props) => {
14488 const { clientId, name: blockName } = props;
14489 const { widgetAreas, currentWidgetAreaId, canInsertBlockInWidgetArea: canInsertBlockInWidgetArea2 } = (0, import_data9.useSelect)(
14490 (select) => {
14491 if (blockName === "core/widget-area") {
14492 return {};
14493 }
14494 const selectors3 = select(store2);
14495 const widgetAreaBlock = selectors3.getParentWidgetAreaBlock(clientId);
14496 return {
14497 widgetAreas: selectors3.getWidgetAreas(),
14498 currentWidgetAreaId: widgetAreaBlock?.attributes?.id,
14499 canInsertBlockInWidgetArea: selectors3.canInsertBlockInWidgetArea(blockName)
14500 };
14501 },
14502 [clientId, blockName]
14503 );
14504 const { moveBlockToWidgetArea: moveBlockToWidgetArea2 } = (0, import_data9.useDispatch)(store2);
14505 const hasMultipleWidgetAreas = widgetAreas?.length > 1;
14506 const isMoveToWidgetAreaVisible = blockName !== "core/widget-area" && hasMultipleWidgetAreas && canInsertBlockInWidgetArea2;
14507 return /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(import_jsx_runtime65.Fragment, { children: [
14508 /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(BlockEdit, { ...props }, "edit"),
14509 isMoveToWidgetAreaVisible && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(import_block_editor3.BlockControls, { children: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
14510 import_widgets4.MoveToWidgetArea,
14511 {
14512 widgetAreas,
14513 currentWidgetAreaId,
14514 onSelect: (widgetAreaId) => {
14515 moveBlockToWidgetArea2(
14516 props.clientId,
14517 widgetAreaId
14518 );
14519 }
14520 }
14521 ) })
14522 ] });
14523 },
14524 "withMoveToWidgetAreaToolbarItem"
14525 );
14526 (0, import_hooks.addFilter)(
14527 "editor.BlockEdit",
14528 "core/edit-widgets/block-edit",
14529 withMoveToWidgetAreaToolbarItem
14530 );
14531
14532 // packages/edit-widgets/build-module/filters/replace-media-upload.mjs
14533 var import_hooks2 = __toESM(require_hooks(), 1);
14534 var import_media_utils = __toESM(require_media_utils(), 1);
14535 var replaceMediaUpload = () => import_media_utils.MediaUpload;
14536 (0, import_hooks2.addFilter)(
14537 "editor.MediaUpload",
14538 "core/edit-widgets/replace-media-upload",
14539 replaceMediaUpload
14540 );
14541
14542 // packages/edit-widgets/build-module/blocks/widget-area/index.mjs
14543 var widget_area_exports = {};
14544 __export(widget_area_exports, {
14545 metadata: () => block_default,
14546 name: () => name,
14547 settings: () => settings
14548 });
14549 var import_i18n9 = __toESM(require_i18n(), 1);
14550
14551 // packages/edit-widgets/build-module/blocks/widget-area/block.json
14552 var block_default = {
14553 $schema: "https://schemas.wp.org/trunk/block.json",
14554 apiVersion: 3,
14555 name: "core/widget-area",
14556 title: "Widget Area",
14557 category: "widgets",
14558 attributes: {
14559 id: {
14560 type: "string"
14561 },
14562 name: {
14563 type: "string"
14564 }
14565 },
14566 supports: {
14567 html: false,
14568 inserter: false,
14569 customClassName: false,
14570 reusable: false,
14571 renaming: false,
14572 visibility: false,
14573 __experimentalToolbar: false,
14574 __experimentalParentSelector: false,
14575 __experimentalDisableBlockOverlay: true
14576 },
14577 editorStyle: "wp-block-widget-area-editor",
14578 style: "wp-block-widget-area"
14579 };
14580
14581 // packages/edit-widgets/build-module/blocks/widget-area/edit/index.mjs
14582 var import_element51 = __toESM(require_element(), 1);
14583 var import_data10 = __toESM(require_data(), 1);
14584 var import_core_data5 = __toESM(require_core_data(), 1);
14585 var import_components6 = __toESM(require_components(), 1);
14586 var import_block_editor5 = __toESM(require_block_editor(), 1);
14587
14588 // packages/edit-widgets/build-module/blocks/widget-area/edit/inner-blocks.mjs
14589 var import_core_data4 = __toESM(require_core_data(), 1);
14590 var import_block_editor4 = __toESM(require_block_editor(), 1);
14591 var import_element50 = __toESM(require_element(), 1);
14592
14593 // packages/edit-widgets/build-module/blocks/widget-area/edit/use-is-dragging-within.mjs
14594 var import_element49 = __toESM(require_element(), 1);
14595 var useIsDraggingWithin = (elementRef) => {
14596 const [isDraggingWithin, setIsDraggingWithin] = (0, import_element49.useState)(false);
14597 (0, import_element49.useEffect)(() => {
14598 const { ownerDocument: ownerDocument2 } = elementRef.current;
14599 function handleDragStart(event) {
14600 handleDragEnter(event);
14601 }
14602 function handleDragEnd() {
14603 setIsDraggingWithin(false);
14604 }
14605 function handleDragEnter(event) {
14606 if (elementRef.current.contains(event.target)) {
14607 setIsDraggingWithin(true);
14608 } else {
14609 setIsDraggingWithin(false);
14610 }
14611 }
14612 ownerDocument2.addEventListener("dragstart", handleDragStart);
14613 ownerDocument2.addEventListener("dragend", handleDragEnd);
14614 ownerDocument2.addEventListener("dragenter", handleDragEnter);
14615 return () => {
14616 ownerDocument2.removeEventListener("dragstart", handleDragStart);
14617 ownerDocument2.removeEventListener("dragend", handleDragEnd);
14618 ownerDocument2.removeEventListener("dragenter", handleDragEnter);
14619 };
14620 }, []);
14621 return isDraggingWithin;
14622 };
14623 var use_is_dragging_within_default = useIsDraggingWithin;
14624
14625 // packages/edit-widgets/build-module/blocks/widget-area/edit/inner-blocks.mjs
14626 var import_jsx_runtime66 = __toESM(require_jsx_runtime(), 1);
14627 function WidgetAreaInnerBlocks({ id }) {
14628 const [blocks, onInput, onChange] = (0, import_core_data4.useEntityBlockEditor)(
14629 "root",
14630 "postType"
14631 );
14632 const innerBlocksRef = (0, import_element50.useRef)();
14633 const isDraggingWithinInnerBlocks = use_is_dragging_within_default(innerBlocksRef);
14634 const shouldHighlightDropZone = isDraggingWithinInnerBlocks;
14635 const innerBlocksProps = (0, import_block_editor4.useInnerBlocksProps)(
14636 { ref: innerBlocksRef },
14637 {
14638 value: blocks,
14639 onInput,
14640 onChange,
14641 templateLock: false,
14642 renderAppender: import_block_editor4.InnerBlocks.ButtonBlockAppender
14643 }
14644 );
14645 return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
14646 "div",
14647 {
14648 "data-widget-area-id": id,
14649 className: clsx_default(
14650 "wp-block-widget-area__inner-blocks block-editor-inner-blocks editor-styles-wrapper",
14651 {
14652 "wp-block-widget-area__highlight-drop-zone": shouldHighlightDropZone
14653 }
14654 ),
14655 children: /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { ...innerBlocksProps })
14656 }
14657 );
14658 }
14659
14660 // packages/edit-widgets/build-module/blocks/widget-area/edit/index.mjs
14661 var import_jsx_runtime67 = __toESM(require_jsx_runtime(), 1);
14662 function WidgetAreaEdit({
14663 clientId,
14664 attributes: { id, name: name2 }
14665 }) {
14666 const isOpen = (0, import_data10.useSelect)(
14667 (select) => select(store2).getIsWidgetAreaOpen(clientId),
14668 [clientId]
14669 );
14670 const { setIsWidgetAreaOpen: setIsWidgetAreaOpen2 } = (0, import_data10.useDispatch)(store2);
14671 const wrapper = (0, import_element51.useRef)();
14672 const setOpen = (0, import_element51.useCallback)(
14673 (openState) => setIsWidgetAreaOpen2(clientId, openState),
14674 [clientId]
14675 );
14676 const isDragging = useIsDragging(wrapper);
14677 const isDraggingWithin = use_is_dragging_within_default(wrapper);
14678 const [openedWhileDragging, setOpenedWhileDragging] = (0, import_element51.useState)(false);
14679 (0, import_element51.useEffect)(() => {
14680 if (!isDragging) {
14681 setOpenedWhileDragging(false);
14682 return;
14683 }
14684 if (isDraggingWithin && !isOpen) {
14685 setOpen(true);
14686 setOpenedWhileDragging(true);
14687 } else if (!isDraggingWithin && isOpen && openedWhileDragging) {
14688 setOpen(false);
14689 }
14690 }, [isOpen, isDragging, isDraggingWithin, openedWhileDragging]);
14691 const blockProps = (0, import_block_editor5.useBlockProps)();
14692 return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { ...blockProps, children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_components6.Panel, { ref: wrapper, children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
14693 import_components6.PanelBody,
14694 {
14695 title: name2,
14696 opened: isOpen,
14697 onToggle: () => {
14698 setIsWidgetAreaOpen2(clientId, !isOpen);
14699 },
14700 scrollAfterOpen: !isDragging,
14701 children: ({ opened }) => (
14702 // This is required to ensure LegacyWidget blocks are not
14703 // unmounted when the panel is collapsed. Unmounting legacy
14704 // widgets may have unintended consequences (e.g. TinyMCE
14705 // not being properly reinitialized)
14706 /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
14707 import_components6.__unstableDisclosureContent,
14708 {
14709 className: "wp-block-widget-area__panel-body-content",
14710 visible: opened,
14711 children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
14712 import_core_data5.EntityProvider,
14713 {
14714 kind: "root",
14715 type: "postType",
14716 id: `widget-area-${id}`,
14717 children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(WidgetAreaInnerBlocks, { id })
14718 }
14719 )
14720 }
14721 )
14722 )
14723 }
14724 ) }) });
14725 }
14726 var useIsDragging = (elementRef) => {
14727 const [isDragging, setIsDragging] = (0, import_element51.useState)(false);
14728 (0, import_element51.useEffect)(() => {
14729 const { ownerDocument: ownerDocument2 } = elementRef.current;
14730 function handleDragStart() {
14731 setIsDragging(true);
14732 }
14733 function handleDragEnd() {
14734 setIsDragging(false);
14735 }
14736 ownerDocument2.addEventListener("dragstart", handleDragStart);
14737 ownerDocument2.addEventListener("dragend", handleDragEnd);
14738 return () => {
14739 ownerDocument2.removeEventListener("dragstart", handleDragStart);
14740 ownerDocument2.removeEventListener("dragend", handleDragEnd);
14741 };
14742 }, []);
14743 return isDragging;
14744 };
14745
14746 // packages/edit-widgets/build-module/blocks/widget-area/index.mjs
14747 var { name } = block_default;
14748 var settings = {
14749 title: (0, import_i18n9.__)("Widget Area"),
14750 description: (0, import_i18n9.__)("A widget area container."),
14751 __experimentalLabel: ({ name: label }) => label,
14752 icon: layout_default,
14753 edit: WidgetAreaEdit
14754 };
14755
14756 // packages/edit-widgets/build-module/components/layout/index.mjs
14757 var import_i18n26 = __toESM(require_i18n(), 1);
14758 var import_element69 = __toESM(require_element(), 1);
14759 var import_data32 = __toESM(require_data(), 1);
14760 var import_plugins3 = __toESM(require_plugins(), 1);
14761 var import_notices4 = __toESM(require_notices(), 1);
14762 var import_components20 = __toESM(require_components(), 1);
14763 var import_theme2 = __toESM(require_theme(), 1);
14764
14765 // packages/edit-widgets/build-module/components/error-boundary/index.mjs
14766 var import_element52 = __toESM(require_element(), 1);
14767 var import_i18n10 = __toESM(require_i18n(), 1);
14768 var import_compose6 = __toESM(require_compose(), 1);
14769 var import_hooks3 = __toESM(require_hooks(), 1);
14770 var import_jsx_runtime68 = __toESM(require_jsx_runtime(), 1);
14771 function getErrorName(error2) {
14772 return error2 instanceof Error && error2.name || "Error";
14773 }
14774 function getErrorMessage(error2) {
14775 if (typeof error2 === "string" && error2) {
14776 return error2;
14777 }
14778 if (typeof error2?.message === "string" && error2.message) {
14779 return error2.message;
14780 }
14781 return "An unknown error occurred.";
14782 }
14783 function getErrorSections(error2, componentStack) {
14784 const sections = [
14785 { label: getErrorName(error2), content: getErrorMessage(error2) }
14786 ];
14787 if (error2?.stack) {
14788 sections.push({
14789 label: "Stack",
14790 content: error2.stack.trim(),
14791 preformatted: true
14792 });
14793 }
14794 if (componentStack) {
14795 sections.push({
14796 label: "Component stack",
14797 content: componentStack.trim(),
14798 preformatted: true
14799 });
14800 }
14801 sections.push({
14802 label: "Environment",
14803 content: `User agent: ${window.navigator.userAgent}`,
14804 preformatted: true
14805 });
14806 return sections;
14807 }
14808 function getErrorReport(error2, componentStack) {
14809 const sections = getErrorSections(error2, componentStack).map(
14810 ({ label, content, preformatted }) => `**${label}**
14811
14812 ${preformatted ? `\`\`\`
14813 ${content}
14814 \`\`\`` : content}`
14815 );
14816 return ["### Error report", ...sections].join("\n\n");
14817 }
14818 function CopyButton({ text, children, variant = "outline" }) {
14819 const ref = (0, import_compose6.useCopyToClipboard)(text);
14820 return /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(notice_exports.ActionButton, { variant, ref, children });
14821 }
14822 function ErrorReport({ error: error2, componentStack }) {
14823 return /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
14824 Stack,
14825 {
14826 className: "edit-widgets-error-boundary__report",
14827 direction: "column",
14828 gap: "md",
14829 children: getErrorSections(error2, componentStack).map(
14830 ({ label, content }) => /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(Stack, { direction: "column", gap: "xs", children: [
14831 /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(Text, { variant: "heading-md", children: label }),
14832 /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("pre", { className: "edit-widgets-error-boundary__report-section", children: content })
14833 ] }, label)
14834 )
14835 }
14836 );
14837 }
14838 function ErrorDetails({ error: error2, componentStack }) {
14839 return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(collapsible_card_exports.Root, { className: "edit-widgets-error-boundary__details", children: [
14840 /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(collapsible_card_exports.Header, { children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(card_exports.Title, { children: (0, import_i18n10.__)("Error details") }) }),
14841 /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(collapsible_card_exports.Content, { children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
14842 ErrorReport,
14843 {
14844 error: error2,
14845 componentStack
14846 }
14847 ) })
14848 ] });
14849 }
14850 var ErrorBoundary = class extends import_element52.Component {
14851 constructor() {
14852 super(...arguments);
14853 this.state = {
14854 error: null,
14855 componentStack: null
14856 };
14857 }
14858 componentDidCatch(error2, errorInfo) {
14859 this.setState({ componentStack: errorInfo?.componentStack });
14860 (0, import_hooks3.doAction)("editor.ErrorBoundary.errorLogged", error2, errorInfo);
14861 }
14862 static getDerivedStateFromError(error2) {
14863 return { error: error2 };
14864 }
14865 render() {
14866 const { error: error2, componentStack } = this.state;
14867 if (!error2) {
14868 return this.props.children;
14869 }
14870 return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(
14871 Stack,
14872 {
14873 className: "edit-widgets-error-boundary",
14874 direction: "column",
14875 gap: "lg",
14876 children: [
14877 /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(notice_exports.Root, { intent: "error", children: [
14878 /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(notice_exports.Title, { children: (0, import_i18n10.__)("The editor has crashed") }),
14879 /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(notice_exports.Description, { children: (0, import_i18n10.__)(
14880 "An unknown error occurred. Reload your browser to try again, or copy the error to report the problem or search."
14881 ) }),
14882 /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(notice_exports.Actions, { children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
14883 CopyButton,
14884 {
14885 variant: "solid",
14886 text: () => getErrorReport(error2, componentStack),
14887 children: (0, import_i18n10.__)("Copy error")
14888 }
14889 ) })
14890 ] }),
14891 true ? /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
14892 ErrorDetails,
14893 {
14894 error: error2,
14895 componentStack
14896 }
14897 ) : null
14898 ]
14899 }
14900 );
14901 }
14902 };
14903
14904 // packages/edit-widgets/build-module/components/widget-areas-block-editor-provider/index.mjs
14905 var import_components7 = __toESM(require_components(), 1);
14906 var import_compose7 = __toESM(require_compose(), 1);
14907 var import_media_utils2 = __toESM(require_media_utils(), 1);
14908 var import_data13 = __toESM(require_data(), 1);
14909 var import_core_data8 = __toESM(require_core_data(), 1);
14910 var import_element54 = __toESM(require_element(), 1);
14911 var import_block_editor8 = __toESM(require_block_editor(), 1);
14912 var import_patterns = __toESM(require_patterns(), 1);
14913 var import_preferences4 = __toESM(require_preferences(), 1);
14914
14915 // packages/edit-widgets/build-module/components/keyboard-shortcuts/index.mjs
14916 var import_element53 = __toESM(require_element(), 1);
14917 var import_keyboard_shortcuts = __toESM(require_keyboard_shortcuts(), 1);
14918 var import_keycodes = __toESM(require_keycodes(), 1);
14919 var import_data11 = __toESM(require_data(), 1);
14920 var import_i18n11 = __toESM(require_i18n(), 1);
14921 var import_core_data6 = __toESM(require_core_data(), 1);
14922 var import_block_editor6 = __toESM(require_block_editor(), 1);
14923 var { usesNativeUndo } = unlock2(import_block_editor6.privateApis);
14924 function KeyboardShortcuts() {
14925 const { redo, undo } = (0, import_data11.useDispatch)(import_core_data6.store);
14926 const { saveEditedWidgetAreas: saveEditedWidgetAreas2 } = (0, import_data11.useDispatch)(store2);
14927 (0, import_keyboard_shortcuts.useShortcut)("core/edit-widgets/undo", (event) => {
14928 if (usesNativeUndo(event)) {
14929 return;
14930 }
14931 undo();
14932 event.preventDefault();
14933 });
14934 (0, import_keyboard_shortcuts.useShortcut)("core/edit-widgets/redo", (event) => {
14935 if (usesNativeUndo(event)) {
14936 return;
14937 }
14938 redo();
14939 event.preventDefault();
14940 });
14941 (0, import_keyboard_shortcuts.useShortcut)("core/edit-widgets/save", (event) => {
14942 event.preventDefault();
14943 saveEditedWidgetAreas2();
14944 });
14945 return null;
14946 }
14947 function KeyboardShortcutsRegister() {
14948 const { registerShortcut } = (0, import_data11.useDispatch)(import_keyboard_shortcuts.store);
14949 (0, import_element53.useEffect)(() => {
14950 registerShortcut({
14951 name: "core/edit-widgets/undo",
14952 category: "global",
14953 description: (0, import_i18n11.__)("Undo your last changes."),
14954 keyCombination: {
14955 modifier: "primary",
14956 character: "z"
14957 }
14958 });
14959 registerShortcut({
14960 name: "core/edit-widgets/redo",
14961 category: "global",
14962 description: (0, import_i18n11.__)("Redo your last undo."),
14963 keyCombination: {
14964 modifier: "primaryShift",
14965 character: "z"
14966 },
14967 // Disable on Apple OS because it conflicts with the browser's
14968 // history shortcut. It's a fine alias for both Windows and Linux.
14969 // Since there's no conflict for Ctrl+Shift+Z on both Windows and
14970 // Linux, we keep it as the default for consistency.
14971 aliases: (0, import_keycodes.isAppleOS)() ? [] : [
14972 {
14973 modifier: "primary",
14974 character: "y"
14975 }
14976 ]
14977 });
14978 registerShortcut({
14979 name: "core/edit-widgets/save",
14980 category: "global",
14981 description: (0, import_i18n11.__)("Save your changes."),
14982 keyCombination: {
14983 modifier: "primary",
14984 character: "s"
14985 }
14986 });
14987 registerShortcut({
14988 name: "core/edit-widgets/keyboard-shortcuts",
14989 category: "main",
14990 description: (0, import_i18n11.__)("Display these keyboard shortcuts."),
14991 keyCombination: {
14992 modifier: "access",
14993 character: "h"
14994 }
14995 });
14996 registerShortcut({
14997 name: "core/edit-widgets/next-region",
14998 category: "global",
14999 description: (0, import_i18n11.__)("Navigate to the next part of the editor."),
15000 keyCombination: {
15001 modifier: "ctrl",
15002 character: "`"
15003 },
15004 aliases: [
15005 {
15006 modifier: "access",
15007 character: "n"
15008 }
15009 ]
15010 });
15011 registerShortcut({
15012 name: "core/edit-widgets/previous-region",
15013 category: "global",
15014 description: (0, import_i18n11.__)("Navigate to the previous part of the editor."),
15015 keyCombination: {
15016 modifier: "ctrlShift",
15017 character: "`"
15018 },
15019 aliases: [
15020 {
15021 modifier: "access",
15022 character: "p"
15023 },
15024 {
15025 modifier: "ctrlShift",
15026 character: "~"
15027 }
15028 ]
15029 });
15030 }, [registerShortcut]);
15031 return null;
15032 }
15033 KeyboardShortcuts.Register = KeyboardShortcutsRegister;
15034 var keyboard_shortcuts_default = KeyboardShortcuts;
15035
15036 // packages/edit-widgets/build-module/hooks/use-last-selected-widget-area.mjs
15037 var import_data12 = __toESM(require_data(), 1);
15038 var import_block_editor7 = __toESM(require_block_editor(), 1);
15039 var import_core_data7 = __toESM(require_core_data(), 1);
15040 var useLastSelectedWidgetArea = () => (0, import_data12.useSelect)((select) => {
15041 const { getBlockSelectionEnd, getBlockName } = select(import_block_editor7.store);
15042 const selectionEndClientId = getBlockSelectionEnd();
15043 if (getBlockName(selectionEndClientId) === "core/widget-area") {
15044 return selectionEndClientId;
15045 }
15046 const { getParentWidgetAreaBlock: getParentWidgetAreaBlock2 } = select(store2);
15047 const widgetAreaBlock = getParentWidgetAreaBlock2(selectionEndClientId);
15048 const widgetAreaBlockClientId = widgetAreaBlock?.clientId;
15049 if (widgetAreaBlockClientId) {
15050 return widgetAreaBlockClientId;
15051 }
15052 const { getEntityRecord } = select(import_core_data7.store);
15053 const widgetAreasPost = getEntityRecord(
15054 KIND,
15055 POST_TYPE,
15056 buildWidgetAreasPostId()
15057 );
15058 return widgetAreasPost?.blocks[0]?.clientId;
15059 }, []);
15060 var use_last_selected_widget_area_default = useLastSelectedWidgetArea;
15061
15062 // packages/edit-widgets/build-module/constants.mjs
15063 var ALLOW_REUSABLE_BLOCKS = false;
15064 var ENABLE_EXPERIMENTAL_FSE_BLOCKS = false;
15065
15066 // packages/edit-widgets/build-module/components/widget-areas-block-editor-provider/index.mjs
15067 var import_jsx_runtime69 = __toESM(require_jsx_runtime(), 1);
15068 var { ExperimentalBlockEditorProvider } = unlock2(import_block_editor8.privateApis);
15069 var { PatternsMenuItems } = unlock2(import_patterns.privateApis);
15070 var EMPTY_ARRAY2 = [];
15071 function WidgetAreasBlockEditorProvider({
15072 blockEditorSettings,
15073 children,
15074 ...props
15075 }) {
15076 const isLargeViewport = (0, import_compose7.useViewportMatch)("medium");
15077 const {
15078 hasUploadPermissions,
15079 reusableBlocks,
15080 isFixedToolbarActive,
15081 keepCaretInsideBlock,
15082 pageOnFront,
15083 pageForPosts
15084 } = (0, import_data13.useSelect)((select) => {
15085 const { canUser, getEntityRecord, getEntityRecords } = select(import_core_data8.store);
15086 const siteSettings = canUser("read", {
15087 kind: "root",
15088 name: "site"
15089 }) ? getEntityRecord("root", "site") : void 0;
15090 return {
15091 hasUploadPermissions: canUser("create", {
15092 kind: "postType",
15093 name: "attachment"
15094 }) ?? true,
15095 reusableBlocks: ALLOW_REUSABLE_BLOCKS ? getEntityRecords("postType", "wp_block") : EMPTY_ARRAY2,
15096 isFixedToolbarActive: !!select(import_preferences4.store).get(
15097 "core/edit-widgets",
15098 "fixedToolbar"
15099 ),
15100 keepCaretInsideBlock: !!select(import_preferences4.store).get(
15101 "core/edit-widgets",
15102 "keepCaretInsideBlock"
15103 ),
15104 pageOnFront: siteSettings?.page_on_front,
15105 pageForPosts: siteSettings?.page_for_posts
15106 };
15107 }, []);
15108 const { setIsInserterOpened: setIsInserterOpened2 } = (0, import_data13.useDispatch)(store2);
15109 const settings2 = (0, import_element54.useMemo)(() => {
15110 let mediaUploadBlockEditor;
15111 if (hasUploadPermissions) {
15112 mediaUploadBlockEditor = ({ onError, ...argumentsObject }) => {
15113 (0, import_media_utils2.uploadMedia)({
15114 wpAllowedMimeTypes: blockEditorSettings.allowedMimeTypes,
15115 onError: ({ message }) => onError(message),
15116 ...argumentsObject
15117 });
15118 };
15119 }
15120 return {
15121 ...blockEditorSettings,
15122 __experimentalReusableBlocks: reusableBlocks,
15123 hasFixedToolbar: isFixedToolbarActive || !isLargeViewport,
15124 keepCaretInsideBlock,
15125 mediaUpload: mediaUploadBlockEditor,
15126 templateLock: "all",
15127 __experimentalSetIsInserterOpened: setIsInserterOpened2,
15128 pageOnFront,
15129 pageForPosts
15130 };
15131 }, [
15132 hasUploadPermissions,
15133 blockEditorSettings,
15134 isFixedToolbarActive,
15135 isLargeViewport,
15136 keepCaretInsideBlock,
15137 reusableBlocks,
15138 setIsInserterOpened2,
15139 pageOnFront,
15140 pageForPosts
15141 ]);
15142 const widgetAreaId = use_last_selected_widget_area_default();
15143 const [blocks, onInput, onChange] = (0, import_core_data8.useEntityBlockEditor)(
15144 KIND,
15145 POST_TYPE,
15146 { id: buildWidgetAreasPostId() }
15147 );
15148 return /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(import_components7.SlotFillProvider, { children: [
15149 /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(keyboard_shortcuts_default.Register, {}),
15150 /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(
15151 ExperimentalBlockEditorProvider,
15152 {
15153 value: blocks,
15154 onInput,
15155 onChange,
15156 settings: settings2,
15157 useSubRegistry: false,
15158 ...props,
15159 children: [
15160 children,
15161 /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(PatternsMenuItems, { rootClientId: widgetAreaId })
15162 ]
15163 }
15164 )
15165 ] });
15166 }
15167
15168 // packages/edit-widgets/build-module/components/sidebar/index.mjs
15169 var import_element56 = __toESM(require_element(), 1);
15170 var import_i18n13 = __toESM(require_i18n(), 1);
15171 var import_block_editor10 = __toESM(require_block_editor(), 1);
15172 var import_components9 = __toESM(require_components(), 1);
15173 var import_data15 = __toESM(require_data(), 1);
15174
15175 // packages/edit-widgets/build-module/components/sidebar/widget-areas.mjs
15176 var import_data14 = __toESM(require_data(), 1);
15177 var import_element55 = __toESM(require_element(), 1);
15178 var import_block_editor9 = __toESM(require_block_editor(), 1);
15179 var import_components8 = __toESM(require_components(), 1);
15180 var import_i18n12 = __toESM(require_i18n(), 1);
15181 var import_url = __toESM(require_url(), 1);
15182 var import_dom21 = __toESM(require_dom(), 1);
15183 var import_jsx_runtime70 = __toESM(require_jsx_runtime(), 1);
15184 function WidgetAreas({ selectedWidgetAreaId }) {
15185 const widgetAreas = (0, import_data14.useSelect)(
15186 (select) => select(store2).getWidgetAreas(),
15187 []
15188 );
15189 const selectedWidgetArea = (0, import_element55.useMemo)(
15190 () => selectedWidgetAreaId && widgetAreas?.find(
15191 (widgetArea) => widgetArea.id === selectedWidgetAreaId
15192 ),
15193 [selectedWidgetAreaId, widgetAreas]
15194 );
15195 let description;
15196 if (!selectedWidgetArea) {
15197 description = (0, import_i18n12.__)(
15198 // eslint-disable-next-line no-restricted-syntax -- 'sidebar' is a common web design term for layouts
15199 "Widget Areas are global parts in your site\u2019s layout that can accept blocks. These vary by theme, but are typically parts like your Sidebar or Footer."
15200 );
15201 } else if (selectedWidgetAreaId === "wp_inactive_widgets") {
15202 description = (0, import_i18n12.__)(
15203 "Blocks in this Widget Area will not be displayed in your site."
15204 );
15205 } else {
15206 description = selectedWidgetArea.description;
15207 }
15208 return /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("div", { className: "edit-widgets-widget-areas", children: /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("div", { className: "edit-widgets-widget-areas__top-container", children: [
15209 /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(import_block_editor9.BlockIcon, { icon: layout_default }),
15210 /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("div", { children: [
15211 /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
15212 "p",
15213 {
15214 dangerouslySetInnerHTML: {
15215 __html: (0, import_dom21.safeHTML)(description)
15216 }
15217 }
15218 ),
15219 widgetAreas?.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("p", { children: (0, import_i18n12.__)(
15220 "Your theme does not contain any Widget Areas."
15221 ) }),
15222 !selectedWidgetArea && /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
15223 import_components8.Button,
15224 {
15225 __next40pxDefaultSize: true,
15226 href: (0, import_url.addQueryArgs)("customize.php", {
15227 "autofocus[panel]": "widgets",
15228 return: window.location.pathname
15229 }),
15230 variant: "tertiary",
15231 children: (0, import_i18n12.__)("Manage with live preview")
15232 }
15233 )
15234 ] })
15235 ] }) });
15236 }
15237
15238 // packages/edit-widgets/build-module/components/sidebar/index.mjs
15239 var import_jsx_runtime71 = __toESM(require_jsx_runtime(), 1);
15240 var SIDEBAR_ACTIVE_BY_DEFAULT = true;
15241 var BLOCK_INSPECTOR_IDENTIFIER = "edit-widgets/block-inspector";
15242 var WIDGET_AREAS_IDENTIFIER = "edit-widgets/block-areas";
15243 var { Tabs } = unlock2(import_components9.privateApis);
15244 function SidebarHeader({ selectedWidgetAreaBlock }) {
15245 return /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(Tabs.TabList, { children: [
15246 /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(Tabs.Tab, { tabId: WIDGET_AREAS_IDENTIFIER, children: selectedWidgetAreaBlock ? selectedWidgetAreaBlock.attributes.name : (0, import_i18n13.__)("Widget Areas") }),
15247 /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(Tabs.Tab, { tabId: BLOCK_INSPECTOR_IDENTIFIER, children: (0, import_i18n13.__)("Block") })
15248 ] });
15249 }
15250 function SidebarContent({
15251 hasSelectedNonAreaBlock,
15252 currentArea,
15253 isGeneralSidebarOpen,
15254 selectedWidgetAreaBlock
15255 }) {
15256 const { enableComplementaryArea: enableComplementaryArea2 } = (0, import_data15.useDispatch)(store);
15257 (0, import_element56.useEffect)(() => {
15258 if (hasSelectedNonAreaBlock && currentArea === WIDGET_AREAS_IDENTIFIER && isGeneralSidebarOpen) {
15259 enableComplementaryArea2(
15260 "core/edit-widgets",
15261 BLOCK_INSPECTOR_IDENTIFIER
15262 );
15263 }
15264 if (!hasSelectedNonAreaBlock && currentArea === BLOCK_INSPECTOR_IDENTIFIER && isGeneralSidebarOpen) {
15265 enableComplementaryArea2(
15266 "core/edit-widgets",
15267 WIDGET_AREAS_IDENTIFIER
15268 );
15269 }
15270 }, [hasSelectedNonAreaBlock, enableComplementaryArea2]);
15271 const tabsContextValue = (0, import_element56.useContext)(Tabs.Context);
15272 return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
15273 complementary_area_default,
15274 {
15275 className: "edit-widgets-sidebar",
15276 header: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(Tabs.Context.Provider, { value: tabsContextValue, children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
15277 SidebarHeader,
15278 {
15279 selectedWidgetAreaBlock
15280 }
15281 ) }),
15282 headerClassName: "edit-widgets-sidebar__panel-tabs",
15283 title: (0, import_i18n13.__)("Settings"),
15284 closeLabel: (0, import_i18n13.__)("Close Settings"),
15285 scope: "core/edit-widgets",
15286 identifier: currentArea,
15287 icon: (0, import_i18n13.isRTL)() ? drawer_left_default : drawer_right_default,
15288 isActiveByDefault: SIDEBAR_ACTIVE_BY_DEFAULT,
15289 children: /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(Tabs.Context.Provider, { value: tabsContextValue, children: [
15290 /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
15291 Tabs.TabPanel,
15292 {
15293 tabId: WIDGET_AREAS_IDENTIFIER,
15294 focusable: false,
15295 children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
15296 WidgetAreas,
15297 {
15298 selectedWidgetAreaId: selectedWidgetAreaBlock?.attributes.id
15299 }
15300 )
15301 }
15302 ),
15303 /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
15304 Tabs.TabPanel,
15305 {
15306 tabId: BLOCK_INSPECTOR_IDENTIFIER,
15307 focusable: false,
15308 children: hasSelectedNonAreaBlock ? /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(import_block_editor10.BlockInspector, {}) : (
15309 // Pretend that Widget Areas are part of the UI by not
15310 // showing the Block Inspector when one is selected.
15311 /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { className: "block-editor-block-inspector__no-blocks", children: (0, import_i18n13.__)("No block selected.") })
15312 )
15313 }
15314 )
15315 ] })
15316 }
15317 );
15318 }
15319 function Sidebar() {
15320 const {
15321 currentArea,
15322 hasSelectedNonAreaBlock,
15323 isGeneralSidebarOpen,
15324 selectedWidgetAreaBlock
15325 } = (0, import_data15.useSelect)((select) => {
15326 const { getSelectedBlock, getBlock, getBlockParentsByBlockName } = select(import_block_editor10.store);
15327 const { getActiveComplementaryArea: getActiveComplementaryArea2 } = select(store);
15328 const selectedBlock = getSelectedBlock();
15329 const activeArea = getActiveComplementaryArea2(store2.name);
15330 let currentSelection = activeArea;
15331 if (!currentSelection) {
15332 if (selectedBlock) {
15333 currentSelection = BLOCK_INSPECTOR_IDENTIFIER;
15334 } else {
15335 currentSelection = WIDGET_AREAS_IDENTIFIER;
15336 }
15337 }
15338 let widgetAreaBlock;
15339 if (selectedBlock) {
15340 if (selectedBlock.name === "core/widget-area") {
15341 widgetAreaBlock = selectedBlock;
15342 } else {
15343 widgetAreaBlock = getBlock(
15344 getBlockParentsByBlockName(
15345 selectedBlock.clientId,
15346 "core/widget-area"
15347 )[0]
15348 );
15349 }
15350 }
15351 return {
15352 currentArea: currentSelection,
15353 hasSelectedNonAreaBlock: !!(selectedBlock && selectedBlock.name !== "core/widget-area"),
15354 isGeneralSidebarOpen: !!activeArea,
15355 selectedWidgetAreaBlock: widgetAreaBlock
15356 };
15357 }, []);
15358 const { enableComplementaryArea: enableComplementaryArea2 } = (0, import_data15.useDispatch)(store);
15359 const onTabSelect = (0, import_element56.useCallback)(
15360 (newSelectedTabId) => {
15361 if (!!newSelectedTabId) {
15362 enableComplementaryArea2(
15363 store2.name,
15364 newSelectedTabId
15365 );
15366 }
15367 },
15368 [enableComplementaryArea2]
15369 );
15370 return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
15371 Tabs,
15372 {
15373 selectedTabId: isGeneralSidebarOpen ? currentArea : null,
15374 onSelect: onTabSelect,
15375 selectOnMove: false,
15376 children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
15377 SidebarContent,
15378 {
15379 hasSelectedNonAreaBlock,
15380 currentArea,
15381 isGeneralSidebarOpen,
15382 selectedWidgetAreaBlock
15383 }
15384 )
15385 }
15386 );
15387 }
15388
15389 // packages/edit-widgets/build-module/components/layout/interface.mjs
15390 var import_compose13 = __toESM(require_compose(), 1);
15391 var import_block_editor17 = __toESM(require_block_editor(), 1);
15392 var import_element66 = __toESM(require_element(), 1);
15393 var import_data29 = __toESM(require_data(), 1);
15394 var import_i18n23 = __toESM(require_i18n(), 1);
15395 var import_preferences8 = __toESM(require_preferences(), 1);
15396
15397 // packages/edit-widgets/build-module/components/header/index.mjs
15398 var import_block_editor12 = __toESM(require_block_editor(), 1);
15399 var import_data23 = __toESM(require_data(), 1);
15400 var import_element62 = __toESM(require_element(), 1);
15401 var import_i18n21 = __toESM(require_i18n(), 1);
15402 var import_components17 = __toESM(require_components(), 1);
15403 var import_compose10 = __toESM(require_compose(), 1);
15404 var import_preferences6 = __toESM(require_preferences(), 1);
15405
15406 // packages/edit-widgets/build-module/components/header/document-tools/index.mjs
15407 var import_data18 = __toESM(require_data(), 1);
15408 var import_i18n16 = __toESM(require_i18n(), 1);
15409 var import_components12 = __toESM(require_components(), 1);
15410 var import_block_editor11 = __toESM(require_block_editor(), 1);
15411 var import_element59 = __toESM(require_element(), 1);
15412 var import_compose8 = __toESM(require_compose(), 1);
15413
15414 // packages/edit-widgets/build-module/components/header/undo-redo/undo.mjs
15415 var import_i18n14 = __toESM(require_i18n(), 1);
15416 var import_components10 = __toESM(require_components(), 1);
15417 var import_data16 = __toESM(require_data(), 1);
15418 var import_keycodes2 = __toESM(require_keycodes(), 1);
15419 var import_core_data9 = __toESM(require_core_data(), 1);
15420 var import_element57 = __toESM(require_element(), 1);
15421 var import_jsx_runtime72 = __toESM(require_jsx_runtime(), 1);
15422 function UndoButton(props, ref) {
15423 const hasUndo = (0, import_data16.useSelect)(
15424 (select) => select(import_core_data9.store).hasUndo(),
15425 []
15426 );
15427 const { undo } = (0, import_data16.useDispatch)(import_core_data9.store);
15428 return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
15429 import_components10.Button,
15430 {
15431 ...props,
15432 ref,
15433 icon: !(0, import_i18n14.isRTL)() ? undo_default : redo_default,
15434 label: (0, import_i18n14.__)("Undo"),
15435 shortcut: import_keycodes2.displayShortcut.primary("z"),
15436 "aria-disabled": !hasUndo,
15437 onClick: hasUndo ? undo : void 0,
15438 size: "compact"
15439 }
15440 );
15441 }
15442 var undo_default2 = (0, import_element57.forwardRef)(UndoButton);
15443
15444 // packages/edit-widgets/build-module/components/header/undo-redo/redo.mjs
15445 var import_i18n15 = __toESM(require_i18n(), 1);
15446 var import_components11 = __toESM(require_components(), 1);
15447 var import_data17 = __toESM(require_data(), 1);
15448 var import_keycodes3 = __toESM(require_keycodes(), 1);
15449 var import_core_data10 = __toESM(require_core_data(), 1);
15450 var import_element58 = __toESM(require_element(), 1);
15451 var import_jsx_runtime73 = __toESM(require_jsx_runtime(), 1);
15452 function RedoButton(props, ref) {
15453 const shortcut = (0, import_keycodes3.isAppleOS)() ? import_keycodes3.displayShortcut.primaryShift("z") : import_keycodes3.displayShortcut.primary("y");
15454 const hasRedo = (0, import_data17.useSelect)(
15455 (select) => select(import_core_data10.store).hasRedo(),
15456 []
15457 );
15458 const { redo } = (0, import_data17.useDispatch)(import_core_data10.store);
15459 return /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
15460 import_components11.Button,
15461 {
15462 ...props,
15463 ref,
15464 icon: !(0, import_i18n15.isRTL)() ? redo_default : undo_default,
15465 label: (0, import_i18n15.__)("Redo"),
15466 shortcut,
15467 "aria-disabled": !hasRedo,
15468 onClick: hasRedo ? redo : void 0,
15469 size: "compact"
15470 }
15471 );
15472 }
15473 var redo_default2 = (0, import_element58.forwardRef)(RedoButton);
15474
15475 // packages/edit-widgets/build-module/components/header/document-tools/index.mjs
15476 var import_jsx_runtime74 = __toESM(require_jsx_runtime(), 1);
15477 function DocumentTools() {
15478 const isMediumViewport = (0, import_compose8.useViewportMatch)("medium");
15479 const {
15480 isInserterOpen,
15481 isListViewOpen,
15482 inserterSidebarToggleRef: inserterSidebarToggleRef2,
15483 listViewToggleRef: listViewToggleRef2
15484 } = (0, import_data18.useSelect)((select) => {
15485 const {
15486 isInserterOpened: isInserterOpened2,
15487 getInserterSidebarToggleRef: getInserterSidebarToggleRef2,
15488 isListViewOpened: isListViewOpened2,
15489 getListViewToggleRef: getListViewToggleRef2
15490 } = unlock2(select(store2));
15491 return {
15492 isInserterOpen: isInserterOpened2(),
15493 isListViewOpen: isListViewOpened2(),
15494 inserterSidebarToggleRef: getInserterSidebarToggleRef2(),
15495 listViewToggleRef: getListViewToggleRef2()
15496 };
15497 }, []);
15498 const { setIsInserterOpened: setIsInserterOpened2, setIsListViewOpened: setIsListViewOpened2 } = (0, import_data18.useDispatch)(store2);
15499 const toggleListView = (0, import_element59.useCallback)(
15500 () => setIsListViewOpened2(!isListViewOpen),
15501 [setIsListViewOpened2, isListViewOpen]
15502 );
15503 const toggleInserterSidebar = (0, import_element59.useCallback)(
15504 () => setIsInserterOpened2(!isInserterOpen),
15505 [setIsInserterOpened2, isInserterOpen]
15506 );
15507 return /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)(
15508 import_block_editor11.NavigableToolbar,
15509 {
15510 className: "edit-widgets-header-toolbar",
15511 "aria-label": (0, import_i18n16.__)("Document tools"),
15512 variant: "unstyled",
15513 children: [
15514 /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
15515 import_components12.ToolbarItem,
15516 {
15517 ref: inserterSidebarToggleRef2,
15518 as: import_components12.Button,
15519 className: "edit-widgets-header-toolbar__inserter-toggle",
15520 variant: "primary",
15521 isPressed: isInserterOpen,
15522 onMouseDown: (event) => {
15523 event.preventDefault();
15524 },
15525 onClick: toggleInserterSidebar,
15526 icon: plus_default,
15527 label: (0, import_i18n16._x)(
15528 "Block Inserter",
15529 "Generic label for block inserter button"
15530 ),
15531 size: "compact"
15532 }
15533 ),
15534 isMediumViewport && /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)(import_jsx_runtime74.Fragment, { children: [
15535 /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(import_components12.ToolbarItem, { as: undo_default2 }),
15536 /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(import_components12.ToolbarItem, { as: redo_default2 }),
15537 /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
15538 import_components12.ToolbarItem,
15539 {
15540 as: import_components12.Button,
15541 className: "edit-widgets-header-toolbar__list-view-toggle",
15542 icon: list_view_default,
15543 isPressed: isListViewOpen,
15544 label: (0, import_i18n16.__)("List View"),
15545 onClick: toggleListView,
15546 ref: listViewToggleRef2,
15547 size: "compact"
15548 }
15549 )
15550 ] })
15551 ]
15552 }
15553 );
15554 }
15555 var document_tools_default = DocumentTools;
15556
15557 // packages/edit-widgets/build-module/components/save-button/index.mjs
15558 var import_components13 = __toESM(require_components(), 1);
15559 var import_i18n17 = __toESM(require_i18n(), 1);
15560 var import_data19 = __toESM(require_data(), 1);
15561 var import_jsx_runtime75 = __toESM(require_jsx_runtime(), 1);
15562 function SaveButton() {
15563 const { hasEditedWidgetAreaIds, isSaving, isWidgetSaveLocked } = (0, import_data19.useSelect)(
15564 (select) => {
15565 const {
15566 getEditedWidgetAreas: getEditedWidgetAreas2,
15567 isSavingWidgetAreas: isSavingWidgetAreas2,
15568 isWidgetSavingLocked: isWidgetSavingLocked2
15569 } = select(store2);
15570 return {
15571 hasEditedWidgetAreaIds: getEditedWidgetAreas2()?.length > 0,
15572 isSaving: isSavingWidgetAreas2(),
15573 isWidgetSaveLocked: isWidgetSavingLocked2()
15574 };
15575 },
15576 []
15577 );
15578 const { saveEditedWidgetAreas: saveEditedWidgetAreas2 } = (0, import_data19.useDispatch)(store2);
15579 const isDisabled = isWidgetSaveLocked || isSaving || !hasEditedWidgetAreaIds;
15580 return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
15581 import_components13.Button,
15582 {
15583 variant: "primary",
15584 isBusy: isSaving,
15585 "aria-disabled": isDisabled,
15586 onClick: isDisabled ? void 0 : saveEditedWidgetAreas2,
15587 size: "compact",
15588 children: isSaving ? (0, import_i18n17.__)("Saving\u2026") : (0, import_i18n17.__)("Update")
15589 }
15590 );
15591 }
15592 var save_button_default = SaveButton;
15593
15594 // packages/edit-widgets/build-module/components/more-menu/index.mjs
15595 var import_components16 = __toESM(require_components(), 1);
15596 var import_data22 = __toESM(require_data(), 1);
15597 var import_element61 = __toESM(require_element(), 1);
15598 var import_i18n20 = __toESM(require_i18n(), 1);
15599 var import_preferences5 = __toESM(require_preferences(), 1);
15600 var import_keycodes5 = __toESM(require_keycodes(), 1);
15601 var import_keyboard_shortcuts5 = __toESM(require_keyboard_shortcuts(), 1);
15602 var import_compose9 = __toESM(require_compose(), 1);
15603
15604 // packages/edit-widgets/build-module/components/keyboard-shortcut-help-modal/index.mjs
15605 var import_components14 = __toESM(require_components(), 1);
15606 var import_i18n19 = __toESM(require_i18n(), 1);
15607 var import_keyboard_shortcuts4 = __toESM(require_keyboard_shortcuts(), 1);
15608 var import_data21 = __toESM(require_data(), 1);
15609
15610 // packages/edit-widgets/build-module/components/keyboard-shortcut-help-modal/config.mjs
15611 var import_i18n18 = __toESM(require_i18n(), 1);
15612 var textFormattingShortcuts = [
15613 {
15614 keyCombination: { modifier: "primary", character: "b" },
15615 description: (0, import_i18n18.__)("Make the selected text bold.")
15616 },
15617 {
15618 keyCombination: { modifier: "primary", character: "i" },
15619 description: (0, import_i18n18.__)("Make the selected text italic.")
15620 },
15621 {
15622 keyCombination: { modifier: "primary", character: "k" },
15623 description: (0, import_i18n18.__)("Convert the selected text into a link.")
15624 },
15625 {
15626 keyCombination: { modifier: "primaryShift", character: "k" },
15627 description: (0, import_i18n18.__)("Remove a link.")
15628 },
15629 {
15630 keyCombination: { character: "[[" },
15631 description: (0, import_i18n18.__)("Insert a link to a post or page.")
15632 },
15633 {
15634 keyCombination: { modifier: "primary", character: "u" },
15635 description: (0, import_i18n18.__)("Underline the selected text.")
15636 },
15637 {
15638 keyCombination: { modifier: "access", character: "d" },
15639 description: (0, import_i18n18.__)("Strikethrough the selected text.")
15640 },
15641 {
15642 keyCombination: { modifier: "access", character: "x" },
15643 description: (0, import_i18n18.__)("Make the selected text inline code.")
15644 },
15645 {
15646 keyCombination: {
15647 modifier: "access",
15648 character: "0"
15649 },
15650 aliases: [
15651 {
15652 modifier: "access",
15653 character: "7"
15654 }
15655 ],
15656 description: (0, import_i18n18.__)("Convert the current heading to a paragraph.")
15657 },
15658 {
15659 keyCombination: { modifier: "access", character: "1-6" },
15660 description: (0, import_i18n18.__)(
15661 "Convert the current paragraph or heading to a heading of level 1 to 6."
15662 )
15663 },
15664 {
15665 keyCombination: { modifier: "primaryShift", character: "SPACE" },
15666 description: (0, import_i18n18.__)("Add non breaking space.")
15667 }
15668 ];
15669
15670 // packages/edit-widgets/build-module/components/keyboard-shortcut-help-modal/shortcut.mjs
15671 var import_element60 = __toESM(require_element(), 1);
15672 var import_keycodes4 = __toESM(require_keycodes(), 1);
15673 var import_jsx_runtime76 = __toESM(require_jsx_runtime(), 1);
15674 function KeyCombination({ keyCombination, forceAriaLabel }) {
15675 const shortcut = keyCombination.modifier ? import_keycodes4.displayShortcutList[keyCombination.modifier](
15676 keyCombination.character
15677 ) : keyCombination.character;
15678 const ariaLabel = keyCombination.modifier ? import_keycodes4.shortcutAriaLabel[keyCombination.modifier](
15679 keyCombination.character
15680 ) : keyCombination.character;
15681 const shortcuts = Array.isArray(shortcut) ? shortcut : [shortcut];
15682 return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
15683 "kbd",
15684 {
15685 className: "edit-widgets-keyboard-shortcut-help-modal__shortcut-key-combination",
15686 "aria-label": forceAriaLabel || ariaLabel,
15687 children: shortcuts.map((character, index2) => {
15688 if (character === "+") {
15689 return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(import_element60.Fragment, { children: character }, index2);
15690 }
15691 return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
15692 "kbd",
15693 {
15694 className: "edit-widgets-keyboard-shortcut-help-modal__shortcut-key",
15695 children: character
15696 },
15697 index2
15698 );
15699 })
15700 }
15701 );
15702 }
15703 function Shortcut({ description, keyCombination, aliases = [], ariaLabel }) {
15704 return /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(import_jsx_runtime76.Fragment, { children: [
15705 /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("div", { className: "edit-widgets-keyboard-shortcut-help-modal__shortcut-description", children: description }),
15706 /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "edit-widgets-keyboard-shortcut-help-modal__shortcut-term", children: [
15707 /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
15708 KeyCombination,
15709 {
15710 keyCombination,
15711 forceAriaLabel: ariaLabel
15712 }
15713 ),
15714 aliases.map((alias, index2) => /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
15715 KeyCombination,
15716 {
15717 keyCombination: alias,
15718 forceAriaLabel: ariaLabel
15719 },
15720 index2
15721 ))
15722 ] })
15723 ] });
15724 }
15725 var shortcut_default = Shortcut;
15726
15727 // packages/edit-widgets/build-module/components/keyboard-shortcut-help-modal/dynamic-shortcut.mjs
15728 var import_data20 = __toESM(require_data(), 1);
15729 var import_keyboard_shortcuts3 = __toESM(require_keyboard_shortcuts(), 1);
15730 var import_jsx_runtime77 = __toESM(require_jsx_runtime(), 1);
15731 function DynamicShortcut({ name: name2 }) {
15732 const { keyCombination, description, aliases } = (0, import_data20.useSelect)(
15733 (select) => {
15734 const {
15735 getShortcutKeyCombination,
15736 getShortcutDescription,
15737 getShortcutAliases
15738 } = select(import_keyboard_shortcuts3.store);
15739 return {
15740 keyCombination: getShortcutKeyCombination(name2),
15741 aliases: getShortcutAliases(name2),
15742 description: getShortcutDescription(name2)
15743 };
15744 },
15745 [name2]
15746 );
15747 if (!keyCombination) {
15748 return null;
15749 }
15750 return /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
15751 shortcut_default,
15752 {
15753 keyCombination,
15754 description,
15755 aliases
15756 }
15757 );
15758 }
15759 var dynamic_shortcut_default = DynamicShortcut;
15760
15761 // packages/edit-widgets/build-module/components/keyboard-shortcut-help-modal/index.mjs
15762 var import_jsx_runtime78 = __toESM(require_jsx_runtime(), 1);
15763 var ShortcutList = ({ shortcuts }) => (
15764 /*
15765 * Disable reason: The `list` ARIA role is redundant but
15766 * Safari+VoiceOver won't announce the list otherwise.
15767 */
15768 /* eslint-disable jsx-a11y/no-redundant-roles */
15769 /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
15770 "ul",
15771 {
15772 className: "edit-widgets-keyboard-shortcut-help-modal__shortcut-list",
15773 role: "list",
15774 children: shortcuts.map((shortcut, index2) => /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
15775 "li",
15776 {
15777 className: "edit-widgets-keyboard-shortcut-help-modal__shortcut",
15778 children: typeof shortcut === "string" ? /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(dynamic_shortcut_default, { name: shortcut }) : /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(shortcut_default, { ...shortcut })
15779 },
15780 index2
15781 ))
15782 }
15783 )
15784 );
15785 var ShortcutSection = ({ title, shortcuts, className }) => /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(
15786 "section",
15787 {
15788 className: clsx_default(
15789 "edit-widgets-keyboard-shortcut-help-modal__section",
15790 className
15791 ),
15792 children: [
15793 !!title && /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("h2", { className: "edit-widgets-keyboard-shortcut-help-modal__section-title", children: title }),
15794 /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(ShortcutList, { shortcuts })
15795 ]
15796 }
15797 );
15798 var ShortcutCategorySection = ({
15799 title,
15800 categoryName,
15801 additionalShortcuts = []
15802 }) => {
15803 const categoryShortcuts = (0, import_data21.useSelect)(
15804 (select) => {
15805 return select(import_keyboard_shortcuts4.store).getCategoryShortcuts(
15806 categoryName
15807 );
15808 },
15809 [categoryName]
15810 );
15811 return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
15812 ShortcutSection,
15813 {
15814 title,
15815 shortcuts: categoryShortcuts.concat(additionalShortcuts)
15816 }
15817 );
15818 };
15819 function KeyboardShortcutHelpModal({
15820 isModalActive: isModalActive2,
15821 toggleModal
15822 }) {
15823 (0, import_keyboard_shortcuts4.useShortcut)("core/edit-widgets/keyboard-shortcuts", toggleModal, {
15824 bindGlobal: true
15825 });
15826 if (!isModalActive2) {
15827 return null;
15828 }
15829 return /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(
15830 import_components14.Modal,
15831 {
15832 className: "edit-widgets-keyboard-shortcut-help-modal",
15833 title: (0, import_i18n19.__)("Keyboard shortcuts"),
15834 onRequestClose: toggleModal,
15835 children: [
15836 /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
15837 ShortcutSection,
15838 {
15839 className: "edit-widgets-keyboard-shortcut-help-modal__main-shortcuts",
15840 shortcuts: ["core/edit-widgets/keyboard-shortcuts"]
15841 }
15842 ),
15843 /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
15844 ShortcutCategorySection,
15845 {
15846 title: (0, import_i18n19.__)("Global shortcuts"),
15847 categoryName: "global"
15848 }
15849 ),
15850 /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
15851 ShortcutCategorySection,
15852 {
15853 title: (0, import_i18n19.__)("Selection shortcuts"),
15854 categoryName: "selection"
15855 }
15856 ),
15857 /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
15858 ShortcutCategorySection,
15859 {
15860 title: (0, import_i18n19.__)("Block shortcuts"),
15861 categoryName: "block",
15862 additionalShortcuts: [
15863 {
15864 keyCombination: { character: "/" },
15865 description: (0, import_i18n19.__)(
15866 "Change the block type after adding a new paragraph."
15867 ),
15868 /* translators: The forward-slash character. e.g. '/'. */
15869 ariaLabel: (0, import_i18n19.__)("Forward-slash")
15870 }
15871 ]
15872 }
15873 ),
15874 /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
15875 ShortcutSection,
15876 {
15877 title: (0, import_i18n19.__)("Text formatting"),
15878 shortcuts: textFormattingShortcuts
15879 }
15880 ),
15881 /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
15882 ShortcutCategorySection,
15883 {
15884 title: (0, import_i18n19.__)("List View shortcuts"),
15885 categoryName: "list-view"
15886 }
15887 )
15888 ]
15889 }
15890 );
15891 }
15892
15893 // packages/edit-widgets/build-module/components/more-menu/tools-more-menu-group.mjs
15894 var import_components15 = __toESM(require_components(), 1);
15895 var { Fill: ToolsMoreMenuGroup, Slot: Slot4 } = (0, import_components15.createSlotFill)(
15896 "EditWidgetsToolsMoreMenuGroup"
15897 );
15898 ToolsMoreMenuGroup.Slot = Slot4;
15899 var tools_more_menu_group_default = ToolsMoreMenuGroup;
15900
15901 // packages/edit-widgets/build-module/components/more-menu/index.mjs
15902 var import_jsx_runtime79 = __toESM(require_jsx_runtime(), 1);
15903 function MoreMenu() {
15904 const [
15905 isKeyboardShortcutsModalActive,
15906 setIsKeyboardShortcutsModalVisible
15907 ] = (0, import_element61.useState)(false);
15908 const toggleKeyboardShortcutsModal = () => setIsKeyboardShortcutsModalVisible(!isKeyboardShortcutsModalActive);
15909 (0, import_keyboard_shortcuts5.useShortcut)(
15910 "core/edit-widgets/keyboard-shortcuts",
15911 toggleKeyboardShortcutsModal
15912 );
15913 const isLargeViewport = (0, import_compose9.useViewportMatch)("medium");
15914 const { toggle } = (0, import_data22.useDispatch)(import_preferences5.store);
15915 return /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(import_jsx_runtime79.Fragment, { children: [
15916 /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
15917 import_components16.DropdownMenu,
15918 {
15919 icon: more_vertical_default,
15920 label: (0, import_i18n20.__)("Options"),
15921 popoverProps: {
15922 placement: "bottom-end",
15923 className: "more-menu-dropdown__content"
15924 },
15925 toggleProps: {
15926 tooltipPosition: "bottom",
15927 size: "compact"
15928 },
15929 children: (onClose) => /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(import_jsx_runtime79.Fragment, { children: [
15930 isLargeViewport && /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(import_components16.MenuGroup, { label: (0, import_i18n20._x)("View", "noun"), children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
15931 import_preferences5.PreferenceToggleMenuItem,
15932 {
15933 scope: "core/edit-widgets",
15934 name: "fixedToolbar",
15935 label: (0, import_i18n20.__)("Top toolbar"),
15936 info: (0, import_i18n20.__)(
15937 "Access all block and document tools in a single place"
15938 ),
15939 messageActivated: (0, import_i18n20.__)(
15940 "Top toolbar activated"
15941 ),
15942 messageDeactivated: (0, import_i18n20.__)(
15943 "Top toolbar deactivated"
15944 )
15945 }
15946 ) }),
15947 /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(import_components16.MenuGroup, { label: (0, import_i18n20.__)("Tools"), children: [
15948 /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
15949 import_components16.MenuItem,
15950 {
15951 onClick: () => {
15952 setIsKeyboardShortcutsModalVisible(true);
15953 },
15954 shortcut: import_keycodes5.displayShortcut.access("h"),
15955 children: (0, import_i18n20.__)("Keyboard shortcuts")
15956 }
15957 ),
15958 /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
15959 import_components16.MenuItem,
15960 {
15961 onClick: () => toggle(
15962 "core/edit-widgets",
15963 "welcomeGuide"
15964 ),
15965 "aria-haspopup": "dialog",
15966 children: (0, import_i18n20.__)("Welcome Guide")
15967 }
15968 ),
15969 /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(
15970 import_components16.MenuItem,
15971 {
15972 role: "menuitem",
15973 icon: external_default,
15974 href: (0, import_i18n20.__)(
15975 "https://wordpress.org/documentation/article/block-based-widgets-editor/"
15976 ),
15977 target: "_blank",
15978 rel: "noopener",
15979 children: [
15980 (0, import_i18n20.__)("Help"),
15981 /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(VisuallyHidden, {
15982 render: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", {}),
15983 /* translators: accessibility text */
15984 children: (0, import_i18n20.__)("(opens in a new tab)")
15985 })
15986 ]
15987 }
15988 ),
15989 /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
15990 tools_more_menu_group_default.Slot,
15991 {
15992 fillProps: { onClose }
15993 }
15994 )
15995 ] }),
15996 /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(import_components16.MenuGroup, { label: (0, import_i18n20.__)("Preferences"), children: [
15997 /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
15998 import_preferences5.PreferenceToggleMenuItem,
15999 {
16000 scope: "core/edit-widgets",
16001 name: "keepCaretInsideBlock",
16002 label: (0, import_i18n20.__)(
16003 "Contain text cursor inside block"
16004 ),
16005 info: (0, import_i18n20.__)(
16006 "Aids screen readers by stopping text caret from leaving blocks."
16007 ),
16008 messageActivated: (0, import_i18n20.__)(
16009 "Contain text cursor inside block activated"
16010 ),
16011 messageDeactivated: (0, import_i18n20.__)(
16012 "Contain text cursor inside block deactivated"
16013 )
16014 }
16015 ),
16016 /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
16017 import_preferences5.PreferenceToggleMenuItem,
16018 {
16019 scope: "core/edit-widgets",
16020 name: "themeStyles",
16021 info: (0, import_i18n20.__)(
16022 "Make the editor look like your theme."
16023 ),
16024 label: (0, import_i18n20.__)("Use theme styles")
16025 }
16026 ),
16027 isLargeViewport && /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
16028 import_preferences5.PreferenceToggleMenuItem,
16029 {
16030 scope: "core/edit-widgets",
16031 name: "showBlockBreadcrumbs",
16032 label: (0, import_i18n20.__)("Display block breadcrumbs"),
16033 info: (0, import_i18n20.__)(
16034 "Shows block breadcrumbs at the bottom of the editor."
16035 ),
16036 messageActivated: (0, import_i18n20.__)(
16037 "Display block breadcrumbs activated"
16038 ),
16039 messageDeactivated: (0, import_i18n20.__)(
16040 "Display block breadcrumbs deactivated"
16041 )
16042 }
16043 )
16044 ] })
16045 ] })
16046 }
16047 ),
16048 /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
16049 KeyboardShortcutHelpModal,
16050 {
16051 isModalActive: isKeyboardShortcutsModalActive,
16052 toggleModal: toggleKeyboardShortcutsModal
16053 }
16054 )
16055 ] });
16056 }
16057
16058 // packages/edit-widgets/build-module/components/header/index.mjs
16059 var import_jsx_runtime80 = __toESM(require_jsx_runtime(), 1);
16060 function Header3() {
16061 const isLargeViewport = (0, import_compose10.useViewportMatch)("medium");
16062 const blockToolbarRef = (0, import_element62.useRef)();
16063 const { hasFixedToolbar } = (0, import_data23.useSelect)(
16064 (select) => ({
16065 hasFixedToolbar: !!select(import_preferences6.store).get(
16066 "core/edit-widgets",
16067 "fixedToolbar"
16068 )
16069 }),
16070 []
16071 );
16072 return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(import_jsx_runtime80.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "edit-widgets-header", children: [
16073 /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "edit-widgets-header__navigable-toolbar-wrapper", children: [
16074 isLargeViewport && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("h1", { className: "edit-widgets-header__title", children: (0, import_i18n21.__)("Widgets") }),
16075 !isLargeViewport && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
16076 VisuallyHidden,
16077 {
16078 className: "edit-widgets-header__title",
16079 render: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("h1", {}),
16080 children: (0, import_i18n21.__)("Widgets")
16081 }
16082 ),
16083 /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(document_tools_default, {}),
16084 hasFixedToolbar && isLargeViewport && /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(import_jsx_runtime80.Fragment, { children: [
16085 /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "selected-block-tools-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(import_block_editor12.BlockToolbar, { hideDragHandle: true }) }),
16086 /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
16087 import_components17.Popover.Slot,
16088 {
16089 ref: blockToolbarRef,
16090 name: "block-toolbar"
16091 }
16092 )
16093 ] })
16094 ] }),
16095 /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "edit-widgets-header__actions", children: [
16096 /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(pinned_items_default.Slot, { scope: "core/edit-widgets" }),
16097 /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(save_button_default, {}),
16098 /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(MoreMenu, {})
16099 ] })
16100 ] }) });
16101 }
16102 var header_default = Header3;
16103
16104 // packages/edit-widgets/build-module/components/widget-areas-block-editor-content/index.mjs
16105 var import_block_editor13 = __toESM(require_block_editor(), 1);
16106 var import_compose11 = __toESM(require_compose(), 1);
16107 var import_data24 = __toESM(require_data(), 1);
16108 var import_element63 = __toESM(require_element(), 1);
16109 var import_preferences7 = __toESM(require_preferences(), 1);
16110
16111 // packages/edit-widgets/build-module/components/notices/index.mjs
16112 var import_notices2 = __toESM(require_notices(), 1);
16113 var import_theme = __toESM(require_theme(), 1);
16114 var import_jsx_runtime81 = __toESM(require_jsx_runtime(), 1);
16115 function Notices() {
16116 return /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(import_theme.ThemeProvider, { cornerRadius: "none", children: [
16117 /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
16118 import_notices2.InlineNotices,
16119 {
16120 className: "edit-widgets-notices",
16121 pinnedNoticesClassName: "edit-widgets-notices__pinned",
16122 dismissibleNoticesClassName: "edit-widgets-notices__dismissible"
16123 }
16124 ),
16125 /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_notices2.SnackbarNotices, { className: "edit-widgets-notices__snackbar" })
16126 ] });
16127 }
16128 var notices_default = Notices;
16129
16130 // packages/edit-widgets/build-module/components/widget-areas-block-editor-content/index.mjs
16131 var import_jsx_runtime82 = __toESM(require_jsx_runtime(), 1);
16132 function WidgetAreasBlockEditorContent({
16133 blockEditorSettings
16134 }) {
16135 const hasThemeStyles = (0, import_data24.useSelect)(
16136 (select) => !!select(import_preferences7.store).get(
16137 "core/edit-widgets",
16138 "themeStyles"
16139 ),
16140 []
16141 );
16142 const isLargeViewport = (0, import_compose11.useViewportMatch)("medium");
16143 const styles = (0, import_element63.useMemo)(() => {
16144 return hasThemeStyles ? blockEditorSettings.styles : [];
16145 }, [blockEditorSettings, hasThemeStyles]);
16146 return /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: "edit-widgets-block-editor", children: [
16147 /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(notices_default, {}),
16148 !isLargeViewport && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(import_block_editor13.BlockToolbar, { hideDragHandle: true }),
16149 /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)(import_block_editor13.BlockTools, { children: [
16150 /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(keyboard_shortcuts_default, {}),
16151 /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
16152 import_block_editor13.__unstableEditorStyles,
16153 {
16154 styles,
16155 scope: ":where(.editor-styles-wrapper)"
16156 }
16157 ),
16158 /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(import_block_editor13.BlockSelectionClearer, { children: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(import_block_editor13.WritingFlow, { children: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(import_block_editor13.BlockList, { className: "edit-widgets-main-block-list" }) }) })
16159 ] })
16160 ] });
16161 }
16162
16163 // packages/edit-widgets/build-module/components/secondary-sidebar/index.mjs
16164 var import_data28 = __toESM(require_data(), 1);
16165
16166 // packages/edit-widgets/build-module/components/secondary-sidebar/inserter-sidebar.mjs
16167 var import_block_editor15 = __toESM(require_block_editor(), 1);
16168 var import_compose12 = __toESM(require_compose(), 1);
16169 var import_element64 = __toESM(require_element(), 1);
16170 var import_data26 = __toESM(require_data(), 1);
16171
16172 // packages/edit-widgets/build-module/hooks/use-widget-library-insertion-point.mjs
16173 var import_data25 = __toESM(require_data(), 1);
16174 var import_block_editor14 = __toESM(require_block_editor(), 1);
16175 var import_core_data11 = __toESM(require_core_data(), 1);
16176 var useWidgetLibraryInsertionPoint = () => {
16177 const firstRootId = (0, import_data25.useSelect)((select) => {
16178 const { getEntityRecord } = select(import_core_data11.store);
16179 const widgetAreasPost = getEntityRecord(
16180 KIND,
16181 POST_TYPE,
16182 buildWidgetAreasPostId()
16183 );
16184 return widgetAreasPost?.blocks[0]?.clientId;
16185 }, []);
16186 return (0, import_data25.useSelect)(
16187 (select) => {
16188 const {
16189 getBlockRootClientId,
16190 getBlockSelectionEnd,
16191 getBlockOrder,
16192 getBlockIndex
16193 } = select(import_block_editor14.store);
16194 const insertionPoint = select(store2).__experimentalGetInsertionPoint();
16195 if (insertionPoint.rootClientId) {
16196 return insertionPoint;
16197 }
16198 const clientId = getBlockSelectionEnd() || firstRootId;
16199 const rootClientId = getBlockRootClientId(clientId);
16200 if (clientId && rootClientId === "") {
16201 return {
16202 rootClientId: clientId,
16203 insertionIndex: getBlockOrder(clientId).length
16204 };
16205 }
16206 return {
16207 rootClientId,
16208 insertionIndex: getBlockIndex(clientId) + 1
16209 };
16210 },
16211 [firstRootId]
16212 );
16213 };
16214 var use_widget_library_insertion_point_default = useWidgetLibraryInsertionPoint;
16215
16216 // packages/edit-widgets/build-module/components/secondary-sidebar/inserter-sidebar.mjs
16217 var import_jsx_runtime83 = __toESM(require_jsx_runtime(), 1);
16218 function InserterSidebar() {
16219 const isMobileViewport = (0, import_compose12.useViewportMatch)("medium", "<");
16220 const { rootClientId, insertionIndex } = use_widget_library_insertion_point_default();
16221 const { setIsInserterOpened: setIsInserterOpened2 } = (0, import_data26.useDispatch)(store2);
16222 const closeInserter = (0, import_element64.useCallback)(() => {
16223 return setIsInserterOpened2(false);
16224 }, [setIsInserterOpened2]);
16225 const libraryRef = (0, import_element64.useRef)();
16226 return /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("div", { className: "edit-widgets-layout__inserter-panel", children: /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("div", { className: "edit-widgets-layout__inserter-panel-content", children: /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(
16227 import_block_editor15.__experimentalLibrary,
16228 {
16229 showInserterHelpPanel: true,
16230 shouldFocusBlock: isMobileViewport,
16231 rootClientId,
16232 __experimentalInsertionIndex: insertionIndex,
16233 ref: libraryRef,
16234 onClose: closeInserter
16235 }
16236 ) }) });
16237 }
16238
16239 // packages/edit-widgets/build-module/components/secondary-sidebar/list-view-sidebar.mjs
16240 var import_block_editor16 = __toESM(require_block_editor(), 1);
16241 var import_components18 = __toESM(require_components(), 1);
16242 var import_data27 = __toESM(require_data(), 1);
16243 var import_element65 = __toESM(require_element(), 1);
16244 var import_i18n22 = __toESM(require_i18n(), 1);
16245 var import_keycodes6 = __toESM(require_keycodes(), 1);
16246 var import_jsx_runtime84 = __toESM(require_jsx_runtime(), 1);
16247 function ListViewSidebar() {
16248 const { setIsListViewOpened: setIsListViewOpened2 } = (0, import_data27.useDispatch)(store2);
16249 const { getListViewToggleRef: getListViewToggleRef2 } = unlock2((0, import_data27.useSelect)(store2));
16250 const [dropZoneElement, setDropZoneElement] = (0, import_element65.useState)(null);
16251 const closeListView = (0, import_element65.useCallback)(() => {
16252 setIsListViewOpened2(false);
16253 getListViewToggleRef2().current?.focus();
16254 }, [getListViewToggleRef2, setIsListViewOpened2]);
16255 const closeOnEscape = (0, import_element65.useCallback)(
16256 (event) => {
16257 if (event.keyCode === import_keycodes6.ESCAPE && !event.defaultPrevented) {
16258 event.preventDefault();
16259 closeListView();
16260 }
16261 },
16262 [closeListView]
16263 );
16264 return (
16265 // eslint-disable-next-line jsx-a11y/no-static-element-interactions
16266 /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)(
16267 "div",
16268 {
16269 className: "edit-widgets-editor__list-view-panel",
16270 onKeyDown: closeOnEscape,
16271 children: [
16272 /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("div", { className: "edit-widgets-editor__list-view-panel-header", children: [
16273 /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("strong", { children: (0, import_i18n22.__)("List View") }),
16274 /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
16275 import_components18.Button,
16276 {
16277 icon: close_small_default,
16278 label: (0, import_i18n22.__)("Close"),
16279 onClick: closeListView,
16280 size: "compact"
16281 }
16282 )
16283 ] }),
16284 /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
16285 "div",
16286 {
16287 className: "edit-widgets-editor__list-view-panel-content",
16288 ref: setDropZoneElement,
16289 children: /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(import_block_editor16.__experimentalListView, { dropZoneElement, focusOnMount: true })
16290 }
16291 )
16292 ]
16293 }
16294 )
16295 );
16296 }
16297
16298 // packages/edit-widgets/build-module/components/secondary-sidebar/index.mjs
16299 var import_jsx_runtime85 = __toESM(require_jsx_runtime(), 1);
16300 function SecondarySidebar() {
16301 const { isInserterOpen, isListViewOpen } = (0, import_data28.useSelect)((select) => {
16302 const { isInserterOpened: isInserterOpened2, isListViewOpened: isListViewOpened2 } = select(store2);
16303 return {
16304 isInserterOpen: isInserterOpened2(),
16305 isListViewOpen: isListViewOpened2()
16306 };
16307 }, []);
16308 if (isInserterOpen) {
16309 return /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(InserterSidebar, {});
16310 }
16311 if (isListViewOpen) {
16312 return /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(ListViewSidebar, {});
16313 }
16314 return null;
16315 }
16316
16317 // packages/edit-widgets/build-module/components/layout/interface.mjs
16318 var import_jsx_runtime86 = __toESM(require_jsx_runtime(), 1);
16319 var interfaceLabels = {
16320 /* translators: accessibility text for the widgets screen top bar landmark region. */
16321 header: (0, import_i18n23.__)("Widgets top bar"),
16322 /* translators: accessibility text for the widgets screen content landmark region. */
16323 body: (0, import_i18n23.__)("Widgets and blocks"),
16324 /* translators: accessibility text for the widgets screen settings landmark region. */
16325 sidebar: (0, import_i18n23.__)("Widgets settings"),
16326 /* translators: accessibility text for the widgets screen footer landmark region. */
16327 footer: (0, import_i18n23.__)("Widgets footer")
16328 };
16329 function Interface({ blockEditorSettings }) {
16330 const isMobileViewport = (0, import_compose13.useViewportMatch)("medium", "<");
16331 const isHugeViewport = (0, import_compose13.useViewportMatch)("huge", ">=");
16332 const { setIsInserterOpened: setIsInserterOpened2, setIsListViewOpened: setIsListViewOpened2, closeGeneralSidebar: closeGeneralSidebar2 } = (0, import_data29.useDispatch)(store2);
16333 const {
16334 hasBlockBreadCrumbsEnabled,
16335 hasSidebarEnabled,
16336 isInserterOpened: isInserterOpened2,
16337 isListViewOpened: isListViewOpened2
16338 } = (0, import_data29.useSelect)(
16339 (select) => ({
16340 hasSidebarEnabled: !!select(
16341 store
16342 ).getActiveComplementaryArea(store2.name),
16343 isInserterOpened: !!select(store2).isInserterOpened(),
16344 isListViewOpened: !!select(store2).isListViewOpened(),
16345 hasBlockBreadCrumbsEnabled: !!select(import_preferences8.store).get(
16346 "core/edit-widgets",
16347 "showBlockBreadcrumbs"
16348 )
16349 }),
16350 []
16351 );
16352 (0, import_element66.useEffect)(() => {
16353 if (hasSidebarEnabled && !isHugeViewport) {
16354 setIsInserterOpened2(false);
16355 setIsListViewOpened2(false);
16356 }
16357 }, [hasSidebarEnabled, isHugeViewport]);
16358 (0, import_element66.useEffect)(() => {
16359 if ((isInserterOpened2 || isListViewOpened2) && !isHugeViewport) {
16360 closeGeneralSidebar2();
16361 }
16362 }, [isInserterOpened2, isListViewOpened2, isHugeViewport]);
16363 const secondarySidebarLabel = isListViewOpened2 ? (0, import_i18n23.__)("List View") : (0, import_i18n23.__)("Block Library");
16364 const hasSecondarySidebar = isListViewOpened2 || isInserterOpened2;
16365 return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
16366 interface_skeleton_default,
16367 {
16368 labels: {
16369 ...interfaceLabels,
16370 secondarySidebar: secondarySidebarLabel
16371 },
16372 header: /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(header_default, {}),
16373 secondarySidebar: hasSecondarySidebar && /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(SecondarySidebar, {}),
16374 sidebar: /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(complementary_area_default.Slot, { scope: "core/edit-widgets" }),
16375 content: /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(import_jsx_runtime86.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
16376 WidgetAreasBlockEditorContent,
16377 {
16378 blockEditorSettings
16379 }
16380 ) }),
16381 footer: hasBlockBreadCrumbsEnabled && !isMobileViewport && /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("div", { className: "edit-widgets-layout__footer", children: /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(import_block_editor17.BlockBreadcrumb, { rootLabelText: (0, import_i18n23.__)("Widgets") }) })
16382 }
16383 );
16384 }
16385 var interface_default = Interface;
16386
16387 // packages/edit-widgets/build-module/components/layout/unsaved-changes-warning.mjs
16388 var import_i18n24 = __toESM(require_i18n(), 1);
16389 var import_element67 = __toESM(require_element(), 1);
16390 var import_data30 = __toESM(require_data(), 1);
16391 function UnsavedChangesWarning() {
16392 const isDirty = (0, import_data30.useSelect)((select) => {
16393 const { getEditedWidgetAreas: getEditedWidgetAreas2 } = select(store2);
16394 const editedWidgetAreas = getEditedWidgetAreas2();
16395 return editedWidgetAreas?.length > 0;
16396 }, []);
16397 (0, import_element67.useEffect)(() => {
16398 const warnIfUnsavedChanges = (event) => {
16399 if (isDirty) {
16400 event.returnValue = (0, import_i18n24.__)(
16401 "You have unsaved changes. If you proceed, they will be lost."
16402 );
16403 return event.returnValue;
16404 }
16405 };
16406 window.addEventListener("beforeunload", warnIfUnsavedChanges);
16407 return () => {
16408 window.removeEventListener("beforeunload", warnIfUnsavedChanges);
16409 };
16410 }, [isDirty]);
16411 return null;
16412 }
16413
16414 // packages/edit-widgets/build-module/components/welcome-guide/index.mjs
16415 var import_data31 = __toESM(require_data(), 1);
16416 var import_components19 = __toESM(require_components(), 1);
16417 var import_i18n25 = __toESM(require_i18n(), 1);
16418 var import_element68 = __toESM(require_element(), 1);
16419 var import_preferences9 = __toESM(require_preferences(), 1);
16420 var import_jsx_runtime87 = __toESM(require_jsx_runtime(), 1);
16421 function WelcomeGuide() {
16422 const isActive = (0, import_data31.useSelect)(
16423 (select) => !!select(import_preferences9.store).get(
16424 "core/edit-widgets",
16425 "welcomeGuide"
16426 ),
16427 []
16428 );
16429 const { toggle } = (0, import_data31.useDispatch)(import_preferences9.store);
16430 const widgetAreas = (0, import_data31.useSelect)(
16431 (select) => select(store2).getWidgetAreas({ per_page: -1 }),
16432 []
16433 );
16434 if (!isActive) {
16435 return null;
16436 }
16437 const isEntirelyBlockWidgets = widgetAreas?.every(
16438 (widgetArea) => widgetArea.id === "wp_inactive_widgets" || widgetArea.widgets.every(
16439 (widgetId) => widgetId.startsWith("block-")
16440 )
16441 );
16442 const numWidgetAreas = widgetAreas?.filter(
16443 (widgetArea) => widgetArea.id !== "wp_inactive_widgets"
16444 ).length ?? 0;
16445 return /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
16446 import_components19.Guide,
16447 {
16448 className: "edit-widgets-welcome-guide",
16449 contentLabel: (0, import_i18n25.__)("Welcome to block Widgets"),
16450 finishButtonText: (0, import_i18n25.__)("Get started"),
16451 onFinish: () => toggle("core/edit-widgets", "welcomeGuide"),
16452 pages: [
16453 {
16454 image: /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
16455 WelcomeGuideImage,
16456 {
16457 nonAnimatedSrc: "https://s.w.org/images/block-editor/welcome-canvas.svg",
16458 animatedSrc: "https://s.w.org/images/block-editor/welcome-canvas.gif"
16459 }
16460 ),
16461 content: /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)(import_jsx_runtime87.Fragment, { children: [
16462 /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("h1", { className: "edit-widgets-welcome-guide__heading", children: (0, import_i18n25.__)("Welcome to block Widgets") }),
16463 isEntirelyBlockWidgets ? /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(import_jsx_runtime87.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("p", { className: "edit-widgets-welcome-guide__text", children: (0, import_i18n25.sprintf)(
16464 // Translators: %s: Number of block areas in the current theme.
16465 (0, import_i18n25._n)(
16466 "Your theme provides %s \u201Cblock\u201D area for you to add and edit content.\xA0Try adding a search bar, social icons, or other types of blocks here and see how they\u2019ll look on your site.",
16467 "Your theme provides %s different \u201Cblock\u201D areas for you to add and edit content.\xA0Try adding a search bar, social icons, or other types of blocks here and see how they\u2019ll look on your site.",
16468 numWidgetAreas
16469 ),
16470 numWidgetAreas
16471 ) }) }) : /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)(import_jsx_runtime87.Fragment, { children: [
16472 /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("p", { className: "edit-widgets-welcome-guide__text", children: (0, import_i18n25.__)(
16473 "You can now add any block to your site\u2019s widget areas. Don\u2019t worry, all of your favorite widgets still work flawlessly."
16474 ) }),
16475 /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)("p", { className: "edit-widgets-welcome-guide__text", children: [
16476 /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("strong", { children: (0, import_i18n25.__)(
16477 "Want to stick with the old widgets?"
16478 ) }),
16479 " ",
16480 /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
16481 import_components19.ExternalLink,
16482 {
16483 href: (0, import_i18n25.__)(
16484 "https://wordpress.org/plugins/classic-widgets/"
16485 ),
16486 children: (0, import_i18n25.__)(
16487 "Get the Classic Widgets plugin."
16488 )
16489 }
16490 )
16491 ] })
16492 ] })
16493 ] })
16494 },
16495 {
16496 image: /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
16497 WelcomeGuideImage,
16498 {
16499 nonAnimatedSrc: "https://s.w.org/images/block-editor/welcome-editor.svg",
16500 animatedSrc: "https://s.w.org/images/block-editor/welcome-editor.gif"
16501 }
16502 ),
16503 content: /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)(import_jsx_runtime87.Fragment, { children: [
16504 /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("h1", { className: "edit-widgets-welcome-guide__heading", children: (0, import_i18n25.__)("Customize each block") }),
16505 /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("p", { className: "edit-widgets-welcome-guide__text", children: (0, import_i18n25.__)(
16506 "Each block comes with its own set of controls for changing things like color, width, and alignment. These will show and hide automatically when you have a block selected."
16507 ) })
16508 ] })
16509 },
16510 {
16511 image: /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
16512 WelcomeGuideImage,
16513 {
16514 nonAnimatedSrc: "https://s.w.org/images/block-editor/welcome-library.svg",
16515 animatedSrc: "https://s.w.org/images/block-editor/welcome-library.gif"
16516 }
16517 ),
16518 content: /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)(import_jsx_runtime87.Fragment, { children: [
16519 /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("h1", { className: "edit-widgets-welcome-guide__heading", children: (0, import_i18n25.__)("Explore all blocks") }),
16520 /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("p", { className: "edit-widgets-welcome-guide__text", children: (0, import_element68.createInterpolateElement)(
16521 (0, import_i18n25.__)(
16522 "All of the blocks available to you live in the block library. You\u2019ll find it wherever you see the <InserterIconImage /> icon."
16523 ),
16524 {
16525 InserterIconImage: /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
16526 "img",
16527 {
16528 className: "edit-widgets-welcome-guide__inserter-icon",
16529 alt: (0, import_i18n25.__)("inserter"),
16530 src: "data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='18' height='18' rx='2' fill='%231E1E1E'/%3E%3Cpath d='M9.22727 4V14M4 8.77273H14' stroke='white' stroke-width='1.5'/%3E%3C/svg%3E%0A"
16531 }
16532 )
16533 }
16534 ) })
16535 ] })
16536 },
16537 {
16538 image: /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
16539 WelcomeGuideImage,
16540 {
16541 nonAnimatedSrc: "https://s.w.org/images/block-editor/welcome-documentation.svg",
16542 animatedSrc: "https://s.w.org/images/block-editor/welcome-documentation.gif"
16543 }
16544 ),
16545 content: /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)(import_jsx_runtime87.Fragment, { children: [
16546 /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("h1", { className: "edit-widgets-welcome-guide__heading", children: (0, import_i18n25.__)("Learn more") }),
16547 /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("p", { className: "edit-widgets-welcome-guide__text", children: (0, import_element68.createInterpolateElement)(
16548 (0, import_i18n25.__)(
16549 "New to the block editor? Want to learn more about using it? <a>Here's a detailed guide.</a>"
16550 ),
16551 {
16552 a: /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
16553 import_components19.ExternalLink,
16554 {
16555 href: (0, import_i18n25.__)(
16556 "https://wordpress.org/documentation/article/wordpress-block-editor/"
16557 )
16558 }
16559 )
16560 }
16561 ) })
16562 ] })
16563 }
16564 ]
16565 }
16566 );
16567 }
16568 function WelcomeGuideImage({ nonAnimatedSrc, animatedSrc }) {
16569 return /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)("picture", { className: "edit-widgets-welcome-guide__image", children: [
16570 /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
16571 "source",
16572 {
16573 srcSet: nonAnimatedSrc,
16574 media: "(prefers-reduced-motion: reduce)"
16575 }
16576 ),
16577 /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("img", { src: animatedSrc, width: "312", height: "240", alt: "" })
16578 ] });
16579 }
16580
16581 // packages/edit-widgets/build-module/components/layout/index.mjs
16582 var import_jsx_runtime88 = __toESM(require_jsx_runtime(), 1);
16583 function Layout({ blockEditorSettings }) {
16584 const { createErrorNotice } = (0, import_data32.useDispatch)(import_notices4.store);
16585 function onPluginAreaError(name2) {
16586 createErrorNotice(
16587 (0, import_i18n26.sprintf)(
16588 /* translators: %s: plugin name */
16589 (0, import_i18n26.__)(
16590 'The "%s" plugin has encountered an error and cannot be rendered.'
16591 ),
16592 name2
16593 )
16594 );
16595 }
16596 const navigateRegionsProps = (0, import_components20.__unstableUseNavigateRegions)();
16597 const adminPrimary = (0, import_element69.useMemo)(() => getAdminThemeColors().primary, []);
16598 return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(import_theme2.ThemeProvider, { isRoot: true, color: { primary: adminPrimary }, children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(ErrorBoundary, { children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("div", { ...navigateRegionsProps, children: /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)(
16599 WidgetAreasBlockEditorProvider,
16600 {
16601 blockEditorSettings,
16602 children: [
16603 /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
16604 interface_default,
16605 {
16606 blockEditorSettings
16607 }
16608 ),
16609 /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(Sidebar, {}),
16610 /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(import_plugins3.PluginArea, { onError: onPluginAreaError }),
16611 /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(UnsavedChangesWarning, {}),
16612 /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(WelcomeGuide, {})
16613 ]
16614 }
16615 ) }) }) });
16616 }
16617 var layout_default2 = Layout;
16618
16619 // packages/edit-widgets/build-module/index.mjs
16620 var import_jsx_runtime89 = __toESM(require_jsx_runtime(), 1);
16621 var disabledBlocks = [
16622 "core/more",
16623 "core/freeform",
16624 "core/template-part",
16625 ...ALLOW_REUSABLE_BLOCKS ? [] : ["core/block"]
16626 ];
16627 function initializeEditor(id, settings2) {
16628 const target = document.getElementById(id);
16629 const root = (0, import_element70.createRoot)(target);
16630 const coreBlocks = (0, import_block_library.__experimentalGetCoreBlocks)().filter((block) => {
16631 return !(disabledBlocks.includes(block.name) || block.name.startsWith("core/post") || block.name.startsWith("core/query") || block.name.startsWith("core/site") || block.name.startsWith("core/navigation") || block.name.startsWith("core/term"));
16632 });
16633 (0, import_data33.dispatch)(import_preferences10.store).setDefaults("core/edit-widgets", {
16634 fixedToolbar: false,
16635 welcomeGuide: true,
16636 showBlockBreadcrumbs: true,
16637 themeStyles: true
16638 });
16639 (0, import_data33.dispatch)(import_blocks3.store).reapplyBlockTypeFilters();
16640 (0, import_block_library.registerCoreBlocks)(coreBlocks);
16641 (0, import_widgets5.registerLegacyWidgetBlock)();
16642 if (true) {
16643 (0, import_block_library.__experimentalRegisterExperimentalCoreBlocks)({
16644 enableFSEBlocks: ENABLE_EXPERIMENTAL_FSE_BLOCKS
16645 });
16646 }
16647 (0, import_widgets5.registerLegacyWidgetVariations)(settings2);
16648 registerBlock(widget_area_exports);
16649 (0, import_widgets5.registerWidgetGroupBlock)();
16650 settings2.__experimentalFetchLinkSuggestions = (search, searchOptions) => (0, import_core_data12.__experimentalFetchLinkSuggestions)(search, searchOptions, settings2);
16651 (0, import_blocks3.setFreeformContentHandlerName)("core/html");
16652 root.render(
16653 /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(import_element70.StrictMode, { children: /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(layout_default2, { blockEditorSettings: settings2 }) })
16654 );
16655 return root;
16656 }
16657 var initialize = initializeEditor;
16658 function reinitializeEditor() {
16659 (0, import_deprecated6.default)("wp.editWidgets.reinitializeEditor", {
16660 since: "6.2",
16661 version: "6.3"
16662 });
16663 }
16664 var registerBlock = (block) => {
16665 if (!block) {
16666 return;
16667 }
16668 const { metadata, settings: settings2, name: name2 } = block;
16669 if (metadata) {
16670 (0, import_blocks3.unstable__bootstrapServerSideBlockDefinitions)({ [name2]: metadata });
16671 }
16672 (0, import_blocks3.registerBlockType)(name2, settings2);
16673 };
16674 return __toCommonJS(index_exports);
16675 })();
16676 /*! Bundled license information:
16677
16678 use-sync-external-store/cjs/use-sync-external-store-shim.development.js:
16679 (**
16680 * @license React
16681 * use-sync-external-store-shim.development.js
16682 *
16683 * Copyright (c) Meta Platforms, Inc. and affiliates.
16684 *
16685 * This source code is licensed under the MIT license found in the
16686 * LICENSE file in the root directory of this source tree.
16687 *)
16688
16689 use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js:
16690 (**
16691 * @license React
16692 * use-sync-external-store-shim/with-selector.development.js
16693 *
16694 * Copyright (c) Meta Platforms, Inc. and affiliates.
16695 *
16696 * This source code is licensed under the MIT license found in the
16697 * LICENSE file in the root directory of this source tree.
16698 *)
16699 */
16700 (window.wp ||= {}).editWidgets = wp.editWidgets;
16701 })();
16702 //# sourceMappingURL=index.js.map
16703